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
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:
@@ -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 `'`. 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
|
||||
|
||||
Reference in New Issue
Block a user