Files
felhom.eu/documentation/audits/i18n-slice2-2026-09-18/A/live/README.md
T
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

81 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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ó: <n> perce" ×10 | a relative age crossed the one-minute boundary between the two fetches |
| `monitoring` | „most" vs „<n> 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.**