v0.308.0: controller batch 2026-10-12 — clear-address warning (R-922), secret sweep over every page (R-255), read_failed (R-266), no NVMe heat band (R-333), share globe (R-577), Hungarian dates and numbers (R-562), lost-drive option pinned (R-521)

Operator rulings 2026-10-12, 09 §3 decisions 196, 204-207, 223, 227. MinAgent 0.131.0 unchanged.
R-255's sweep found one leak, fixed here: an optional-config secret_input was rendered into its
settings page; it is now revealed on demand. Hungarian parity fixtures re-captured once for R-562.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-12 15:13:59 +02:00
parent dcd89364a4
commit fd28d70bff
183 changed files with 2671 additions and 411 deletions
+8 -6
View File
@@ -27,13 +27,15 @@ is on the ALLOWLIST below with a stated reason.
2. It reasons about TEMPLATES, not about rendered output. A handler that writes a secret into a
neutrally-named page-data key is invisible to it.
3. Runtime body-assertion — rendering a page with a sentinel and grepping the response — is the
check that catches all three, and it needs each page's data to be constructible. Four pages have
that today (settings_security, app_info, deploy, backups_restore) and each has its own test; the
other 23 page templates do NOT. Closing that gap is R-255.
check that catches all three. Since v0.308.0 (R-255) ONE test does it for EVERY page template:
internal/web/r255_secret_sweep_test.go (TestR255_NoPlantedSecretReachesAnyPage) renders every
parity case of every page, in both languages, with a unique value planted in every secret-named
field of its data, and fails on any that reaches the HTML. Its hole, stated: it plants into the
fixture data, so a HANDLER that copies a secret into a neutral key is caught only if a case
models that handler's data.
So: this is the cheap layer that would have caught two of the three, plus a per-page runtime assertion
for the pages that can afford one. Together they are not a proof; they are two nets with different
holes, and the holes are named above.
So: this is the cheap layer over the templates, plus the render sweep over the pages. Together they are
not a proof; they are two nets with different holes, and the holes are named above.
"""
import os
import re