Files
felhom-controller/REPORT.md
T

2.1 KiB
Raw Blame History

REPORT — v0.328.0: the catalog allow-list (R-971, operator decision D2 = A) (2026-10-17)

Written in ASD-STE100 Simplified Technical English. Session report: felhom.eu REPORT-agent-allowlist-rotation-2026-10-17.md. Evidence: felhom.eu documentation/audits/agent-allowlist-rotation-2026-10-17/P2/, P5/.

  • What: internal/privpolicy checks the RENDERED compose before every compose write and env decision (sync, update/ladder step, install, two settings changes, two restores — before the stop) against allowlist.json (go:embed; one entry: homepage's read-only socket, bound to its image, start and healthcheck). Refusal: nothing written, operator event app_definition_refused (hub ≥ v0.157.0), app-page line, plain message. Sync never copies a template named like an infra stack.
  • Tests: privpolicy_test.go (every class, positive controls, the three review rounds, the live root finding), TestAllowList_IsWiredIntoEveryComposeWriter (AST), sync.TestR971_*, stacks.TestAllowList_*, TestR971_AppPage_*; full suite green on 99f9117. Red-proofs in P2.
  • i18n: new fixture app_settings_definition_refused; every other fixture byte-identical. Keys err.stacks.definition_refused, app_info.definition_refused in both bundles.
  • Release: rc.1–rc.5 on demo-hp 9201; 0.328.0 to Tester 1, demo-hp, demo-felhom by per-box floors (all three in < 1 min), box walk green (0 refusals, all containers healthy, login and files 200), https-only green; global floor 0.328.0, MinAgent 0.158.1; per-box floors cleared; read back from the hub DB with its WAL.
  • 9201 proof: drill catalog with privileged: true on privatebin → refused; compose sha and container unchanged; event at the hub + operator mail; page line on privatebin only; live catalog restored byte-identical.

Observations

  1. rc.4 refused every not-installed app on the box (placeholder roots do not exist there). NOT-A-FINDING: found by this session's own live proof and fixed in rc.5 before the release, red-proved.
  2. One app can still bind another app's appdata/<name>. FILED: R-1142.
  3. build.sh pushes :latest with every build, rc included. FILED: R-1143.