diff --git a/documentation/audits/TESTRUN-fullstack-2026-06-29.md b/documentation/audits/TESTRUN-fullstack-2026-06-29.md index 3127925..2f4d85c 100644 --- a/documentation/audits/TESTRUN-fullstack-2026-06-29.md +++ b/documentation/audits/TESTRUN-fullstack-2026-06-29.md @@ -127,6 +127,13 @@ than a detect-then-R1-recover. Detection is the safety net; preservation is the |---|---|---|---| | F1 | Swap verify passes a **no-healthcheck image that crash-loops** (transient "running" + no-healthcheck rule → false "done", no rollback) | low (real controller has a healthcheck) | tag alpine as `felhom-controller:X.Y.Z`, swap to it → marked healthy ~4 s, then `Restarting (0)` | +**F1 RESOLVED 2026-06-29 (agent v0.47.0):** the swap verify now reads `{{.RestartCount}}` +(`running && rc>0` → not healthy) and requires a 3-poll **stability dwell** for a no-healthcheck image +(a real healthcheck is trusted immediately). Live re-test: the same alpine `:9.9.9` swap now reaches +`state: failed` ("did not become healthy within timeout") and **rolls back** to 0.91.0 — no false +"done". The `docker inspect -f *` grant is unchanged (`*` spans the extended template, exit-0 confirmed). +See `felhom-agent/REPORT.md` + CHANGELOG v0.47.0. + **EXPECTED (not defects):** the capstone leaf regeneration → pin mismatch (the prevention fix was never shipped — regeneration is expected; **detection** is the pass criterion, and it passed). The §4 host-side "doubling" persisting until a clean host reboot (expected; `make-private` is granted, applies