Localization Contractor Burn-Down Cap Worksheet Before October String Freeze - 2026

August 2026: string freeze evening is on the calendar. LQA quotes a rush weekend. A JP native proofreader wants a second pass after soft-launch comments. Weblate seat upgrades and a CAT-tool plugin invoice land the same week engineering still pays Addressables patch contractors. Monday weekly locale jq shows stable locale_ids—finance still asks why localization burn doubled.
August–September 2026 is the cash collision for October Next Fest string freeze: linguistic QA, translation vendors, and localization tooling arrive while engineering patch float and T-90 press seeding already have their own worksheets. Teams that latch localization_freeze_ok without a spend receipt discover in September that runway for LQA cannot also hire RC smoke coverage.
This Money & Business worksheet caps weekly LQA / vendor / localization-tooling cash before and through freeze—not press/key seeding, not March engineering overtime, not locale identity jq. It delivers a beginner weekly table, gates K1–K6, stop rules LR1–LR5, localization_contractor_burn_receipt_v1.json, and BUILD_RECEIPT localization_spend_ok: true.
Non-repetition note: Press budget owns T-90 creator/press cash (PR1–PR5). March engineering runway owns engineering contractor overtime. Weekly locale jq owns locale ID/hash honesty. Freeze evening owns L1–L6 string latch. This URL owns localization labor + tooling cash caps toward October freeze.
Pair press budget, March engineering runway, freeze evening, weekly locale jq, Resource #56 forward.
Why this matters now (August 2026 → October freeze)
- LQA looks like “one invoice” until rush weekends stack with vendor revisions.
- Engineering float is not localization float — Patch contractors and translators compete for the same bank remainder.
- Freeze without a cash cap — L6 can GREEN while invoices keep reopening “tiny” string weekends.
- Press caps do not cover LQA — PR stop rules pause seeding; they do not pause linguistic vendors.
- Weekly locale jq is identity, not invoices — Stable
locale_idscan still hide a doubled burn rate.
Direct answer: Fill the weekly LQA / vendor / tooling cap table from freeze-minus-six weeks through freeze-plus-two, wire LR1–LR5, file localization_contractor_burn_receipt_v1.json with K1–K6 GREEN, set localization_spend_ok: true before authorizing rush LQA or new vendor purchase orders.
Who this worksheet is for
| Audience | Outcome |
|---|---|
| Solo founder | Printable weekly caps you can refuse in Slack |
| Producer | Receipt proving rush LQA paused when freeze/weekly RED |
| Working finance/eng lead | localization_spend_ok beside press and eng runway columns |
Time: ~55–70 minutes first worksheet; ~12 minutes each Sunday for actual_spend_usd.
Prerequisites: Freeze date target; vendor quote estimates; engineering float estimate (March runway style); press pool awareness (press budget).
Format ladder
| Artifact | Role |
|---|---|
| Freeze evening | String latch L1–L6 |
| Weekly locale jq | Locale identity Mondays |
| This worksheet | Localization cash caps |
| Press budget | Press/key cash cousin |
| March engineering runway | Eng overtime cousin |
| Resource #56 forward | Vendor/tool bookmarks |
Order: Locale claims decided → spend worksheet → freeze evening → weekly jq → paid LQA only while spend OK.
Beginner path — weekly LQA / vendor / tooling table
Copy into release-evidence/localization/localization-contractor-burn-2026.md:
| Week label | Approx start | Weekly loc pool (USD) | LQA / linguistic QA | Translation vendor | Tooling / seats | Eng float note | Stop rule |
|---|---|---|---|---|---|---|---|
| F-6 | ~2026-07-14 | $400 | $150 | $150 | $100 | Do not raid patch float | LR1 |
| F-5 | ~2026-07-21 | $500 | $200 | $200 | $100 | — | LR2 |
| F-4 | ~2026-07-28 | $600 | $250 | $250 | $100 | Soft-launch prep | LR3 |
| F-3 | ~2026-08-04 | $700 | $300 | $300 | $100 | — | LR3 |
| F-2 | ~2026-08-11 | $800 | $350 | $350 | $100 | Final vendor pass | LR4 |
| F-1 | ~2026-08-18 | $400 | $200 | $100 | $100 | Freeze week—tighten | LR4 |
| F0 | freeze night | $100 | $50 | $0 | $50 | Exception LQA only | LR5 |
| F+1 | ~2026-08-25 | $150 | $100 | $0 | $50 | Hotfix LQA only | LR5 |
| F+2 | ~2026-09-01 | $100 | $50 | $0 | $50 | No new PO without re-freeze | LR5 |
Beginner rule: lqa_usd + vendor_usd + tooling_usd ≤ weekly_loc_pool. Founder unpaid evenings do not erase vendor invoices—still log cash columns honestly.
Success check: Each week has one localization outcome (e.g., “DE+FR LQA sign-off”) and one engineering outcome (e.g., “patch float invoice true”)—not simultaneous vanity language adds.
What counts toward the weekly loc pool
| Counts | Does not count (track elsewhere) |
|---|---|
| LQA / linguistic review invoices | Steam keys / press seeding (press budget) |
| Translation / editing vendor POs | Addressables / eng contractors (March runway) |
| Weblate/Crowdin seat upgrades for freeze | Year-round engine licenses |
| CAT tool plugins bought for this freeze | Capsule art contractor (art float—separate note) |
| Emergency weekend rush fees | Founder salary |
Quasi-paid: “Friend discounts” still need a USD estimate in actual_spend_usd so burn-down stays honest.
Developer path — gates K1–K6
| Gate | Pass criterion |
|---|---|
| K1 | Weekly table covers F-6 through F+2 with caps filled |
| K2 | Sum of weekly pools ≤ localization_pool_ceiling_usd |
| K3 | Engineering float reserved—engineering_patch_float_usd not zeroed by LQA |
| K4 | Stop rules LR1–LR5 wired to freeze / weekly jq / soft-launch / press pointers |
| K5 | localization_contractor_burn_receipt_v1.json under release-evidence/localization/ |
| K6 | BUILD_RECEIPT localization_spend_ok: true; no rush PO while RED |
Stop rules LR1–LR5
| ID | Trigger | Action |
|---|---|---|
| LR1 | localization_freeze_ok missing and week ≥ F-3 |
Cap new vendor POs at $0; finish evening latch first (tools/LQA prep OK) |
| LR2 | localization_freeze_weekly_ok RED (prior Monday) |
Pause rush LQA; fix locale identity (weekly jq) |
| LR3 | Soft-launch G gates RED while buying “soft languages” | No paid expansion of locale list (soft-launch) |
| LR4 | Engineering patch float burn > planned weekly | Freeze new LQA POs; invoice eng truth first (March runway) |
| LR5 | Week ≥ F0 without EXCEPTION-LOC note for post-freeze work | Hard-zero vendor; exception LQA only with numbered note |
Honest limit: LR rules are studio policy in receipts—not Steam or Weblate laws. Document waivers with producer sign-off.
localization_contractor_burn_receipt_v1.json
{
"schema": "localization_contractor_burn_receipt_v1",
"freeze_target_utc": "2026-08-25T18:00:00Z",
"localization_pool_ceiling_usd": 4200,
"engineering_patch_float_usd": 6000,
"press_pool_note": "see october_t90_press_budget_receipt_v1 — orthogonal",
"weeks": [
{
"label": "F-6",
"start": "2026-07-14",
"weekly_loc_pool_usd": 400,
"lqa_usd": 150,
"vendor_usd": 150,
"tooling_usd": 100,
"actual_spend_usd": 380,
"stop_rule": "LR1"
},
{
"label": "F-2",
"start": "2026-08-11",
"weekly_loc_pool_usd": 800,
"lqa_usd": 350,
"vendor_usd": 350,
"tooling_usd": 100,
"actual_spend_usd": 790,
"stop_rule": "LR4"
},
{
"label": "F0",
"start": "2026-08-25",
"weekly_loc_pool_usd": 100,
"lqa_usd": 50,
"vendor_usd": 0,
"tooling_usd": 50,
"actual_spend_usd": 40,
"stop_rule": "LR5"
}
],
"stop_rules": [
{
"id": "LR1",
"wired_to": "localization_freeze_ok",
"active": false
},
{
"id": "LR2",
"wired_to": "localization_freeze_weekly_ok",
"active": false
},
{
"id": "LR3",
"wired_to": "soft_launch_window_ok",
"active": false
},
{
"id": "LR4",
"wired_to": "engineering_patch_float",
"active": false
},
{
"id": "LR5",
"wired_to": "EXCEPTION-LOC series",
"active": true
}
],
"gates": {
"K1": "GREEN",
"K2": "GREEN",
"K3": "GREEN",
"K4": "GREEN",
"K5": "GREEN",
"K6": "GREEN"
},
"localization_spend_ok": true,
"notes": "F-2 vendor final; F0 exception LQA only; press seeding untouched"
}
BUILD_RECEIPT:
{
"localization_freeze_ok": true,
"localization_freeze_weekly_ok": true,
"localization_spend_ok": true,
"localization_contractor_burn_receipt": "release-evidence/localization/localization_contractor_burn_receipt_v1.json",
"press_budget_ok": true,
"engineering_runway_ok": true
}
Three cash latches can be green together—orthogonal columns. Raid warnings live in LR4 / PR4 cousins.
verify_localization_spend.sh
#!/usr/bin/env bash
set -euo pipefail
R="${1:-release-evidence/localization/localization_contractor_burn_receipt_v1.json}"
jq -e '.schema == "localization_contractor_burn_receipt_v1"' "$R" >/dev/null
jq -e '.localization_spend_ok == true' "$R" >/dev/null
for g in K1 K2 K3 K4 K5 K6; do
test "$(jq -r --arg g "$g" '.gates[$g]' "$R")" = "GREEN"
done
# Sum weekly pools vs ceiling
SUM=$(jq '[.weeks[].weekly_loc_pool_usd] | add' "$R")
CEIL=$(jq -r .localization_pool_ceiling_usd "$R")
python - <<PY
s=float("$SUM"); c=float("$CEIL")
assert s <= c + 1e-6, (s, c)
print("pool_ok", s, "<=", c)
PY
echo "localization_spend_ok"
Proof table
| Artifact | Proves | Does not prove |
|---|---|---|
| Weekly loc table | Planned cash by week | Translation quality |
| LR stop rules | When POs must pause | Store chrome art OK |
| Spend receipt | Diligence cash honesty | Locale set identity |
| Weekly jq | Locale IDs/hashes | Invoice truth |
| Freeze L6 | Strings locked that night | Post-freeze LQA budget |
Worked example (micro-studio)
| Week | Plan | Actual | Notes |
|---|---|---|---|
| F-6 | $400 | $380 | Weblate seats + DE LQA sample |
| F-4 | $600 | $720 | Fail K week — vendor sneak PO; fire LR4 style review |
| F-4 recovery | replan +$0 next tooling | claw back plugin deferral | Receipt notes amended |
| F-2 | $800 | $790 | Final JA/KO vendor |
| F0 | $100 | $40 | EXCEPTION-LOC-004 spot check only |
When F-4 overran, producer paused press seeding that week too—optional courtesy, not required by LR rules. Press has its own PR4.
Scenarios A–G
A — Rush LQA before freeze evening
LR1: no new vendor PO until localization_freeze_ok (or waiver). Prep LQA scripts OK.
B — Weekly jq RED, LQA invoice arrives
LR2: pause rush; fix locale identity first.
C — Soft-launch wants Catalan “for ads only”
LR3 + freeze L1 honesty: either re-freeze with budget for Catalan or refuse. Do not spend without manifest claim.
D — Eng float burns; LQA still green week
LR4: freeze new LQA POs until eng invoice truth—even if freeze nightly GREEN.
E — Press budget RED, loc spend GREEN
Allowed. Orthogonal. Do not clear localization_spend_ok because PR1 fired.
F — Post-freeze string exception weekend
LR5: only with EXCEPTION-LOC note; vendor $0; capped LQA.
G — Capsule typography art hire
Out of this pool—track art float separately; still respect eng/press floors.
Common mistakes
- Mixing press seeding fees into
lqa_usd. - Calling founder evenings “zero burn” while vendors invoice.
- Authorizing Friday rush POs without Sunday
actual_spend_usdupdate. - Raiding engineering float because “loc is also engineering.”
- Treating weekly locale jq GREEN as permission for unlimited LQA.
- Opening Weblate seats forever after freeze without capping tooling weeks.
- Waiving LR5 verbally without EXCEPTION-LOC file.
Troubleshooting
“Vendor quoted after freeze date.” Either EXCEPTION-LOC + F+ weeks, or refuse and ship frozen set.
“LQA found blocking bugs.” Engineering fix cash ≠ LQA cash—may need eng runway hours; don’t silently expand vendor without K2 replan.
“Only one person owns Slack approvals.” Put producer name on receipt notes; unverified DMs aren’t stop rules.
“Currency FX.” Log invoice currency + USD estimate; pick one reporting currency for ceiling math.
Schedule pairing
| When | Action |
|---|---|
| F-6 | Start table + ceiling |
| Before paid LQA | K1–K6 draft GREEN |
| Freeze week | LR5 mindset; exception only |
| Soft-launch overlap | LR3 vs language expansion |
| Sundays | actual_spend_usd update |
Evidence folder layout
release-evidence/localization/
localization-contractor-burn-2026.md
localization_contractor_burn_receipt_v1.json
exceptions/
EXCEPTION-LOC-004.md
2026-08-25/
localization_freeze_receipt_v1.json
localization_freeze_weekly_log.jsonl
Cash lane comparison (do not merge receipts)
| Lane | Receipt | Stop prefix | Latch |
|---|---|---|---|
| Press / keys | october_t90_press_budget_receipt_v1 |
PR | press_budget_ok |
| Engineering overtime | march_engineering_runway_receipt_v1 |
(eng) | engineering_runway_ok |
| Localization labor | localization_contractor_burn_receipt_v1 |
LR | localization_spend_ok |
| Locale identity | weekly freeze jq | J | localization_freeze_weekly_ok |
Producer Monday 12-minute ritual
- Open burn receipt; update prior week
actual_spend_usd. - Check weekly jq latch (LR2).
- Check eng float remaining (LR4).
- Approve or reject any new LQA/vendor Slack requests against this week’s pool.
- If F0 or later, require EXCEPTION-LOC number before any spend.
Micro-studio capacity
| Team | Approach |
|---|---|
| Solo | One spreadsheet tab + receipt JSON; refuse Friday rushes without Sunday numbers |
| 2–3 | Producer owns LR; eng owns float; loc lead owns vendor queue |
| With LQA vendor | Cap revisions in PO; receipt lists included passes |
Purchase-order wording (copy stubs)
Vendor PO (pre-freeze):
Scope: translation + one LQA pass for locales {list} against freeze candidate branch {label}.
Included revisions: 1.
Rush weekend surcharge: requires producer written OK + receipt week label.
Out of scope: new locales, store marketing fluff not in locale_manifest, art lockups.
Payment: net 15 after LQA sign PDF attached to release-evidence/localization/vendors/.
LQA-only PO (F-1 / F0 exception):
Scope: linguistic bug verification for EXCEPTION-LOC-{nnn} string list only.
Max hours: {n}. Max USD: {cap from weekly pool}.
No license to reopen Weblate for unrelated keys.
Waiver template (when RED must proceed)
# LOC spend waiver
Date:
Stop rule overridden: LR{1-5}
Why (one sentence):
USD authorized this week:
Producer sign:
Eng float acknowledged (Y/N):
Press pool raided (must be N):
Follow-up Monday:
Store waivers beside the receipt. Verbal Slack “just this once” is how ceilings die.
Soft-launch language expansion vs burn-down
Soft ads that imply languages not in the freeze manifest create two bills: art/typography (capsule pass) and vendor/LQA. LR3 stops the PO; soft-launch G gates stop the ad. Paying for Catalan creatives without Catalan in locale_manifest is spend leakage—even if LQA never invoices.
Cap recovery after overrun
- Freeze new POs (treat as LR4 active).
- Amend receipt
noteswith overrun USD and cause. - Cut next week’s tooling or vendor column—not eng float.
- Optionally pause press seeding for courtesy only.
- Recompute K2; do not silently raise ceiling without documenting tradeoffs against October RC smoke hire.
Pair freeze challenge habit week
During freeze challenge F1–F5, keep Sunday actuals. Challenge habits without burn numbers still explode Friday rush fees.
Shared bank remainder — three-lane sketch
Before F-6, write one diligence line:
Bank remainder after hard commitments: $_____
Engineering patch float reserved: $_____
Press pool ceiling (T-90 worksheet): $_____
Localization pool ceiling (this worksheet): $_____
Unallocated buffer (RC smoke / surprises): $_____
Check: eng + press + loc + buffer ≤ remainder
If the inequality fails, cut locale claims or seeding ambitions before signing vendor POs. Freeze evening cannot invent cash.
Invoice naming convention
Name vendor PDFs YYYY-MM-DD_vendor_locale-or-scope_usd.pdf under release-evidence/localization/vendors/. Link filenames from weekly notes. Accountants and future-you both fail when Slack screenshots are the only trail. If accounting uses another folder, symlink or duplicate the path string into the receipt so diligence zips stay self-contained.
FAQ
Does freeze evening include spend caps?
No. Evening locks strings. This worksheet locks cash around that lock.
Same as press budget K gates?
Same letter K rhythm; different receipt, stop prefix LR, latch localization_spend_ok.
Can we spend LQA after freeze?
Only under LR5 + numbered exception—prefer planning F-2 as final vendor pass.
What if ceiling is too low for claimed locales?
Reduce locale claims in locale_manifest before freeze—or raise ceiling with eng/press acknowledged tradeoffs. Do not silently overrun.
Do Weblate annual seats count?
Only the upgrade attributable to this freeze window in tooling weeks; year-round base may live in ops budget—document the split.
Resource #56?
Forward tool/bookmark list for vendors and LQA checklists—format ladder, not a cash latch.
How does this pair weekly jq?
jq = identity; spend = invoices. Run both Mondays in freeze season.
When is the worksheet done?
K1–K6 GREEN, ceiling respected, LR wired, localization_spend_ok latched, actuals filled through F+2.
Key takeaways
- August LQA spikes collide with eng patch float—cap localization cash separately.
- Weekly LQA / vendor / tooling table from F-6 through F+2.
- Gates K1–K6 on
localization_contractor_burn_receipt_v1.json. - Stop rules LR1–LR5 couple freeze, weekly jq, soft-launch, eng float, exceptions.
- Latch
localization_spend_okorthogonal to press and eng runway. - Weekly locale jq GREEN ≠ unlimited LQA permission.
- Post-freeze spend needs EXCEPTION-LOC notes (LR5).
- Do not mix press seeding into loc pool columns.
- Reduce locale claims if ceiling cannot fund quality—not silent overruns.
- Pair press budget + March runway cousins; keep three receipts.
- Sundays update
actual_spend_usdor Monday approvals lie. - Resource #56 forward for tools; this URL owns cash discipline.
Related reads
- Creator Key and Press Budget Cap Worksheet Before October Fest Outreach
- March Engineering Cash Runway Worksheet After February Contractor Overtime
- 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
- August 2026 Soft-Launch Windows Before October Next Fest
- January Marketing Spend Cap Worksheet
- 18 Free Localization QA Tools for Indie Teams
Closing
String freeze without a spend ceiling is how soft-launch weekends quietly bankrupt October RC week. Cap LQA, vendor, and tooling cash up front; wire LR1–LR5; file localization_contractor_burn_receipt_v1.json; keep press and engineering receipts in their own lanes.
When someone asks for “one more rush linguistic pass,” the worksheet has an answer: in-pool, exception-only, or no.