Files
felhom-controller/REPORT.md
T
admin 0fe04bb6d5
gates / gates (push) Successful in 28s
v0.259.0 — the claim page and the backup warnings answer in the reader's language (R-596, R-598)
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
2026-09-21 07:45:56 +02:00

3.9 KiB

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 <title>. 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 &#39; 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.