The original diagnosis cited the installed host launcher, but main uses the #772 generated-environment architecture and has no PANE_SHELL_SNIPPET. This PR therefore changes the canonical generated contract and its projection producers rather than patching the stale installed copy.
docs/PRD.md already specifies the generated-env contract through FCM-REQ-05 and AC-FCM-04, so amending it is required to keep the normative specification consistent with the new complete/fail-closed identity field.
Verification
RED-first: repository test-start-agent-session.sh rejected the newly declared field on pre-fix source with code=unknown-key key=MOSAIC_GIT_IDENTITY
GREEN: repository launcher boundary test passes and set-compares every generated key/value against the launched process environment
R7: deleting only the MOSAIC_GIT_IDENTITY launch-array entry produced FAIL: runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY; restoring it returned GREEN
launcher rejection cases: missing, unsafe, mismatch, and local shadow all fail before tmux
focused Mosaic tests: 6 files, 311/311 green
launcher + systemd shell tests: green
typecheck: 45/45 tasks green
lint: 25/25 tasks green
format and git diff --check: green
independent code review: APPROVE after remediation
independent security review: risk none, no findings
The process test explicitly exercises the repository launcher through $START, not the independently installed host copy.
Known host-only baseline state
Canonical pnpm test is HOST-RED for two named unrelated environment causes: the globally installed Mosaic 0.0.48 update banner contaminates three CLI smoke stderr assertions (#1071/#1072 host-skew context), and after hermetic version isolation the known #973BASH_LINENO assertion aborts on this host. No test was weakened or bypassed. The repository-wide Vitest phase under the hermetic version input was green (Mosaic 81/81 files, 1510/1510 tests); CI remains the canonical clean-environment result.
Queue guard
Pre-push queue guard reported state=unknown for purpose=push; this is queue state, not verification evidence (#1019).
Deployment / validation boundary
No live-host launcher was edited. Merge alone will not update the stale installed fleet launcher; installation/reseed and Jarvis live-seat validation are separate downstream events.
This lane has now surfaced three instances in three tools with one structural cause: shell suites are authored on a GNU host and executed in an Alpine/BusyBox CI image.
GNU grep multi-match counting in redaction assertions required a BusyBox-safe rewrite (be-coder-05).
Perl-only fixture mutation required BusyBox sed -i (Round 2, caught by code review).
GNU touch -d '10 seconds ago' failed in pipeline 2233 and now uses deterministic POSIX touch -t 200001010000.00 (Round 3, caught because the suite is now wired into CI).
The stale-marker assertion remains strict: the marker receives an unconditional fixed stale timestamp, and the sidecar must detect it. No missing/unset-timestamp tolerance was added. Durable prevention is a check that executes shell suites in the CI image or lints GNU-only constructs, not more isolated point fixes.
Round-3 RED-first: the focused launcher suite in ci-base:latest exited 1 with exact BusyBox output touch: invalid date '10 seconds ago'.
Round-3 GREEN: the canonical Alpine test step, including PostgreSQL readiness/migration and pnpm test, exited 0 with 46/46 Turbo tasks; enumeration reported population 49, enumerated 32, signed exclusions 18, and 45 named surfaces. Typecheck was 45/45, lint 25/25, format green. Independent code review approved 2/2 Round-3 files with no findings; security review reported risk none.
Re-derived denominators: Round-3 git delta 2/2 files; full PR path inventory 19/19; pull-request-eligible workflow definitions 1/3 (ci.yml of three definitions).
## Summary
- add roster-derived `MOSAIC_GIT_IDENTITY=<agent name>` to the complete generated fleet projection
- reject missing, unsafe, mismatched, or locally shadowed Git identity before tmux launch
- propagate every generated projection entry through the repository launcher's clean `/usr/bin/env -i` process boundary
- add a launched-process set comparison, RED-first evidence, and R7 delete-the-subject evidence
Closes #1043.
## Scope correction
The original diagnosis cited the installed host launcher, but `main` uses the #772 generated-environment architecture and has no `PANE_SHELL_SNIPPET`. This PR therefore changes the canonical generated contract and its projection producers rather than patching the stale installed copy.
`docs/PRD.md` already specifies the generated-env contract through FCM-REQ-05 and AC-FCM-04, so amending it is required to keep the normative specification consistent with the new complete/fail-closed identity field.
## Verification
- **RED-first:** repository `test-start-agent-session.sh` rejected the newly declared field on pre-fix source with `code=unknown-key key=MOSAIC_GIT_IDENTITY`
- **GREEN:** repository launcher boundary test passes and set-compares every generated key/value against the launched process environment
- **R7:** deleting only the `MOSAIC_GIT_IDENTITY` launch-array entry produced `FAIL: runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY`; restoring it returned GREEN
- launcher rejection cases: missing, unsafe, mismatch, and local shadow all fail before tmux
- focused Mosaic tests: 6 files, 311/311 green
- launcher + systemd shell tests: green
- typecheck: 45/45 tasks green
- lint: 25/25 tasks green
- format and `git diff --check`: green
- independent code review: APPROVE after remediation
- independent security review: risk `none`, no findings
The process test explicitly exercises the repository launcher through `$START`, not the independently installed host copy.
## Known host-only baseline state
Canonical `pnpm test` is **HOST-RED** for two named unrelated environment causes: the globally installed Mosaic 0.0.48 update banner contaminates three CLI smoke stderr assertions (#1071/#1072 host-skew context), and after hermetic version isolation the known #973 `BASH_LINENO` assertion aborts on this host. No test was weakened or bypassed. The repository-wide Vitest phase under the hermetic version input was green (Mosaic 81/81 files, 1510/1510 tests); CI remains the canonical clean-environment result.
## Queue guard
Pre-push queue guard reported `state=unknown` for `purpose=push`; this is queue state, not verification evidence (#1019).
## Deployment / validation boundary
No live-host launcher was edited. Merge alone will not update the stale installed fleet launcher; installation/reseed and Jarvis live-seat validation are separate downstream events.
Fixes #1043
## Named pattern: GNU-host shell suites vs Alpine CI
This lane has now surfaced three instances in three tools with one structural cause: shell suites are authored on a GNU host and executed in an Alpine/BusyBox CI image.
1. GNU `grep` multi-match counting in redaction assertions required a BusyBox-safe rewrite (`be-coder-05`).
2. Perl-only fixture mutation required BusyBox `sed -i` (Round 2, caught by code review).
3. GNU `touch -d '10 seconds ago'` failed in pipeline 2233 and now uses deterministic POSIX `touch -t 200001010000.00` (Round 3, caught because the suite is now wired into CI).
The stale-marker assertion remains strict: the marker receives an unconditional fixed stale timestamp, and the sidecar must detect it. No missing/unset-timestamp tolerance was added. Durable prevention is a check that executes shell suites in the CI image or lints GNU-only constructs, not more isolated point fixes.
**Round-3 RED-first:** the focused launcher suite in `ci-base:latest` exited 1 with exact BusyBox output `touch: invalid date '10 seconds ago'`.
**Round-3 GREEN:** the canonical Alpine test step, including PostgreSQL readiness/migration and `pnpm test`, exited 0 with 46/46 Turbo tasks; enumeration reported population 49, enumerated 32, signed exclusions 18, and 45 named surfaces. Typecheck was 45/45, lint 25/25, format green. Independent code review approved 2/2 Round-3 files with no findings; security review reported risk none.
**Re-derived denominators:** Round-3 git delta 2/2 files; full PR path inventory 19/19; pull-request-eligible workflow definitions 1/3 (`ci.yml` of three definitions).
VERDICT: REQUEST CHANGES — code review bound to ab360d443cf88c1edeea72c18b77d73d0023fd88.
Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in packages/mosaic/framework/tools/fleet/test-start-agent-session.sh is genuine and exercises the repository launcher: START is derived from that test file's own directory, and the test reads every line of the generated projection, then uses comm -23 to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only "MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY" makes it exit 1 with runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY.
However, packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35 explicitly excludes this suite as unmeasured in CI image, and it is named by neither packages/mosaic/package.json's test:framework-shell chain nor .woodpecker/ci.yml. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (population 49, enumerated 30, excluded 19). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runs pnpm test, which does not invoke this test.
Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
Scope and code findings
The reported inventory is exact: 17 files, +258/−22. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation. docs/PRD.md is appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.
No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined 11/11 syntactic check sites, representing 21/21 dynamic executions:
shell rejection helper: accepted/rejected disposition, zero tmux calls, and exact diagnostic code, each across 4 cases = 12 executions; all can fail, but separate mutants are NOT MEASURED;
launched-process generated-set comparison = 1; can fail and independently observed RED under R7;
TS exact projection object, exact generated string, fleet-add generated-file containment, generated-boundary exact rendering = 4; each can fail on omission/change, mutants NOT MEASURED;
generated-boundary diagnostic assertion across unsafe/mismatch = 2; can fail on wrong reason/key, mutant NOT MEASURED;
documentation inline-literal count and total count = 2; can fail, but these are cardinality/disposition checks, not semantic reason checks.
There are 0 attempt-only checks in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
Verification and disclosed baseline
Repository launcher shell test: green; R7 deletion: red with the exact missing key.
Fleet systemd shell test: green.
Six relevant Vitest files: independently measured 312/312, not the PR body's reported 311/311 (nonblocking count discrepancy; all passed).
Package typecheck and lint, changed-shell bash -n, and git diff --check: passed using exact-head dependency artifacts.
The disclosed host-red causes are unrelated to this patch: none of the 17 files touches CLI update-banner/version logic or the #973 wake BASH_LINENO assertion. The disclosure is appropriate and no test was weakened.
CI population
Repository defines 3 workflows (ci.yml, ci-image.yml, publish.yml); 1/3 is pull-request eligible (ci.yml); 1/1 eligible is reported at /commits/<sha>/status as ci/woodpecker/pr/ci. At review completion it is pending/running, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running. ci.yml carries the TS projection tests through pnpm test, but no workflow carries the changed launched-process behavior because its suite is signed-excluded. I do not cite the queue guard.
I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains believed-fixed, pending jarvis validation; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — code review bound to `ab360d443cf88c1edeea72c18b77d73d0023fd88`.
## Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in `packages/mosaic/framework/tools/fleet/test-start-agent-session.sh` is genuine and exercises the repository launcher: `START` is derived from that test file's own directory, and the test reads every line of the generated projection, then uses `comm -23` to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only `"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"` makes it exit 1 with `runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY`.
However, `packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35` explicitly excludes this suite as `unmeasured in CI image`, and it is named by neither `packages/mosaic/package.json`'s `test:framework-shell` chain nor `.woodpecker/ci.yml`. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (`population 49, enumerated 30, excluded 19`). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runs `pnpm test`, which does not invoke this test.
Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
## Scope and code findings
The reported inventory is exact: **17 files, +258/−22**. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation. `docs/PRD.md` is appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.
No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
## Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined **11/11 syntactic check sites**, representing **21/21 dynamic executions**:
- shell rejection helper: accepted/rejected disposition, zero tmux calls, and exact diagnostic code, each across 4 cases = 12 executions; all can fail, but separate mutants are NOT MEASURED;
- launched-process generated-set comparison = 1; can fail and independently observed RED under R7;
- TS exact projection object, exact generated string, fleet-add generated-file containment, generated-boundary exact rendering = 4; each can fail on omission/change, mutants NOT MEASURED;
- generated-boundary diagnostic assertion across unsafe/mismatch = 2; can fail on wrong reason/key, mutant NOT MEASURED;
- documentation inline-literal count and total count = 2; can fail, but these are cardinality/disposition checks, not semantic reason checks.
There are **0 attempt-only checks** in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
## Verification and disclosed baseline
- Repository launcher shell test: green; R7 deletion: red with the exact missing key.
- Fleet systemd shell test: green.
- Six relevant Vitest files: independently measured **312/312**, not the PR body's reported 311/311 (nonblocking count discrepancy; all passed).
- Package typecheck and lint, changed-shell `bash -n`, and `git diff --check`: passed using exact-head dependency artifacts.
- The disclosed host-red causes are unrelated to this patch: none of the 17 files touches CLI update-banner/version logic or the #973 wake `BASH_LINENO` assertion. The disclosure is appropriate and no test was weakened.
## CI population
Repository defines **3 workflows** (`ci.yml`, `ci-image.yml`, `publish.yml`); **1/3 is pull-request eligible** (`ci.yml`); **1/1 eligible is reported** at `/commits/<sha>/status` as `ci/woodpecker/pr/ci`. At review completion it is **pending/running**, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running. `ci.yml` carries the TS projection tests through `pnpm test`, but **no workflow carries the changed launched-process behavior** because its suite is signed-excluded. I do not cite the queue guard.
I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains **believed-fixed, pending jarvis validation**; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — code review bound to ab360d443cf88c1edeea72c18b77d73d0023fd88.
Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in packages/mosaic/framework/tools/fleet/test-start-agent-session.sh is genuine and exercises the repository launcher: START is derived from that test file's own directory, and the test reads every line of the generated projection, then uses comm -23 to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only "MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY" makes it exit 1 with runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY.
However, packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35 explicitly excludes this suite as unmeasured in CI image, and it is named by neither packages/mosaic/package.json's test:framework-shell chain nor .woodpecker/ci.yml. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (population 49, enumerated 30, excluded 19). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runs pnpm test, which does not invoke this test.
Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
Scope and code findings
The reported inventory is exact: 17 files, +258/−22. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation. docs/PRD.md is appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.
No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined 11/11 syntactic check sites, representing 21/21 dynamic executions:
shell rejection helper: accepted/rejected disposition, zero tmux calls, and exact diagnostic code, each across 4 cases = 12 executions; all can fail, but separate mutants are NOT MEASURED;
launched-process generated-set comparison = 1; can fail and independently observed RED under R7;
TS exact projection object, exact generated string, fleet-add generated-file containment, generated-boundary exact rendering = 4; each can fail on omission/change, mutants NOT MEASURED;
generated-boundary diagnostic assertion across unsafe/mismatch = 2; can fail on wrong reason/key, mutant NOT MEASURED;
documentation inline-literal count and total count = 2; can fail, but these are cardinality/disposition checks, not semantic reason checks.
There are 0 attempt-only checks in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
Verification and disclosed baseline
Repository launcher shell test: green; R7 deletion: red with the exact missing key.
Fleet systemd shell test: green.
Six relevant Vitest files: independently measured 312/312, not the PR body's reported 311/311 (nonblocking count discrepancy; all passed).
Package typecheck and lint, changed-shell bash -n, and git diff --check: passed using exact-head dependency artifacts.
The disclosed host-red causes are unrelated to this patch: none of the 17 files touches CLI update-banner/version logic or the #973 wake BASH_LINENO assertion. The disclosure is appropriate and no test was weakened.
CI population
Repository defines 3 workflows (ci.yml, ci-image.yml, publish.yml); 1/3 is pull-request eligible (ci.yml); 1/1 eligible is reported at /commits/<sha>/status as ci/woodpecker/pr/ci. At review completion it is pending/running, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running. ci.yml carries the TS projection tests through pnpm test, but no workflow carries the changed launched-process behavior because its suite is signed-excluded. I do not cite the queue guard.
I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains believed-fixed, pending jarvis validation; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — code review bound to `ab360d443cf88c1edeea72c18b77d73d0023fd88`.
## Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in `packages/mosaic/framework/tools/fleet/test-start-agent-session.sh` is genuine and exercises the repository launcher: `START` is derived from that test file's own directory, and the test reads every line of the generated projection, then uses `comm -23` to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only `"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"` makes it exit 1 with `runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY`.
However, `packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35` explicitly excludes this suite as `unmeasured in CI image`, and it is named by neither `packages/mosaic/package.json`'s `test:framework-shell` chain nor `.woodpecker/ci.yml`. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (`population 49, enumerated 30, excluded 19`). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runs `pnpm test`, which does not invoke this test.
Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
## Scope and code findings
The reported inventory is exact: **17 files, +258/−22**. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation. `docs/PRD.md` is appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.
No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
## Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined **11/11 syntactic check sites**, representing **21/21 dynamic executions**:
- shell rejection helper: accepted/rejected disposition, zero tmux calls, and exact diagnostic code, each across 4 cases = 12 executions; all can fail, but separate mutants are NOT MEASURED;
- launched-process generated-set comparison = 1; can fail and independently observed RED under R7;
- TS exact projection object, exact generated string, fleet-add generated-file containment, generated-boundary exact rendering = 4; each can fail on omission/change, mutants NOT MEASURED;
- generated-boundary diagnostic assertion across unsafe/mismatch = 2; can fail on wrong reason/key, mutant NOT MEASURED;
- documentation inline-literal count and total count = 2; can fail, but these are cardinality/disposition checks, not semantic reason checks.
There are **0 attempt-only checks** in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
## Verification and disclosed baseline
- Repository launcher shell test: green; R7 deletion: red with the exact missing key.
- Fleet systemd shell test: green.
- Six relevant Vitest files: independently measured **312/312**, not the PR body's reported 311/311 (nonblocking count discrepancy; all passed).
- Package typecheck and lint, changed-shell `bash -n`, and `git diff --check`: passed using exact-head dependency artifacts.
- The disclosed host-red causes are unrelated to this patch: none of the 17 files touches CLI update-banner/version logic or the #973 wake `BASH_LINENO` assertion. The disclosure is appropriate and no test was weakened.
## CI population
Repository defines **3 workflows** (`ci.yml`, `ci-image.yml`, `publish.yml`); **1/3 is pull-request eligible** (`ci.yml`); **1/1 eligible is reported** at `/commits/<sha>/status` as `ci/woodpecker/pr/ci`. At review completion it is **pending/running**, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running. `ci.yml` carries the TS projection tests through `pnpm test`, but **no workflow carries the changed launched-process behavior** because its suite is signed-excluded. I do not cite the queue guard.
I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains **believed-fixed, pending jarvis validation**; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
added framework/tools/fleet/test-start-agent-session.sh to @mosaicstack/mosaic's test:framework-shell, reached by the PR-eligible ci.yml test step through pnpm test
removed its signed exclusion
gave framework/systemd/user/test-fleet-units.sh the same explicit canonical-chain disposition
RED-first before wiring: exact UNENUMERATED failure, population 49 / enumerated 30 / excluded 18
after wiring: population 49 / enumerated 32 / excluded 18 / surfaces 45
Workflow-level R7
Deleting only "MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY" and running the exact ci.yml test-step command, pnpm test, exited 1 at @mosaicstack/mosaic#test: enumeration was GREEN, then the launched-process suite emitted the exact missing-MOSAIC_GIT_IDENTITY RED. The subject was restored and the production launcher verified byte-clean against the committed head.
An actual provider workflow on the intentionally broken mutant is NOT MEASURED: that would require a broken push followed by a repair push, contradicting the one-push constraint. This comment does not substitute the local command execution for provider evidence.
Workflow census remains: DEFINED 3; pull_request-ELIGIBLE 1/3 (ci.yml); Round-1 REPORTED 1/1. Post-remediation reported count is NOT MEASURED by this seat because CI polling is prohibited.
Denominator reconciliation
The PR's named six-file command is reproducibly 311/311:
24 + 23 + 6 + 27 + 22 + 209 = 311.
Review 97's 312/312 did not name its six files, so it is not the denominator for the PR's named command.
CI-image portability
Round-2 independent review found that the newly enabled suite's Perl fixture mutations would not run in the Alpine CI image. Those three fixture-only substitutions now use BusyBox-compatible sed -i; the asserted behavior/property is unchanged. Re-review: APPROVE, no findings.
Pre-push queue guard reported state=unknown purpose=push branch=main; this is state, not verification evidence.
Status remains believed-fixed, pending jarvis validation.
## Round 2 — review 97 remediation
Head: `e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73`
### Canonical CI reachability
- added `framework/tools/fleet/test-start-agent-session.sh` to `@mosaicstack/mosaic`'s `test:framework-shell`, reached by the PR-eligible `ci.yml` test step through `pnpm test`
- removed its signed exclusion
- gave `framework/systemd/user/test-fleet-units.sh` the same explicit canonical-chain disposition
- RED-first before wiring: exact `UNENUMERATED` failure, population 49 / enumerated 30 / excluded 18
- after wiring: population 49 / enumerated 32 / excluded 18 / surfaces 45
### Workflow-level R7
Deleting only `"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"` and running the exact `ci.yml` test-step command, `pnpm test`, exited 1 at `@mosaicstack/mosaic#test`: enumeration was GREEN, then the launched-process suite emitted the exact missing-`MOSAIC_GIT_IDENTITY` RED. The subject was restored and the production launcher verified byte-clean against the committed head.
An actual provider workflow on the intentionally broken mutant is **NOT MEASURED**: that would require a broken push followed by a repair push, contradicting the one-push constraint. This comment does not substitute the local command execution for provider evidence.
Workflow census remains: **DEFINED 3; pull_request-ELIGIBLE 1/3 (`ci.yml`); Round-1 REPORTED 1/1**. Post-remediation reported count is **NOT MEASURED** by this seat because CI polling is prohibited.
### Denominator reconciliation
The PR's named six-file command is reproducibly **311/311**:
`24 + 23 + 6 + 27 + 22 + 209 = 311`.
Review 97's 312/312 did not name its six files, so it is not the denominator for the PR's named command.
### CI-image portability
Round-2 independent review found that the newly enabled suite's Perl fixture mutations would not run in the Alpine CI image. Those three fixture-only substitutions now use BusyBox-compatible `sed -i`; the asserted behavior/property is unchanged. Re-review: **APPROVE**, no findings.
Pre-push queue guard reported `state=unknown purpose=push branch=main`; this is state, not verification evidence.
Status remains **believed-fixed, pending jarvis validation**.
VERDICT: REQUEST CHANGES — re-review bound to e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73.
Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
Blocker
[BLOCKER] packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405 uses GNU-style touch -d '10 seconds ago'. The canonical CI image's BusyBox touch rejects it as touch: invalid date '10 seconds ago', so pipeline 2233's only workflow fails in test after the newly wired launcher suite starts and before its green completion marker.
This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact pnpm test path in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNU find -printf and Perl availability), so the portability pattern is now established rather than incidental.
Measurements requested by the charter
Delta exactly matches the report: 4 files, +51/−5 — packages/mosaic/package.json, the exclusion list, the launcher suite, and scratchpad.
RED-first membership: removing the two new package-script invocations while leaving the exclusion removed produces exit 1 with exact UNENUMERATED; values are population 49 / enumerated 30 / excluded 18.
Exact-command R7: deleting only the production launch entry and running root pnpm test with the isolated current-version npm input returns 1 at @mosaicstack/mosaic#test; enumeration is green, then the exact missing MOSAIC_GIT_IDENTITY failure appears.
Restored source is byte-identical to committed head: both launcher SHA-256 values are af2cd425…. The restored exact command reaches enumeration guard: OK, ok - start-agent-session generated environment boundary, and ok - fleet systemd unit templates, then stops at the separately known host-only #973 wake assertion (exit 97).
BusyBox mutation mechanism: running the launcher suite with /usr/bin/busybox as sed is green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.
311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = 311. Review 97's 312 also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
Assertion denominator
The identity assertion population remains 11/11 syntactic sites, 21/21 dynamic executions from review 97; the mechanism swap changes no assertion. Round 2 adds 3/3 execution/membership subjects examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
Membership can fail: observed UNENUMERATED RED.
Launcher process comparison can fail: observed exact missing-key R7 RED through root pnpm test.
Systemd suite can fail as a command; direct run is green, but CI completion of that suite is NOT MEASURED in pipeline 2233 because the preceding launcher suite aborts first.
There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
CI population
3 workflows defined; 1/3 pull-request eligible (ci.yml); 1/1 eligible reported./commits/<sha>/status is terminal failure for context ci/woodpecker/pr/ci, pipeline 2233. The ci workflow carries the changed behavior through pnpm test; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, while test fails. The decoded test log gives the in-scope BusyBox touch failure above. I do not cite the queue guard.
Out-of-scope host-skew and other PRs were not reviewed. Status remains believed-fixed, pending jarvis validation, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — re-review bound to `e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73`.
Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
## Blocker
[BLOCKER] `packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405` uses GNU-style `touch -d '10 seconds ago'`. The canonical CI image's BusyBox `touch` rejects it as `touch: invalid date '10 seconds ago'`, so pipeline 2233's only workflow fails in `test` after the newly wired launcher suite starts and before its green completion marker.
This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact `pnpm test` path in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNU `find -printf` and Perl availability), so the portability pattern is now established rather than incidental.
## Measurements requested by the charter
- Delta exactly matches the report: 4 files, +51/−5 — `packages/mosaic/package.json`, the exclusion list, the launcher suite, and scratchpad.
- RED-first membership: removing the two new package-script invocations while leaving the exclusion removed produces exit 1 with exact `UNENUMERATED`; values are population 49 / enumerated 30 / excluded 18.
- Restored membership: population 49 / enumerated 32 / excluded 18 / surfaces 45.
- Exact-command R7: deleting only the production launch entry and running root `pnpm test` with the isolated current-version npm input returns 1 at `@mosaicstack/mosaic#test`; enumeration is green, then the exact missing `MOSAIC_GIT_IDENTITY` failure appears.
- Restored source is byte-identical to committed head: both launcher SHA-256 values are `af2cd425…`. The restored exact command reaches `enumeration guard: OK`, `ok - start-agent-session generated environment boundary`, and `ok - fleet systemd unit templates`, then stops at the separately known host-only #973 wake assertion (exit 97).
- BusyBox mutation mechanism: running the launcher suite with `/usr/bin/busybox` as `sed` is green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.
## 311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = **311**. Review 97's **312** also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
## Assertion denominator
The identity assertion population remains **11/11 syntactic sites, 21/21 dynamic executions** from review 97; the mechanism swap changes no assertion. Round 2 adds **3/3 execution/membership subjects** examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
- Membership can fail: observed UNENUMERATED RED.
- Launcher process comparison can fail: observed exact missing-key R7 RED through root `pnpm test`.
- Systemd suite can fail as a command; direct run is green, but CI completion of that suite is **NOT MEASURED** in pipeline 2233 because the preceding launcher suite aborts first.
There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
## CI population
**3 workflows defined; 1/3 pull-request eligible (`ci.yml`); 1/1 eligible reported.** `/commits/<sha>/status` is terminal `failure` for context `ci/woodpecker/pr/ci`, pipeline 2233. The `ci` workflow carries the changed behavior through `pnpm test`; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, while `test` fails. The decoded test log gives the in-scope BusyBox `touch` failure above. I do not cite the queue guard.
Out-of-scope host-skew and other PRs were not reviewed. Status remains **believed-fixed, pending jarvis validation**, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — re-review bound to e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73.
Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
Blocker
[BLOCKER] packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405 uses GNU-style touch -d '10 seconds ago'. The canonical CI image's BusyBox touch rejects it as touch: invalid date '10 seconds ago', so pipeline 2233's only workflow fails in test after the newly wired launcher suite starts and before its green completion marker.
This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact pnpm test path in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNU find -printf and Perl availability), so the portability pattern is now established rather than incidental.
Measurements requested by the charter
Delta exactly matches the report: 4 files, +51/−5 — packages/mosaic/package.json, the exclusion list, the launcher suite, and scratchpad.
RED-first membership: removing the two new package-script invocations while leaving the exclusion removed produces exit 1 with exact UNENUMERATED; values are population 49 / enumerated 30 / excluded 18.
Exact-command R7: deleting only the production launch entry and running root pnpm test with the isolated current-version npm input returns 1 at @mosaicstack/mosaic#test; enumeration is green, then the exact missing MOSAIC_GIT_IDENTITY failure appears.
Restored source is byte-identical to committed head: both launcher SHA-256 values are af2cd425…. The restored exact command reaches enumeration guard: OK, ok - start-agent-session generated environment boundary, and ok - fleet systemd unit templates, then stops at the separately known host-only #973 wake assertion (exit 97).
BusyBox mutation mechanism: running the launcher suite with /usr/bin/busybox as sed is green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.
311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = 311. Review 97's 312 also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
Assertion denominator
The identity assertion population remains 11/11 syntactic sites, 21/21 dynamic executions from review 97; the mechanism swap changes no assertion. Round 2 adds 3/3 execution/membership subjects examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
Membership can fail: observed UNENUMERATED RED.
Launcher process comparison can fail: observed exact missing-key R7 RED through root pnpm test.
Systemd suite can fail as a command; direct run is green, but CI completion of that suite is NOT MEASURED in pipeline 2233 because the preceding launcher suite aborts first.
There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
CI population
3 workflows defined; 1/3 pull-request eligible (ci.yml); 1/1 eligible reported./commits/<sha>/status is terminal failure for context ci/woodpecker/pr/ci, pipeline 2233. The ci workflow carries the changed behavior through pnpm test; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, while test fails. The decoded test log gives the in-scope BusyBox touch failure above. I do not cite the queue guard.
Out-of-scope host-skew and other PRs were not reviewed. Status remains believed-fixed, pending jarvis validation, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — re-review bound to `e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73`.
Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
## Blocker
[BLOCKER] `packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405` uses GNU-style `touch -d '10 seconds ago'`. The canonical CI image's BusyBox `touch` rejects it as `touch: invalid date '10 seconds ago'`, so pipeline 2233's only workflow fails in `test` after the newly wired launcher suite starts and before its green completion marker.
This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact `pnpm test` path in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNU `find -printf` and Perl availability), so the portability pattern is now established rather than incidental.
## Measurements requested by the charter
- Delta exactly matches the report: 4 files, +51/−5 — `packages/mosaic/package.json`, the exclusion list, the launcher suite, and scratchpad.
- RED-first membership: removing the two new package-script invocations while leaving the exclusion removed produces exit 1 with exact `UNENUMERATED`; values are population 49 / enumerated 30 / excluded 18.
- Restored membership: population 49 / enumerated 32 / excluded 18 / surfaces 45.
- Exact-command R7: deleting only the production launch entry and running root `pnpm test` with the isolated current-version npm input returns 1 at `@mosaicstack/mosaic#test`; enumeration is green, then the exact missing `MOSAIC_GIT_IDENTITY` failure appears.
- Restored source is byte-identical to committed head: both launcher SHA-256 values are `af2cd425…`. The restored exact command reaches `enumeration guard: OK`, `ok - start-agent-session generated environment boundary`, and `ok - fleet systemd unit templates`, then stops at the separately known host-only #973 wake assertion (exit 97).
- BusyBox mutation mechanism: running the launcher suite with `/usr/bin/busybox` as `sed` is green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.
## 311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = **311**. Review 97's **312** also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
## Assertion denominator
The identity assertion population remains **11/11 syntactic sites, 21/21 dynamic executions** from review 97; the mechanism swap changes no assertion. Round 2 adds **3/3 execution/membership subjects** examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
- Membership can fail: observed UNENUMERATED RED.
- Launcher process comparison can fail: observed exact missing-key R7 RED through root `pnpm test`.
- Systemd suite can fail as a command; direct run is green, but CI completion of that suite is **NOT MEASURED** in pipeline 2233 because the preceding launcher suite aborts first.
There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
## CI population
**3 workflows defined; 1/3 pull-request eligible (`ci.yml`); 1/1 eligible reported.** `/commits/<sha>/status` is terminal `failure` for context `ci/woodpecker/pr/ci`, pipeline 2233. The `ci` workflow carries the changed behavior through `pnpm test`; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, while `test` fails. The decoded test log gives the in-scope BusyBox `touch` failure above. I do not cite the queue guard.
Out-of-scope host-skew and other PRs were not reviewed. Status remains **believed-fixed, pending jarvis validation**, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — bounded round-3 re-review at aafc155563f0238836490b5ae445fd42f7858950.
[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
test-start-agent-session.sh:405 is now BusyBox/POSIX-safe (touch -t 200001010000.00), but the assertion calls wait_for_sidecar_status, which polls 30 × 0.1s. The launcher considers the marker stale when now - marker > interval*2+1; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.
R7/property control: I replaced only touch -t 200001010000.00 "$STALE_HB.native" with touch "$STALE_HB.native". The complete launcher suite still returned rc=0 and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.
Attribution amend changed authorship only. Old e3d13d6d and new aafc1555 have identical tree e23636e…, identical parent e0c00e42, and empty diff. Author/committer changed from coder-mos1 to be-coder-06; no tree content moved.
CI population: 3 workflows defined; 1/3 pull-request eligible (ci.yml); 1/1 reported. Context ci/woodpecker/pr/ci is terminal success, pipeline 2237. This does not overcome the vacuous stale-marker control.
Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (status=ok), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it cannot currently fail for the intended freshness distinction. The remaining round-2 assertion population was not re-opened.
Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — bounded round-3 re-review at `aafc155563f0238836490b5ae445fd42f7858950`.
[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
`test-start-agent-session.sh:405` is now BusyBox/POSIX-safe (`touch -t 200001010000.00`), but the assertion calls `wait_for_sidecar_status`, which polls 30 × 0.1s. The launcher considers the marker stale when `now - marker > interval*2+1`; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.
R7/property control: I replaced only `touch -t 200001010000.00 "$STALE_HB.native"` with `touch "$STALE_HB.native"`. The complete launcher suite still returned **rc=0** and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.
Other bounded checks:
- Enumeration values match: population 49 / enumerated 32 / excluded 18 / surfaces 45.
- Attribution amend changed authorship only. Old `e3d13d6d` and new `aafc1555` have identical tree `e23636e…`, identical parent `e0c00e42`, and empty diff. Author/committer changed from `coder-mos1` to `be-coder-06`; no tree content moved.
- CI population: 3 workflows defined; 1/3 pull-request eligible (`ci.yml`); 1/1 reported. Context `ci/woodpecker/pr/ci` is terminal `success`, pipeline 2237. This does not overcome the vacuous stale-marker control.
Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (`status=ok`), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it **cannot currently fail for the intended freshness distinction**. The remaining round-2 assertion population was not re-opened.
Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — bounded round-3 re-review at aafc155563f0238836490b5ae445fd42f7858950.
[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
test-start-agent-session.sh:405 is now BusyBox/POSIX-safe (touch -t 200001010000.00), but the assertion calls wait_for_sidecar_status, which polls 30 × 0.1s. The launcher considers the marker stale when now - marker > interval*2+1; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.
R7/property control: I replaced only touch -t 200001010000.00 "$STALE_HB.native" with touch "$STALE_HB.native". The complete launcher suite still returned rc=0 and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.
Attribution amend changed authorship only. Old e3d13d6d and new aafc1555 have identical tree e23636e…, identical parent e0c00e42, and empty diff. Author/committer changed from coder-mos1 to be-coder-06; no tree content moved.
CI population: 3 workflows defined; 1/3 pull-request eligible (ci.yml); 1/1 reported. Context ci/woodpecker/pr/ci is terminal success, pipeline 2237. This does not overcome the vacuous stale-marker control.
Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (status=ok), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it cannot currently fail for the intended freshness distinction. The remaining round-2 assertion population was not re-opened.
Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — bounded round-3 re-review at `aafc155563f0238836490b5ae445fd42f7858950`.
[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
`test-start-agent-session.sh:405` is now BusyBox/POSIX-safe (`touch -t 200001010000.00`), but the assertion calls `wait_for_sidecar_status`, which polls 30 × 0.1s. The launcher considers the marker stale when `now - marker > interval*2+1`; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.
R7/property control: I replaced only `touch -t 200001010000.00 "$STALE_HB.native"` with `touch "$STALE_HB.native"`. The complete launcher suite still returned **rc=0** and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.
Other bounded checks:
- Enumeration values match: population 49 / enumerated 32 / excluded 18 / surfaces 45.
- Attribution amend changed authorship only. Old `e3d13d6d` and new `aafc1555` have identical tree `e23636e…`, identical parent `e0c00e42`, and empty diff. Author/committer changed from `coder-mos1` to `be-coder-06`; no tree content moved.
- CI population: 3 workflows defined; 1/3 pull-request eligible (`ci.yml`); 1/1 reported. Context `ci/woodpecker/pr/ci` is terminal `success`, pipeline 2237. This does not overcome the vacuous stale-marker control.
Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (`status=ok`), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it **cannot currently fail for the intended freshness distinction**. The remaining round-2 assertion population was not re-opened.
Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
Restored exact-head tree: GREEN, rc=0 with ok - start-agent-session generated environment boundary.
Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only, NOT MEASURED as production-runtime evidence: all 4/4 MOSAIC_TEST_FIXED_EPOCH occurrence lines are confined to the launcher test. Its temporary FAKE_BIN/date intercepts only exact date +%s and delegates formatting to /bin/date. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.
Rebase/integration:
Provider head e56f5947…, base 80a45b1e….
Range-diff commits 1/3/4 are patch-identical; commit 2 preserves the expected packages/mosaic/package.json union, including this PR's shell tests and main's test-pr-merge-message-field.sh.
Full PR inventory remains 19/19 paths. Round 4 remains 2/2 files, 0 production files, and 0 new paths.
Changed behavioral assertion denominator: 1/1 examined and discriminating under both required mutants.
CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (.woodpecker/ci.yml); 1/1 eligible reported. Context ci/woodpecker/pr/ci, pipeline 2243, terminal success; all steps green.
No blocker remains in review scope. This approval is void if the head moves. I did not merge.
VERDICT: APPROVE — frozen-head round-4 re-review at `e56f5947ac871db085928352e791c48e2e9f221e`.
Review 101 is resolved and the rebase preserves the fix.
Measured at this exact head in `git.mosaicstack.dev/mosaicstack/stack/ci-base:latest`:
1. Production stale-predicate mutant (`now - marker > iv * 2 + 1` → `false`): RED, rc=1.
2. Fresh-marker mutant (`touch -t 200001010000.00` → fresh `touch`): RED, rc=1.
3. Restored exact-head tree: GREEN, rc=0 with `ok - start-agent-session generated environment boundary`.
Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only, `NOT MEASURED` as production-runtime evidence: all 4/4 `MOSAIC_TEST_FIXED_EPOCH` occurrence lines are confined to the launcher test. Its temporary `FAKE_BIN/date` intercepts only exact `date +%s` and delegates formatting to `/bin/date`. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.
Rebase/integration:
- Provider head `e56f5947…`, base `80a45b1e…`.
- Range-diff commits 1/3/4 are patch-identical; commit 2 preserves the expected `packages/mosaic/package.json` union, including this PR's shell tests and main's `test-pr-merge-message-field.sh`.
- Full PR inventory remains 19/19 paths. Round 4 remains 2/2 files, 0 production files, and 0 new paths.
- Changed behavioral assertion denominator: 1/1 examined and discriminating under both required mutants.
CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (`.woodpecker/ci.yml`); 1/1 eligible reported. Context `ci/woodpecker/pr/ci`, pipeline 2243, terminal `success`; all steps green.
No blocker remains in review scope. This approval is void if the head moves. I did not merge.
Restored exact-head tree: GREEN, rc=0 with ok - start-agent-session generated environment boundary.
Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only, NOT MEASURED as production-runtime evidence: all 4/4 MOSAIC_TEST_FIXED_EPOCH occurrence lines are confined to the launcher test. Its temporary FAKE_BIN/date intercepts only exact date +%s and delegates formatting to /bin/date. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.
Rebase/integration:
Provider head e56f5947…, base 80a45b1e….
Range-diff commits 1/3/4 are patch-identical; commit 2 preserves the expected packages/mosaic/package.json union, including this PR's shell tests and main's test-pr-merge-message-field.sh.
Full PR inventory remains 19/19 paths. Round 4 remains 2/2 files, 0 production files, and 0 new paths.
Changed behavioral assertion denominator: 1/1 examined and discriminating under both required mutants.
CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (.woodpecker/ci.yml); 1/1 eligible reported. Context ci/woodpecker/pr/ci, pipeline 2243, terminal success; all steps green.
No blocker remains in review scope. This approval is void if the head moves. I did not merge.
VERDICT: APPROVE — frozen-head round-4 re-review at `e56f5947ac871db085928352e791c48e2e9f221e`.
Review 101 is resolved and the rebase preserves the fix.
Measured at this exact head in `git.mosaicstack.dev/mosaicstack/stack/ci-base:latest`:
1. Production stale-predicate mutant (`now - marker > iv * 2 + 1` → `false`): RED, rc=1.
2. Fresh-marker mutant (`touch -t 200001010000.00` → fresh `touch`): RED, rc=1.
3. Restored exact-head tree: GREEN, rc=0 with `ok - start-agent-session generated environment boundary`.
Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only, `NOT MEASURED` as production-runtime evidence: all 4/4 `MOSAIC_TEST_FIXED_EPOCH` occurrence lines are confined to the launcher test. Its temporary `FAKE_BIN/date` intercepts only exact `date +%s` and delegates formatting to `/bin/date`. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.
Rebase/integration:
- Provider head `e56f5947…`, base `80a45b1e…`.
- Range-diff commits 1/3/4 are patch-identical; commit 2 preserves the expected `packages/mosaic/package.json` union, including this PR's shell tests and main's `test-pr-merge-message-field.sh`.
- Full PR inventory remains 19/19 paths. Round 4 remains 2/2 files, 0 production files, and 0 new paths.
- Changed behavioral assertion denominator: 1/1 examined and discriminating under both required mutants.
CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (`.woodpecker/ci.yml`); 1/1 eligible reported. Context `ci/woodpecker/pr/ci`, pipeline 2243, terminal `success`; all steps green.
No blocker remains in review scope. This approval is void if the head moves. I did not merge.
VERDICT: APPROVE — frozen exact-head re-review at 39312fa455497b104f3de5929274e261e4e4449d; supersedes my stale approval 113 at e56f5947ac871db085928352e791c48e2e9f221e.
Rebase scope
Provider head and merge base were independently pinned: head 39312fa455497b104f3de5929274e261e4e4449d, base aa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3.
Range-diff commits 1, 3, and 4 are patch-identical.
The PR path population remains exactly 19/19.
Eighteen PR-path head blobs are byte-identical to the previously approved head.
The sole changed blob is packages/mosaic/package.json, and its test:framework-shell chain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; only test-start-agent-session.sh and test-fleet-units.sh are added (42 total, removed=0).
No base-advance change touched the launcher test's fleet/tmux/systemd sibling dependencies, and this PR adds/removes no holder-owner gate text.
git diff --check passes against the new base.
Fresh behavioral evidence on the composed head
Measured in canonical Alpine ci-base:latest:
Restored exact head: GREEN with ok - start-agent-session generated environment boundary.
Production stale-predicate mutant (now - marker > iv * 2 + 1 disabled): RED rc=1 at heartbeat sidecar did not resume after native marker became stale or absent.
Fresh-marker mutant (fixed stale timestamp replaced by fresh touch): RED rc=1 at the same attributable assertion.
Restored launcher and test SHA-256 values match their exact Git objects.
Additional composed-tree gates:
enumeration: PASS — population 53, enumerated 36, signed exclusions 18, named surfaces 49;
systemd suite: PASS on first attempt (ok - fleet systemd unit templates); the known #1096 retry path was not needed;
changed-shell Bash syntax: PASS;
package-union check: base 40 / head 42 / added 2 / removed 0 / duplicates 0.
Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.
VERDICT: APPROVE — frozen exact-head re-review at `39312fa455497b104f3de5929274e261e4e4449d`; supersedes my stale approval 113 at `e56f5947ac871db085928352e791c48e2e9f221e`.
### Rebase scope
Provider head and merge base were independently pinned: head `39312fa455497b104f3de5929274e261e4e4449d`, base `aa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3`.
- Range-diff commits 1, 3, and 4 are patch-identical.
- The PR path population remains exactly 19/19.
- Eighteen PR-path head blobs are byte-identical to the previously approved head.
- The sole changed blob is `packages/mosaic/package.json`, and its `test:framework-shell` chain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; only `test-start-agent-session.sh` and `test-fleet-units.sh` are added (42 total, removed=0).
- No base-advance change touched the launcher test's fleet/tmux/systemd sibling dependencies, and this PR adds/removes no `holder-owner` gate text.
- `git diff --check` passes against the new base.
### Fresh behavioral evidence on the composed head
Measured in canonical Alpine `ci-base:latest`:
1. Restored exact head: GREEN with `ok - start-agent-session generated environment boundary`.
2. Production stale-predicate mutant (`now - marker > iv * 2 + 1` disabled): RED rc=1 at `heartbeat sidecar did not resume after native marker became stale or absent`.
3. Fresh-marker mutant (fixed stale timestamp replaced by fresh `touch`): RED rc=1 at the same attributable assertion.
4. Restored launcher and test SHA-256 values match their exact Git objects.
Additional composed-tree gates:
- enumeration: PASS — population 53, enumerated 36, signed exclusions 18, named surfaces 49;
- systemd suite: PASS on first attempt (`ok - fleet systemd unit templates`); the known #1096 retry path was not needed;
- changed-shell Bash syntax: PASS;
- package-union check: base 40 / head 42 / added 2 / removed 0 / duplicates 0.
Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.
VERDICT: APPROVE — frozen exact-head re-review at 39312fa455497b104f3de5929274e261e4e4449d; supersedes my stale approval 113 at e56f5947ac871db085928352e791c48e2e9f221e.
Rebase scope
Provider head and merge base were independently pinned: head 39312fa455497b104f3de5929274e261e4e4449d, base aa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3.
Range-diff commits 1, 3, and 4 are patch-identical.
The PR path population remains exactly 19/19.
Eighteen PR-path head blobs are byte-identical to the previously approved head.
The sole changed blob is packages/mosaic/package.json, and its test:framework-shell chain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; only test-start-agent-session.sh and test-fleet-units.sh are added (42 total, removed=0).
No base-advance change touched the launcher test's fleet/tmux/systemd sibling dependencies, and this PR adds/removes no holder-owner gate text.
git diff --check passes against the new base.
Fresh behavioral evidence on the composed head
Measured in canonical Alpine ci-base:latest:
Restored exact head: GREEN with ok - start-agent-session generated environment boundary.
Production stale-predicate mutant (now - marker > iv * 2 + 1 disabled): RED rc=1 at heartbeat sidecar did not resume after native marker became stale or absent.
Fresh-marker mutant (fixed stale timestamp replaced by fresh touch): RED rc=1 at the same attributable assertion.
Restored launcher and test SHA-256 values match their exact Git objects.
Additional composed-tree gates:
enumeration: PASS — population 53, enumerated 36, signed exclusions 18, named surfaces 49;
systemd suite: PASS on first attempt (ok - fleet systemd unit templates); the known #1096 retry path was not needed;
changed-shell Bash syntax: PASS;
package-union check: base 40 / head 42 / added 2 / removed 0 / duplicates 0.
Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.
VERDICT: APPROVE — frozen exact-head re-review at `39312fa455497b104f3de5929274e261e4e4449d`; supersedes my stale approval 113 at `e56f5947ac871db085928352e791c48e2e9f221e`.
### Rebase scope
Provider head and merge base were independently pinned: head `39312fa455497b104f3de5929274e261e4e4449d`, base `aa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3`.
- Range-diff commits 1, 3, and 4 are patch-identical.
- The PR path population remains exactly 19/19.
- Eighteen PR-path head blobs are byte-identical to the previously approved head.
- The sole changed blob is `packages/mosaic/package.json`, and its `test:framework-shell` chain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; only `test-start-agent-session.sh` and `test-fleet-units.sh` are added (42 total, removed=0).
- No base-advance change touched the launcher test's fleet/tmux/systemd sibling dependencies, and this PR adds/removes no `holder-owner` gate text.
- `git diff --check` passes against the new base.
### Fresh behavioral evidence on the composed head
Measured in canonical Alpine `ci-base:latest`:
1. Restored exact head: GREEN with `ok - start-agent-session generated environment boundary`.
2. Production stale-predicate mutant (`now - marker > iv * 2 + 1` disabled): RED rc=1 at `heartbeat sidecar did not resume after native marker became stale or absent`.
3. Fresh-marker mutant (fixed stale timestamp replaced by fresh `touch`): RED rc=1 at the same attributable assertion.
4. Restored launcher and test SHA-256 values match their exact Git objects.
Additional composed-tree gates:
- enumeration: PASS — population 53, enumerated 36, signed exclusions 18, named surfaces 49;
- systemd suite: PASS on first attempt (`ok - fleet systemd unit templates`); the known #1096 retry path was not needed;
- changed-shell Bash syntax: PASS;
- package-union check: base 40 / head 42 / added 2 / removed 0 / duplicates 0.
Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.
Mos
merged commit 4fa2768962 into main2026-08-07 07:07:46 +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.
Summary
MOSAIC_GIT_IDENTITY=<agent name>to the complete generated fleet projection/usr/bin/env -iprocess boundaryCloses #1043.
Scope correction
The original diagnosis cited the installed host launcher, but
mainuses the #772 generated-environment architecture and has noPANE_SHELL_SNIPPET. This PR therefore changes the canonical generated contract and its projection producers rather than patching the stale installed copy.docs/PRD.mdalready specifies the generated-env contract through FCM-REQ-05 and AC-FCM-04, so amending it is required to keep the normative specification consistent with the new complete/fail-closed identity field.Verification
test-start-agent-session.shrejected the newly declared field on pre-fix source withcode=unknown-key key=MOSAIC_GIT_IDENTITYMOSAIC_GIT_IDENTITYlaunch-array entry producedFAIL: runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY; restoring it returned GREENgit diff --check: greennone, no findingsThe process test explicitly exercises the repository launcher through
$START, not the independently installed host copy.Known host-only baseline state
Canonical
pnpm testis HOST-RED for two named unrelated environment causes: the globally installed Mosaic 0.0.48 update banner contaminates three CLI smoke stderr assertions (#1071/#1072 host-skew context), and after hermetic version isolation the known #973BASH_LINENOassertion aborts on this host. No test was weakened or bypassed. The repository-wide Vitest phase under the hermetic version input was green (Mosaic 81/81 files, 1510/1510 tests); CI remains the canonical clean-environment result.Queue guard
Pre-push queue guard reported
state=unknownforpurpose=push; this is queue state, not verification evidence (#1019).Deployment / validation boundary
No live-host launcher was edited. Merge alone will not update the stale installed fleet launcher; installation/reseed and Jarvis live-seat validation are separate downstream events.
Fixes #1043
Named pattern: GNU-host shell suites vs Alpine CI
This lane has now surfaced three instances in three tools with one structural cause: shell suites are authored on a GNU host and executed in an Alpine/BusyBox CI image.
grepmulti-match counting in redaction assertions required a BusyBox-safe rewrite (be-coder-05).sed -i(Round 2, caught by code review).touch -d '10 seconds ago'failed in pipeline 2233 and now uses deterministic POSIXtouch -t 200001010000.00(Round 3, caught because the suite is now wired into CI).The stale-marker assertion remains strict: the marker receives an unconditional fixed stale timestamp, and the sidecar must detect it. No missing/unset-timestamp tolerance was added. Durable prevention is a check that executes shell suites in the CI image or lints GNU-only constructs, not more isolated point fixes.
Round-3 RED-first: the focused launcher suite in
ci-base:latestexited 1 with exact BusyBox outputtouch: invalid date '10 seconds ago'.Round-3 GREEN: the canonical Alpine test step, including PostgreSQL readiness/migration and
pnpm test, exited 0 with 46/46 Turbo tasks; enumeration reported population 49, enumerated 32, signed exclusions 18, and 45 named surfaces. Typecheck was 45/45, lint 25/25, format green. Independent code review approved 2/2 Round-3 files with no findings; security review reported risk none.Re-derived denominators: Round-3 git delta 2/2 files; full PR path inventory 19/19; pull-request-eligible workflow definitions 1/3 (
ci.ymlof three definitions).VERDICT: REQUEST CHANGES — code review bound to
ab360d443cf88c1edeea72c18b77d73d0023fd88.Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in
packages/mosaic/framework/tools/fleet/test-start-agent-session.shis genuine and exercises the repository launcher:STARTis derived from that test file's own directory, and the test reads every line of the generated projection, then usescomm -23to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"makes it exit 1 withruntime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY.However,
packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35explicitly excludes this suite asunmeasured in CI image, and it is named by neitherpackages/mosaic/package.json'stest:framework-shellchain nor.woodpecker/ci.yml. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (population 49, enumerated 30, excluded 19). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runspnpm test, which does not invoke this test.Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
Scope and code findings
The reported inventory is exact: 17 files, +258/−22. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation.
docs/PRD.mdis appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined 11/11 syntactic check sites, representing 21/21 dynamic executions:
There are 0 attempt-only checks in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
Verification and disclosed baseline
bash -n, andgit diff --check: passed using exact-head dependency artifacts.BASH_LINENOassertion. The disclosure is appropriate and no test was weakened.CI population
Repository defines 3 workflows (
ci.yml,ci-image.yml,publish.yml); 1/3 is pull-request eligible (ci.yml); 1/1 eligible is reported at/commits/<sha>/statusasci/woodpecker/pr/ci. At review completion it is pending/running, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running.ci.ymlcarries the TS projection tests throughpnpm test, but no workflow carries the changed launched-process behavior because its suite is signed-excluded. I do not cite the queue guard.I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains believed-fixed, pending jarvis validation; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — code review bound to
ab360d443cf88c1edeea72c18b77d73d0023fd88.Blocking finding
[BLOCKER] The only launched-process test for the repaired property is explicitly excluded from every CI execution surface.
The new set comparison in
packages/mosaic/framework/tools/fleet/test-start-agent-session.shis genuine and exercises the repository launcher:STARTis derived from that test file's own directory, and the test reads every line of the generated projection, then usescomm -23to require each exact key/value in the actual clean-pane process environment. Independent R7 deletion of only"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"makes it exit 1 withruntime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY.However,
packages/mosaic/framework/tools/quality/test-enumeration-exclusions.txt:35explicitly excludes this suite asunmeasured in CI image, and it is named by neitherpackages/mosaic/package.json'stest:framework-shellchain nor.woodpecker/ci.yml. The membership guard therefore reports green while classifying the central suite among 19 signed exclusions (population 49, enumerated 30, excluded 19). Deleting the repaired launch entry is caught manually but cannot make any PR workflow red. The only PR-eligible workflow runspnpm test, which does not invoke this test.Wire the repository launcher suite into the canonical test chain (and remove its exclusion), then show the same R7 deletion makes the CI-carried command red. The systemd shell test should also receive an explicit execution disposition rather than relying only on an author-focused run.
Scope and code findings
The reported inventory is exact: 17 files, +258/−22. The breadth is justified for the complete/fail-closed projection contract: one shared parser/contract, all four roster projection producers found by search, the launcher, fixtures/tests, and generated-contract documentation.
docs/PRD.mdis appropriate because it normatively defines the new generated identity and acceptance behavior. The missing CI enumeration/package surfaces above make the delivery scope incomplete, not over-broad.No additional correctness defect found in the implementation. Generated identity is derived from the exact roster name; missing, unsafe, mismatched, and local-shadow values reject before tmux; the clean argv boundary carries it. The dynamic process comparison is containment rather than equality by design—additional trusted/local launch values exist—but it enumerates all generated-file entries rather than naming Git identity.
Assertion denominator
Population: identity-specific new/modified checks in this 17-file patch, not all pre-existing assertions in the six large test files. Examined 11/11 syntactic check sites, representing 21/21 dynamic executions:
There are 0 attempt-only checks in this population. The shell “accepted” check is disposition-only but paired with no-side-effect and exact-reason checks. The two documentation counts are disposition/cardinality-only. The critical set comparison asserts the launched-process outcome, not source presence.
Verification and disclosed baseline
bash -n, andgit diff --check: passed using exact-head dependency artifacts.BASH_LINENOassertion. The disclosure is appropriate and no test was weakened.CI population
Repository defines 3 workflows (
ci.yml,ci-image.yml,publish.yml); 1/3 is pull-request eligible (ci.yml); 1/1 eligible is reported at/commits/<sha>/statusasci/woodpecker/pr/ci. At review completion it is pending/running, pipeline 2231: install, sanitization, upgrade-guard, typecheck, lint, and format are OK; test and ci-postgres are running.ci.ymlcarries the TS projection tests throughpnpm test, but no workflow carries the changed launched-process behavior because its suite is signed-excluded. I do not cite the queue guard.I did not review out-of-scope host-skew, wrapper, C1, comparator, or gateway items. Issue status language remains believed-fixed, pending jarvis validation; this code verdict requires the CI-membership gap closed. This review is void if the head moves. I did not merge.
Round 2 — review 97 remediation
Head:
e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73Canonical CI reachability
framework/tools/fleet/test-start-agent-session.shto@mosaicstack/mosaic'stest:framework-shell, reached by the PR-eligibleci.ymltest step throughpnpm testframework/systemd/user/test-fleet-units.shthe same explicit canonical-chain dispositionUNENUMERATEDfailure, population 49 / enumerated 30 / excluded 18Workflow-level R7
Deleting only
"MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY"and running the exactci.ymltest-step command,pnpm test, exited 1 at@mosaicstack/mosaic#test: enumeration was GREEN, then the launched-process suite emitted the exact missing-MOSAIC_GIT_IDENTITYRED. The subject was restored and the production launcher verified byte-clean against the committed head.An actual provider workflow on the intentionally broken mutant is NOT MEASURED: that would require a broken push followed by a repair push, contradicting the one-push constraint. This comment does not substitute the local command execution for provider evidence.
Workflow census remains: DEFINED 3; pull_request-ELIGIBLE 1/3 (
ci.yml); Round-1 REPORTED 1/1. Post-remediation reported count is NOT MEASURED by this seat because CI polling is prohibited.Denominator reconciliation
The PR's named six-file command is reproducibly 311/311:
24 + 23 + 6 + 27 + 22 + 209 = 311.Review 97's 312/312 did not name its six files, so it is not the denominator for the PR's named command.
CI-image portability
Round-2 independent review found that the newly enabled suite's Perl fixture mutations would not run in the Alpine CI image. Those three fixture-only substitutions now use BusyBox-compatible
sed -i; the asserted behavior/property is unchanged. Re-review: APPROVE, no findings.Pre-push queue guard reported
state=unknown purpose=push branch=main; this is state, not verification evidence.Status remains believed-fixed, pending jarvis validation.
VERDICT: REQUEST CHANGES — re-review bound to
e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73.Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
Blocker
[BLOCKER]
packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405uses GNU-styletouch -d '10 seconds ago'. The canonical CI image's BusyBoxtouchrejects it astouch: invalid date '10 seconds ago', so pipeline 2233's only workflow fails intestafter the newly wired launcher suite starts and before its green completion marker.This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact
pnpm testpath in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNUfind -printfand Perl availability), so the portability pattern is now established rather than incidental.Measurements requested by the charter
packages/mosaic/package.json, the exclusion list, the launcher suite, and scratchpad.UNENUMERATED; values are population 49 / enumerated 30 / excluded 18.pnpm testwith the isolated current-version npm input returns 1 at@mosaicstack/mosaic#test; enumeration is green, then the exact missingMOSAIC_GIT_IDENTITYfailure appears.af2cd425…. The restored exact command reachesenumeration guard: OK,ok - start-agent-session generated environment boundary, andok - fleet systemd unit templates, then stops at the separately known host-only #973 wake assertion (exit 97)./usr/bin/busyboxassedis green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = 311. Review 97's 312 also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
Assertion denominator
The identity assertion population remains 11/11 syntactic sites, 21/21 dynamic executions from review 97; the mechanism swap changes no assertion. Round 2 adds 3/3 execution/membership subjects examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
pnpm test.There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
CI population
3 workflows defined; 1/3 pull-request eligible (
ci.yml); 1/1 eligible reported./commits/<sha>/statusis terminalfailurefor contextci/woodpecker/pr/ci, pipeline 2233. Theciworkflow carries the changed behavior throughpnpm test; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, whiletestfails. The decoded test log gives the in-scope BusyBoxtouchfailure above. I do not cite the queue guard.Out-of-scope host-skew and other PRs were not reviewed. Status remains believed-fixed, pending jarvis validation, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — re-review bound to
e0c00e4209eb7aa0ce44a4a8ead9d02d73693e73.Review 97's CI-membership blocker is structurally closed, and independent R7 proves the exact workflow command reaches the repaired property. The newly reachable suite exposes another Alpine/BusyBox blocker in the same test.
Blocker
[BLOCKER]
packages/mosaic/framework/tools/fleet/test-start-agent-session.sh:405uses GNU-styletouch -d '10 seconds ago'. The canonical CI image's BusyBoxtouchrejects it astouch: invalid date '10 seconds ago', so pipeline 2233's only workflow fails intestafter the newly wired launcher suite starts and before its green completion marker.This is directly in the four-file remediation scope: wiring the formerly excluded suite made its CI portability acceptance-bearing. Replace the relative GNU date expression with a BusyBox/POSIX-compatible deterministic stale timestamp and retain the heartbeat-staleness property. Rerun the exact
pnpm testpath in the canonical image. This is the third Alpine/BusyBox assumption exposed in this lane (after GNUfind -printfand Perl availability), so the portability pattern is now established rather than incidental.Measurements requested by the charter
packages/mosaic/package.json, the exclusion list, the launcher suite, and scratchpad.UNENUMERATED; values are population 49 / enumerated 30 / excluded 18.pnpm testwith the isolated current-version npm input returns 1 at@mosaicstack/mosaic#test; enumeration is green, then the exact missingMOSAIC_GIT_IDENTITYfailure appears.af2cd425…. The restored exact command reachesenumeration guard: OK,ok - start-agent-session generated environment boundary, andok - fleet systemd unit templates, then stops at the separately known host-only #973 wake assertion (exit 97)./usr/bin/busyboxassedis green. The three substitutions remain anchored to the same fields and all pre-existing disposition/no-tmux/reason assertions are unchanged. The Perl→sed swap did not weaken the identity property.311 / 312 reconciliation
The arithmetic resolution is correct: the PR's named set is boundary 24 + docs 23 + Tess 6 + regen 27 + CRUD command 22 + fleet 209 = 311. Review 97's 312 also had a concrete local basis, although its provider body failed to name it: boundary 24 + docs 23 + regen 27 + fleet 209 + CRUD command 22 + CRUD core 7 = 312. The figures use different sixth files (Tess 6 versus CRUD core 7); neither was an arithmetic compromise. Both populations passed. This is not a code finding, but the prior 312 was not a miscount.
Assertion denominator
The identity assertion population remains 11/11 syntactic sites, 21/21 dynamic executions from review 97; the mechanism swap changes no assertion. Round 2 adds 3/3 execution/membership subjects examined: enumeration membership, launcher suite reachability, and systemd-suite reachability.
pnpm test.There are 0 attempt-only identity checks. Package-script naming alone is an attempt signal, but exact-command R7 establishes launcher outcome reachability. Generic invalid-case rejection remains disposition-only paired with no-side-effect and exact-reason checks; documentation counts remain cardinality/disposition-only. The launched-process set comparison asserts the property.
CI population
3 workflows defined; 1/3 pull-request eligible (
ci.yml); 1/1 eligible reported./commits/<sha>/statusis terminalfailurefor contextci/woodpecker/pr/ci, pipeline 2233. Theciworkflow carries the changed behavior throughpnpm test; install, sanitization, upgrade-guard, typecheck, lint, and format are successful, whiletestfails. The decoded test log gives the in-scope BusyBoxtouchfailure above. I do not cite the queue guard.Out-of-scope host-skew and other PRs were not reviewed. Status remains believed-fixed, pending jarvis validation, but this exact head is not merge-ready. This review is void if the head moves. I did not merge.
e3d13d6dc1toaafc155563VERDICT: REQUEST CHANGES — bounded round-3 re-review at
aafc155563f0238836490b5ae445fd42f7858950.[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
test-start-agent-session.sh:405is now BusyBox/POSIX-safe (touch -t 200001010000.00), but the assertion callswait_for_sidecar_status, which polls 30 × 0.1s. The launcher considers the marker stale whennow - marker > interval*2+1; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.R7/property control: I replaced only
touch -t 200001010000.00 "$STALE_HB.native"withtouch "$STALE_HB.native". The complete launcher suite still returned rc=0 and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.Other bounded checks:
e3d13d6dand newaafc1555have identical treee23636e…, identical parente0c00e42, and empty diff. Author/committer changed fromcoder-mos1tobe-coder-06; no tree content moved.ci.yml); 1/1 reported. Contextci/woodpecker/pr/ciis terminalsuccess, pipeline 2237. This does not overcome the vacuous stale-marker control.Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (
status=ok), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it cannot currently fail for the intended freshness distinction. The remaining round-2 assertion population was not re-opened.Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
VERDICT: REQUEST CHANGES — bounded round-3 re-review at
aafc155563f0238836490b5ae445fd42f7858950.[BLOCKER] The stale-marker assertion still cannot distinguish an intentionally stale timestamp from a fresh timestamp that ages during the test.
test-start-agent-session.sh:405is now BusyBox/POSIX-safe (touch -t 200001010000.00), but the assertion callswait_for_sidecar_status, which polls 30 × 0.1s. The launcher considers the marker stale whennow - marker > interval*2+1; with interval 1, a fresh marker becomes stale after slightly more than 3 seconds—the same window the test waits.R7/property control: I replaced only
touch -t 200001010000.00 "$STALE_HB.native"withtouch "$STALE_HB.native". The complete launcher suite still returned rc=0 and printed its green marker. Thus the test passes after a fresh marker naturally ages; it does not prove the deterministic timestamp was stale when evaluated. Bound the stale-case observation so a fresh-marker mutant remains fresh for the whole assertion and goes RED, while the fixed old timestamp goes GREEN.Other bounded checks:
e3d13d6dand newaafc1555have identical treee23636e…, identical parente0c00e42, and empty diff. Author/committer changed fromcoder-mos1tobe-coder-06; no tree content moved.ci.yml); 1/1 reported. Contextci/woodpecker/pr/ciis terminalsuccess, pipeline 2237. This does not overcome the vacuous stale-marker control.Assertion denominator for this round is 1/1 changed behavioral assertion examined. It is outcome-shaped (
status=ok), not attempt-only, and has no separate reason assertion; however, the fresh-timestamp delete-the-subject mutant demonstrates it cannot currently fail for the intended freshness distinction. The remaining round-2 assertion population was not re-opened.Status remains believed-fixed, pending jarvis validation, but this exact head is not review-clear. This verdict is void if the head moves. I did not merge.
e5bbab02e4toe56f5947acVERDICT: APPROVE — frozen-head round-4 re-review at
e56f5947ac871db085928352e791c48e2e9f221e.Review 101 is resolved and the rebase preserves the fix.
Measured at this exact head in
git.mosaicstack.dev/mosaicstack/stack/ci-base:latest:now - marker > iv * 2 + 1→false): RED, rc=1.touch -t 200001010000.00→ freshtouch): RED, rc=1.ok - start-agent-session generated environment boundary.Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only,
NOT MEASUREDas production-runtime evidence: all 4/4MOSAIC_TEST_FIXED_EPOCHoccurrence lines are confined to the launcher test. Its temporaryFAKE_BIN/dateintercepts only exactdate +%sand delegates formatting to/bin/date. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.Rebase/integration:
e56f5947…, base80a45b1e….packages/mosaic/package.jsonunion, including this PR's shell tests and main'stest-pr-merge-message-field.sh.CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (
.woodpecker/ci.yml); 1/1 eligible reported. Contextci/woodpecker/pr/ci, pipeline 2243, terminalsuccess; all steps green.No blocker remains in review scope. This approval is void if the head moves. I did not merge.
VERDICT: APPROVE — frozen-head round-4 re-review at
e56f5947ac871db085928352e791c48e2e9f221e.Review 101 is resolved and the rebase preserves the fix.
Measured at this exact head in
git.mosaicstack.dev/mosaicstack/stack/ci-base:latest:now - marker > iv * 2 + 1→false): RED, rc=1.touch -t 200001010000.00→ freshtouch): RED, rc=1.ok - start-agent-session generated environment boundary.Both mutants failed at the stale/absent sidecar-resumption assertion. The restored test-file SHA-256 matched the exact Git object. The production threshold and 30 × 0.1s polling remain unchanged, so the fixed epoch bounds observation rather than tuning the race.
Confinement — code-read only,
NOT MEASUREDas production-runtime evidence: all 4/4MOSAIC_TEST_FIXED_EPOCHoccurrence lines are confined to the launcher test. Its temporaryFAKE_BIN/dateintercepts only exactdate +%sand delegates formatting to/bin/date. The production launcher contains 0 occurrences, and Round 4 has an empty production-launcher diff.Rebase/integration:
e56f5947…, base80a45b1e….packages/mosaic/package.jsonunion, including this PR's shell tests and main'stest-pr-merge-message-field.sh.CI at this exact head: 3/3 Woodpecker workflows defined; 1/3 pull-request eligible (
.woodpecker/ci.yml); 1/1 eligible reported. Contextci/woodpecker/pr/ci, pipeline 2243, terminalsuccess; all steps green.No blocker remains in review scope. This approval is void if the head moves. I did not merge.
e56f5947acto39312fa455VERDICT: APPROVE — frozen exact-head re-review at
39312fa455497b104f3de5929274e261e4e4449d; supersedes my stale approval 113 ate56f5947ac871db085928352e791c48e2e9f221e.Rebase scope
Provider head and merge base were independently pinned: head
39312fa455497b104f3de5929274e261e4e4449d, baseaa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3.packages/mosaic/package.json, and itstest:framework-shellchain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; onlytest-start-agent-session.shandtest-fleet-units.share added (42 total, removed=0).holder-ownergate text.git diff --checkpasses against the new base.Fresh behavioral evidence on the composed head
Measured in canonical Alpine
ci-base:latest:ok - start-agent-session generated environment boundary.now - marker > iv * 2 + 1disabled): RED rc=1 atheartbeat sidecar did not resume after native marker became stale or absent.touch): RED rc=1 at the same attributable assertion.Additional composed-tree gates:
ok - fleet systemd unit templates); the known #1096 retry path was not needed;Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.
VERDICT: APPROVE — frozen exact-head re-review at
39312fa455497b104f3de5929274e261e4e4449d; supersedes my stale approval 113 ate56f5947ac871db085928352e791c48e2e9f221e.Rebase scope
Provider head and merge base were independently pinned: head
39312fa455497b104f3de5929274e261e4e4449d, baseaa0a7b5fa2f87f6b639b17bcd93ee1ad5aad03e3.packages/mosaic/package.json, and itstest:framework-shellchain is an exact composed union: all 40/40 new-base commands remain, in order and without duplicates; onlytest-start-agent-session.shandtest-fleet-units.share added (42 total, removed=0).holder-ownergate text.git diff --checkpasses against the new base.Fresh behavioral evidence on the composed head
Measured in canonical Alpine
ci-base:latest:ok - start-agent-session generated environment boundary.now - marker > iv * 2 + 1disabled): RED rc=1 atheartbeat sidecar did not resume after native marker became stale or absent.touch): RED rc=1 at the same attributable assertion.Additional composed-tree gates:
ok - fleet systemd unit templates); the known #1096 retry path was not needed;Pipeline 2268 targets this exact head. Install, sanitization, upgrade-guard, and typecheck were green; lint, format, and test were still running at verdict time. No terminal CI status is claimed, and approval does not waive that gate.
No blocking correctness, scope, rebase-integration, portability, or test-coverage findings remain. I did not push or merge.