# REPORT — controller v0.259.0: the claim page and the backup warnings in the reader's language **R-596 (P1), R-598.** Base `f6909492cc6e` → v0.259.0. MinAgent 0.131.0 unchanged. ## Claims in the task that turned out wrong 1. **"Sixteen Hungarian literals reach that page."** Fifteen literal sites reach it, carrying **ten** distinct messages (four are repeats). Of the fifteen, **one is dead**: `data["Title"]` is read only by `layout.html`, and `claim.html` is standalone with its own bundle-backed ``. So **fourteen live sites, nine messages** were converted and the dead one was deleted. 2. **"`backup_handlers.go` (12 Hungarian literals)."** Nine are code; the other three are Hungarian inside COMMENTS (`"Mentés most"`, `"Rendszermentés"`, a label quoted in a struct doc). The offer file's ten is right. 3. **"the recovery code (10 words — find its caller)" in the hub.** The hub does not mint it. **felhom-agent** does, in `internal/escrow`, from the **EFF large wordlist** — so the recovery code **has always been English**, ten words, ≈129 bits. R-597's recovery-code leg needed no work and this repo does not own that secret. No row was added for it: inventing a second definition here is how two sources of truth start. 4. **"the mail says 'three words'."** No claim mail states a count; they say `Setup code: %s`. The only count wording in the product is the **bind page's** passphrase hint/placeholder ("five words" / „öt szó"). The English pair is now count-free; the Hungarian is untouched. 5. **§16's phone-safe filter** ("no two words differing by one letter within the first six") was measured before adoption: it removes **5270 of 7772** words, 12.92 → 11.29 bits/word. **Not adopted** — see the hub REPORT for the three reasons and what replaced it. 6. **Line numbers** in the task were accurate. **"29 633 words"** is right to the line (29 634 lines, 29 609 after dedup). **"`customer.language` reaches the anonymous claim page"** is TRUE and is now pinned by a test rather than assumed. 7. **"the box checks a hash and needs no change" (for R-597)** is TRUE — verified and pinned by `TestClaimAcceptsAnEnglishWordCode`. ## What shipped - `internal/web/claim.go` — 14 sites → `s.msg(r, "claim.msg.*")`; the dead `Title` deleted with the reason recorded in place. - `internal/web/backup_target_offer.go` — three copy constants → bundle keys; `degradedMessageFor` returns the KEY (decision language-free, in one place); `backupTargetView(ctx, lang)`. - `internal/web/backup_handlers.go` — `buildTierViews`/`backupTargetLabel`/`loadGuestBackup` take the reader's language, the `buildDataPathCards` shape. - 23 new keys in both bundles; all 23 listed in `scripts/i18n_go_keys.json`. ## Evidence | Check | Result | |---|---| | `go build ./... && go vet ./... && go test ./...` | green | | `controller_gates.py --fast` (17 gates) | all OK | | `scripts/i18n_go_parity.py` | OK — 718 keys, byte-for-byte against the frozen base | | `scripts/i18n_missing_gate.py` | English missing **0** (ceiling 0); Hungarian formal 18 (ceiling 18) | | `scripts/test_gate_decoys.py` | 23/23 | **Red-proofs, both seen failing:** - One added full stop on `claim.msg.bad_code` in `hu.json` → go-parity named both sides. - The wrong-code Hungarian literal restored in `claim.go` → the English test convicted twice (the English sentence absent AND the Hungarian sentence present on the English page). ## Two things the tests caught that review did not - **An apostrophe never renders.** `"The system backup's drive…"` is escaped to `'` by `html/template` and no `strings.Contains` on the page ever matched it. Reworded; all 23 English values are now free of `' " < > &`. - **"please" is not this product's voice.** The i18n gate convicted two of my English sentences for pleading. Rewritten to plain second person. ## Open Nothing from this release. The live proof and the floor are in the felhom.eu report.