11ead4be0e
The operator moved the global floor to a version the box did NOT run (0.153.0 -> v0.154.0) and the managed self-update fired exactly once: 06:57:13Z UpdateState pending, initiated_by=auto-floor 06:57:17Z agent: controller swap requested 0.153.0 -> 0.154.0 06:57:21Z container restarted 06:57:29Z agent: new controller healthy (16 s save -> healthy) Over a 39-minute window: swap requests 1, agent-driven bootstrap restarts 1, rollbacks 0, container RestartCount 0. VerifyStartup confirmed on the next boot; the following periodic check logged "Current version 0.154.0 is up to date" — the at/above-floor branch correctly doing nothing. The 2026-07-20 attempt proved nothing because it targeted an already-running version; that was the whole reason this leg stayed open. Disclosed in both rows: a hand-deploy of v0.155.0 at 07:17:10 falls inside the observation window and is what StartedAt shows afterwards. It never goes through SwapController, so the swap-count assertions hold across the full window — and it incidentally re-confirmed the at/above-floor branch (0.155.0 running against a 0.154.0 floor -> updater did nothing). R-23(b) (cosmetic Waiter "recovered" log timing) remains open.