Friday Localization Freeze Capstone BUILD_RECEIPT Row Review - Ten Minutes Before October Upload Window - 2026

Friday 4:45 p.m., September 19: #loc-freeze celebrates "strings are done." Monday's calendar already lists October Next Fest depot upload and store override publish. BUILD_RECEIPT.json shows localization_freeze_ok: true from August 25 while weekly locale jq stops at W37 with no W38 line. localization_freeze_weekly_ok is still true from last Monday even though Catalan appeared in Supported languages Tuesday. Contractor burn F0 week shows a rush LQA invoice with no EXCEPTION-LOC note.
September 2026 localization prep ends with receipt sprawl—freeze evening L1–L6, challenge F1–F5, Monday jq diffs, spend caps, capsule typography Z, dual-SKU dress rehearsal, soft-launch G gates, and MIGRATE save rows each filed in separate folders. Teams that skip Friday localization freeze capstone jump to October SteamPipe queues and lose the one BUILD_RECEIPT story upload week needs—not because translators forgot to export, but because nobody ran C1–C10 on the root receipt before the upload window opens.
Freeze evening latched localization_freeze_ok one night. Freeze challenge latched localization_freeze_challenge_ok for habit closes. Friday March capstone latched april_content_update_allowed before Addressables. Thursday content-update row review latched content_update_promote_allowed after warm catalog. This Process & Workflow article defines a ten-minute Friday localization capstone row review: diff freeze root columns, consume localization_freeze_weekly_log.jsonl annex, file localization_freeze_capstone_receipt_v1.json, set october_upload_window_allowed: true only when C4–C8 pass—the last human gate before October Next Fest upload week.
Non-repetition note: Freeze evening owns L1–L6 one-night latch. Weekly locale jq owns J1–J6 per-ISO-week diff. Freeze challenge owns F1–F5 habit week. Friday March capstone owns March sprint C1–C10 + april_content_update_allowed. Thursday content-update owns T1–T10 catalog promote. This URL owns Friday localization C1–C10 capstone + weekly jsonl annex + october_upload_window_allowed.
Pair freeze evening #1, weekly jq #8, freeze challenge #4, contractor burn #9, MIGRATE opinion #10, Course 291 forward, Whisper multilingual loc triage #12 — closes cluster #1–#12.
Why this matters now (September 2026 → October upload)
- Freeze night is not upload permission — L6 proves one evening; capstone proves September Fridays still honest.
- Weekly jsonl annex debt — Monday jq produced ISO weeks of locale diffs—capstone must index them, not leave W38 missing.
- Spend + identity drift — Burn worksheet LR5 and weekly J5 can diverge from root booleans.
- Cluster cousin rows — Dual-SKU, soft-launch, capsule Z, age packet, MIGRATE each own latches—upload week needs one diff.
- SteamPipe does not read Slack — Partners and CI read BUILD_RECEIPT; stale
localization_freeze_okis diligence theater.
Direct answer: On Fridays September 5–October 3, 2026 (default every Friday after freeze through upload window), run C1–C10 on BUILD_RECEIPT localization columns; write localization_freeze_capstone_receipt_v1.json with weekly_jsonl_annex[] pointers; set october_upload_window_allowed: true only when C4–C8 GREEN—block October depot upload when capstone diff is RED even if last Monday jq was GREEN.
Who this ritual is for
| Audience | Outcome |
|---|---|
| Solo founder | Ten-minute checklist before "upload Monday" |
| Producer | Partner zip with capstone + weekly jsonl index |
| Release owner | Latch localization_freeze_capstone_ok + upload window same commit |
| Working dev | Machine-readable receipt for CI before SteamPipe job |
Time: 10 minutes every Friday after freeze through upload window; 5 minutes optional mid-September checkpoint.
Prerequisites: Freeze evening L6 GREEN, localization_freeze_weekly_log.jsonl through current ISO week (or waiver), cluster cousin receipts filed.
Ritual map — localization cluster through Friday latch
| Phase | Artifact | Layer | This article |
|---|---|---|---|
| One evening | Freeze L1–L6 | localization_freeze_ok |
Prerequisite C2 |
| Optional week | Challenge F1–F5 | Habit latch | Indexed C3 |
| Each Monday | Weekly jq J1–J6 | Weekly jsonl | Indexed C7 |
| F-6…F+2 | Burn K/LR | Cash caps | Indexed C6 |
| Art | Capsule Z1–Z6 | CJK overrides | Indexed C8 |
| Channels | Dual-SKU D1–D6 | Label match | Indexed C8 |
| Soft traffic | Soft-launch G1–G6 | Window honesty | Indexed C8 |
| Saves | MIGRATE M1–M6 | Demo→full | Indexed C8 if claimed |
| Friday | Localization capstone (this) | Root + weekly annex | C1–C10 |
| Upload week | SteamPipe / store publish | October fest | Follows GREEN capstone |
| 12 | Whisper multilingual loc triage | VOD→LQA tickets | Closes cluster #1–#12 |
W37 jq GREEN with Friday capstone RED still ships upload theater—SteamPipe promotes depots BUILD_RECEIPT cannot explain across freeze→September.
Capstone row catalog (what Friday diffs)
Store once in release-evidence/localization/localization-freeze-capstone-row-catalog.md:
| Row key | Source cluster | Must latch? | Typical stale pattern |
|---|---|---|---|
localization_freeze_ok |
#1 evening | Yes | true while Weblate pin advanced |
locale_manifest_path |
#1 | Yes | Path moved; hash stale |
weblate_pin_at_freeze |
#1 | Yes | Pin ≠ weekly jsonl last line |
localization_freeze_challenge_ok |
#4 challenge | Prefer | Skipped after freeze |
localization_freeze_weekly_ok |
#8 jq | Yes | true while jsonl missing week |
localization_spend_ok |
#9 burn | Yes | F0 overrun without LR note |
multilingual_capsule_typography_ok |
#7 art | If CJK claimed | JP override without Z6 |
dual_sku_rehearsal_ok |
#2 dress | If dual-SKU | itch≠Steam bytes |
soft_launch_window_ok |
#6 soft | If soft ran | Ads without G gates |
age_rating_packet_ok |
#3 IARC | If store claims | Rating without packet |
cloud_migration_exception_list_ok |
#10 MIGRATE | If carry-over copy | FAQ promises; list empty |
october_upload_window_allowed |
Output | Set Friday | Premature true Monday AM |
localization_freeze_capstone_ok |
Output | Set Friday | Missing after last September Friday |
Add rows when Resource #56 ships—never delete freeze keys without receipt_version bump in capstone notes.
Gates C1–C10 (October upload blockers)
| Gate | Name | Pass criteria |
|---|---|---|
| C1 | Freeze window | freeze_window == 2026-10-next-fest on capstone receipt |
| C2 | Freeze pointer | localization_freeze_receipt_v1.json exists; localization_freeze_ok true |
| C3 | Challenge cousin | localization_freeze_challenge_ok true or documented skip in notes |
| C4 | Weekly jq parity | localization_freeze_weekly_ok true; last jsonl locale_ids match manifest |
| C5 | Manifest hash | manifest_sha256 on last weekly line matches file on disk |
| C6 | Spend latch | localization_spend_ok true; LR5 exceptions listed if post-freeze spend |
| C7 | Weekly jsonl annex | localization_freeze_weekly_log.jsonl lines through current ISO week; gaps waived |
| C8 | Cluster cousins | Indexed *_ok fields true on BUILD_RECEIPT or waived with producer note |
| C9 | Upload readiness | RC label / depot smoke path documented if upload calendar invite exists |
| C10 | Diff receipt | localization_freeze_capstone_receipt_v1.json committed; latch set honestly |
C4–C8 are October upload blockers when RED. C9 YELLOW allows upload only with written waiver—depot promote without RC smoke path.
The ten-minute Friday ritual (minute-by-minute)
| Min | Action |
|---|---|
| 0–1 | Confirm current-week jq receipt exists or waiver in notes |
| 1–2 | C1–C2: open BUILD_RECEIPT; verify freeze receipt pointer |
| 2–4 | C4–C5: weekly jq latch; manifest hash vs disk |
| 4–6 | C6: spend OK; scan EXCEPTION-LOC list |
| 6–8 | C7–C8: weekly jsonl wc -l; cousin boolean sweep |
| 8–9 | C9: upload calendar + RC path if scheduled |
| 9–10 | Write capstone receipt; set october_upload_window_allowed if C4–C8 GREEN |
Calendar invite: "Friday localization freeze capstone — October upload gate."
Producer rule: No October SteamPipe calendar invite until capstone receipt path is in partner zip.
Beginner path — printable Friday card
Copy into release-evidence/localization/localization-freeze-capstone-friday-card-2026.md:
# Friday localization freeze capstone (10 min) — before October upload
Date: 2026-09-19
Owner: producer
[ ] C1 freeze_window on capstone receipt
[ ] C2 localization_freeze_ok + receipt path valid
[ ] C3 challenge ok or skip noted
[ ] C4 localization_freeze_weekly_ok; locale_ids match manifest
[ ] C5 manifest_sha256 matches disk
[ ] C6 localization_spend_ok; EXCEPTION-LOC if post-freeze spend
[ ] C7 weekly jsonl through current ISO week (or waiver)
[ ] C8 cluster cousin *_ok GREEN or documented waiver
[ ] C9 RC / depot smoke path if upload scheduled
[ ] C10 localization_freeze_capstone_receipt_v1.json committed
[ ] BUILD_RECEIPT october_upload_window_allowed = true (only if C4–C8 GREEN)
Signed: __________
Beginner mistake: Treating last Monday jq GREEN as "freeze done" without filing Friday capstone—upload inherits incomplete annex.
Format ladder (Friday cousins — do not merge latches)
| Ritual | Latch | Columns |
|---|---|---|
| Friday March capstone | april_content_update_allowed |
Sprint, MERGE, engineering |
| Thursday content-update | content_update_promote_allowed |
catalog_hash, warm, PATCH |
| This Friday capstone | october_upload_window_allowed |
freeze, weekly jq, spend, cousins |
Same ten-minute rhythm; different row catalog. Do not set content_update_promote_allowed when you mean upload window, or vice versa.
localization_freeze_capstone_receipt_v1.json (template)
{
"schema": "localization_freeze_capstone_receipt_v1",
"freeze_window": "2026-10-next-fest",
"reviewed_at_utc": "2026-09-19T16:50:00Z",
"iso_week": "2026-W38",
"freeze_pointer": {
"path": "release-evidence/localization/2026-08-25/localization_freeze_receipt_v1.json",
"localization_freeze_ok": true,
"weblate_pin_at_freeze": "a1b2c3d4e5f6789012345678abcdef01"
},
"weekly_jsonl_annex": [
{"iso_week": "2026-W35", "receipt": "release-evidence/localization/weekly/2026-W35.json"},
{"iso_week": "2026-W36", "receipt": "release-evidence/localization/weekly/2026-W36.json"},
{"iso_week": "2026-W37", "receipt": "release-evidence/localization/weekly/2026-W37.json"},
{"iso_week": "2026-W38", "receipt": "release-evidence/localization/weekly/2026-W38.json"}
],
"gates": {
"C1": "GREEN",
"C2": "GREEN",
"C3": "GREEN",
"C4": "GREEN",
"C5": "GREEN",
"C6": "GREEN",
"C7": "GREEN",
"C8": "GREEN",
"C9": "YELLOW",
"C10": "GREEN"
},
"row_diff": [
{
"key": "localization_freeze_weekly_ok",
"baseline": true,
"current": true,
"status": "unchanged"
},
{
"key": "locale_ids",
"baseline": ["de", "en", "es", "fr", "ja", "ko"],
"current": ["de", "en", "es", "fr", "ja", "ko"],
"status": "unchanged"
},
{
"key": "localization_spend_ok",
"baseline": true,
"current": true,
"status": "unchanged"
}
],
"localization_freeze_capstone_ok": true,
"october_upload_window_allowed": true,
"notes": "C9 YELLOW—RC smoke scheduled Monday; upload invite waits Monday PM"
}
Store under release-evidence/localization/capstone/.
BUILD_RECEIPT root rows
{
"localization_freeze_ok": true,
"localization_freeze_weekly_ok": true,
"localization_freeze_challenge_ok": true,
"localization_spend_ok": true,
"multilingual_capsule_typography_ok": true,
"dual_sku_rehearsal_ok": true,
"soft_launch_window_ok": true,
"cloud_migration_exception_list_ok": true,
"localization_freeze_capstone_ok": true,
"october_upload_window_allowed": true,
"localization_freeze_capstone_receipt": "release-evidence/localization/capstone/2026-W38.json"
}
verify_localization_freeze_capstone.sh
#!/usr/bin/env bash
set -euo pipefail
CAP="${1:-release-evidence/localization/capstone/latest.json}"
LOG="${2:-release-evidence/localization/localization_freeze_weekly_log.jsonl}"
jq -e '.schema == "localization_freeze_capstone_receipt_v1"' "$CAP" >/dev/null
jq -e '.localization_freeze_capstone_ok == true' "$CAP" >/dev/null
jq -e '.freeze_pointer.localization_freeze_ok == true' "$CAP" >/dev/null
for g in C1 C2 C3 C4 C5 C6 C7 C8 C10; do
test "$(jq -r --arg g "$g" '.gates[$g]' "$CAP")" = "GREEN"
done
MANIFEST=$(jq -r .freeze_pointer.path "$CAP" | xargs dirname)/locale_manifest_v1.json
test -f "$MANIFEST"
test -f "$LOG"
CUR=$(jq -s -c '.[-1].locale_ids' "$LOG")
FILE_IDS=$(jq -c '[.locales[].id] | sort' "$MANIFEST")
test "$CUR" = "$FILE_IDS"
echo "localization_freeze_capstone_ok"
Wire to CI: fail October upload workflow if capstone receipt missing or C4–C8 not GREEN.
Copy-paste jq one-liners
Last weekly locale set vs manifest
LOG=release-evidence/localization/localization_freeze_weekly_log.jsonl
MANIFEST=release-evidence/localization/2026-08-25/locale_manifest_v1.json
jq -s -c '.[-1].locale_ids' "$LOG"
jq -c '[.locales[].id] | sort' "$MANIFEST"
Manifest hash drift
DISK=$(sha256sum "$MANIFEST" | awk '{print "sha256:" $1}')
JSONL=$(jq -s -r '.[-1].manifest_sha256' "$LOG")
test "$DISK" = "$JSONL"
Weekly annex line count since freeze
wc -l < release-evidence/localization/localization_freeze_weekly_log.jsonl
Scenarios A–H
A — W38 jq missing; capstone Friday anyway
Fail C7. File waiver with producer sign or complete Monday jq before setting upload latch.
B — Catalan in store; manifest unchanged
Fail C4/C5. Re-freeze or remove store claim—do not waive silently.
C — Post-freeze LQA invoice; no EXCEPTION-LOC
Fail C6. Burn worksheet LR5.
D — JP capsule Z6 GREEN; weekly jq RED
Art ≠ identity. Fail C4; block upload until Monday jq fixed.
E — MIGRATE RED; FAQ still promises carry-over
Fail C8. MIGRATE opinion.
F — March Friday capstone cousin reused
Wrong latch—april_content_update_allowed does not authorize October upload.
G — Last September Friday GREEN; upload delayed two weeks
Re-run capstone on new Fridays or document freeze extension with new receipt version.
H — Whisper triage backlog shipped
Capstone C8 may YELLOW if open P1 loc tickets remain—document in notes; see Whisper multilingual loc triage for multilingual_whisper_loc_triage_ok latch. Do not block upload for EN-only VOD backlog if locales frozen and P1 excepted.
Common mistakes
- Setting
october_upload_window_allowedMonday without Friday receipt. - Using Thursday content-update T-gates for localization rows.
- Skipping capstone because freeze evening was August.
- Waiving C4 because "translators said OK in Slack."
- Deleting weekly jsonl lines instead of appending corrections.
- Merging March capstone JSON schema into localization folder.
- Ignoring cousin latches (dual-SKU, soft-launch) in C8 sweep.
Troubleshooting
"We froze in August; why Friday in September?" Freeze is point-in-time; annex proves ongoing honesty through upload.
"Only one locale hotfixed." Still needs weekly jq line + possible EXCEPTION-LOC + Friday capstone note.
"CI has no jq." Run verify script on facilitator laptop; attach artifact to partner zip.
"Upload moved to October 10." Update C9; re-run capstone closest Friday before new date.
RED / YELLOW / GREEN routing
| Color | Condition | Action |
|---|---|---|
| RED | C4–C8 any fail | No october_upload_window_allowed; fix or waive with receipt |
| YELLOW | C9 RC smoke pending | Upload invite slips; freeze latches may stay GREEN |
| GREEN | C4–C8 pass; C10 filed | May set upload latch |
Evidence folder layout
release-evidence/localization/
localization-freeze-capstone-row-catalog.md
localization-freeze-capstone-friday-card-2026.md
localization_freeze_weekly_log.jsonl
weekly/2026-W38.json
capstone/2026-W38.json
capstone/latest.json
exceptions/EXCEPTION-LOC-004.md
Pair Whisper multilingual loc triage (#12)
Whisper multilingual playtest → localization bug triage drains locale-tagged VODs into LQA tickets—orthogonal to capstone unless open P0 string bugs block upload. Capstone notes may reference multilingual_whisper_loc_triage_receipt_v1.json; C8 waives only with ticket IDs listed.
Same-week calendar (recommended September)
| Day | Block | Total |
|---|---|---|
| Monday | Weekly locale jq | ~8 min |
| As needed | EXCEPTION-LOC post-freeze spend | ~5 min |
| Friday | Capstone row review (this) | 10 min |
| Monday (upload week) | Depot smoke + RC label | Only if last Friday GREEN |
Skipping Monday jq then running Friday capstone fails C7—annex has nothing to index.
PowerShell facilitator twin
$Cap = "release-evidence/localization/capstone/latest.json"
$Log = "release-evidence/localization/localization_freeze_weekly_log.jsonl"
jq -e '.localization_freeze_capstone_ok == true' $Cap
if ($LASTEXITCODE -ne 0) { throw "capstone latch failed" }
$cur = jq -s -c '.[-1].locale_ids' $Log
$manifest = "release-evidence/localization/2026-08-25/locale_manifest_v1.json"
$fileIds = jq -c '[.locales[].id] | sort' $manifest
if ($cur -ne $fileIds) { throw "locale_ids drift" }
Write-Host "october_upload_window_allowed candidate OK"
Worked example (micro-studio, W38)
| Check | Result | Action |
|---|---|---|
| C2 freeze pointer | GREEN | Receipt path valid |
| C4 weekly jq | GREEN | W38 line filed Monday |
| C5 manifest hash | GREEN | Disk matches jsonl |
| C6 spend | YELLOW | EXCEPTION-LOC-004 filed for spot LQA |
| C8 dual-SKU | GREEN | Dress rehearsal D6 |
| C8 MIGRATE | GREEN | Empty list; FAQ denies carry-over |
| C9 RC smoke | YELLOW | Scheduled Monday AM |
| Output | october_upload_window_allowed: true |
Upload invite Monday PM |
Producer upload-week handoff (after last GREEN Friday)
## October upload handoff
Capstone receipt: …
Last iso_week: 2026-W38
locale_ids: de, en, es, fr, ja, ko
open EXCEPTION-LOC: 004 only
Whisper triage receipt: [multilingual loc triage #12](/blog/whisper-multilingual-playtest-localization-bug-triage-before-string-freeze-strategy-2026) — `multilingual_whisper_loc_triage_ok`
SteamPipe upload log: [depot upload evening #1](/blog/your-first-steampipe-depot-upload-log-build-receipt-before-october-next-fest-upload-one-evening-2026) — `steampipe_upload_ok` + jsonl
SteamPipe owner: …
Store override owner: …
Sign: ______
Attach to SteamPipe ticket so on-call does not re-litigate freeze in chat.
Key takeaways
- Freeze evening ≠ upload permission—run Friday C1–C10 through September.
localization_freeze_capstone_receipt_v1.jsonindexes weekly jsonl annex.- Latch
october_upload_window_allowedonly when C4–C8 GREEN. - C4 couples weekly jq to manifest
locale_ids. - C5 pins manifest hash to disk.
- C6 couples spend + EXCEPTION-LOC post-freeze.
- C8 sweeps cluster cousin latches (dual-SKU, Z, soft, MIGRATE).
- Distinct from March Friday capstone and Thursday content-update.
- Pair freeze #1, jq #8, challenge #4 from same cluster.
- Course 291 forward for one editor milestone.
- Whisper multilingual loc triage #12 closes cluster when triage filed.
- Ten minutes Friday beats upload-week archaeology.
FAQ
Is this the same as freeze evening?
No. Evening latches strings once. Capstone diffs root receipt + weekly annex before upload.
Same as Monday weekly jq?
Monday detects drift. Friday consumes the trail and decides upload window.
Must we run every Friday?
Yes from freeze through upload window—or document skip with producer waiver in next capstone notes.
Can C8 waive MIGRATE RED?
Only if FAQ carry-over removed same week—do not waive with marketing copy unchanged.
Does capstone replace burn worksheet?
No. C6 reads localization_spend_ok; burn owns LR rules.
What if we never ran challenge F1–F5?
C3 allows skip note—challenge is habit, not upload blocker if evening L6 GREEN.
Partner diligence zip contents?
Capstone receipt + weekly jsonl + freeze evening receipt + manifest hash proof.
When is cluster #1–#12 closed?
After Whisper multilingual loc triage #12 publishes and final pre-upload capstone GREEN.
Related reads
- Your First Localization String Freeze Receipt Before October PO Import
- jq Gate Sketch for localization_freeze Weekly Locale Row Diff
- 5-Day Localization Freeze Gate Challenge
- Localization Contractor Burn-Down Cap Worksheet
- Friday March Capstone Closeout Before April Content Update
- Thursday Content Update BUILD_RECEIPT Row Review After Warm Catalog
- Stop Claiming Demo Progress Cloud-Syncs Without MIGRATE Exceptions
- Whisper Multilingual Playtest Localization Bug Triage Before String Freeze — cluster #12 close;
loc_triage_queue[]+ W1–W6 - We Recovered Wrong Steam Default Branch After Localization Capstone GREEN - 2026 Case Study — wrong branch pointer recovery after capstone GREEN
- Friday October Upload Capstone Before Fest Live — downstream capstone that consumes
october_upload_window_allowedand latchesfest_live_allowed
Closing
October upload week is the wrong teacher for stale localization_freeze_ok. Run ten minutes every Friday: diff root rows, index weekly jsonl, sweep cousin latches, file the capstone receipt—then allow the upload window.
Freeze night started the story. Friday capstone finishes it before SteamPipe reads BUILD_RECEIPT.