feat(wake): W7 A10 idempotent component installer + mosaic-wake.service
Framework install machinery for the wake component (EPIC #892 W7, the last build slice). ADDITIVE per #869: adds an `install.sh --component wake` early dispatch that never enters the full-framework sync, never alters framework-manifest ownership behavior, and touches nothing the #869 install-ordering-guard covers (no runtime-asset linking, no lease-enforcement hook wiring). (i) Idempotent component-manifest install + Gate A (wake-install.sh install): the wake manifest.txt is VERSION METADATA ONLY; the component file set is INTERSECTED-AND-VALIDATED against the single SSOT framework-manifest.txt. A candidate the SSOT does not own is REFUSED fail-closed with no partial write. Re-running writes zero files (no diff). (ii) systemd/user/mosaic-wake.service — the long-lived detector daemon (detector.sh run). Per-class SLO lives inside the daemon, not a systemd interval; it is a SERVICE not a timer, so blank-reset does not apply. (iii) blank-reset idiom on the legacy mosaic-heartbeat@<agent>.timer cadence drop-in during the §5 overlap->retire lifecycle (empty OnUnitActiveSec= reset before the new value => exactly one OnUnitActiveUSec), with a reset->verify->retire acceptance path (retire LAST, only on §4-vector pass). (iv) snapshot-guard — a reap/clean-checkout of a deployed unit is REFUSED without a prior snapshot (the deployed-from-uncommitted failure class). (v) fail-closed alarm-target + HMAC-key install-validation (G1/G2a): the operator W6 alarm sink must be configured + reachable and the W3/W7 HMAC key must resolve BY NAME; missing/unreachable => FAIL LOUD. The installer ships/writes NO endpoint value and NO secret, and echoes neither. Red-first harness test-wake-install.sh (6 groups) wired into test:framework-shell; Gate-A parity extended to prove bash+TS both resolve the wake component paths framework-owned. wake component manifest bumped 0.5.0 -> 0.6.0. Part of #892 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0158NZqN2n2ymKFeJAZ4GUCb
This commit is contained in:
@@ -17,8 +17,15 @@
|
||||
# 0.4.0 W5 — synthetic-canary FN-oracle + source-parity reconciler.
|
||||
# 0.5.0 W6 — off-host dead-man beacon emitter + pluggable alarm-sink adapter
|
||||
# + beacon-absence alarm (fail-loud on unconfigured/unreachable).
|
||||
# 0.6.0 W7 — A10 idempotent, fail-closed component installer (Gate-A
|
||||
# intersect+validate against the framework-manifest SSOT), the
|
||||
# mosaic-wake.service detector daemon, the blank-reset retire idiom
|
||||
# for the legacy heartbeat timer + snapshot-guard, and fail-closed
|
||||
# alarm-target/HMAC-key install-validation. Also folds in the two W6
|
||||
# monitor-integration observations (monitor-side ingested_ts
|
||||
# staleness + beacon HMAC-verify at record).
|
||||
component=wake
|
||||
version=0.5.0
|
||||
version=0.6.0
|
||||
|
||||
# Watch-list schema this component consumes, and the INCLUSIVE range of
|
||||
# schema_version values it supports. A wake-watch-list.json whose schema_version
|
||||
@@ -58,5 +65,15 @@ schema_max=1
|
||||
# A same-host sibling is REJECTED as non-independent; an
|
||||
# isolated host degrades to a FLAGGED different-supervision-root
|
||||
# beacon; capture-pane is a liveness HINT only. (W6)
|
||||
# Out of scope (later waves): installer (W7 wires + install-validates the beacon
|
||||
# target that beacon.sh's fail-loud primitive is designed for).
|
||||
# wake-install.sh A10 — idempotent, fail-closed COMPONENT installer. Selects the
|
||||
# component file set and INTERSECTS-AND-VALIDATES it against the
|
||||
# single SSOT framework-manifest.txt (Gate A) — this VERSION
|
||||
# manifest authorizes no path. Ships the blank-reset retire
|
||||
# idiom (exactly-one OnUnitActiveUSec) for the legacy heartbeat
|
||||
# timer, the snapshot-guard (no reap without a snapshot), and
|
||||
# fail-closed alarm-target + HMAC-key install-validation (the
|
||||
# installer wires + install-validates the beacon target that
|
||||
# beacon.sh's fail-loud primitive is designed for). (W7)
|
||||
# Companion (framework subtree, not under tools/wake/): systemd/user/mosaic-wake.service
|
||||
# — the long-lived detector daemon unit (per-class SLO lives in
|
||||
# the daemon, NOT a systemd interval). (W7)
|
||||
|
||||
Reference in New Issue
Block a user