guest-power: add the liveness observable it shipped without (v0.109.0)
The v0.107.0 watchdog was silent on a healthy box, so its health could only be inferred from absence — F-OBS's shape, shipped in the same session F-OBS was fixed. INFO summary every 10th sweep with what it saw; aborted sweeps are not counted. Red-proofs 7 and 8.
This commit is contained in:
@@ -1,3 +1,30 @@
|
||||
## v0.109.0 — the guest-power watchdog gets the observable it was shipped without (2026-07-28)
|
||||
|
||||
**Self-correction to v0.107.0, found by running the very check this session added elsewhere.** The new
|
||||
guest-power watchdog logged at startup and when it ACTED, and was otherwise silent — so on a healthy
|
||||
box the only evidence the sweep was running was the *absence* of start lines. That is exactly F-OBS's
|
||||
shape, and exactly what standing rule 3 forbids: an absent log line is not evidence of correct
|
||||
behaviour. It shipped in the same session F-OBS was fixed in `deadapp-check`, which is what makes it
|
||||
worth recording rather than quietly patching.
|
||||
|
||||
`GuestPowerTick` now emits an INFO summary every **10th** sweep (10 x 60 s = 10 min, matching the
|
||||
controller's deadapp heartbeat) carrying `sweeps_since_boot`, `guests_evaluated` and
|
||||
`currently_stopped`. It reports **what the sweep saw**, not merely that it ran — "alive, all guests up"
|
||||
and "alive, one guest deliberately left down" are different operator facts and a bare liveness ping
|
||||
cannot express the second.
|
||||
|
||||
Two bounds, both pinned by test in the direction that would break them:
|
||||
- **Not a flood.** One line per sweep would be 1440/day, which is the pressure that made silence
|
||||
attractive in the first place. A test fails if the cadence degenerates to per-sweep.
|
||||
- **An aborted sweep does not count.** If `Guests()` fails, ownership is unproven and the sweep
|
||||
examines nothing; counting it would have the heartbeat claim liveness for a watchdog doing nothing —
|
||||
a worse lie than silence. The counter increments only after the guest list is in hand.
|
||||
|
||||
Red-proofs 7 and 8, both observed failing: removing the call →
|
||||
`no liveness observable after 10 sweeps — silence is indistinguishable from a dead watchdog`;
|
||||
moving the increment above the error return →
|
||||
`an aborted sweep was counted as healthy (sweeps=20)`.
|
||||
|
||||
# felhom-agent — Changelog
|
||||
|
||||
## v0.108.0 — F-LEAK: the pool-adoption fix was WRONG; the fix is a path-scoped ACL (2026-07-28)
|
||||
|
||||
Reference in New Issue
Block a user