fix(wake): #913 installer adoption gaps — _lib dep-check fail-loud + mosaic-wake.service systemd-search-path link+validate #930
Reference in New Issue
Block a user
Delete Branch "fix/wake-913-adoption-gaps"
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?
Closes #913; Part of #892.
Two non-blocking wake-canon adoption gaps in the A10 component installer (wake-install.sh), surfaced by the wake-pilot pilot. 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) _lib dependency-check — fail loud, not a bare source error. wake-install.sh sourced the shared framework-manifest reader (
_lib/manifest.sh) unconditionally, so an older host seed that predates that helper aborted with an obscuresource: 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 link + post-install validate. wi_install copies mosaic-wake.service under mosaic home (
systemd/user/, framework-owned) butsystemctl --usersearches~/.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 opportunisticsystemctl --user catprobe 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 / single ownership authority. The link target (
~/.config/systemd/user/<unit>) lives OUTSIDE mosaic home, so it is NOT a framework-manifest path (the manifest is mosaic-home-relative). Ownership of the SSOT unit stayssystemd/**in the single framework-manifest.txt authority — NO new owned path, NO second ownership authority, so framework-manifest.txt + the parity tests need no change.Red-first. test-wake-install.sh gains I9 (a: missing
_lib/manifest.shfails loud naming dep + remedy, not a bare source error; positive control installs normally) 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.Gates. shellcheck 0.11.0 clean on changed shell files; verify-sanitized PASS;
test:framework-shellrc=0 (normal + openssl-masked); install-ordering-guard (19) + manifest-parity (17) vitest specs green (untouched). Wake component manifest.txt bumped 0.6.6 -> 0.6.7 (VERSION metadata only).Record of Review — PR #930 (issue #913): installer adoption gaps + firewall cleanup — FINAL, CI-GREEN
VERDICT: APPROVE — GO. REVIEWED-HEAD (full-40):
85886f338fd1fee912d9da125df230fc568bdc67. CI: TERMINAL-GREEN (pipeline 2081).Review basis
Independent reviewer
a5368d0f(opus, ≠ buildermosaic-coder) — APPROVE, all 6 criteria PASS, criteria 2/3/5 independently REPRODUCED:85886f33…; mergeable; id2 ≠ commit-authormosaic-coder; bodyCloses #913+Part of #892; delta = only wake-install.sh, test-wake-install.sh, manifest.txt; manifest 0.6.6→0.6.7._lib/manifest.sh→ rc=1 NAMING the file + a clear REMEDY (re-seed), NOT a baresource: No such file; present → installs. I9 RED-first against pre-fix (the bare source error).~/.config/systemd/user/mosaic-wake.service→SSOT (2 re-installs = 1 entry);validate-systemd-pathasserts search-path + well-formed unit; negative control (rm link)→rc=1; malformed unit→rc=1;systemctl --user catprobe only behind WAKE_VERIFY_USE_SYSTEMCTL=1 (warn-not-fail without a live manager). I10 RED-first.framework-manifest.txtBYTE-IDENTICAL (link target is outside mosaic-home → not a manifest-owned path; SSOT unit stays owned bysystemd/**; no 2nd ownership authority); install-ordering-guard 19/19 + manifest-parity 17/17 green; install.sh untouched; no lease-broker/enforcement-hook wiring touched.dragon-lin→wake-pilot(a pre-existing #924 leak + #913s entry — confirmed the ONLYdragon-linin the shipped framework). Reviewer:grep -rniE jason|woltje|jarvis|dragon-lin|web1|mos-dt-0|/home/hermes|/home/jwoltjeover the 3 files = 0;grep -ni dragon manifest.txt= 0. (PR body metadata also tidied post-review.)6-check — GO
85886f338fd1fee912d9da125df230fc568bdc67✓ · 3. reviewer(a5368d0f)≠builder durable RoR ✓ · 4. reviewed==CI==merge-head all85886f33✓ · 5. bodyCloses #913+Part of #892✓ · 6. queue-guard at merge.GO for id-11 + squash-merge at FULL-40
85886f338fd1fee912d9da125df230fc568bdc67. Closes #913 (installer adoption gaps: _lib dep-check fail-loud + mosaic-wake.service systemd-search-path link+validate) + folds a framework-firewall cleanup (dragon-lin→wake-pilot). Non-executor.GO — Gate-16 id-11 stamp, pinned to exact FULL head
85886f338f.Basis: verbatim FINAL RoR (comment 19235) — independent review APPROVE 6/6 with criteria reproduced: dep-check fails loud naming the missing file and remedy; systemd-path link idempotent with post-install validation; and the BROADENED firewall sweep (names + host codenames + paths + endpoints) returns zero — the dragon-lin changelog leak genericized and confirmed the only operator artifact in the shipped framework. #869 posture additive-proven (framework-manifest byte-identical; guard 19 + parity 17 green; install.sh core untouched). Closes #913. The firewall process gap that let the leak through was self-reported by MS-LEAD and fixed at the category level in all briefs — the governance working as designed. Part of #892. Named executor: Mos (id-11), squash pinned.