Lesson 219: Unity Addressables String Table Fest Receipt After Content Strip (2026)
Direct answer: After a fest Addressables strip PR, promote only when addressables_fest_string_table_receipt_v1.json proves Localization_Local still ships Shared Table Data + locale tables in the player build, tables_ok: true on installed smoke, and build_label matches Lesson 218 fest rows—following Unity Localization_Local preflight L1–L6.

Why this matters now (October 2026 strip week)
October 2026 producers merge “remove remote gameplay packs” and accidentally drop UI_Strings from the player payload. Store pages show Japanese; the fest exe shows UI_PLAY keys. Weblate export proves TMS export; String Tables empty help fixes broken builds—this lesson is the H2 BUILD_RECEIPT milestone after strip PRs, distinct from Lesson 202 (first smoke) and Lesson 209 (portfolio matrix).
Ren'Py siblings keep language_receipt separate—do not merge JSON schemas on one row without the matrix lesson.
Beginner path (strip audit + installed smoke)
| Step | Action | Success check |
|---|---|---|
| 1 | List groups touched by strip PR | strip_pr_groups.md |
| 2 | Confirm tables only in Localization_Local | Guide L3 pass |
| 3 | Build fest player → open Build Report | String tables listed |
| 4 | Install build → smoke ja (or team locale) |
No raw keys |
| 5 | File addressables_fest_string_table_receipt_v1.json |
tables_ok: true |
| 6 | Thursday row review | string_table_receipt column GREEN |
Time: ~20 min group audit + ~25 min build/smoke + 15 min documentation—60 minutes first strip recovery.
Developer path (gates ST1–ST6)
| Gate | Check | Fail when |
|---|---|---|
| ST1 | Strip PR diff reviewed | Tables moved to fest_strip group |
| ST2 | Build Report: Shared Table Data | Zero shared rows |
| ST3 | Build Report: per-locale tables | Missing ja / zh-Hans fest locales |
| ST4 | Localization_Local non-stripped |
Remote-only flag on UI tables |
| ST5 | Installed smoke screenshots | UI_* visible |
| ST6 | Receipt + BUILD_RECEIPT row | promotion_allowed: false |
ST1 — Strip PR crosswalk
| Strip group | Allowed to remove | Must never remove |
|---|---|---|
fest_remote_cinematics |
Yes | — |
fest_optional_audio |
Maybe (audio gate) | — |
Localization_Local |
No | Shared + locale String Tables |
AudioBanks |
No (separate receipt) | FMOD/Wwise banks |
Archive strip_pr_diff.png in release-evidence/localization/.
ST2–ST3 — Build Report enumeration
Mirror guide output—lesson adds fest strip context:
{
"build_report_after_strip": {
"shared_table_count": 1,
"locale_table_count": 3,
"localization_bytes_in_player": 201440,
"strip_pr_id": "fest-size-2026-10-rc2"
}
}
Fail: locale_table_count dropped from pre-strip manifest without locale scope change.
ST4 — Localization_Local audit
- Addressables Groups →
Localization_Local→ Include in Build. - No String Table assets under
fest_striporRemoteContent. - Compare to pre-strip
addressables_group_manifest.jsonhash.
ST5 — Installed smoke matrix
| Locale | First screen | Raw keys? | Screenshot |
|---|---|---|---|
en |
Main menu | ||
ja |
Main menu |
One fest locale required; add more if store promises them.
addressables_fest_string_table_receipt_v1.json
{
"schema": "addressables_fest_string_table_receipt_v1",
"build_label": "fest-demo-2026-10-rc5",
"localization_local_group": "Localization_Local",
"strip_pr_id": "fest-size-2026-10-rc2",
"fest_locales": ["en", "ja", "zh-Hans"],
"build_report_after_strip": {
"shared_table_count": 1,
"locale_table_count": 3,
"localization_bytes_in_player": 201440
},
"installed_smoke_locale": "ja",
"tables_ok": true,
"string_table_receipt_path": "release-evidence/localization/STRING_TABLE_RECEIPT.json",
"gates": {
"ST1_strip_review": "pass",
"ST2_shared_data": "pass",
"ST3_locale_tables": "pass",
"ST4_localization_local": "pass",
"ST5_installed_smoke": "pass",
"ST6_receipt": "pass"
},
"promotion_allowed": true
}
Pin under release-evidence/localization/ADDRESSABLES_FEST_STRING_TABLE_RECEIPT.json.
BUILD_RECEIPT columns:
| Column | Value |
|---|---|
addressables_fest_string_table_receipt |
path + pass |
string_table_receipt.tables_ok |
true (alias OK) |
string_freeze_receipt |
Weblate row if applicable |
Thursday row review — fail promotion if store CN but tables_ok: false.
Proof table (strip PR week)
| build_label | strip PR | tables in player | tables_ok | Promote? |
|---|---|---|---|---|
| fest-demo-2026-10-rc5 | rc2 size cut | |||
| fest-demo-2026-10-rc4 | rc1 (bad) | 0 | false | blocked |
Key takeaways
- Strip PR review is part of localization—not only Weblate export.
addressables_fest_string_table_receiptis post-strip;string_table_receiptfrom Lesson 202 may still apply pre-strip.- Editor Play Mode never substitutes for installed smoke.
- Localization_Local is the non-stripped island for UI tables.
- Portfolio teams still use Lesson 209 matrix for Ren'Py + Unity.
- Lesson 220 is facilitator VOD batch—orthogonal receipt.
- H1 capstone (217) must stay GREEN—localization does not replace trust receipts.
Prerequisites
- Lesson 218 — Deck static menu (same
build_labeldiscipline) - Unity Localization_Local preflight
- Lesson 202 — Weblate string table smoke
- String Tables empty help
- 18-free localization tooling
- 7-day store metadata sprint
Common mistakes
- Approving strip PR without localization owner sign-off.
- Using
string_table_receiptfrom last month’s build_label. - Pseudo-localization pass treated as
tables_ok. - Merging Ren'Py
language_receiptinto Unity JSON. - Skipping Thursday row because “Weblate was green.”
Troubleshooting
| Symptom | Lane |
|---|---|
| Keys after strip | ST1 + help |
| Tables OK, wrong language | ST5 locale selector / LocalizationSettings |
| Store vs build mismatch | Steam 300-char CJK help + Lesson 232 — store_copy_cjk_receipt |
| Audio missing after strip | FMOD banks strip help + Lesson 231 — audio_bank_strip_receipt |
Mini exercise (55 minutes)
- Simulate strip: move one table to
fest_strip—confirm ST2 fails. - Restore to
Localization_Local; rebuild. - Run installed
jasmoke; archive screenshot. - File
addressables_fest_string_table_receipt_v1.json. - Update BUILD_RECEIPT; run Thursday review row.
Continuity — H2 2026 arc (218–223)
| Lesson | Receipt focus |
|---|---|
| 218 | Deck static menu |
| 219 (this) | Addressables fest string tables |
| 220 | VOD concat batch |
| 221–223 | Facilitator + HTML5 + capstone |
Next: Lesson 220 — playtest VOD facilitator concat batch.
FAQ
Same receipt as Lesson 202?
202 establishes first string_table_receipt; 219 adds addressables_fest_string_table_receipt after strip PR with strip_pr_id—file both if strip landed.
Godot-only demo?
n/a with note; Unity column skipped. H2 Unity studios must pass 219 when using String Tables.
Strip only remote art?
Still run ST2–ST5—regressions hide in Shared Table Data references.
Strip PRs do not get a free pass—prove tables survived in the player build before fest visibility.