Lesson 266: Whisper Playtest Issue Tag Receipt on BUILD_RECEIPT (2026)

Direct answer: After Whisper transcripts exist but before gh issue create, promote whisper_issue_tag_receipt_v1.json with W1–W6 gates, a whisper_issue_tag_map_v1 JSON per clip, producer human gate, and build_id only from BUILD_RECEIPT—fail-closed on invented repro. Pair the Whisper tag map preflight (Guide #28), Whisper→GitHub strategy blog, and Lesson 207 chosen_path discipline.

Lesson hero for Whisper playtest issue tag receipt

Why this matters now (November fest close-out triage)

November 2026 facilitators batch 40+ Whisper transcripts per week after OBS concat nights. LLM summarize buttons invent “beat boss → backtrack” repro steps never spoken in the clip. Programmers burn stand-up time on cannot reproduce while the real bug hides in build_id drift, per_clip_local timestamps, or fest_public surface mis-tags.

October ops capstone 265 wired 254–264 store/CI columns—266 opens the November playtest triage truth arc: quotes and BUILD_RECEIPT facts only on GitHub.

The strategy blog is the checklist; 266 is the BUILD_RECEIPT milestone before promotion.

Beginner path (transcript → tag map → human gate)

Step Action Success check
1 Confirm .txt transcript path + sha256 W1 pass
2 Pull build_id from BUILD_RECEIPT only W2 character match
3 Draft tag map JSON (quotes only) W3 + W4
4 Producer reads transcript verbatim W5 row in facilitator README
5 Open GitHub issue (quote-only body) Issue # recorded
6 File receipt + BUILD_RECEIPT column github_issue_allowed: true

Time: ~55 minutes first November batch night; ~12 minutes per clip when tag map template is pinned.

Quote-only issue body (copy/paste)

## Playtest VOD triage (quote-only)
**Build:** 2026-11-04-playtest-rc4
**Fragment:** fragment_03.mkv
**Surface:** playtest
**Whisper path:** per_clip_local
**Transcript:** playtest-vod/transcripts/fragment_03_2026-11-04.txt

### Player quote
> 04:12 — soft lock after boss door when backtracking

### Repro steps
Unknown — quote-only triage (no invented steps)

### Labels
bug, playtest, P2, progression

Rule: If repro_steps_quoted is empty, the issue body must say Repro: unknown — quote-only triage.

Developer path (gates W1–W6)

Gate Check Fail when
W1 Transcript exists Path missing or sha256 mismatch
W2 build_id crosswalk BUILD_RECEIPT Discord pin ≠ receipt row
W3 Tag map JSON drafted Quotes not from transcript
W4 Invented repro blocked LLM steps in issue body
W5 Human gate sign-off Producer + UTC before API
W6 whisper_issue_tag_receipt_v1.json github_issue_allowed false at promote

Align with Guide #28 preflight — blog = strategy; guide = ninety-second gate; 266 = BUILD_RECEIPT column.

W1 — Transcript + hash

TRANSCRIPT="playtest-vod/transcripts/fragment_03_2026-11-04.txt"
test -f "$TRANSCRIPT"
sha256sum "$TRANSCRIPT"

PowerShell:

Get-FileHash "playtest-vod\transcripts\fragment_03_2026-11-04.txt" -Algorithm SHA256

Log path + hash in receipt. If transcript empty, fix upstream (MKV concat help, loudness spot)—do not invent repro in GitHub.

W2 — build_id crosswalk

BUILD="$(jq -r '.build_id' release-evidence/BUILD_RECEIPT.json)"
MAP_BUILD="$(jq -r '.build_id' release-evidence/playtest/whisper-tags/WHISPER_ISSUE_TAG_MAP_fragment_03.json)"
test "$BUILD" = "$MAP_BUILD"

Fail-closed: if Discord pin disagrees, fix clip labeling before W3. Visible build label on the demo helps players confirm the same string.

W3 — whisper_issue_tag_map_v1.json

{
  "schema": "whisper_issue_tag_map_v1",
  "build_id": "2026-11-04-playtest-rc4",
  "fragment_id": "fragment_03.mkv",
  "surface": "playtest",
  "chosen_whisper_path": "per_clip_local",
  "transcript_path": "playtest-vod/transcripts/fragment_03_2026-11-04.txt",
  "transcript_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "quotes": [
    { "timestamp": "04:12", "text": "soft lock after boss door when backtracking" }
  ],
  "area_tags_proposed": ["progression"],
  "severity_proposed": "P2",
  "repro_steps_quoted": [],
  "repro_steps_invented_blocked": true,
  "allowed_facts_source": "BUILD_RECEIPT + transcript only"
}

