Whisper Multilingual Playtest to Localization Bug Triage Before String Freeze - 2026 Strategy

August week two: #playtest has sixty-three clips—eleven tagged locale-ja, nine locale-ko, four locale-de. Someone runs January EN batch triage and files GitHub issues for “menu feels wrong” in English while a JP tester said on mic that the achievement title is still English. Creator highlight reel handoff sorts B-roll for October keys. Freeze evening is scheduled for August 25—but no LQA ticket cites msgid:ui.achievement.unlock_title in Japanese.
August–September 2026 is when micro-studios run multilingual soft-launch and playtest volume ahead of October Next Fest string freeze. Whisper pipelines built for English engineering triage (local pipeline), post-fest drain (February handoff cousin), or press highlight reels do not route locale-specific string bugs into Weblate/LQA columns before freeze.
This AI Integration / Workflow strategy defines multilingual playtest → localization bug triage: tag clips with locale_id, run Whisper with per-locale language settings, map transcript hits to string_key / msgid candidates, file loc_triage_queue[] for LQA (not generic GitHub gameplay issues), apply loc triage W1–W6 gates (distinct schema), file multilingual_whisper_loc_triage_receipt_v1.json, set BUILD_RECEIPT multilingual_whisper_loc_triage_ok: true—closing the August–September 2026 localization cluster #1–#12 before Friday capstone upload window.
Non-repetition note: Local Whisper pipeline owns general T1–T6 eng triage. Highlight reel owns reel_manifest[] + creator scrub. Post-fest handoff owns engineering P1→P3 drain. Whisper tags owns GitHub quote discipline for gameplay bugs. Freeze evening owns L1–L6 string latch. This URL owns loc_triage_queue[] + locale_tag → LQA ticket columns before freeze.
Pair local Whisper pipeline, highlight reel, freeze evening #1, Friday capstone #11, 18-free localization QA, Guide #53 / Course 273/292 forward.
Why this matters now (August–September 2026)
- Soft-launch multiplies locales — Soft-launch windows invite JP/KR testers; EN-only Whisper hides string gaps.
- Freeze without LQA queue — L6 can GREEN while untranslated UI still ships in claimed locales.
- Wrong Whisper cousin — Highlight reel and EN batch sort do not populate Weblate ticket columns.
- Capsule ≠ strings — CJK capsule Z owns art; this owns in-game / store string bugs from playtest audio.
- Cluster close — #1–#11 filed receipts; upload week needs honest loc bug drain before capstone C8.
Direct answer: After multilingual playtest capture, tag each clip locale_id, transcribe with matching Whisper --language, extract string-bug candidates into loc_triage_queue[], route to LQA spreadsheet or Weblate-linked issues with msgid + timestamp + locale, file multilingual_whisper_loc_triage_receipt_v1.json with W1–W6 GREEN, set multilingual_whisper_loc_triage_ok: true before freeze evening or document open P0 loc bugs in capstone notes.
Who this strategy is for
| Audience | Outcome |
|---|---|
| Solo founder | Locale-tag naming + one LQA queue sheet |
| Localization lead | Tickets with msgid paths, not “fix Japanese” |
| Producer | Receipt proving loc bugs triaged before freeze |
| Working dev | verify_multilingual_whisper_loc_triage.sh fail-closed |
Time: ~45 minutes first rubric + receipt; ~20 minutes per batch of 8–12 locale-tagged clips after pipeline exists.
Prerequisites: Local Whisper pipeline folders; locale_manifest from freeze prep; LQA tool (Weblate, spreadsheet, or issue template).
Format ladder — Whisper + localization cluster
| Artifact | Window | Schema | Primary output |
|---|---|---|---|
| Local pipeline | Ongoing | playtest_vod_triage_receipt_v1 |
Eng gameplay triage |
| Highlight reel | T-90 press | creator_highlight_reel_handoff_receipt_v1 |
reel_manifest[] |
| Loc triage (this) | Pre-freeze Aug–Sep | multilingual_whisper_loc_triage_receipt_v1 |
loc_triage_queue[] → LQA |
| Freeze evening | Freeze night | localization_freeze_receipt_v1 |
localization_freeze_ok |
| Friday capstone | Fridays | localization_freeze_capstone_receipt_v1 |
october_upload_window_allowed |
Rule: Loc triage feeds LQA before freeze—does not replace gameplay Whisper tags for crashes/soft-locks.
Beginner path — locale tag → ticket columns (30 minutes)
Step 1 — Filename locale tag (W1)
Extend local pipeline ingest naming:
YYYY-MM-DD_build-2026-08-12-playtest-07_surface-playtest_locale-ja_tester-anon-042.mp4
| Field | Example | Why |
|---|---|---|
locale_id |
ja | ko | de |
Routes Whisper language + LQA queue |
build_id |
2026-08-12-playtest-07 |
Links BUILD_RECEIPT |
surface |
playtest |
Scope discipline |
W1 fail: locale-en on a clip where tester spoke Japanese—re-tag or split audio tracks.
Step 2 — LQA ticket column rubric (W4–W5)
Copy into playtest-vod/loc-triage/lqa-queue-template.md:
| ticket_id | locale_id | severity | transcript_quote | video_ts | string_key_guess | weblate_msgid | status | owner |
|---|---|---|---|---|---|---|---|---|
| LOC-001 | ja | P1 | 「実績の名前が英語」 | 04:12 | ui.achievement.title | store-copy/ja | open | LQA |
| LOC-002 | ko | P2 | menu still English | 01:03 | ui.pause.resume | game-ui/ko | open | eng |
Beginner rules:
- Every row needs
locale_id—no “localization” generic tickets. string_key_guessmay be wrong—LQA confirms against Weblate path.- P1 = wrong language visible in claimed locale; P2 = truncation/overflow; P3 = typo/fluency.
- Gameplay crashes go to Whisper tags—not this queue.
Step 3 — Whisper per locale (W2)
# Japanese clip
whisper audio/clip_ja.wav --model small --language ja --output_dir transcripts/ja/
# Korean clip
whisper audio/clip_ko.wav --model small --language ko --output_dir transcripts/ko/
Do not run --language en on non-English playtest audio to “save time.”
Step 4 — String-bug heuristics (W3)
Flag transcript lines mentioning (locale-aware keywords in notes):
- UI still English / 英語のまま / 영어로 나옴
- Text cut off / はみ出し / 잘림
- Wrong character / 文字化け / 깨짐
- Subtitle mismatch / 字幕
Map to string_key_guess using recent PO export or in-game string dump—document path in ticket.
Step 5 — Receipt + latch (W6)
File receipt when queue reviewed; open P1 count documented for freeze evening go/no-go.
Developer path — gates W1–W6 (loc triage schema)
These W gates belong to multilingual_whisper_loc_triage_receipt_v1—not highlight reel W, not post-fest handoff W, not Whisper tags W.
| Gate | Pass criterion |
|---|---|
| W1 | Every clip in batch has locale_id in filename or ingest manifest |
| W2 | Whisper --language matches locale_id (or documented multilingual model) |
| W3 | Transcripts saved under transcripts/{locale_id}/ beside source |
| W4 | loc_triage_queue[] rows include locale_id, video_ts, transcript_quote |
| W5 | P1 rows have weblate_msgid or string_key_guess + owner |
| W6 | Receipt filed; multilingual_whisper_loc_triage_ok: true; open P1 list attached |
multilingual_whisper_loc_triage_receipt_v1.json (template)
{
"schema": "multilingual_whisper_loc_triage_receipt_v1",
"triage_window": "2026-08-pre-freeze",
"generated_at": "2026-08-18T20:00:00Z",
"locale_manifest_pointer": "release-evidence/localization/2026-08-25/locale_manifest_v1.json",
"claimed_locales": ["de", "en", "es", "fr", "ja", "ko"],
"clips_processed": 23,
"loc_triage_queue": [
{
"ticket_id": "LOC-001",
"locale_id": "ja",
"severity": "P1",
"fragment_id": "fragment_ja_04",
"video_path": "playtest-vod/archive/2026-08-12_locale-ja_04.mp4",
"video_ts": "04:12",
"transcript_quote": "実績の名前が英語のまま",
"transcript_path": "playtest-vod/transcripts/ja/fragment_ja_04.txt",
"string_key_guess": "ui.achievement.unlock_title",
"weblate_msgid": "store-copy/ja:achievement.unlock_title",
"status": "open",
"owner": "LQA"
},
{
"ticket_id": "LOC-002",
"locale_id": "ko",
"severity": "P2",
"fragment_id": "fragment_ko_02",
"video_ts": "01:03",
"transcript_quote": "메뉴가 영어로 나와요",
"string_key_guess": "ui.pause.resume",
"weblate_msgid": "game-ui/ko:pause.resume",
"status": "open",
"owner": "LQA"
}
],
"open_p1_count": 1,
"open_p2_count": 1,
"gates": {
"W1": "pass",
"W2": "pass",
"W3": "pass",
"W4": "pass",
"W5": "pass",
"W6": "pass"
},
"multilingual_whisper_loc_triage_ok": true,
"notes": "LOC-001 blocks freeze until fixed or EXCEPTION-LOC-005 filed"
}
BUILD_RECEIPT:
{
"multilingual_whisper_loc_triage_ok": true,
"multilingual_whisper_loc_triage_receipt": "release-evidence/ai/multilingual_whisper_loc_triage_receipt_v1.json",
"open_loc_p1_count": 1
}
verify_multilingual_whisper_loc_triage.sh
#!/usr/bin/env bash
set -euo pipefail
R="${1:-release-evidence/ai/multilingual_whisper_loc_triage_receipt_v1.json}"
jq -e '.schema == "multilingual_whisper_loc_triage_receipt_v1"' "$R" >/dev/null
jq -e '.multilingual_whisper_loc_triage_ok == true' "$R" >/dev/null
for g in W1 W2 W3 W4 W5 W6; do
test "$(jq -r --arg g "$g" '.gates[$g]' "$R")" = "pass"
done
jq -e '.loc_triage_queue | length > 0 or (.notes | test("no_multilingual_clips"))' "$R" >/dev/null
jq -e '
.loc_triage_queue[]
| select(.severity == "P1")
| (.weblate_msgid // .string_key_guess) | length > 0
' "$R" >/dev/null
echo "multilingual_whisper_loc_triage_ok"
Batch script sketch (working dev)
#!/usr/bin/env bash
# triage_multilingual_clips.sh — after local pipeline ingest
INBOX=playtest-vod/inbox
for f in "$INBOX"/*_locale-*.mp4; do
loc=$(echo "$f" | sed -n 's/.*_locale-\([a-z][a-z]\).*/\1/p')
base=$(basename "$f" .mp4)
ffmpeg -y -i "$f" -vn -ar 16000 -ac 1 "playtest-vod/audio/${base}.wav"
whisper "playtest-vod/audio/${base}.wav" --model small --language "$loc" \
--output_dir "playtest-vod/transcripts/${loc}/"
done
Human step: fill loc_triage_queue[] from transcripts—do not auto-open Weblate from hallucinated msgids.
Weblate / LQA handoff (working dev)
After W5 passes human review, link tickets to Weblate:
- Search
weblate_msgidin project—confirm component (store-copy,game-ui). - If missing, add source string row in EN first (freeze policy may block—file EXCEPTION-LOC).
- Attach
video_ts+transcript_quotein issue body for LQA vendor. - Set Weblate label
playtest-loc-2026for reporting. - Close ticket only when installed build smoke shows fix in claimed locale.
## LOC-001 body template
Locale: ja
Build: 2026-08-12-playtest-07
Video: playtest-vod/archive/2026-08-12_locale-ja_04.mp4 @ 04:12
Quote: 実績の名前が英語のまま
Suspected key: ui.achievement.unlock_title
Weblate: store-copy/ja — achievement.unlock_title
Repro: Switch language to 日本語 → open Achievements
Pair Weblate merge-conflict help when PO imports fight playtest fixes.
RED / YELLOW / GREEN routing
| Color | Condition | Producer action |
|---|---|---|
| RED | W2 fail or P1 with no msgid path | Block freeze latch until re-transcribe + ticket fix |
| YELLOW | P2 open; P1 cleared | Freeze may proceed with documented P2 owners |
| GREEN | W1–W6 pass; P1 fixed or excepted | Capstone C8 may read triage OK |
Evidence folder layout
playtest-vod/
loc-triage/
lqa-queue-template.md
lqa-queue-2026-08.csv
transcripts/
ja/
ko/
de/
release-evidence/ai/
multilingual_whisper_loc_triage_receipt_v1.json
PowerShell facilitator (Windows)
$Receipt = "release-evidence/ai/multilingual_whisper_loc_triage_receipt_v1.json"
jq -e '.multilingual_whisper_loc_triage_ok == true' $Receipt
if ($LASTEXITCODE -ne 0) { throw "loc triage latch failed" }
$p1 = jq '[.loc_triage_queue[] | select(.severity=="P1" and .status=="open")] | length' $Receipt
Write-Host "open P1 count:" $p1
Extended troubleshooting
“Tester code-switched EN/JA mid-clip.” Split fragment or tag locale-mixed; run Whisper ja first; note uncertainty in ticket.
“No string dump in repo.” Export PO at freeze candidate; use msgid from PO path only—no invented keys.
“LQA vendor wants video.” Ship fragment path + timestamp; blur tester voice if NDA requires.
“Same bug in ko and ja.” Two ticket rows—shared fix may close both; do not merge locales in one row.
Engine locale smoke (after ticket filed)
Before closing LOC rows, smoke installed build in claimed locale—not editor preview only.
| Engine | Smoke step | Common miss |
|---|---|---|
| Godot | Project → Locale → run exported build with locale=ja CLI |
.po imported but UI theme font lacks CJK glyphs |
| Unity | Localization package → Selected Locale in Player build | Addressables string table empty in fest SKU |
| Ren'Py | Language menu → config.translate strings |
Weblate PO path ≠ game tl/ja folder |
| Unreal | Culture in packaging settings | LOCTEXT namespace split across plugins |
Pair Unity empty Addressables fest build help when triage quotes UI but build shows keys.
Consent and retention (beginner)
- Pin playtest README: VODs processed locally; transcripts stored 90 days max unless tester opts in.
- Redact Discord usernames in
loc_triage_queue[]notes—use tester ID from roster CSV. - Do not ship full VOD to LQA vendor without written scope—timestamp + 30s fragment usually enough.
- If tester revokes consent, delete transcript + queue row; note receipt
notes.
August–September batch calendar
| Week | Action | Receipt field |
|---|---|---|
| W33–W34 | Collect locale-tagged clips from soft-launch | clips_indexed |
| W35 | First multilingual Whisper pass | locales_transcribed[] |
| W36 | Human queue review; open Weblate tickets | loc_triage_queue[] |
| W37 | Fix P1 strings; re-smoke ja/ko | p1_closed_count |
| W38 | File triage receipt; pair Monday jq | multilingual_whisper_loc_triage_ok |
| W38 Fri | Capstone C8 reads latch | cousin index |
| W39 | Freeze evening if not already latched | localization_freeze_ok |
Skipping W35–W36 then freezing is how stores list 日本語 while achievement UI stays English on mic.
Producer diligence zip (partner / publisher)
When handing triage to a publisher or co-dev:
multilingual_whisper_loc_triage_receipt_v1.json(latest)lqa-queue-YYYY-MM.csvexport fromloc_triage_queue[]- Redacted transcript samples (one per locale, max 3)
- Link to weekly jq last line + freeze evening receipt path
- EXCEPTION-LOC list if any P1 waived at freeze
Zip name: {game}_loc_triage_W38_2026.zip — not playtest_dump.zip with sixty-three raw VODs attached.
Scenarios A–H
A — Only EN clips in inbox
Receipt notes: no_multilingual_clips; W6 may pass if manifest is EN-only—do not fake ja rows.
B — P1 open at freeze evening
Either fix strings before L6 or file EXCEPTION-LOC with producer sign—document in freeze receipt notes.
C — Highlight reel team wants same clips
Reel uses different sort (highlight W); loc queue owns string bugs, not B-roll rank.
D — Whisper wrong language setting
Fail W2; re-run transcription—do not attach bad quotes to LQA tickets.
E — Gameplay soft-lock in JP clip
Split ticket: gameplay → Whisper tags; string UI → loc queue.
F — Capstone C8 asks for triage receipt
Friday capstone reads multilingual_whisper_loc_triage_ok + open P1 count.
G — Weekly jq shows new locale mid-September
Re-run loc triage for new locale_id before freeze; do not append to January batch.
H — Contractor burn LR5 post-freeze LQA
Burn worksheet owns cash; this queue creates LQA work items before spend caps bite.
Common mistakes
- Running EN Whisper on all clips.
- Filing GitHub gameplay issues for “Japanese wrong” without msgid.
- Using highlight
reel_rankas LQA priority. - Skipping loc triage because freeze evening is scheduled.
- Auto-translating tester quotes into tickets without human LQA read.
- Mixing post-fest
clips_index[]schema into loc receipt without locale columns.
Schedule pairing (August–September)
| When | Action |
|---|---|
| After multilingual playtest night | W1–W3 ingest + transcribe |
| Within 48h | W4–W5 queue review with LQA |
| Before freeze evening | W6 latch or explicit P1 exception list |
| Friday capstone | C8 reads triage + freeze cousins |
| After freeze | New clips → new triage pass or EXCEPTION-LOC only |
Cluster #1–#12 closeout map
| # | Artifact | Loc triage relationship |
|---|---|---|
| 1 | Freeze evening | Triage informs L1 scope |
| 2 | Dual-SKU dress | Channel labels ≠ string bugs |
| 3 | IARC packet | Ratings ≠ LQA |
| 4 | Freeze challenge | Habit; triage is evidence |
| 5 | Wishlist recovery | Funnel ≠ strings |
| 6 | Soft-launch | Drives multilingual clips |
| 7 | Capsule Z | Art ≠ in-game strings |
| 8 | Weekly jq | Identity; triage is qualitative bugs |
| 9 | Burn worksheet | Cash for LQA from queue |
| 10 | MIGRATE opinion | Saves ≠ strings |
| 11 | Friday capstone | Reads triage latch in C8 |
| 12 | This strategy | Closes cluster |
Key takeaways
- Multilingual playtest VODs need locale-tagged Whisper, not EN-only batch sorts.
loc_triage_queue[]routes string bugs to LQA—not highlight reels or eng P1 drain.- Gates W1–W6 on
multilingual_whisper_loc_triage_receipt_v1.json. - Latch
multilingual_whisper_loc_triage_okbefore freeze or document P1 exceptions. - Ticket columns require
locale_id+ timestamp + msgid guess. - Gameplay bugs stay in Whisper tags.
- Pair local pipeline for folder layout.
- Friday capstone consumes triage latch in C8.
- Guide #53 / Course 273/292 forward for tool steps.
- Closes August–September localization cluster #1–#12.
- Open P1 at freeze requires EXCEPTION-LOC—not silent waiver.
- Wrong-language Whisper fails W2—re-transcribe, do not patch tickets.
FAQ
Same as local Whisper pipeline?
No. Pipeline owns ingest/transcript mechanics. This owns locale → LQA string queue before freeze.
Same as highlight reel handoff?
No. Reel owns press-safe B-roll order. This owns untranslated/wrong-language UI bugs.
Same as Whisper tags?
No. Tags own GitHub gameplay issues with quote discipline. This owns localization/LQA columns.
Must queue be empty before freeze?
P1 should be fixed or excepted. P2/P3 may remain with documented owners if freeze evening accepts.
Can we use cloud Whisper?
Local-first preferred (pipeline privacy); if cloud, document consent in playtest README.
How does this pair weekly jq?
jq proves locale IDs stable; triage proves player-visible string quality per locale.
What triggers Blog-Planner refill?
After #12, August–September cluster #1–#12 closed—next go may critical-refill Blog-Planner when backlog hits 0.
Course 273/292?
Loudness/Whisper milestone cousins—format ladder, not loc queue schema.
How does triage pair contractor burn #9?
Open P1 rows in loc_triage_queue[] justify post-freeze LQA spend lines on contractor burn worksheet—attach ticket IDs to LR exceptions.
What if capsule Z7 fails but strings pass?
Multilingual capsule typography is store art—still file loc tickets for in-game strings; do not conflate Z-gates with W-gates.
Related reads
- Local Whisper Transcription Pipeline for Playtest VOD Triage
- Whisper Creator Clip Highlight Reel Handoff From Post-Fest Clips Index
- Your First Localization String Freeze Receipt Before October PO Import
- Friday Localization Freeze Capstone BUILD_RECEIPT Row Review
- jq Gate Sketch for localization_freeze Weekly Locale Row Diff
- Whisper Playtest Tag Extraction for Structured GitHub Issues
- 18 Free Localization QA Tools for Indie Teams
- August 2026 Soft-Launch Windows Before October Next Fest
Closing
English-only Whisper on multilingual playtest week is how ja testers file gameplay bugs in English while achievement titles stay untranslated in Weblate. Tag locales, transcribe honestly, queue string bugs with msgid paths, file multilingual_whisper_loc_triage_receipt_v1.json—then walk into freeze evening and Friday capstone with receipts that match what players said on mic.
August–September localization cluster #1–#12 is closed. Next cluster needs a new Blog-Planner refill—do not append October uploads to this receipt series without a new triage_window.