diff --git a/docs/scratchpads/1043-pane-git-identity.md b/docs/scratchpads/1043-pane-git-identity.md index 2b7808c2..31da1dc7 100644 --- a/docs/scratchpads/1043-pane-git-identity.md +++ b/docs/scratchpads/1043-pane-git-identity.md @@ -152,6 +152,46 @@ The PR's `311/311` is correct for its explicitly named six-file command at both Review 97 reported 312/312 without naming its six files. That is a different or miscounted population and cannot replace the command-scoped 311 denominator; the PR follow-up will name the exact files and arithmetic. +## Round 3 — Alpine stale-marker portability + +### Objective and plan + +- Replace the GNU-only relative-date fixture with a deterministic POSIX/BusyBox timestamp while preserving the required stale-marker assertion. +- Re-run the launcher suite in the canonical `ci-base:latest` Alpine image, then run applicable repository gates and independent review. +- Update the PR body to name the repeated GNU-host/Alpine-CI portability pattern, run the mandatory queue guard, push once, verify provider attribution, and stop without CI polling. +- Working budget: 8K tokens; scope is one fixture line plus delivery evidence. No production behavior changes. + +### RED-first evidence + +Before the fix, the canonical CI image command +`docker run --rm -v "$PWD:/work" -w /work git.mosaicstack.dev/mosaicstack/stack/ci-base:latest bash packages/mosaic/framework/tools/fleet/test-start-agent-session.sh` +exited 1 at the stale-marker setup with exact BusyBox output +`touch: invalid date '10 seconds ago'`. The prior fresh-marker assertions had already executed, matching pipeline 2233's failure location. + +### Root cause and fix + +The test used GNU `touch -d` relative-date parsing although the PR workflow runs on Alpine/BusyBox. The fixture now uses POSIX `touch -t 200001010000.00`, a fixed timestamp that is unconditionally stale; the stale assertion remains mandatory and was not made tolerant of missing timestamp metadata. + +### Structural pattern + +This is the third GNU-host/Alpine-CI portability defect in the lane: GNU `grep` multi-match counting, Perl-only fixture mutation, and GNU `touch -d` date parsing. The repeated cause is shell suites authored on a GNU host but executed in an Alpine CI image; durable prevention belongs in CI-image execution or portability lint, not assertion weakening. + +### GREEN and quality evidence + +- Focused launcher suite in `ci-base:latest`: exit 0, `ok - start-agent-session generated environment boundary`. +- Canonical test step in `ci-base:latest` with the pipeline's `pgvector/pgvector:pg17` service, readiness check, migration, and `pnpm test`: exit 0; 46/46 Turbo tasks; Mosaic 81/81 files and 1510/1510 tests; Gateway 57 passed/5 skipped files and 629 passed/11 skipped tests; enumeration 49 population / 32 enumerated / 18 signed exclusions / 45 named surfaces. +- The first image-only `pnpm test` attempt lacked the pipeline PostgreSQL service and failed only on connection refusal after the launcher suite was GREEN. The rerun supplied the canonical service precondition and passed. +- Canonical-image baseline: typecheck 45/45 tasks, lint 25/25 tasks, format check GREEN; `git diff --check` GREEN. +- Independent Codex code review: APPROVE, confidence 0.96, 2/2 Round-3 files, no findings. +- Independent Codex security review: risk none, confidence 0.99, 2/2 Round-3 files, no findings. + +### Re-derived inventory and denominators + +- Round-3 git delta: **2/2 files** — launcher suite and task scratchpad; 25 insertions / 1 deletion before evidence finalization. +- Full PR path inventory against `origin/main` at `85d2108e`: **19/19 changed paths**; Round 3 adds no new PR path. +- Workflow definition population: **1/3 pull-request-eligible** (`ci.yml` of `ci.yml`, `ci-image.yml`, `publish.yml`). +- Do not re-litigate the settled 311/312 populations; both are valid for their separately named Tess6 and CRUD-core7 sets. + ## Residual risk - Landing on `main` does not update the currently installed host launcher. Host framework installation/reseed and Jarvis live-seat validation are separate downstream events. diff --git a/packages/mosaic/framework/tools/fleet/test-start-agent-session.sh b/packages/mosaic/framework/tools/fleet/test-start-agent-session.sh index f226bde1..4e9dfc1f 100755 --- a/packages/mosaic/framework/tools/fleet/test-start-agent-session.sh +++ b/packages/mosaic/framework/tools/fleet/test-start-agent-session.sh @@ -402,7 +402,7 @@ write_generated "$HOME_NATIVE_STALE" "coder-native-stale" write_heartbeat_local "$HOME_NATIVE_STALE" "coder-native-stale" STALE_HB="$HOME_NATIVE_STALE/run/coder-native-stale.hb" printf 'ts=native\npid=1\nstatus=busy\nmodel=stale-model\n' > "$STALE_HB" -touch -d '10 seconds ago' "$STALE_HB.native" +touch -t 200001010000.00 "$STALE_HB.native" MOSAIC_TEST_PANE_PID=$$ run_start "$HOME_NATIVE_STALE" coder-native-stale wait_for_sidecar_status "$STALE_HB"