Pin as release-evidence/playtest/whisper-tags/WHISPER_ISSUE_TAG_MAP_fragment_03.json.

Area tag rule: map player words to allowed enum—do not add combat if transcript only mentions “door.”

W4 — LLM guard table

Field Allowed Blocked
Summary Paraphrase quote New mechanics not in clip
Repro steps Verbatim tester steps LLM “beat boss → backtrack”
Build BUILD_RECEIPT build_id “Latest Steam build”
Timestamps From transcript SRT/txt Merged offset on per_clip_local

Add to facilitator README:

## LLM summarize ban list
- Do not ask models to "write repro steps"
- Do not paste "Repro (guess)" sections
- Allowed: extract quotes + propose P0-P3 + area tags

W5 — human gate before GitHub API

## Whisper → GitHub human gate
| Clip | Approver | UTC timestamp | issue # |
|------|----------|---------------|---------|
| fragment_03.mkv | producer@studio | 2026-11-05T10:00:00Z | GH-142 |

No gh issue create until W5 row exists. Automation may draft W3 JSON; humans publish.

W6 — whisper_issue_tag_receipt_v1.json

{
  "schema": "whisper_issue_tag_receipt_v1",
  "build_label": "2026-11-04-playtest-rc4",
  "tag_map_path": "release-evidence/playtest/whisper-tags/WHISPER_ISSUE_TAG_MAP_fragment_03.json",
  "github_issue_number": 142,
  "github_issue_url": "https://github.com/org/game/issues/142",
  "cousin_receipts": {
    "playtest_vod_triage": "release-evidence/playtest/PLAYTEST_VOD_TRIAGE_RECEIPT.json",
    "ffmpeg_concat_decision": "release-evidence/playtest/FFMPEG_CONCAT_DECISION_RECEIPT.json"
  },
  "gates": {
    "W1_transcript_exists": "pass",
    "W2_build_id_crosswalk": "pass",
    "W3_tag_map_json": "pass",
    "W4_invented_repro_blocked": "pass",
    "W5_human_gate": "pass",
    "W6_receipt": "pass"
  },
  "github_issue_allowed": true,
  "invented_repro_blocked": true
}

Path: release-evidence/playtest/whisper-tags/WHISPER_ISSUE_TAG_RECEIPT_fragment_03.json.

C1 — cousin receipt crosswalk

Field Cousin (207) Cousin (200) This lesson (266)
Schema ffmpeg_concat_decision_receipt_v1 playtest_vod_triage_receipt_v1 whisper_issue_tag_receipt_v1
Scope chosen_path when concat fails concat_ok before batch GitHub issue honesty after ASR
Path release-evidence/playtest/concat-decision/ release-evidence/playtest/triage/ release-evidence/playtest/whisper-tags/

Do not merge schemas—reference paths in cousin_receipts only.

W6 — BUILD_RECEIPT promotion jq

RECEIPT="release-evidence/playtest/whisper-tags/WHISPER_ISSUE_TAG_RECEIPT_fragment_03.json"
jq -e '.github_issue_allowed == true' "$RECEIPT"
jq -e '.invented_repro_blocked == true' "$RECEIPT"
jq -e '.gates.W5_human_gate == "pass"' "$RECEIPT"

Add Whisper issue human gate Y/N column beside crash rows in Thursday BUILD_RECEIPT review.

Severity rubric (P0–P3 from player words)

Severity Player signal examples Issue label Smoke scope
P0 “cannot progress”, “crash every time”, “save broken” P0-blocker Blocks Wednesday smoke
P1 “soft lock”, “quest stuck”, “inventory gone” P1-major Same-week fix target
P2 “confusing”, “UI wrong”, “audio glitch once” P2-minor Backlog unless cluster
P3 “typo”, “wish”, “maybe later” P3-triage Defer list

