fix(wake): #913 installer adoption gaps — _lib dep-check fail-loud + mosaic-wake.service systemd-search-path link+validate
Some checks failed
ci/woodpecker/pr/ci Pipeline was canceled
Some checks failed
ci/woodpecker/pr/ci Pipeline was canceled
Two non-blocking wake-canon adoption gaps surfaced by the dragon-lin pilot in the A10 component installer (wake-install.sh). Both fixes are ADDITIVE per #869: framework-manifest.txt ownership, the install-ordering-guard, and the bash/TS manifest parity contract are all UNCHANGED. (a) DEP-CHECK — wake-install.sh sourced the shared framework-manifest reader (_lib/manifest.sh) unconditionally, so an older host seed that predates that helper aborted with a bare, obscure `source: No such file or directory`. It now checks the library FIRST and FAILS LOUD naming the missing file + the remedy (re-seed the framework, then retry --component wake). The dependency is genuinely required (Gate A cannot be skipped on an enforcement path), so it fails loud rather than degrading. (b) SYSTEMD SEARCH PATH — wi_install copies mosaic-wake.service under mosaic home (systemd/user/, framework-owned) but `systemctl --user` searches ~/.config/systemd/user/, so the unit was invisible and could not be enabled/started. install now LINKS the unit into the user systemd search path (symlink -> the mosaic-home SSOT copy, so upgrades propagate) and post-install VALIDATES it resolves (search-path entry exists, dereferences to a readable, well-formed unit; an opportunistic `systemctl --user cat` probe runs only behind a guard, since the installer may run where no user manager is live). Both steps are idempotent (a re-install neither duplicates nor breaks the link). #869 ADDITIVE: the link target lives OUTSIDE mosaic home, so it is not a framework-manifest path — ownership of the SSOT unit stays systemd/** in the single framework-manifest.txt authority; NO new owned path, NO second authority. Red-first: test-wake-install.sh gains I9 (a: missing _lib/manifest.sh fails loud naming dep + remedy, not a bare source error; positive control installs) and I10 (b: install links the unit into the search path + validate resolves; negative control catches a not-in-path unit; idempotent re-install). Both go RED against the prior code and GREEN after. Wake component manifest.txt bumped 0.6.6 -> 0.6.7 (VERSION metadata only). Closes #913 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:
@@ -122,8 +122,34 @@
|
||||
# wedge — #920's core property is preserved). digest.sh is the
|
||||
# ONLY file changed; store.sh/beacon.sh/reconcile.sh are
|
||||
# UNCHANGED (beacon.sh's adapter contract is reused, not modified).
|
||||
# 0.6.7 #913 wake-install.sh installer ADOPTION-GAP fixes (dragon-lin pilot,
|
||||
# non-blocking, ADDITIVE per #869). (a) DEP-CHECK: the installer
|
||||
# sourced _lib/manifest.sh (the shared framework-manifest reader it
|
||||
# needs for Gate A) unconditionally, so an older host seed that
|
||||
# predates that helper aborted with a bare, obscure
|
||||
# `source: No such file or directory`. It now checks the library
|
||||
# FIRST and FAILS LOUD naming the missing file + the remedy (re-seed
|
||||
# the framework, then retry --component wake) — the dependency is
|
||||
# genuinely required (Gate A cannot be skipped on an enforcement
|
||||
# path), so it fails loud rather than degrading. (b) SYSTEMD SEARCH
|
||||
# PATH: wi_install copies mosaic-wake.service under mosaic home
|
||||
# (systemd/user/, framework-owned) but `systemctl --user` searches
|
||||
# ~/.config/systemd/user/, so the unit was invisible and could not be
|
||||
# enabled/started. install now LINKS the unit into the user systemd
|
||||
# search path (symlink -> the mosaic-home SSOT copy, so upgrades
|
||||
# propagate) and VALIDATES it resolves (search-path entry exists,
|
||||
# dereferences to a readable, well-formed unit; an opportunistic
|
||||
# `systemctl --user cat` probe runs only behind a guard, since the
|
||||
# installer may run where no user manager is live). Both steps are
|
||||
# idempotent (a re-install neither duplicates nor breaks the link).
|
||||
# #869 ADDITIVE: the link target lives OUTSIDE mosaic home, so it is
|
||||
# not a framework-manifest path; ownership of the SSOT unit stays
|
||||
# systemd/** in the single framework-manifest.txt authority — NO new
|
||||
# owned path, NO second ownership authority. framework-manifest.txt,
|
||||
# the install-ordering-guard, and the manifest parity contract are all
|
||||
# UNCHANGED. Only wake-install.sh (+ test-wake-install.sh) changed.
|
||||
component=wake
|
||||
version=0.6.6
|
||||
version=0.6.7
|
||||
|
||||
# Watch-list schema this component consumes, and the INCLUSIVE range of
|
||||
# schema_version values it supports. A wake-watch-list.json whose schema_version
|
||||
@@ -183,7 +209,11 @@ schema_max=1
|
||||
# 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)
|
||||
# beacon.sh's fail-loud primitive is designed for). Fails loud
|
||||
# if the required _lib/manifest.sh helper is absent (older host
|
||||
# seed) instead of a bare source error, and LINKS the unit into
|
||||
# the user systemd search path + post-install-validates it
|
||||
# resolves (#913). (W7, #913)
|
||||
# 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