feat(wake): W6 — off-host dead-man beacon + pluggable alarm-sink adapter #910
Reference in New Issue
Block a user
Delete Branch "feat/wake-beacon"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
W6 — off-host dead-man beacon + pluggable alarm-sink adapter (A8)
Builds on merged W2/W3/W4/W5. Adds the independent liveness leg: liveness
SPLIT from work-triggering, alarming on beacon ABSENCE.
Part of #892.Each piece → CONVERGED-DESIGN
§1.3 — Independent liveness leg (off-host dead-man beacon)
beacon.sh emit): strictly-increasingbeacon_seq+emit_tseach cycle, shipped OFF-HOST via the pluggable sink adapter. This isthe primitive the detector run-loop calls each poll.
beacon.sh check): an off-host monitor reads the lastreceived beacon; MISSING or STALE-past-SLO → alarm. Depends on NOTHING the
dying host actively does (a stopped emitter simply stops advancing the received
clock).
beacon.sh recordis the monitor-side receiver (monotonic: keeps thehighest seq; ignores stale/replayed).
WAKE_BEACON_INDEPENDENCE=same-host-siblingis REJECTED (fail loud): shares user-manager/host/sender/socket/session.
different-supervision-rootis acceptedbut emitted with
degraded:true+ a loud stderr flag; never silently "healthy".WAKE_BEACON_PANE_HINTis noted butNEVER suppresses an absence; readiness is proven solely by RECEIVED/CONSUMED
acks (W2/W3), never a pane scrape.
§4 G1 — off-host dead-man response: the absence alarm is proven to FIRE and
ROUTE to a human/other-host via the alarm-sink adapter within its SLO (SLO is
REQUIRED — no invented default).
§4 G2a — fail-loud / fail-closed: an UNCONFIGURED (unset) or UNREACHABLE
(non-zero exit) beacon sink OR alarm target FAILS LOUD — no silent no-alarm host.
Framework / operator boundary (§1.4)
pluggable alarm-sink / beacon-sink ADAPTER INTERFACE (
WAKE_BEACON_SINK_CMD,WAKE_ALARM_SINK_CMD).address/credential by name via
load_credentials, NEVER inlined here.emitter + adapter interface + absence-alarm + the fail-loud-on-unconfigured/
unreachable PRIMITIVE that W7's validation calls.
RED-FIRST evidence (
test-wake-beacon.sh, 10 groups, wired intotest:framework-shell)Each invariant was proven to go RED before green:
_next_seqpinned constant →got 7,7,7(red).different-supervision-rootmarked not-degraded → red.Gates / firewall / format
shellcheckclean (beacon.sh, test, detector.sh).grep -niE 'jason|woltje|jarvis'= 0;verify-sanitized.shPASS.pnpm format:check(prettier) PASS.beacon) all green.
detector.sh seam (noted explicitly)
A single, minimal, opt-in W6 emit call in the
cmd_runpoll loop: INERT unlessthe operator wires
WAKE_BEACON_SINK_CMD. A beacon emit failure NEVER kills thedetector loop (liveness is split from work-triggering) but is loud, not silent.
No store/ack/digest/sign code touched (public APIs only).
manifest.txt0.4.0 → 0.5.0 + inventory.
Part of #892
Record of Review — PR #910 W6 (off-host dead-man beacon + alarm-sink adapter; Part of #892)
VERDICT: APPROVE (GO on CI terminal-green). Reviewer: independent subagent
a15a0359(opus, per §1.3/§4-G1/§1.4) — ≠ builder (mosaic-coder). REVIEWED-HEAD (full-40):060977c732e537c04e5376e950ea47ab743f672b.Per-criterion (all 8 PASS; red-first B1/B2/B5/B7 reproduced)
checkfires on stale-past-SLO AND never-received; verdict =now − last_emit_tscomputed MONITOR-SIDE. Runtime demo: stopped emitter → ALARM FIRED+ROUTED, host INERT (host cannot prevent/delay/suppress). SLO required (no invented default). Forced-ALIVE mutation → B2 red.if WAKE_BEACON_SINK_CMD set: beacon.sh emit || echo WARN. INERT by default; emit-failure non-fatal to poll loop (liveness split) yet LOUD on stderr; store/ack/digest/sign BYTE-UNCHANGED.Non-blocking → carry into W7 monitor integration (NOT merge blockers)
(a) staleness uses host-supplied emit_ts not a monitor-side receive-ts (within the same-uid threat boundary; a stopped host cannot keep advancing it) → add a monitor-side
ingested_tsin W7. (b) beacon is not HMAC-verified (design mandates HMAC for DIGESTS §2.5 only, not the beacon — within contract) → beacon authenticity deferred to W7 monitor integration.GO for id-11 + merge at FULL-40
060977c732e537c04e5376e950ea47ab743f672bon CI terminal-green. Non-executor.GO — Gate-16 id-11 stamp, pinned to exact FULL head
060977c732.Basis: verbatim RoR (comment 18966) — independent review APPROVE, all 8 criteria; the load-bearing property verified by RUNTIME DEMO: a host that stops emitting is inert against the alarm (verdict computed monitor-side from now−last_emit_ts; forced-ALIVE red proves harness teeth). Pluggable sink fail-closed (unconfigured/unreachable → exit-3), degraded modes honest per the ratified concessions, detector seam opt-in inert-by-default, prior layers byte-unchanged. Two within-contract observations (monitor-side ingested_ts; beacon authenticity) folded into the W7 brief. CI terminal-green. W6 of EPIC #892. Named executor: Mos (id-11), squash pinned.