Challenges & Community Hooks Jul 15, 2026

5-Day Localization Freeze Gate Challenge Before October Next Fest - 2026

2026 five-day localization freeze gate challenge for October Next Fest—F1–F5 daily rituals, printable card, localization_freeze_challenge_receipt_v1.json, BUILD_RECEIPT localization_freeze_challenge_ok.

By GamineAI Team

5-Day Localization Freeze Gate Challenge Before October Next Fest - 2026

Pixel-art hero for five-day localization freeze gate challenge before October Next Fest 2026

Late August 2026: Weblate still accepts commits after someone declared “strings frozen,” translators push one more polish pass, and October Next Fest depot lock is three weeks out. Day 2 someone merges a fuzzy-heavy JA component. Day 4 Steam Supported languages still lists Korean while Preferences only shows English. Day 5 engineering asks whether localization_freeze_ok is real—or only a Slack emoji.

You already have (or should have) the one-evening localization string freeze receipt with gates L1–L6. That tutorial builds the latch once. This Challenges & Community Hooks post is the five-day public ritual that stops “one more string” from reopening the blast radius—gates F1–F5, file localization_freeze_challenge_receipt_v1.json, latch BUILD_RECEIPT localization_freeze_challenge_ok: true, share tag #LocFreeze2026.

Non-repetition note: Freeze evening owns L1–L6 / localization_freeze_ok. 18 free localization QA tools owns validators. 7-day Ren'Py label/asset freeze owns Ren'Py assets and build labels. 5-day Summer Sale store response owns sale-week hub rituals. This URL owns the string-freeze accountability ladder—five days of community-facing stop rules before October depot lock—not another Addressables Invalid Key week.

Pair freeze evening #1, Weblate merge-conflict help, Ren'Py language selector evening, forward Course 289, forward blog #8 weekly jq locale diff and #11 Friday freeze capstone.

Why this matters now (late August → October 2026)

  1. Verbal freeze fails under October pressure. Upload queues punish teams that rediscover missing locales after SteamPipe starts.
  2. One evening receipt is necessary but not social. Solo leads still reopen Weblate write access after L6 for “just one string.” A five-day challenge makes the stop rule visible.
  3. Fest copy claims languages. Supported languages rows without Preferences proof create refund threads—F4 exists for that.
  4. PO import reopenings are the failure mode. Silent nightly CI that pulls latest Weblate after freeze undoes L2—F3 checks import locks.
  5. Capstone precedes Friday row review. Forward #11 Friday localization freeze capstone should consume a finished challenge receipt, not invent F-gates mid-meeting.

Direct answer: Five days (~25–40 minutes each); gates F1–F5; artifacts under release-evidence/localization/loc-freeze-challenge-2026/; file localization_freeze_challenge_receipt_v1.json; do not claim string freeze closed for October until localization_freeze_challenge_ok: true on BUILD_RECEIPT and the underlying evening receipt still shows localization_freeze_ok: true.

Who this challenge is for

Audience You will…
Beginner Follow one gate per day with a printable card—no guessing Weblate menus
Solo founder Devlog five checklists with #LocFreeze2026
Producer Block “strings are frozen” marketing until F5 GREEN
Working dev Wire write-access close, PO import lock, and challenge receipt beside L1–L6

Prerequisites: TMS access (Weblate preferred); draft or finished freeze evening receipt; installed or RC build for smoke; Steam Supported languages editable.
Time: ~2.5–3 hours total across five days (first challenge); ~90 minutes when repeating next fest.

Challenge vs cousins (format ladder)

Artifact Role
Freeze evening L1–L6 Author the freeze latch once
Localization QA tools Validators / TMS helpers
Ren'Py asset freeze challenge Engine asset/label freeze week
Metadata freeze challenge Store metadata fields
This challenge 5-day string-freeze stop ritual
Forward #8 jq weekly Monday locale hash honesty after challenge
Forward #11 Friday capstone Promotion row review latch

