diff --git a/CONTEXT.md b/CONTEXT.md index 1c1fd78..3794023 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -9,7 +9,7 @@ Last updated: 2026-09-20 (v0.257.0 — the app catalog can speak English) -> **2026-09-20 — v0.257.0 (R-560 slice 5 Part A).** The catalog's `.felhom.yml` may now carry an `i18n: {en: …}` sibling block, and the dashboard reads it. `Metadata.For(lang)` merges FIELD BY FIELD (absent or blank English shows Hungarian, so a half-translated app ships); `For("hu")` is the parsed struct with `I18n` cleared and nothing else, deep-compared over all **53 real catalog files** copied into `internal/stacks/testdata/catalog/`; the three prose lists replace WHOLE and every other list is matched by its own key (`env_var`, option `value`, `match_group`, `target`, `path`) — **never by position**; `For` never writes through the manager's shared metadata. Pages reach copy only via `LocalizeStacks`/`LocalizeStackPtr`/`MetaFor`, and `TestNoDirectMetaCopyReadOnPages` AST-parses `internal/web` against a named allow-list so the NEXT page to read catalog copy fails the suite instead of rendering Hungarian to an English household. **Two of the nine red-proofs convicted a hollow TEST, not the code:** a struct copy shares its slices' backing arrays, so the obvious `DeepEqual` mutation check passed a deliberately broken merge; and a ONE-entry fixture cannot tell key matching from position matching. Both rewritten. Proven live on demo-hp (English pages English, seven Hungarian pages byte-identical apart from the CSRF token) and on demo-felhom **0.255.0** (block synced, pages identical, no parse warning in a 93-line log window). Gaps: R-589 (update badge still Hungarian in English), R-590 (the data-folder promise sentence), R-591 (`Stack.Copy()` does not deep-copy the new `Meta.I18n`), R-592 (three defects inside the new catalog gate, each found by its own decoy). **Floor NOT raised — the operator's step; until it moves, only demo-hp reads English app text.** +> **2026-09-20 — v0.257.0 (R-560 slice 5 Part A).** The catalog's `.felhom.yml` may now carry an `i18n: {en: …}` sibling block, and the dashboard reads it. `Metadata.For(lang)` merges FIELD BY FIELD (absent or blank English shows Hungarian, so a half-translated app ships); `For("hu")` is the parsed struct with `I18n` cleared and nothing else, deep-compared over all **53 real catalog files** copied into `internal/stacks/testdata/catalog/`; the three prose lists replace WHOLE and every other list is matched by its own key (`env_var`, option `value`, `match_group`, `target`, `path`) — **never by position**; `For` never writes through the manager's shared metadata. Pages reach copy only via `LocalizeStacks`/`LocalizeStackPtr`/`MetaFor`, and `TestNoDirectMetaCopyReadOnPages` AST-parses `internal/web` against a named allow-list so the NEXT page to read catalog copy fails the suite instead of rendering Hungarian to an English household. **Two of the nine red-proofs convicted a hollow TEST, not the code:** a struct copy shares its slices' backing arrays, so the obvious `DeepEqual` mutation check passed a deliberately broken merge; and a ONE-entry fixture cannot tell key matching from position matching. Both rewritten. Proven live on demo-hp (English pages English, seven Hungarian pages byte-identical apart from the CSRF token) and on demo-felhom **0.255.0** (block synced, pages identical, no parse warning in a 93-line log window). Gaps: R-589 (update badge still Hungarian in English), R-590 (the data-folder promise sentence), R-591 (`Stack.Copy()` does not deep-copy the new `Meta.I18n`), R-592 (three defects inside the new catalog gate, each found by its own decoy). **FLEET FLOOR RAISED to 0.257.0** the same session (operator asked), `min_agent` 0.131.0 declared — above the vouched golden 0.246.0, so the declaration carries it (R-472). Hub: `managed floor SERVED for demo-felhom … from declared`; **demo-felhom went 0.255.0 → 0.257.0 by itself in under 12 s**, healthy, `settle-gate: GO — at/above floor 0.257.0`, **and then rendered the English tagline** — the floor delivered the FEATURE, not a version string. Peti's box and tester-1 are DOWN and take it unattended when they return. The catalog was fully translated the same day (50 more apps in three pushes, 1 031 of 1 032 strings): **the English Apps list shows ZERO Hungarian app descriptions across all 53**. Gap added: R-594 (the catalog gate can convict a retrieval promise but cannot REGISTER a true one). > **2026-09-18 — v0.255.0 (fixes the v0.254.0 globe).** The sign-in-flow pages requested `style.css` with **no `?v=`**, so a browser holding a pre-0.254.0 copy served CSS with no `.lang-globe` rules and the globe rendered as a bare unstyled `
` — **invisible to every test, because they all read markup and the fault was in which CSS file the browser fetched**. It was FIVE shells, not three (both guest share pages too), and `.Version` was missing from three of their data maps — now set once in `executeTemplateLang`. The globe also moved INSIDE the card, centred under the footer, menu opening upward via the shared rule. 15 shell fixtures re-captured, **zero dashboard ones**. R-579. diff --git a/REPORT.md b/REPORT.md index a7c57ec..0d35928 100644 --- a/REPORT.md +++ b/REPORT.md @@ -116,10 +116,31 @@ five `Meta` fields and not the new `I18n` map — safe today because nothing mut exactly why it is worth a row) · **R-592** (three defects inside the new catalog gate, each found by its own decoy). -## Needs the operator +## The floor was raised to 0.257.0, and it delivered function rather than a version string -**Raise the fleet floor to 0.257.0.** Until then only demo-hp can read an English app block at all; -every other box keeps showing Hungarian app text to an English household. Nothing breaks if it waits. +The operator asked for the floor at the end of the translation work, so it was raised the same +session: `min_controller_version=0.257.0`, `min_agent=0.131.0` — the value this release's CHANGELOG +header declares. The floor is **above the vouched golden (0.246.0)**, so the declaration is what +carries it (R-472); an undeclared floor there is held by design. + +Observables, both positive: + +- Hub: `managed floor SERVED for demo-felhom: floor 0.257.0, agent requirement "0.131.0" from + declared (golden 0.246.0)`. +- Box: **demo-felhom went 0.255.0 → 0.257.0 by itself in under 12 seconds**, healthy, its own log + reading `settle-gate: GO — at/above floor 0.257.0 (we are 0.257.0)`. +- **And then it rendered the English tagline** for an app whose block it had just synced. That is the + observable that matters: the floor delivered the FEATURE, not just a version number. + +**Peti's box and tester-1 are DOWN** and take it unattended when they return — untested on this +version, which is the standing situation for every floor raise. + +## The whole catalog followed the same day + +The operator read the pilot's English and said go, so Part C shipped too: 50 more apps in three +pushes, 1 031 of the catalog's 1 032 strings. **The English Apps list now shows zero Hungarian app +descriptions across all 53 apps** — the only Hungarian left on it is this release's own two gaps +(R-589's „Naprakész" badge, ten occurrences) and the language picker naming itself. ## Teardown