R-553 + R-563 CLOSED (controller v0.251.0): evidence, 10 §9 rewritten, R-569..R-571, slice-2 dependency
gates / gates (push) Successful in 24s
gates / gates (push) Successful in 24s
- audits/r553-2026-09-17/: live before/after on demo-hp (CSRF redacted), the 409 refusal, the hub health block, red-proofs for all five sites, the site-5 fixture diff, gates. - 10-localisation.md §9: the five decisions with what each reads now; the rule (a text signature may remain only where the text is not ours); the one legacy exception and its end date. - Register: R-553 and R-563 closed to CLOSED-ITEMS; R-569 (four API handlers match English words), R-570 (the legacy stale-note fallback + the slice-2 fence), R-571 (classifier and alert placement documented nowhere). R-557 carries the R-570 dependency. 263 -> 264 open. - STATUS, including the live probe that installed an app and was removed the same minute. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -238,11 +238,35 @@ gates need an English rule. Read on privatebin, nextcloud and immich (inventory
|
||||
|
||||
## 9. Compared, not shown — latent bugs a translation would trigger
|
||||
|
||||
**[FACT]** Four places decide behaviour by matching Hungarian wording (inventory §3): an HTTP status
|
||||
(`api/router.go:478`), an off-site quota classification (`backup/offbox.go:186`), an alert's placement
|
||||
(`web/alerts.go:208`), and a **persisted** warning compared by marker (`web/handlers.go:927`). Each
|
||||
breaks the day the words change in either language. **R-553 fixes them first, before slice 2 touches a
|
||||
single Go string.**
|
||||
**[FACT] There were FIVE, and they are fixed (controller v0.251.0, R-553 + R-563, 2026-09-17).** Four
|
||||
in Go and one in a page script. Each producer now attaches a machine-readable signal and each decision
|
||||
reads that signal; every Hungarian sentence is byte-identical (pinned per producer), and the hub report
|
||||
is unchanged.
|
||||
|
||||
| decision | read before | reads now |
|
||||
|---|---|---|
|
||||
| deploy HTTP status — `api.deployStatusFor` | „kötelező", „memória", "does not exist", "already deployed" | `stacks.ErrRequiredField`, `ErrPathMissing`, `ErrNotEnoughMemory` (400); `ErrAlreadyDeployed` (409) |
|
||||
| off-site failure class — `ClassifyOffsiteFailure` | „tárhelykeretet" | `backup.ErrOffsiteQuota` |
|
||||
| alert placement — `web/alerts.go` | „meghajtó" / „adattároló" in the warning | `monitor.WarnKindStorageNotSeparate`, carried in `HealthReport.WarningKinds` (internal; NOT on the wire) |
|
||||
| the stale off-site note — `offboxWarningDisplay` | „nincs mentésre jelölt alkalmazás" in the PERSISTED text | `settings.OffboxTarget.LastWarningKind` = `backup.OffboxWarnNoAppsSelected` |
|
||||
| the remote-backup poll — `backups_remote.html` | the displayed word „Fut" | `data-status="running"` on the status element (R-563) |
|
||||
|
||||
**[DESIGN] The rule this establishes:** a text signature may remain ONLY where the text is not ours.
|
||||
The classifier's restic and ssh signatures stay, because that output is neither written nor translated
|
||||
here; every sentence this product writes is display, and a decision reads a signal beside it.
|
||||
`internal/util.KindErrorf` exists for exactly that: the same message bytes `fmt.Errorf` produced, plus
|
||||
a sentinel for `errors.Is` — never `fmt.Errorf("%w: …")`, which would prepend the sentinel's own text
|
||||
to the customer's sentence.
|
||||
|
||||
**[FACT] One exception, with an end date:** a box upgraded to 0.251.0 carries the OLD persisted note
|
||||
with no kind until its next off-site run, so `offboxWarningDisplay` keeps the substring test for
|
||||
`kind == ""` only. **Slice 2 (R-557) must not translate that producer until R-570 closes.**
|
||||
|
||||
**[FACT] Measured after the fix** (`audits/r553-2026-09-17/`): the inventory's comparison detector finds
|
||||
**no template compare** (was one) and no Go compare of ours — the two remaining hits are the known
|
||||
false positive (an `[INFO]` log line) and the deliberate legacy fallback above; planted decoys prove the
|
||||
detector still convicts. **What it does NOT cover:** four API handlers pick their status by matching
|
||||
ENGLISH internal words — the same shape, one language over, filed as R-569 rather than folded in here.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user