v0.259.0 — the claim page and the backup warnings answer in the reader's language (R-596, R-598)
gates / gates (push) Successful in 28s

The 2026-09-20 English drill ended one screen short: the claim page was English
and its answers were Hungarian, so a household who mistyped the code from their
e-mail could not tell a typo from a dead code. Fourteen call sites carrying nine
messages now go through s.msg; the backup page's two protection warnings — which
are promises about whether the customer's files are safe — follow the same route.

Hungarian is byte-identical, proved structurally by the go-parity gate against the
frozen base capture and red-proofed on a single added full stop.

data["Title"] was DEAD (claim.html is standalone; .Title is layout.html's) and is
deleted rather than translated — a translated dead field is a permanent false
signal about where the page's title comes from.

Six existing copy-contract tests were kept, not weakened: each now resolves its key
through the real bundle, so it still convicts on a reworded Hungarian sentence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-21 07:45:56 +02:00
parent f6909492cc
commit 0fe04bb6d5
15 changed files with 736 additions and 143 deletions
+50
View File
@@ -1,3 +1,53 @@
## v0.259.0 — the claim page and the backup warnings answer in the reader's language (2026-09-21, R-596/R-598)
**MinAgent: 0.131.0** (unchanged). The Hungarian pages are byte-identical; the Go-parity gate
measures every new key against the frozen base capture and was red-proofed on a single added full
stop.
The 2026-09-20 English drill ended one screen short. This release is that screen.
- **R-596 (P1) — the claim page's ANSWERS.** The page was English and its answers were Hungarian:
a mistyped code was met with „Hibás vagy lejárt kód", and an English-speaking household could not
tell a typo from a dead code on the one screen between them and their machine. **Fourteen call
sites carrying nine distinct messages** now go through `s.msg(r, "claim.msg.*")`, so they follow
the request's language exactly as the template does.
- **`data["Title"]` was DEAD and is deleted, not translated.** R-596 named it as one of the
Hungarian strings on that page. It is not: `claim.html` is a standalone page with its own
`<title>` (already bundle-backed), and `.Title` is read only by `layout.html`, which this page
never includes. Translating it would have left a permanent false signal that the page's title is
decided in the handler.
- The anonymous, cookie-less claim page resolves its language from `customer.language` in
`controller.yaml` — `langFor` → `settings.GetLanguage` → `configLanguage`. That chain was
verified at source before any edit and is now PINNED by
`TestAnonymousClaimPageFollowsTheCustomerLanguageWithNoCookie`; it was previously an unpinned
assumption.
- The lockout is unchanged and language-blind: the test asserts the COUNTER, not the text, in both
languages, so nobody gets a longer run by switching a cookie.
- **R-598 — the backup page's PROTECTION WARNINGS**, which are promises about whether the customer's
files are safe. `backupTargetDegradedText` / `OfferText` / `AbsentText` are now bundle KEYS;
`degradedMessageFor` returns the key (the decision stays language-free and in one place) and the
caller that knows the reader resolves the words. `buildTierViews`, `backupTargetLabel` and
`loadGuestBackup` take the reader's language the same way `buildDataPathCards` already did.
- The English says exactly what the Hungarian says, and a test pins the NEGATION —
"protects against corrupted files, **but not against a disk failure**". An English sentence that
promised disk-failure protection would be worse than no translation.
- **An apostrophe cost a render.** The first English absent-drive sentence read "The system
backup's drive…" and never matched on the page: `html/template` escapes `'` to `&#39;`. Caught
by the render test, not by review. All 23 new English values are now free of `' " < > &`.
- **The existing copy-contract tests were kept, not weakened.** Six assertions that compared
Hungarian WORDS would have silently become assertions about key spelling; each now resolves the key
through the real embedded bundle (`huText`), so they still convict on a reworded sentence and now
also convict if a key is ever dropped from `hu.json`.
- **This is the third and fourth instance of one defect class**, after R-573 and R-590: *a composed
sentence handed to a renderer as page data*. No template-parity fixture and no
`TestI18nEnglishPages` can see it, because the template renders the field faithfully — only the
value is wrong. Both new test files drive the real handlers and read the HTML, which is the only
instrument that can.
Red-proofs run this session: the wrong-code literal restored (the English test convicted on both
halves — the English absent AND the Hungarian present); one added full stop in `hu.json` (the
go-parity gate named both sides).
## v0.258.0 — the last four Hungarian things an English household met (2026-09-20, R-589/R-590/R-572/R-573)
**MinAgent: 0.131.0** (unchanged). The Hungarian pages are byte-identical — the parity fixtures and