Local Whisper January Batch Triage After Holiday Playtest Backlog - 2026 Strategy

January 7: playtest-vod/inbox/ holds thirty-eight clips from December async nights—three labeled “fest crash,” fourteen are silent menu tours, and nobody ran Audacity loudness spot because “we’ll batch Whisper after the break.” Monday capstone reconciliation is GREEN, but #playtest still points at build_label strings from before numbered SHIP exceptions.
January 2027 is when holiday playtest backlog meets February RC discipline. Contractors return; engineering runs smoke and jq; facilitators face a folder of VODs that grew while December defer FREEZE kept feature merges down—not playtest capture.
Local Whisper pipeline owns ongoing folder + T1–T6 nightly triage. Whisper tag extraction owns GitHub issue discipline (tag receipt W1–W6). Audacity loudness evening owns per-session A1–A6. This AI Integration / Workflow strategy owns January backlog batch ordering: P0–P3 rubric, january_whisper_batch_receipt_v1.json, gates W1–W6 (batch receipt schema—distinct from tag-map W1–W6), and fail-closed promotion before Whisper GPU nights and GitHub API.
Non-repetition note: Local pipeline = steady-state ops; tag blog = issue bodies; loudness evening = one WAV spot; concat evening = merge; Tuesday CSV ingest = Discord thread rows. This URL = January holiday inbox drain strategy with named receipt and batch calendar.
Pair OBS concat evening, 15 free Whisper/ffmpeg tools, Tuesday Discord CSV ingest, Loudness spot preflight (Guide), and Lesson 273 forward.
Why this matters now (January 2027 / holiday backlog)
- Freeze ≠ no playtests — Players still sent clips; inbox grew while engineering honored defer scope.
- Wrong build_label on clips — Holiday hotfixes moved labels; transcripts without
build_idcorrelation waste February RC week. - Silent-merge waste — Running Whisper on bad audio burns GPU hours—loudness spot must gate batches.
- Invented repro scale — Batch summarizing without tag map discipline multiplies false GitHub issues after break.
- February fest prep — 7-day RC challenge needs triage drained before day-one engineering distractions.
Direct answer: Inventory playtest-vod/inbox/holiday-2026/, assign P0–P3 per row, run loudness spot on P0/P1 merges, file january_whisper_batch_receipt_v1.json with W1–W6, execute Whisper batches oldest fest-blocking first, only then open tag map → GitHub on transcripts that passed gates.
Who this strategy is for
| Audience | Outcome |
|---|---|
| Solo founder | Weekend plan to drain inbox without drowning engineering |
| Facilitator | Ordered batch list with build_label on every row |
| Producer | Receipt proving backlog triage ran before February stand-ups |
| Working dev | january_whisper_batch_ok on BUILD_RECEIPT for CI optional gate |
Time: ~2 hours first January inventory + receipt; ~45 minutes per Whisper batch night after template exists.
Prerequisites: Monday reconciliation GREEN; ffmpeg + local Whisper installed; inbox manifest CSV.
Format ladder (playtest AI cluster)
| Artifact | Role |
|---|---|
| Concat evening | Merge MKV → WAV |
| Loudness evening | A1–A6 per merged session |
| This strategy | January backlog P0–P3 + batch receipt W1–W6 |
| Local Whisper pipeline | Steady-state T1–T6 |
| Whisper tags | GitHub issue discipline |
| Tuesday CSV ingest | Discord thread → receipt rows |
Order: Monday reconciliation → this January batch strategy → loudness on P0/P1 → Whisper batch → tag map → GitHub.
Beginner path — P0–P3 batch order rubric
Copy into playtest-vod/january-batch-plan-2027.md:
| Priority | Definition | Examples | Whisper this week? |
|---|---|---|---|
| P0 | Fest-blocking / crash on current build_label |
“won’t launch,” “crash to desktop” | Yes — batch 1 |
| P1 | Soft-lock / progression stop on current label | “stuck after door,” “save broken” | Yes — batch 2 |
| P2 | UX confusion / balance on current label | “didn’t understand objective” | Batch 3 after P0/P1 |
| P3 | Stale label / duplicate of fixed issue | Old build_label, duplicate thread |
Defer or archive |
Beginner rules:
- P0 before P2 — never transcribe menu tours while P0 crash clips wait.
build_labelrequired — unknown label ⇒ P3 until visible label screenshot attached.- Silent tour clips — classify P3 without Whisper unless facilitator claims speech (then loudness spot).
- Max 8 sessions per GPU night — split batches; log in receipt
batches[].
Holiday inbox manifest (CSV columns)
fragment_id,capture_date,build_label,priority,merged_wav_path,loudness_spot_ok,whisper_done,tag_map_done
frag_2026-12-18_01,2026-12-18,fest-demo-2026-12-rc3-hotfix2,P0,sessions/frag_01_merged.wav,false,false,false
frag_2026-12-22_04,2026-12-22,fest-demo-2026-12-rc3-hotfix2,P1,sessions/frag_04_merged.wav,false,false,false
frag_2026-12-28_09,2026-12-28,unknown,P3,,,false,false
Developer path — gates W1–W6 (january_whisper_batch_receipt)
| Gate | Check | Fail action |
|---|---|---|
| W1 | inbox_manifest[] lists every file in holiday inbox |
Block batch until inventory complete |
| W2 | Every P0/P1 row has build_label matching BUILD_RECEIPT or SHIP list |
Re-label or downgrade to P3 |
| W3 | P0/P1 rows have loudness_spot_ok or documented skip |
Run A1–A6 |
| W4 | batch_order[] is P0→P1→P2 (no P2 before P0 done) |
Re-sort plan |
| W5 | whisper_model + device recorded per batch |
Reproducibility for partners |
| W6 | january_whisper_batch_ok: true |
No GitHub tag burst until GREEN |
january_whisper_batch_receipt_v1.json (template)
{
"schema": "january_whisper_batch_receipt_v1",
"generated_at": "2027-01-08T20:00:00Z",
"inbox_path": "playtest-vod/inbox/holiday-2026",
"build_label_current": "fest-demo-2027-01-rc1",
"pointers": {
"monday_reconciliation": "release-evidence/ops/JANUARY_CAPSTONE_RECONCILIATION_RECEIPT.json",
"ship_exception_list": "release-evidence/ops/SHIP_EXCEPTION_LIST_RECEIPT.json"
},
"inbox_manifest": [
{
"fragment_id": "frag_2026-12-18_01",
"priority": "P0",
"build_label": "fest-demo-2026-12-rc3-hotfix2",
"merged_wav": "playtest-vod/sessions/frag_01_merged.wav",
"loudness_spot_ok": true,
"loudness_receipt": "release-evidence/audio/FRAG_01_LOUDNESS_SPOT.json"
}
],
"batch_order": [
{ "batch_id": "JB1", "priority_lane": "P0", "fragment_ids": ["frag_2026-12-18_01"], "whisper_model": "medium", "device": "cuda" },
{ "batch_id": "JB2", "priority_lane": "P1", "fragment_ids": ["frag_2026-12-22_04"], "whisper_model": "medium", "device": "cuda" }
],
"batches_completed": [],
"gates": {
"W1": "pass",
"W2": "pass",
"W3": "pass",
"W4": "pass",
"W5": "pass",
"W6": "pass"
},
"january_whisper_batch_ok": true
}
Store at release-evidence/ai/JANUARY_WHISPER_BATCH_RECEIPT.json.
BUILD_RECEIPT row
{
"january_whisper_batch_ok": true,
"january_whisper_batch_receipt": "release-evidence/ai/JANUARY_WHISPER_BATCH_RECEIPT.json",
"playtest_vod_backlog_count": 38,
"playtest_vod_p0_remaining": 2
}
January batch calendar (working dev)
| Week | Focus | Exit criteria |
|---|---|---|
| Jan 6–7 | Manifest + P0/P1 sort + W1–W4 | Receipt drafted |
| Jan 8 | Loudness spot on P0/P1 merges | W3 GREEN |
| Jan 9–10 | Whisper JB1 (P0) + JB2 (P1) | batches_completed[] updated |
| Jan 11–12 | Tag map on JB1/JB2 transcripts only | Pair tag blog human gate |
| Jan 13+ | P2 batches if RC week allows | p0_remaining: 0 |
Align with January marketing cap—do not schedule creator playtest pushes until P0 p0_remaining hits zero or documented waive.
verify_january_whisper_batch.sh
#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/ai/JANUARY_WHISPER_BATCH_RECEIPT.json}"
jq -e '.schema == "january_whisper_batch_receipt_v1"' "$REC" || exit 1
# W4: no P2 batch before P0 batches in batch_order
P0_DONE=$(jq '[.batches_completed[] | select(.priority_lane=="P0")] | length' "$REC")
P2_PLANNED=$(jq '[.batch_order[] | select(.priority_lane=="P2")] | length' "$REC")
if [[ "$P2_PLANNED" -gt 0 && "$P0_DONE" -eq 0 ]]; then
echo "W4 fail: P2 planned before P0 complete"; exit 4
fi
# W3 loudness on P0/P1 manifest rows
jq -e '
[.inbox_manifest[] | select(.priority=="P0" or .priority=="P1")
| .loudness_spot_ok] | all(. == true)
' "$REC" || { echo "W3 fail: loudness spot missing"; exit 3; }
jq -e '.january_whisper_batch_ok == true' "$REC" || exit 6
echo "january_whisper_batch verify: OK"
Whisper batch night checklist (facilitator)
- Confirm
january_whisper_batch_okor run verify script. - Load only
batch_order[N].fragment_idsfor tonight. - For each fragment:
ffmpeg -i merged.wav -ar 16000 -ac 1 -c:a pcm_s16le clip_16k.wavif not already 16 kHz mono. - Run Whisper with pinned model from receipt (
mediumdefault for dialogue). - Write
transcripts/{fragment_id}.txt— do not LLM-summarize before human reads P0 lines. - Append
batches_completed[]withcompleted_at,transcript_paths[]. - Update BUILD_RECEIPT
playtest_vod_p0_remaining.
GPU discipline: If CUDA silent CPU fallback help triggers, record device: cpu in batch row—W5 requires honesty.
Batch sizing and hardware honesty (working dev)
| Inbox P0+P1 count | Suggested JB nights | Model | Notes |
|---|---|---|---|
| 1–4 | 1 night | small or medium |
Laptop CPU viable with small |
| 5–8 | 1–2 nights | medium |
Default January recommendation |
| 9–16 | 2–3 nights | medium |
Split JB rows; never one 16-hour run |
| 17+ | 3+ nights + P3 archive pass | medium |
Archive menu tours before batch 3 |
Record estimated_gpu_minutes per batch_order[] row after first night—update receipt so February RC week does not assume “one evening clears inbox.”
Facilitator stand-up script (copy-paste)
## Playtest backlog stand-up — 2027-01-09
- Inbox total: 38 | P0 remaining: 2 | P1 queued: 4
- `january_whisper_batch_ok`: true (W1–W6)
- Last batch: JB1 completed 2027-01-08 (cuda, medium)
- Next: JB2 after loudness spot on frag_04
- Blockers: frag_09 unknown build_label → facilitator DM for screenshot
- GitHub issues: **hold** until JB1 transcripts pass tag map human gate
Post to #playtest after updating BUILD_RECEIPT playtest_vod_p0_remaining—engineers trust numbers, not “we’re transcribing.”
PowerShell verify cousin (Windows facilitators)
$rec = Get-Content "release-evidence/ai/JANUARY_WHISPER_BATCH_RECEIPT.json" | ConvertFrom-Json
if ($rec.schema -ne "january_whisper_batch_receipt_v1") { exit 1 }
$p01 = $rec.inbox_manifest | Where-Object { $_.priority -in @("P0","P1") }
if ($p01 | Where-Object { -not $_.loudness_spot_ok }) { Write-Error "W3 fail"; exit 3 }
if (-not $rec.january_whisper_batch_ok) { exit 6 }
Write-Host "january_whisper_batch verify: OK"
Integration with tag map and GitHub
After JB1 transcripts exist:
- Build
whisper_issue_tag_map_v1.jsonper tag extraction blog—quote-only. - Human gate roster sign-off before
gh issue create. - File
whisper_issue_tag_receipt_v1.jsonseparately—do not merge into January batch receipt (format ladder).
Rule: January batch receipt proves backlog drain order; tag receipt proves issue quality.
jq helpers (inventory)
# Count by priority
jq '[.inbox_manifest[].priority] | group_by(.) | map({priority: .[0], count: length})' \
release-evidence/ai/JANUARY_WHISPER_BATCH_RECEIPT.json
# P0 remaining
jq '[.inbox_manifest[] | select(.priority=="P0" and (.whisper_done != true))] | length' \
playtest-vod/january-batch-plan-2027.md # or manifest in JSON
Proof table
| Row | Evidence | GREEN when |
|---|---|---|
| P1 | Holiday inbox manifest | W1 pass |
| P2 | JANUARY_WHISPER_BATCH_RECEIPT.json |
W1–W6 pass |
| P3 | Loudness spot JSONs for P0/P1 | W3 pass |
| P4 | transcripts/*.txt for batch JB1 |
Files exist |
| P5 | BUILD_RECEIPT january_whisper_batch_ok |
Matches receipt |
| P6 | Monday reconciliation pointer | february_upload_allowed true |
Scenarios A–G
A — 40 clips, 3 P0, rest menu tours
Classify 25 as P3 without Whisper; run JB1 on 3 P0 only—receipt documents savings.
B — build_label unknown on half the folder
W2 fail until facilitators attach visible label screenshots or downgrade to P3.
C — Loudness fail on P0 merge
W3 blocks Whisper; re-run concat help not ASR.
D — Engineer wants GitHub issues Monday
Block until W6—tag blog scenario E on empty transcripts hurts trust.
E — OneDrive moved OBS path during holiday
Run KFM case study recovery before manifest W1.
F — P0 matches pre-freeze label, current label differs
Mark P3 unless player visible label proves otherwise—pair January re-entry smoke.
G — Partner asks playtest triage status
Export batch receipt + manifest CSV—shows ordered drain not “we’ll get to it.”
Engine-specific manifest hints (working dev)
Holiday clips rarely arrive with clean filenames—facilitators still owe build_label on every P0/P1 row before W2 passes.
| Engine | Typical inbox filename | Manifest notes you should add |
|---|---|---|
| Godot 4 | godot_playtest_2026-12-28.mkv |
Export preset hash from BUILD_RECEIPT; pair VDF LF evening if Linux fest build |
| GameMaker | gm_discord_night3.mp4 |
setlive_dry_run_ok from setlive evening before promoting transcript issues |
| Unity | addressables_menu_tour.wav |
If clip is menu-only, default P3—do not burn GPU on Addressables idle tours |
| Unreal | insights_crash_repro.mkv |
OTLP export week may overlap—pair Q4 diligence if crash row is diligence-facing |
| Construct | wasm_playtest_browser.webm |
Browser surface tag playtest_web in manifest—never merge into fest_public without isolation playbook review |
When fragment_id is missing, derive from OBS replay filename stem and document the guess in notes—W1 requires a row, not perfection.
Comparison pack (January batch vs steady-state pipeline)
| Workflow | Receipt | Gates | When |
|---|---|---|---|
| Local pipeline | playtest_vod_triage_receipt_v1 |
T1–T6 | Weekly steady-state |
| January batch | january_whisper_batch_receipt_v1 |
W1–W6 | Post-holiday backlog drain |
| Tag extraction | whisper_issue_tag_receipt_v1 |
W1–W6 (tag schema) | Per clip → GitHub |
| Loudness evening | playtest_vod_loudness_spot_receipt_v1 |
A1–A6 | Per merged WAV |
Common mistakes
FIFO inbox without priority — Newest clip first hides oldest P0 crash.
Whisper before loudness — W3 exists because GPU time is not free.
LLM summary before tag map — Invents repro; tag blog blocks for a reason.
Skipping manifest — W1 prevents “we forgot frag_09” in February.
One giant batch of 38 — OOM and lost receipts; use batch_order[].
Confusing tag W1–W6 with batch W1–W6 — Different JSON schemas; link pointers, do not merge files.
Tuesday CSV + Whisper batch pairing
Run Tuesday Discord CSV ingest before January batch if threads hold build_label hints—merge CSV fragment_id into manifest notes column. CSV owns Discord metadata; batch receipt owns GPU nights.
Outbound references
- OpenAI Whisper — local model sizes
- ffmpeg audio extraction — 16 kHz mono convention
Related GamineAI reads
- Local Whisper VOD triage pipeline
- Whisper tag extraction to GitHub issues
- Audacity loudness spot evening
- OBS concat evening
- Monday January capstone reconciliation
- January re-entry Wednesday smoke
- Numbered SHIP exception list
- 7-day February RC smoke challenge
- Tuesday Discord CSV ingest
- 15 free Whisper/ffmpeg tools
Key takeaways
- Holiday freeze still produces playtest VODs—January needs a backlog batch strategy, not ad-hoc Whisper nights.
- P0–P3 rubric forces fest-blocking clips before menu tours and stale labels.
january_whisper_batch_receipt_v1.jsongates W1–W6 (batch schema—distinct from tag-map receipt).- Loudness spot on P0/P1 before Whisper—pair Audacity evening and ninety-second preflight (Guide).
build_labelon every P0/P1 row—align with Monday reconciliation label lineage.- Tag map + GitHub come after batch transcripts—pair Whisper tags.
verify_january_whisper_batch.shgives CI one exit code for backlog discipline.- January cluster #1–#12 closes with this strategy—Blog-Planner refill critical next.
- Course 273 + Guide #35 forward own loudness milestone; this owns batch order.
- Max ~8 sessions per GPU night—receipt
batch_order[]documents splits. - P3 archive without Whisper is valid—do not transcribe silence for volume metrics.
- February same-day P0 triage is the live-week cousin—batch order first, same-day pager during D1–D7.
FAQ
Is this replacing the local Whisper pipeline blog?
No—pipeline is steady-state; this is January holiday backlog drain.
Why two different W1–W6 gate sets?
Different receipts (january_whisper_batch vs whisper_issue_tag)—never merge JSON blobs.
Can I skip loudness for P0?
Only with producer waiver in notes—default W3 fail-closed.
How does this relate to Monday reconciliation?
Run Monday before batch planning; pointer build_label_current feeds W2.
What when backlog is zero?
Archive receipt to release-evidence/ai/archive/; resume T1–T6 pipeline.
Does Help #5 forward apply?
MKV concat fixes are upstream of merged WAV—fix concat before loudness and batch.
January cluster complete—what next?
Blog-Planner critical refill with 8–12 diverse pitches; do not escape-hatch another fest metadata checklist.