# 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.