Files
felhom.eu/documentation/audits/i18n-slice2-2026-09-18/A/live
admin 92ee0f9881
gates / gates (push) Successful in 23s
docs: live evidence for controller v0.252.0 + STATUS (R-557 slice 2 release A)
Endpoint-level on demo-hp guest 9201, method stated. The flash key renders the sentence in
each language where 0.251.0 showed the raw key; a link an OLD controller minted still shows
its prose, in both languages; country names follow the language and the list re-sorts.

Hungarian parity measured on the page BODIES, not on a hash: ten pages on 0.252.0, the guest
rolled back to 0.251.0, the same ten again, then rolled forward. Six byte-identical; the other
four differ only in live state (a clock crossing a minute, an app unhealthy for a moment, and
the update-available line, which is true on the old version and false on the new). The first
pass had saved only hashes — a hash cannot show WHAT moved — so the before-state was
reproduced rather than asserted.

Box left on 0.252.0 with its saved language `hu`; every English probe used the ?lang= override,
which is not persisted. Provisioned nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-18 10:24:52 +02:00
..

Live validation — controller v0.252.0 on demo-hp guest 9201 (2026-09-18)

Method: endpoint-level, stated as such. claude-in-chrome is not available on DooPlex, so each probe invokes the exact endpoint the page's own script or form invokes; only rendering is skipped. Strict click-through remains a manual pass by the operator.

Reached at the container IP inside the guest (172.17.0.2:8080) with the mandatory Host: felhom.enkisfelhom.hu. Session obtained by a real POST /login; felhom_session is read off the Set-Cookie header because curl's jar drops it. The API POST carries X-CSRF-Token from the page's meta tag — the second of the two CSRF mechanisms.

Scripts as run: probe2.sh (authenticated probe), dump.sh (page bodies for the parity compare). The password was passed as a file and deleted from the host and the guest afterwards; it is not in any script, any log or any file here.

1. The flash line — the thing this release changes

probe 0.251.0 (before) 0.252.0 (after)
/launcher?flash=flash.share.enabled&lang=hu flash.share.enabled (a raw key — the old build has no key logic) „A megosztás bekapcsolva."
/launcher?flash=flash.share.enabled&lang=en flash.share.enabled "Sharing is on."
/launcher?flash=Sikeres+ment%C3%A9s (a link an OLD controller minted) „Sikeres mentés" „Sikeres mentés" — unchanged, in BOTH languages
/login?flash=%3Cscript%3E… &lt;script&gt;alert(1)&lt;/script&gt; identical — escaped at render, as always

The third row is the compatibility guarantee, live: a bookmark, an open tab or a back-forward cache replaying a 0.251.0 URL still reads correctly.

2. Country names follow the language, and the list re-sorts

GET /api/geo/countries — the call the geo picker makes.

0.251.0 0.252.0 lang=hu 0.252.0 lang=en
DE Németország Németország Germany
US Egyesült Államok Egyesült Államok United States
AO Angola Angola Angola (identical in both, and it still resolves)
first three in order Afganisztán, Albánia, Algéria same Afghanistan, Albania, Algeria

3. The 409 probe — a refusal a customer really meets, without installing anything

POST /api/stacks/bentopdf/deploy on an app that is ALREADY installed (R-553's report established this shape so no install is needed on the demo box):

{"ok":false,"error":"stack \"bentopdf\" is already deployed; use update instead"}  [409]

The status code is right in both languages — errors.Is(err, stacks.ErrAlreadyDeployed), R-553's signal, untouched. The sentence is internal English and stays English: that is R-569, not this slice. Recorded here so nobody reads it as a gap this release left.

POST /api/stacks/felhom-controller/stop → 403 cannot stop protected stack felhom-controller, also internal English, same row.

4. Hungarian parity — measured on the page bodies, not on a hash

Ten Hungarian pages fetched on 0.252.0, then the guest rolled BACK to 0.251.0, the same ten fetched again, then rolled forward. (The first pass saved only hashes; a hash cannot show WHAT moved, so the before-state was reproduced independently rather than asserted — the documented expectation.)

After normalising the version string, the CSRF token and live numbers (ages, sizes, percentages):

6 of 10 byte-identical. backups, backups/remote, login, sharing, stacks, storage.

The other four differ only in live state, each identified:

page the difference why it is not copy
backups/apps „Utolsó: most" vs „Utolsó: perce" ×10 a relative age crossed the one-minute boundary between the two fetches
monitoring „most" vs „ perce" the same clock
launcher a „Nem egészséges" badge present in one fetch an app was unhealthy at one moment and healthy at the other, across a restart
settings „Frissítés elérhető" + the install button vs „— naprakész" on 0.251.0 an update (0.252.0) genuinely IS available; on 0.252.0 it is not. The update checker working.

Full diff: hu-parity-diff.txt.

5. State left behind

The box runs 0.252.0 and its saved language is hu — it was never changed; every English probe used the ?lang=en per-request override, which is not persisted. No app was installed, no app removed, no drive touched, no floor raised, no golden baked. Provisioned nothing.