08e9ddbd5c
gates / gates (push) Successful in 25s
All 179 Hungarian error messages carry a key; zero remain. 10-localisation.md gains §10.2: the
four properties util.MsgError had to have at once and the failure each one prevents, and the
plural rule as a BUNDLE rule rather than a per-call-site flag, with the answerable sentence and
what the other option would have cost.
Two instrument defects recorded rather than tidied away, because both shapes recur:
R-576 — the parity gate has a measured blind spot. The bulk converter dropped the continuation
of multi-line concatenations, damaging 7 producers, and the gate stayed GREEN: every surviving
fragment WAS a byte-equal base-commit literal, so its question ("is this text real?") was
answered yes while the CALL had lost half its sentence. Two behaviour tests caught it. The
general form: a structural gate over the TEXT cannot see a defect in the CALL.
And the script counting what was left was case-sensitive, so it said "0 remain" while five did —
R-565's shape inside the measurement. Every "no Hungarian left" claim in this slice is now made
case-insensitively and with both controls.
R-575 — the soft memory-overcommit warning has no error to carry a key and no language where it
is built, so it renders Hungarian on an English page. Named in the code, not hidden.
Live evidence includes a mistake I made and corrected: a probe of the deploy refusal INSTALLED
vaultwarden on demo-hp (the endpoint accepts before it validates), the same mistake the previous
session recorded. Removed through the product's own path with its data; verified gone.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
59 lines
3.5 KiB
Markdown
59 lines
3.5 KiB
Markdown
# Live validation — controller v0.253.0 on demo-hp guest 9201 (2026-09-18, release B)
|
|
|
|
**Method: endpoint-level, stated as such.** No browser on DooPlex. Session from a real `POST /login`;
|
|
`X-CSRF-Token` from the page meta for API calls; the password passed as a file and deleted from host
|
|
and guest afterwards.
|
|
|
|
## 0. A mistake I made, first — an app was installed on the demo box and removed
|
|
|
|
My first release-B probe posted `/api/stacks/vaultwarden/deploy` with empty values, expecting the
|
|
required-field refusal. **The deploy API answers 202 and validates ASYNCHRONOUSLY**, and vaultwarden
|
|
has no required field — so it installed. **That is the same mistake the 2026-09-17 session recorded
|
|
in STATUS.md, repeated.** It is not a trap in the product; it is a trap in the probe, and the lesson
|
|
is narrower than "pick a different app": **the deploy endpoint cannot be probed for a refusal at all,
|
|
because it accepts before it validates.**
|
|
|
|
Removed through the product's own path — stop, then `POST /remove` with `remove_hdd_data` and
|
|
`remove_backups` — and verified gone: no container, no `/opt/felhom/stacks/vaultwarden`, zero
|
|
`vaultwarden` volumes. The 23 standing containers are all up. The removal answered
|
|
`hdd_note: „Az alkalmazás nem tárolt saját adatot külső meghajtón…"`, so nothing was on a drive.
|
|
|
|
The probe was rewritten to use only endpoints whose validator runs BEFORE any mutation
|
|
(`probeB2.sh`, `probeB3.sh`).
|
|
|
|
## 1. An error made deep in a package, rendered on the page in each language
|
|
|
|
`POST /sharing/shares` with a bad name. The message is produced in `internal/settings/smb.go`, three
|
|
layers below the handler, and the redirect is FOLLOWED so what is read is what the page shows.
|
|
|
|
| refusal | hu | en |
|
|
|---|---|---|
|
|
| name has a slash | „a megosztás neve nem tartalmazhat perjelet vagy pontot" | "the share name cannot hold a slash or a dot" |
|
|
| name empty | „a megosztás neve nem lehet üres" | "the share name cannot be empty" |
|
|
| name longer than 15 | „a megosztás neve legfeljebb 15 karakter lehet" | "the share name can be at most 15 characters" |
|
|
| name starts with `_` | „a megosztás neve nem kezdődhet aláhúzással — ezek a nevek a rendszernek vannak fenntartva" | "the share name cannot start with an underscore — those names are reserved for the system" |
|
|
|
|
Every Hungarian line is the literal that stood in `smb.go` before the conversion, byte for byte.
|
|
|
|
## 2. The compatibility case, still true after B
|
|
|
|
`/sharing?flash=Be%C3%A1ll%C3%ADt%C3%A1s+mentve.` — a URL an older controller minted — renders
|
|
„Beállítás mentve." in **both** languages. Shown verbatim, never as a key, never dropped.
|
|
|
|
## 3. What stays English on purpose, confirmed live
|
|
|
|
`POST /api/stacks/felhom-controller/remove` → `403 stack "felhom-controller" is protected and cannot
|
|
be removed`. Internal English, identical in both languages: **R-569**, not this slice. Recorded here
|
|
so it is not read as a gap release B left.
|
|
|
|
An agent-side refusal (`/api/disks/format` on a device that is not whitelisted) comes back as
|
|
`agentapi: format: HTTP 400: storage: refusing to operate on non-whitelisted block device` — the
|
|
AGENT's sentence, relayed verbatim in both languages. That is the rule working: text this controller
|
|
did not write is text it does not translate.
|
|
|
|
## 4. State left behind
|
|
|
|
Controller **0.253.0**; saved language **`hu`** (every English probe used the `?lang=en` override,
|
|
which is not persisted); 23 standing containers up, unchanged; **vaultwarden installed by mistake and
|
|
fully removed**; no drive touched, no floor raised, no golden baked.
|