Order: Run or refresh freeze evening so L1–L2 exist → start Day 1 challenge → finish F5 → schedule weekly jq (#8) → Friday capstone (#11) before October upload window.

Rules of the challenge

  1. One owner signs each day (day_N_pass in receipt).
  2. Fail stops the ladder—do not advertise CN/JP/KR on Day 5 if Day 2 write-access is still open.
  3. One freeze-truth artifact per day—manifest lock, write-close proof, import lock, parity smoke, or capstone—documented with path + sha256.
  4. Exception reopenings require a new freeze evening receipt; do not edit old L2 timestamps in place.
  5. Post daily progress with #LocFreeze2026.
  6. Hotfix that adds user-visible strings mid-challenge restarts from Day 2 (write-access + import).
  7. Producer blocks “localization frozen for Next Fest” claims until F5 receipt filed.

Five-day calendar at a glance

Day Gate Primary ritual Evidence focus
Day 1 F1 Lock locale manifest + announce challenge locale_manifest_v1.json frozen list
Day 2 F2 Close TMS writes + pin revision Write-access closed + commit hash
Day 3 F3 Lock PO/XLIFF import paths CI import disabled / post_freeze_po_import_allowed: false
Day 4 F4 Store ↔ in-game parity smoke EN + two fest locales installed smoke
Day 5 F5 Capstone receipt + BUILD_RECEIPT latch Challenge receipt + both OK flags

Printable card #LocFreeze2026

#LocFreeze2026 — 5-Day Localization Freeze Gate Challenge

Day 1 F1 [ ] locale_manifest locked + challenge announced
Day 2 F2 [ ] Weblate/TMS writes CLOSED + revision pinned
Day 3 F3 [ ] PO import automation LOCKED (no silent latest pull)
Day 4 F4 [ ] Store languages match Preferences; smoke screenshots filed
Day 5 F5 [ ] challenge receipt filed; localization_freeze_challenge_ok = true

Owner: ____________  Start UTC: ____________
Underlying evening receipt path: ____________
Exception ticket (if any): ____________

Pin the card in release-evidence/localization/loc-freeze-challenge-2026/PRINTABLE.txt.

Day 1 — F1 locale manifest lock + public start

Goal: make the in-scope language list non-negotiable and announce the challenge so “one more string” has a social cost.

Beginner steps (25 minutes)

  1. Open or create locale_manifest_v1.json from the freeze evening Block 1.
  2. Confirm every store_claim: true locale has an owner.
  3. Set challenge_start_utc and hashtag: "LocFreeze2026".
  4. Post a short team note: “String freeze challenge Day 1—locales locked, writes close tomorrow.”

Developer evidence

{
  "day": 1,
  "gate": "F1",
  "locale_manifest": "release-evidence/localization/2026-08-25/locale_manifest_v1.json",
  "locale_count_in_scope": 4,
  "announcement_path": "release-evidence/localization/loc-freeze-challenge-2026/day1-announce.md",
  "day_1_pass": true,
  "owner": "release-owner"
}

Pass: Manifest committed or archived; announcement timestamped; count matches store intents.
Fail: French still “maybe” without an owner; stop before Day 2.

Common mistake: Starting Day 2 write-close without knowing which locales are in scope.

Day 2 — F2 close writes and pin revision

Goal: turn L2 into a documented social freeze—writers cannot push after tonight without exception tickets.

Beginner steps (30 minutes)

  1. In Weblate (or Crowdin), set fest components to read-only / disable translator write access.
  2. Record the revision / commit hash exactly as in freeze evening L2.
  3. Screenshot the access settings into day2-write-closed.png.
  4. If merge conflicts block the pin, run Weblate merge-conflict help before claiming F2 PASS.

Developer evidence

{
  "day": 2,
  "gate": "F2",
  "tms_revision": "a1b2c3d4e5f678901234567890abcdef12345678",
  "write_access_closed": true,
  "closed_utc": "2026-08-26T18:00:00Z",
  "screenshot": "release-evidence/localization/loc-freeze-challenge-2026/day2-write-closed.png",
  "day_2_pass": true
}

Pass: write_access_closed: true with hash matching evening receipt.
Fail: “We asked people not to push” without technical close.

Outbound: Weblate docs on access control—use your instance’s equivalent.

Day 3 — F3 lock PO import reopenings

Goal: stop CI from silently undoing the freeze by importing latest every night.

Beginner steps (30 minutes)

  1. Find every job that syncs Weblate → game repo (GitHub Actions, cron, local scripts).
  2. Disable or gate them on post_freeze_po_import_allowed == true (should be false after freeze evening L6).
  3. Add a CI comment: “#LocFreeze2026 Day 3—imports locked until new freeze receipt.”
  4. Commit the workflow change; archive a workflow YAML snippet as evidence.

Developer evidence

{
  "day": 3,
  "gate": "F3",
  "post_freeze_po_import_allowed": false,
  "ci_jobs_locked": [
    "weblate-sync.yml",
    "nightly-po-pull.yml"
  ],
  "workflow_evidence": "release-evidence/localization/loc-freeze-challenge-2026/day3-ci-lock.diff",
  "day_3_pass": true
}

Pass: Import automation cannot run without flipping an explicit flag that also requires a new evening receipt.
Fail: Manual “don’t click import” only.

Pair: Engine import still allowed once from the pinned Day 2 export (Ren'Py / Unity / Godot)—that is a controlled import of frozen bytes, not latest TMS.

Day 4 — F4 store ↔ game parity smoke

Goal: prove players can switch every claimed fest locale on an installed build.

Beginner steps (40 minutes)

  1. Confirm Steam Supported languages match locale_manifest store claims (freeze evening L4).
  2. Boot installed build for en + two fest locales (typically ja and zh-Hans).
  3. Capture main-menu screenshots into smoke/.
  4. If Preferences empty after PO, follow Ren'Py selector evening or Unity String Tables help—keep F4 RED until fixed.

Developer evidence

{
  "day": 4,
  "gate": "F4",
  "store_parity_doc": "release-evidence/localization/2026-08-25/store_language_parity.md",
  "smoke_locales": ["en", "ja", "zh-Hans"],
  "smoke_dir": "release-evidence/localization/loc-freeze-challenge-2026/smoke",
  "day_4_pass": true
}

Pass: Store claims ⊆ Preferences list; smoke screenshots + log prove no English-only selector.
Fail: Store claims Korean; build cannot select it.

Official reference: Steamworks supported languages.

Day 5 — F5 capstone challenge receipt

Goal: file the challenge receipt and latch BUILD_RECEIPT so marketing and upload owners share one green flag.

Beginner steps (30 minutes)

  1. Assemble localization_freeze_challenge_receipt_v1.json from Days 1–4.
  2. Confirm evening receipt still has localization_freeze_ok: true and matching TMS revision.
  3. Set localization_freeze_challenge_ok: true only if F1–F5 all PASS.
  4. Post final #LocFreeze2026 Day 5 note with receipt path.

Capstone JSON

{
  "schema": "localization_freeze_challenge_receipt_v1",
  "hashtag": "LocFreeze2026",
  "challenge_start_utc": "2026-08-25T17:00:00Z",
  "challenge_end_utc": "2026-08-29T19:00:00Z",
  "evening_freeze_receipt": "release-evidence/localization/2026-08-25/localization_freeze_receipt_v1.json",
  "gates": {
    "F1": "PASS",
    "F2": "PASS",
    "F3": "PASS",
    "F4": "PASS",
    "F5": "PASS"
  },
  "days": {},
  "localization_freeze_challenge_ok": true,
  "next_forward": [
    "jq weekly locale row diff blog #8",
    "Friday localization freeze capstone blog #11"
  ]
}

BUILD_RECEIPT crosswalk

{
  "localization_freeze_ok": true,
  "localization_freeze_challenge_ok": true,
  "localization_freeze_challenge_receipt": "release-evidence/localization/loc-freeze-challenge-2026/localization_freeze_challenge_receipt_v1.json"
}

Pass: Both OK flags true; paths resolve; no open exception without owner/expiry.
Fail: Challenge GREEN while evening L2 write-access silently reopened—fail F5 and restart Day 2.

verify_localization_freeze_challenge.sh

#!/usr/bin/env bash
set -euo pipefail
R="${1:-release-evidence/localization/loc-freeze-challenge-2026/localization_freeze_challenge_receipt_v1.json}"
test "$(jq -r .localization_freeze_challenge_ok "$R")" = "true"
for g in F1 F2 F3 F4 F5; do
  test "$(jq -r ".gates.$g" "$R")" = "PASS"
done
E=$(jq -r .evening_freeze_receipt "$R")
test "$(jq -r .localization_freeze_ok "$E")" = "true"
test "$(jq -r .write_access_closed "$E")" = "true"
echo "localization_freeze_challenge_ok"

Proof table

Artifact Proves Does not prove
Day 1 announcement Social start + scope Translation quality
Day 2 write-close TMS cannot accept new strings Engine selector wiring
Day 3 CI lock No silent latest import One-time frozen import quality
Day 4 smoke Claimed languages boot Every dialogue line polished
Day 5 challenge OK Ritual complete Forever freeze if writes reopen
Evening L1–L6 Authoritative freeze latch Five-day accountability

Scenarios A–G

A - Translator asks for one typo fix on Day 3

Open exception ticket; reopen writes briefly; produce new evening freeze receipt; restart challenge from Day 2. Do not skip F3.

B - CI still pulled PO overnight

Fail F3. Fix workflow. Re-hash Day 2 export. Treat Day 4 smoke as invalid until re-imported from pinned revision.

C - Store lists more languages than Preferences

Fail F4. Remove store claims or finish selector wiring before Day 5.

D - Only Unity String Tables broken

Keep F4 RED; use Unity string tables help; challenge waits.

E - Team wants to skip to Day 5 because “evening receipt exists”

Fail. Challenge exists to prove days 2–4 behaviors stayed locked after the evening.

F - Ren'Py asset freeze week overlaps

Run Ren'Py freeze challenge for assets/labels separately; keep string F-gates here. Share calendar, do not merge receipts.

G - October upload tomorrow and challenge unfinished

Do not invent F5. Delay language claims or slip upload—false GREEN is worse than one day late.

Common mistakes

  • Treating #LocFreeze2026 posts as evidence without JSON.
  • Closing Slack mentions but leaving Weblate writable.
  • Allowing nightly PO sync after Day 2.
  • Smoking Editor Play Mode for F4.
  • Setting challenge OK without evening localization_freeze_ok.
  • Editing Day 1–4 JSON in place after a mid-week reopen.
  • Confusing this with metadata freeze.
  • Confusing this with Summer Sale hub rituals.

Troubleshooting

“Weblate percent is 100% but Day 4 fails.” Percent ≠ selector. Check Preference entries and clean builds.

“Do we need five calendar days?” Prefer five calendar days for social accountability. Solo studios may compress to five focused blocks in two days if each gate still produces dated artifacts—do not skip F3.

“Crowdin instead of Weblate.” Same F2/F3: pin revision, close writes, lock sync jobs.

“What about age rating and dual-SKU?” Separate gates: IARC packet tools and dual-depot dress rehearsal. Soft-launch trend (forward #6) will want all three green.

Scoring sheet (producer-visible)

Use this when someone asks “are we frozen enough for October?” without reading JSON.

Gate Weight GREEN means RED means
F1 15% Manifest locked + challenge started Locale list still “TBD”
F2 25% Writes closed + revision pinned Honor-system freeze only
F3 25% Import jobs cannot pull latest Nightly sync still armed
F4 20% Store claims match installed Preferences smoke English-only selector or overclaim
F5 15% Challenge receipt + both BUILD_RECEIPT OK flags Marketing claim without files

Rule: any RED gate = overall RED. Partial points do not unlock language marketing. Print alongside the #LocFreeze2026 card.

Sample Day 1 announcement (copy/paste)

#LocFreeze2026 Day 1 — F1 PASS
Locales in scope: en, zh-Hans, ja, ko
Out of scope (not on Steam claims this build): fr, de
Writes close tomorrow (Day 2). PO imports lock Day 3.
Evening freeze receipt: release-evidence/localization/2026-08-25/localization_freeze_receipt_v1.json
Owner: @release-owner

Keep the announcement short. The receipt paths are the product; the hashtag is the stop rule made visible.

Honest limits

This challenge does not:

  • Grade translation quality or LQA linguistic review
  • Replace console board submissions or physical PEGI paperwork
  • Freeze store capsules typography (forward multilingual capsule art #7)
  • Prove dual-SKU build parity (dress rehearsal)

It only proves your string surface cannot quietly reopen before October depot lock.

Schedule pairing

When Pair
Before Day 1 Freeze evening L1–L6
Day 2 fire Weblate conflict help
Day 4 selector fail Ren'Py language evening
After F5 Forward #8 jq weekly locale diff
Friday before upload Forward #11 Friday freeze capstone
Tools refresh 18 free localization QA

Key takeaways

  1. Late August 2026 needs a public five-day stop ritual, not only a one-evening freeze JSON.
  2. F1 locks the locale manifest and announces #LocFreeze2026.
  3. F2 closes TMS writes and pins revision—hope is not a gate.
  4. F3 locks PO import automation so latest cannot sneak in.
  5. F4 proves store ↔ Preferences parity on an installed build.
  6. F5 files localization_freeze_challenge_receipt_v1.json and sets localization_freeze_challenge_ok.
  7. Challenge OK requires evening localization_freeze_ok still true.
  8. Exception reopenings restart from Day 2 with a new evening receipt.
  9. Distinct from Ren'Py asset freeze, metadata freeze, and Summer Sale hub challenges.
  10. Forward weekly jq (#8) and Friday capstone (#11) consume this receipt.
  11. Fail stops the ladder—do not advertise languages on Day 5 if Day 2 failed.
  12. Print the card; read it aloud before each day’s claim.

FAQ

What is the localization freeze gate challenge?

A five-day accountability ladder that keeps string freeze honest before October Next Fest depot lock—manifest lock, write-close, import lock, parity smoke, and capstone receipt—using #LocFreeze2026.

How is this different from the freeze evening tutorial?

The evening tutorial authors L1–L6 once. This challenge proves five consecutive days that writes and imports stayed closed and parity still holds.

Can we skip days if we already froze?

No. Skipping Day 3 is how nightly CI reopens the freeze. Compress duration if needed; do not skip gates.

Does #LocFreeze2026 require a public social post?

A team channel or short public note both work. The point is dated social accountability—not engagement metrics.

What if we use Crowdin or Lokalise?

Keep F1–F5. Map “revision pin” and “write closed” to that product’s controls.

Must F4 cover all claimed locales?

Smoke at least EN + two fest locales for the challenge; A/B locales should match your highest-risk claims. Still require store parity table for all claimed locales.

How does this relate to localization contractor spend?

Money worksheet (forward #9) caps cash; this challenge caps string reopenings. Run both in August.

When is the challenge “done”?

When F5 PASS, both BUILD_RECEIPT OK flags are true, and verifier scripts agree—marketing may then claim freeze.

What if engineering ships a zero-string hotfix mid-challenge?

Code-only hotfixes without user-visible string keys may continue under documented exception—but any new UI copy, tooltip, tutorial line, or store localization string restarts Day 2. File the exception ID in Day notes so F5 cannot claim silence when strings changed.

Who owns the Day 3 CI lock if we have no dedicated build engineer?

The challenge owner. Disabling a nightly Weblate sync is a producer-scale change. Prefer a pull request that gates the job on post_freeze_po_import_allowed rather than deleting the workflow forever—future fest cycles need the import path after a clean new freeze.

Related reads

Closing

October depot lock is the wrong week to learn Weblate was still writable. Run the five-day ladder: lock the list, close writes, kill silent imports, smoke claimed languages, file the challenge receipt—and only then let marketing say strings are frozen.

#LocFreeze2026 is not a meme first. It is a stop rule with dates, owners, and JSON. Pair it with the evening latch, then hand the pack to weekly jq and Friday capstone before Next Fest upload peak.