Files
stack/docs/remediation/BOARD-LEDGER.md
T
mos-dt-0andClaude Opus 5 8ce77fcb0d docs(remediation): board — RM-02 frozen at 9b4d4beb, CI green, review in flight
Head triple verified independently twice (orchestrator + f10-coder): local = origin =
PR #1030 = pipeline #2182. Full step scan rather than a tests-complete inference.
Queue guard not offered as evidence.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-07-31 23:41:52 -05:00

4.5 KiB

D-1 / P-ACTIVATION + hygiene — committed .npmrc hard-pins store-dir=/root/.local/share/pnpm/store.

Correct for the CI container (runs as root), fatal for EVERY non-root local checkout: EACCES on /root/.local/share/pnpm/store/v10/server/server.json. A committed config that only works on one runtime is exactly the activation-skew class. Fix candidate: make store-dir env-overridable, not hardcoded.

D-3 / P-FLEET-001 — the seats running this mission are UNMANAGED. mos-remediation, rev-974,

planner-opus, planner-sol appear in NO roster (~/.config/mosaic/fleet/roster.yaml, agents/). Planners run on socket default; the roster declares mosaic-fleet. This is the exact "one roster-owned socket/host + quarantine unmanaged + stale GC" failure P-FLEET-001 indicts — observed on the remediation mission's own fleet. Prerequisite for INBOX identity-addressing.

D-2 / hygiene — husky prepare fails EPERM copying into root-owned .husky/_/. Repo working

tree has root-owned dirs (.husky/, repo root) under a non-root agent. Worked around with the intended HUSKY=0 escape hatch (does NOT disable the existing pre-commit/pre-push hooks).

D-5 / P-QUEUE-001 + P-CONFORMANCE-001 — KEYSTONE: an inert gate that erased its own evidence.

Merged PR #868 (b79336a8) shipped a file that FAILS pnpm format:check ⇒ the CI format gate did not block. An unrelated later PR (#872) then reformatted that file via its own lint-staged, so main went green again and nobody learned the gate had failed to fire. Verified blob-level under the repo's own config. Detection must be per-merge-commit against that commit's own tree — a "is main green today" check reports all-clear on this exact defect. Binding on RM-02/RM-55. Full chain in TASKS.md §1a. NOT quiet-patched, by Mos's ruling: patching the symptom destroys the signal.

D-4 / P-LIFECYCLE + hygiene — a dispatched agent silently IGNORED an in-message context reset.

planner-sol was at 64.3%/372k; the brief asked it to reset first; it began work on dirty context anyway. Only an out-of-band /new driven by the orchestrator guaranteed clean state. Confirms the postmortem thesis: instructions are not enforcement. Reset must be a mechanical pre-dispatch step, not a request.

D-7 / P-FLEET-001 — stale-GC-on-disk: shared 30G /tmp hit 100% ENOSPC, degrading two seats.

~5.2G was session scratch dead 8-9 days (this session's own footprint: 88K). Same missing capability as orphaned-tmux-session GC, applied to disk — not a quota or discipline problem. Resolved manually by Mos (lead coordinator) after independent verification; /tmp now 79%. The gap IS the finding: the authority to reap exists, the deterministic reaper does not. Folded into RM-50 with explicit requirements (mechanical liveness, age threshold, dry-run, audit event per reap — never a heuristic sweep). Refusing to unilaterally delete another session's scratch was correct doctrine; the fix is a reaper, not braver agents.

D-6 / P-QUEUE-001 — the mandated queue guard returned PASS on an UNKNOWN state, live, today.

Running the required ci-queue-wait.sh --purpose push before pushing produced state=unknown ... exit 0 — the exact defect at ci-queue-wait.sh:282-288 that PR #1023 is parked on. It also evaluated branch=main rather than the branch being pushed. The mission's own required pre-push gate passed me on an indeterminate result. Third independent live instance of the class.

D-8 / P-CONFORMANCE-001 — a PRE-REGISTERED acceptance check that was not runnable as written.

PR #1025 AC2's fixture mkdir -p apps/*/venv/lib creates a literal apps/*/venv/lib dir when the glob is unmatched — it did not test what it claimed. rev-974 ran it exactly as written, caught it, re-ran the intended assertion at an explicit path, and disclosed rather than silently substituting a working fixture and reporting PASS. Pre-registration protects a check from being retrofitted to the implementation; it does not make the check correct. An unverified gate appeared inside the mechanism built to catch unverified gates. Hard requirement on RM-02: the registry must self-verify that every registered case runs AND can fail — presence is not evidence.