diff --git a/REPORT.md b/REPORT.md index 6cd4f56..99820d3 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,33 +1,15 @@ -# REPORT — felhom-controller v0.310.0: „A gép kikapcsolása" (2026-10-13) +# REPORT — v0.311.0: after a power cut, an app repairs the files the cut left empty (R-1007, 2026-10-14) -Baseline `1b2f74c` (v0.309.0). Commit `201f936`. **MinAgent 0.155.0.** Needs hub v0.149.0 for the 14-day alarm hold. -Design: felhom.eu `documentation/architecture/14-host-power-off.md`. +Baseline `acbbf4b` (0.310.0). Code `8d862e4`, security fix `3b85a0c` (before the build). Image +`felhom-controller:0.311.0` (sha256 `2a5550da…`). Design: felhom.eu `09` §3 decision 236; evidence +felhom.eu `documentation/audits/immich-repair-2026-10-14/`. -## What the household sees - -Beállítások → Rendszer, after the restart cards: „A gép kikapcsolása" — „A gép teljesen kikapcsol. Az alkalmazásaid és a -mentések leállnak. **Újra bekapcsolni csak otthon lehet: nyomd meg a gép bekapcsológombját.**" The button opens a dialog; -the household types KIKAPCSOLÁS (EN: TURN OFF); then „A gép kikapcsol. Néhány perc múlva teljesen leáll…". A refusal -shows one sentence (backup running, just started, other system on the machine…). With an older agent: the button is -hidden and one line says an update is needed. - -The restart card now says what it does (R-999): „A Felhom újraindítása" — „Újraindítja a Felhom részt a gépen: a -vezérlőpultot és az összes alkalmazást. A gép maga bekapcsolva marad. Kb. 30 másodpercig semmi nem érhető el, utána -minden magától visszajön. Ha csak a vezérlőpult akad, a fenti „Vezérlő újraindítása" elég." `/api/server/reboot` is -POST only (one of R-983's seven). - -## Proof - -- `internal/web/poweroff_handlers_test.go` (6 tests): the word, POST only, refusals shown and nothing asked of the agent, - hidden for an old agent, a sentence for every reason in both languages, the restart route refuses a GET. Each guard - red-proofed. The four `settings_system` i18n parity fixtures regenerated on purpose (diff = the new card, the dialog's - type-to-confirm, the restart texts). `go test ./...` and `controller_gates.py` green. -- Live on the N100 (endpoint level — the calls the page makes; no browser on DooPlex): the card and the new texts on - `/settings`, the old heading gone; `POST /api/server/poweroff` with no word and with „igen" → 400 naming the word; - `GET /api/server/reboot` → 405; with KIKAPCSOLÁS → 202, and the machine went off. The power button brought it back: - dashboard 200 within 50 s, the same 5 containers healthy, controller 0.310.0. - -## Delivered - -Image `gitea.dooplex.hu/admin/felhom-controller:0.310.0` pushed. Hand-deployed to the N100 guest 9201 only (needed for -the live proof). demo-hp and Tester 1 get it with the operator's floor raise (floor 0.310.0, `min_agent` 0.155.0). +- New template block `after_unclean_boot`; `internal/aftercrash` runs it once per start after an UNCLEAN host boot + (crashboot's verdict, after the 15-min crash grace). The household's lost-files note on the app page; the operator + event `app_repaired_after_crash` (counts only). MinAgent 0.155.0 unchanged. +- Tests: 15 guards red-proofed (each removed in turn convicted its test). Full suite and every controller gate green. +- **Security review of `8d862e4`:** compose's shared runner logs a failed command's stdout and puts stderr in the error, + which reached the event's `problem`. Fixed: a quiet runner, exit code only (`TestAUB_AFailingCommandLeaksNoOutput`). +- **Live (demo-hp 9201, a real power cut mid-upload):** 41 of 41 broken photos repaired in 10 s; 120 controls untouched. +- Open: R-1020 — the returned duration is 0 (the record's is right). Delivery to the N100 and Tester 1 waits on golden + 0.311.0 + the global floor.