Facilitator rule: severity comes from quote tone + repeat reports, not LLM drama.

Surface and fragment_id discipline

Playtest isolation playbook requires honest surface tags:

surface GitHub label Wrong pairing
playtest playtest fest_public clip with playtest label
fest_public fest_public Steam Playtest URL on fest demo issue

When chosen_whisper_path: per_clip_local (Lesson 207), every issue carries fragment_id, not merged timeline offset. Cousin: Lesson 200 concat_ok gate sets whisper_batch_allowed—do not open GitHub issues on batch path clips using per-clip timestamps.

Key takeaways

  1. W4 blocks invented repro—quote-only triage is valid; LLM guesses are not.
  2. build_id only from BUILD_RECEIPT (W2)—not Discord memory.
  3. fragment_id on per-clip path—not merged offsets (Lesson 207).
  4. Human gate before GitHub API (W5)—automation drafts, humans publish.
  5. Guide #28 preflight — ninety-second gate before this lesson.
  6. Strategy blog owns W1–W6 narrative; 266 owns BUILD_RECEIPT column.
  7. Help #5 MKV concat fix — upstream when transcripts never arrive.
  8. 15 free Whisper + ffmpeg tools — ASR lane before tagging.
  9. Cousin: Lesson 267 forward — Discord CSV ingest on smoke scope.
  10. October capstone 265 closed store/CI arc—266 opens November triage truth.
  11. Q4 diligence crash lane is separate—crash_symbolicate_receipt_v1whisper_issue_tag_receipt_v1.

Common mistakes

  • Pasting LLM “Repro (guess)” without W4 scrub.
  • build_id from memory instead of BUILD_RECEIPT (W2).
  • Opening issues on fest_public with playtest labels.
  • Skipping W5 because “the bot already posted.”
  • Merging per-clip quotes into one issue without separate fragment_id rows.
  • gh issue create before transcript sha256 logged (W1).
  • Using merged-batch timestamps when chosen_path: per_clip_local.

Troubleshooting

Symptom Lane
Cannot reproduce closes spike W4 quote-only body; verify W2 build_id
Empty transcript MKV concat help; Lesson 207 path tree
Silent / clipped Whisper Audacity loudness spot preflight; Lesson 273
Bot opened issue before W5 Close; re-open after human gate
422 Unprocessable Entity on gh issue create GitHub 422 invented repro help — quote-only body + dry-run
P0 label on “kinda weird” Severity from quote tone—wait for second fragment

Mini exercise (50 minutes)

  1. Start with a real .txt transcript—log W1 sha256.
  2. Crosswalk build_id from BUILD_RECEIPT (W2).
  3. Draft tag map JSON—confirm W4 blocks invented repro.
  4. Producer signs W5 row before gh issue create.
  5. File whisper_issue_tag_receipt_v1.json; jq promotion gates.
  6. Add BUILD_RECEIPT Whisper issue human gate column for Thursday review.

Continuity — November 2026 fest close-out + playtest triage (266–276)

Lesson Receipt focus
265 October ops capstone
266 (this) Whisper issue tag BUILD_RECEIPT
267 Discord CSV ingest

Previous: Lesson 265 — October ops truth capstone
Next: Lesson 268 — Unity CI concurrency cancel Library poison receipt

FAQ

Same as the strategy blog?
Blog owns W1–W6 narrative and templates; 266 is the course milestone with BUILD_RECEIPT promotion jq.

Same as Guide #28?
Guide = ninety-second preflight; 266 = receipt culture + cousin crosswalk to 207/200.

Can we use ChatGPT for repro if marked guess?
No. W4 is fail-closed. Use Repro: unknown — quote-only triage or verbatim tester steps only.

What if player gave detailed repro on voice?
Populate repro_steps_quoted with verbatim lines—still no LLM expansion.

Does this replace GitHub Projects?
No. Minimum honesty for VOD-derived issues; export tags after W6.

How does crash symbolicate relate?
Separate Q4 diligence lane—do not merge receipt schemas.

Cloud Whisper allowed?
Policy per concat decision tree—W1–W6 still apply to whatever transcript you file.


November triage lies when LLMs invent repro—file the tag map, run W1–W6, get human gate, then open GitHub with quotes and build_id only.