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 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 link + post-install validate. 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 / 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 stays systemd/** 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.sh fails 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.
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 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 link + post-install validate.** 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 / 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 stays `systemd/**` 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.sh` fails 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-shell` rc=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).
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 <[email protected]>
Claude-Session: https://claude.ai/code/session_0158NZqN2n2ymKFeJAZ4GUCb
Shipped framework artifacts must carry ZERO operator-specific context. The wake
component manifest.txt changelog carried the operator host codename "dragon-lin"
in two entries (the pre-existing 0.6.6/#924 entry inherited from main, and the
new 0.6.7/#913 entry). The standard jason|woltje|jarvis denylist missed it.
Genericize both to "wake-pilot" (the convention #920 established when it
genericized the same codename in an earlier changelog entry). Changelog
semantics, version numbers, issue refs, and inventory are all unchanged — only
the operator codename becomes generic.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_0158NZqN2n2ymKFeJAZ4GUCb
Scope/provenance — head==85886f33…; mergeable; id2 ≠ commit-author mosaic-coder; body Closes #913 + Part of #892; delta = only wake-install.sh, test-wake-install.sh, manifest.txt; manifest 0.6.6→0.6.7.
(a) dep-check fail-loud (reproduced) — missing _lib/manifest.sh → rc=1 NAMING the file + a clear REMEDY (re-seed), NOT a bare source: No such file; present → installs. I9 RED-first against pre-fix (the bare source error).
(b) systemd-search-path link+validate (reproduced) — idempotent symlink ~/.config/systemd/user/mosaic-wake.service→SSOT (2 re-installs = 1 entry); validate-systemd-path asserts search-path + well-formed unit; negative control (rm link)→rc=1; malformed unit→rc=1; systemctl --user cat probe only behind WAKE_VERIFY_USE_SYSTEMCTL=1 (warn-not-fail without a live manager). I10 RED-first.
★ #869 additive / guard-untouched — framework-manifest.txt BYTE-IDENTICAL (link target is outside mosaic-home → not a manifest-owned path; SSOT unit stays owned by systemd/**; no 2nd ownership authority); install-ordering-guard 19/19 + manifest-parity 17/17 green; install.sh untouched; no lease-broker/enforcement-hook wiring touched.
★ Firewall CLEAN (broadened grep, reproduced) — the folded cleanup genericized the operator host codename dragon-lin→wake-pilot (a pre-existing #924 leak + #913s entry — confirmed the ONLY dragon-lin in the shipped framework). Reviewer: grep -rniE jason|woltje|jarvis|dragon-lin|web1|mos-dt-0|/home/hermes|/home/jwoltje over the 3 files = 0; grep -ni dragon manifest.txt = 0. (PR body metadata also tidied post-review.)
Red-first + gates — install harness 10 groups green, I9/I10 RED→GREEN; shellcheck 0.11 clean; verify-sanitized PASS; test:framework-shell rc=0 normal. (Non-blocking caveat from reviewer: an "openssl-masked" variant is moot here — wake-install.sh has 0 openssl refs and I9/I10 are openssl-independent; the #913 delta touches no openssl/secret path.)
6-check — GO
open/mergeable base main ✓ · 2. CI TERMINAL-GREEN @ full-40 85886f338fd1fee912d9da125df230fc568bdc67 ✓ · 3. reviewer(a5368d0f)≠builder durable RoR ✓ · 4. reviewed==CI==merge-head all 85886f33 ✓ · 5. body Closes #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.
# 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, ≠ builder `mosaic-coder`) — **APPROVE, all 6 criteria PASS**, criteria 2/3/5 independently REPRODUCED:
1. **Scope/provenance** — head==`85886f33…`; mergeable; id2 ≠ commit-author `mosaic-coder`; body `Closes #913` + `Part of #892`; delta = only wake-install.sh, test-wake-install.sh, manifest.txt; manifest 0.6.6→0.6.7.
2. **(a) dep-check fail-loud (reproduced)** — missing `_lib/manifest.sh` → rc=1 NAMING the file + a clear REMEDY (re-seed), NOT a bare `source: No such file`; present → installs. I9 RED-first against pre-fix (the bare source error).
3. **(b) systemd-search-path link+validate (reproduced)** — idempotent symlink `~/.config/systemd/user/mosaic-wake.service`→SSOT (2 re-installs = 1 entry); `validate-systemd-path` asserts search-path + well-formed unit; negative control (rm link)→rc=1; malformed unit→rc=1; `systemctl --user cat` probe only behind WAKE_VERIFY_USE_SYSTEMCTL=1 (warn-not-fail without a live manager). I10 RED-first.
4. **★ #869 additive / guard-untouched** — `framework-manifest.txt` BYTE-IDENTICAL (link target is outside mosaic-home → not a manifest-owned path; SSOT unit stays owned by `systemd/**`; no 2nd ownership authority); install-ordering-guard 19/19 + manifest-parity 17/17 green; install.sh untouched; no lease-broker/enforcement-hook wiring touched.
5. **★ Firewall CLEAN (broadened grep, reproduced)** — the folded cleanup genericized the operator host codename `dragon-lin`→`wake-pilot` (a pre-existing #924 leak + #913s entry — confirmed the ONLY `dragon-lin` in the shipped framework). Reviewer: `grep -rniE jason|woltje|jarvis|dragon-lin|web1|mos-dt-0|/home/hermes|/home/jwoltje` over the 3 files = 0; `grep -ni dragon manifest.txt` = 0. (PR body metadata also tidied post-review.)
6. **Red-first + gates** — install harness 10 groups green, I9/I10 RED→GREEN; shellcheck 0.11 clean; verify-sanitized PASS; test:framework-shell rc=0 normal. (Non-blocking caveat from reviewer: an "openssl-masked" variant is moot here — wake-install.sh has 0 openssl refs and I9/I10 are openssl-independent; the #913 delta touches no openssl/secret path.)
## 6-check — GO
1. open/mergeable base main ✓ · 2. **CI TERMINAL-GREEN @ full-40 `85886f338fd1fee912d9da125df230fc568bdc67`** ✓ · 3. reviewer(`a5368d0f`)≠builder durable RoR ✓ · 4. reviewed==CI==merge-head all `85886f33` ✓ · 5. body `Closes #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.**
Ghost
approved these changes 2026-07-26 12:37:28 +00:00
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.
GO — Gate-16 id-11 stamp, pinned to exact FULL head 85886f338fd1fee912d9da125df230fc568bdc67.
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.
Ghost
merged commit 0ea41e848b into main2026-07-26 12:37:30 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.