Files
stack/docs/scratchpads/1043-pane-git-identity.md
T
2026-08-05 23:28:28 -05:00

6.5 KiB

#1043 — Fleet pane git-identity propagation

Objective

Ensure a fleet seat's launched runtime process receives its roster-derived MOSAIC_GIT_IDENTITY, and lock the complete generated-environment propagation boundary with an enumerated set comparison.

Tracking

  • External issue: mosaicstack/stack#1043
  • Branch: fix/1043-pane-git-identity
  • Coordinator: tl-mosaic
  • docs/TASKS.md: read-only by project worker contract; not modified.

Constraints

  • RED-first bug reproducer is mandatory.
  • R7 delete-the-subject mutation must turn the behavioral test red.
  • Assert launched-process environment, not source text.
  • One push only; do not poll CI after push.
  • Run the CI queue guard immediately before push and report its state= line as state, not evidence.
  • Do not modify a live host launcher or obtain/copy another credential.
  • Self-post the PR, verify provider attribution, then stop.
  • Final status wording: believed-fixed, pending jarvis validation.

Scope inventory

Re-derived against origin/main at 85d2108e:

  • Launch consumer: packages/mosaic/framework/tools/fleet/start-agent-session.sh
  • Behavioral launch test: packages/mosaic/framework/tools/fleet/test-start-agent-session.sh
  • Generated-environment contract/parser: packages/mosaic/src/fleet/generated-env-boundary.ts
  • Roster projection producers:
    • packages/mosaic/src/commands/fleet.ts
    • packages/mosaic/src/fleet/fleet-reconciler.ts
    • packages/mosaic/src/fleet/fleet-agent-crud.ts
    • packages/mosaic/src/fleet/v1-v2-migration.ts
  • Contract and producer tests discovered by repository search.
  • Generated-environment operator/developer docs and their executable documentation contract test.

Discrepancy sent to tl-mosaic: current main no longer contains the charter's PANE_SHELL_SNIPPET; #772 replaced it with an /usr/bin/env -i argv launch boundary, and current generated projections do not declare git identity. Code-read inventory is NOT MEASURED behavior.

Plan

  1. Add the process-environment set-comparison regression first and record RED.
  2. Add roster-derived MOSAIC_GIT_IDENTITY=<agent name> to the complete generated projection contract.
  3. Validate identity syntax and equality with MOSAIC_AGENT_NAME; pass it through the clean pane environment.
  4. Update affected projection tests and generated-environment docs.
  5. Run focused and baseline gates.
  6. Perform R7 by deleting the pane propagation entry, prove RED, restore, and prove GREEN.
  7. Run independent review, remediate, commit, queue guard, one push, self-post PR, verify provider attribution, and stop without CI polling.

Budget

No explicit token cap was provided. Working cap: one narrow logical unit, no dependency installation unless existing tooling requires it, no unrelated refactor.

Evidence log

TDD and mutation evidence

  • RED-first, repository launcher: bash packages/mosaic/framework/tools/fleet/test-start-agent-session.sh exited 64 on pre-fix source with code=unknown-key key=MOSAIC_GIT_IDENTITY. The generated seat could not launch with the required declared identity.
  • GREEN: the same repository launcher test emitted ok - start-agent-session generated environment boundary.
  • R7 delete-the-subject: removed only "MOSAIC_GIT_IDENTITY=$MOSAIC_GIT_IDENTITY" from the repository launch array; the same test exited 1 with FAIL: runtime pane omitted or changed generated environment keys: MOSAIC_GIT_IDENTITY.
  • R7 restoration: restored that launch entry; the same test returned green.
  • Launcher under test is explicitly packages/mosaic/framework/tools/fleet/start-agent-session.sh through the test's $START, not the stale installed host copy.

Situational and focused tests

  • Repository launcher boundary: green, including set comparison of all nine generated projection entries and fail-before-tmux cases for missing, unsafe, mismatched, and local-shadow Git identity.
  • Fleet systemd launcher integration: bash packages/mosaic/framework/systemd/user/test-fleet-units.sh — green.
  • Focused Mosaic Vitest set: 6 files, 311 tests — green.
  • bash -n on changed shell files — green.
  • git diff --check — green.

Baseline gates

  • pnpm typecheck — 45/45 tasks green.
  • pnpm lint — 25/25 tasks green.
  • pnpm format:check — green.
  • pnpm test:checkout — green.
  • Repository-wide Vitest under a hermetic current-version npm prefix: Mosaic 81/81 files and 1510/1510 tests green; other workspace test tasks shown green before the framework-shell phase.
  • Canonical pnpm test is not fully green on this host for unrelated environment-sensitive gates:
    1. the first two runs exposed the globally installed Mosaic 0.0.48 update banner in three CLI smoke tests expecting empty stderr;
    2. after isolating that global-version input, the framework wake assertion aborted at the known #973 Bash BASH_LINENO convention check (exit 97; observed [3 5], expected [3 4]). No tests were weakened or bypassed; focused changed-surface tests are green. CI remains the canonical clean-environment result and is intentionally not polled after push per charter.

Independent review

  • Codex code review first pass: request changes for missing shell rejection-path coverage.
  • Remediation: added table-driven missing/unsafe/mismatch/local-shadow launcher cases, each asserting no tmux call.
  • Codex code re-review: approve, no findings, confidence 0.88.
  • Codex security review: risk none, no findings, confidence 0.97.

Acceptance criteria mapping

Acceptance criterion Evidence
AC-FGI-01: launched process receives every generated key/value Repository launcher process-environment comm -23 set comparison; GREEN and R7 RED evidence above
AC-FGI-02: missing, unsafe, or split identity fails before tmux Table-driven shell cases plus TypeScript generated-boundary tests
AC-FGI-03: focused/baseline/review evidence recorded Commands and review outcomes above; host-sensitive full-suite limitations stated explicitly

Documentation checklist

  • PRD updated with #1043 requirements and acceptance criteria.
  • Fleet launch runbook, generated-env concept, and generated-env reference updated.
  • No API/OpenAPI, sitemap, user publishing target, deployment, or external docs publication change applies.
  • docs/TASKS.md remains unmodified per its single-writer project contract.

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.
  • Canonical CI result is pending and will not be polled by this seat.