## v0.248.0 — English for apps and settings: ten more pages, Hungarian byte-identical (2026-09-17, R-556 release A) **MinAgent: 0.131.0** (unchanged). **No hub release needed.** Nothing changes for a Hungarian household: the switch is still shown only on English pages (decision 6 stands until release C). - **Converted:** `dashboard`, `stacks`, `logs`, `monitoring`, `app_import`, `app_export`, `deploy`, `settings_system`, `settings_security`, `settings_notifications` (572 markers). `app_row`, `meta_badge`, `icons` carry no copy (verified). 16 repeated strings now share `common.*` keys where the meaning is the same everywhere; „Mentés" (Save/Backup), „Frissítés" (Update/Refresh), „Indítás" (Start/Boot) deliberately stay per page. - **Parity:** 25 new fixture states captured from the UNCONVERTED templates (commit `6be55a0`) before any of these pages carried a marker. Five v0.247.0 fixtures were re-captured from v0.246.0 (`89dd3e94`) because their one-word Hungarian data had to become multi-word (below). - **New test — `TestI18nParityCoversEveryMarker`:** every marker occurrence must be rendered by some parity case. It found two gaps in v0.247.0's own pages (the app page's Install button; one „Due" tag), closed with two new cases captured from v0.246.0. - **English page test widened:** only fixture strings of 2+ words or 12+ characters are masked; titles go through `addLanguageData`. Measured: with one English nav key deleted, the old test flagged 8 cases and missed the 6 launcher cases; the new one flags all 14. - **Retrieval-promise gate reads English** (`EN_PATTERNS`, `ALLOWLIST_EN`): HEAD passed a planted „Your old backups can be restored at any time." in `en.json`; the gate now convicts it and accepts the same place carrying a sentence that promises nothing. Decoys in `test_gate_decoys.py`. - **Go-side copy on these pages:** titles via `TitleKey` (dashboard, stacks, monitoring, the three settings pages); `infraMeta` descriptions (and samba's name) from the bundle, Hungarian pinned equal to `inframeta.go`. - **Found, not converted:** `backups_remote.html` decides with `indexOf('Fut')` against its own Hungarian status text (row filed); converting that word would silently break the English page's progress poll. Composite page titles (logs, deploy, export) and `lifecycleBadge`/`updateBadge` remain Hungarian — slice 2. - **Extractor:** ASCII-only Hungarian it missed on these pages — Mind, Folyamat, Titkos, Processzor, Hamarosan, aldomain, „Az adatai itt voltak", Figyelem, pelda@email.hu — converted by hand; words added to its list (not „Mind": an English homograph). It also learnt that a JS string can start inside an attribute value. - `HU_FORMAL_CEILING` 6 → 10: the converted copy carries four more „ön" forms (R-516), unchanged by rule. - Old wording tests (`TestDiskMeter_*`, `TestNetworkBadgeTemplates_DistinctStrings`, `TestSettingsSectionInventory`) read the Hungarian expansion (`huTemplateSource`), not the raw file. - `loadTemplates` logs its parse duration per language (DEBUG). **Red-proofs** (`felhom.eu/documentation/audits/i18n-slice1-2026-09-17/A/redproofs.txt`): parity (one byte of `dashboard.lemezek_allapota` → 4 dashboard cases name line and bytes); coverage (a marker in an unreachable launcher branch → named, while parity stayed green); mask widening (8 vs 14 cases); retrieval gate (HEAD rc 0 on the planted promise → fixed gate convicts, negative control accepted). ## v0.247.0 — the dashboard can speak English: mechanism proven on three pages, Hungarian byte-identical (2026-09-17, i18n spike) **MinAgent: 0.131.0** (unchanged — nothing here talks to the agent). **No hub release needed:** the report gains an additive `language` field the hub stores raw and does not read yet. **Nothing changes for a household.** Hungarian stays the default and the only language shown; the switch appears only on an English page or a request carrying `?lang=`. - **Mechanism — a flat message bundle, expanded BEFORE the template is parsed.** `internal/i18n/locales/{hu,en}.json` (embedded; hu authoritative). Converted templates carry `{{T "key"}}` markers; `loadTemplates` parses one template set per language after `i18n.Expand` has replaced them, so the Hungarian set is parsed from the same bytes, in the same escaping contexts, as before. Chosen over `golang.org/x/text/message` because the inventory found no gender and only count-plurals (English `key.one`/`key.other`; Hungarian has one form), and over a runtime `T` func because the contextual escaper would change Hungarian bytes (`+`, `'`, `"`) and need per-context handling inside `