Skip to content

test: add fail-closed path-aware test selection#2

Open
elixlabssolutions wants to merge 7 commits into
mainfrom
fm/path-aware-test-selection-v1
Open

test: add fail-closed path-aware test selection#2
elixlabssolutions wants to merge 7 commits into
mainfrom
fm/path-aware-test-selection-v1

Conversation

@elixlabssolutions

@elixlabssolutions elixlabssolutions commented Jul 16, 2026

Copy link
Copy Markdown

Intent

Implement Phase 1 fail-closed Firstmate test selection with focused local feedback and one complete no-mistakes backstop.

What Changed

  • Added a fail-closed, path-aware test selector that permits focused local feedback only for an exact approved mapping, otherwise runs the complete suite and emits a terminal receipt.
  • Configured the no-mistakes test gate to load the selector from target main and run gate-shadow, which always retains one complete-suite backstop.
  • Added selector behavior coverage and documented local, trusted-gate, and fallback execution behavior.

Risk Assessment

✅ Low: The updated documentation accurately describes the trusted selector and complete-suite gate backstop, and the reviewed implementation remains narrowly fail-closed.

Testing

The supplied baseline full suite had passed; I ran the selector contract suite and captured real CLI receipts for focused gate-shadow and the configured no-mistakes loader, both showing focus followed by a complete passing backstop. The exact target correctly chose a complete fallback for its selector self-change and emitted a stable failure receipt for four flaky existing tests; all four passed on immediate retry.

Evidence: Selector contract suite
ok - eligible-skill
ok - eligible-trigger
ok - eligible-test-edit
ok - gate-shadow-match
ok - explicit-full
ok - empty-diff
ok - local-dirty-inventory
ok - stale-ancestry
ok - unusual-safe-path
ok - reject-caller-policy
ok - agents-outside-region
ok - mixed-runtime
ok - unknown-instruction
ok - shared-test-infra
ok - selector-self-change
ok - structural-changes
ok - invalid-paths
ok - inventory-coverage
ok - gate-owner
ok - local-owner
ok - receipt-schema
ok - idempotent
ok - full-order-and-aggregate
ok - tmux-required-for-full
ok - unsafe-full-inventory
ok - fetch-failure
ok - shallow-no-base
fm-test-select: target main has no selector; running complete bootstrap suite
tmux fixture
== tests/bootstrap.test.sh ==
ok - fixture bootstrap
ok - trusted-selector-missing
ok - trusted-selector-read-failure
ok - shadow-full-fails
ok - shadow-focus-fails
ok - concurrent-change
ok - gate-selector-identity
ok - target-moves-during-final-snapshot
ok - signal-receipt-cleanup
ok - explicit-full-dirty-count
ok - loader-cleanup-safety
Evidence: Focused gate-shadow CLI receipt
== tests/fm-instruction-owners.test.sh ==
ok - new internal skills have one precise AGENTS.md trigger each
ok - diagnostic-reasoning owns the approved evidence procedure
ok - project-management owns registry, delivery posture, consent, initialization, and removal safety
ok - generic effort fallback applies only below captain and standing configuration
ok - firstmate-coding-guidelines owns compatibility review and deterministic enforcement
ok - state, startup, and ordinary recovery have focused owners and triggers
== tests/fm-scout-implementation-contract.test.sh ==
ok - internal owner metadata and the unique precise trigger are protected
ok - tiers, readiness scoring, and classified claim ledgers are protected
ok - snapshot, approved scope, file mapping, and behavioral dimensions are protected
ok - test classes, delivery choreography, hard stops, and safety are protected
ok - report schema, independent packet, quality gate, and feedback are protected
tmux 3.7b
== tests/a-pass.test.sh ==
ok - fixture a-pass
== tests/fm-instruction-owners.test.sh ==
ok - new internal skills have one precise AGENTS.md trigger each
ok - diagnostic-reasoning owns the approved evidence procedure
ok - project-management owns registry, delivery posture, consent, initialization, and removal safety
ok - generic effort fallback applies only below captain and standing configuration
ok - firstmate-coding-guidelines owns compatibility review and deterministic enforcement
ok - state, startup, and ordinary recovery have focused owners and triggers
== tests/fm-scout-implementation-contract.test.sh ==
ok - internal owner metadata and the unique precise trigger are protected
ok - tiers, readiness scoring, and classified claim ledgers are protected
ok - snapshot, approved scope, file mapping, and behavioral dimensions are protected
ok - test classes, delivery choreography, hard stops, and safety are protected
ok - report schema, independent packet, quality gate, and feedback are protected
== tests/z-pass.test.sh ==
ok - fixture z-pass
firstmate.test-selection.v1 policy_version=instruction-scout-contract-v1 context=gate-shadow target_base_ref=origin/main target_base_tip=44110e69d2df8093aac1cd85f663deb44b666692 merge_base=44110e69d2df8093aac1cd85f663deb44b666692 head=6a72e77841251cdc5357ab134dbefa698e2bc5f1 worktree_state=clean diff_digest=9ae4bada6e39495b69680747d01035646622860c diff_count=1 classification=instruction-scout-contract-v1 reason=eligible-skill local_plan=focus gate_plan=full ordered_tests=focus[tests/fm-instruction-owners.test.sh,tests/fm-scout-implementation-contract.test.sh];full[tests/a-pass.test.sh,tests/fm-instruction-owners.test.sh,tests/fm-scout-implementation-contract.test.sh,tests/z-pass.test.sh] focus_execution=pass focus_results=0,0 full_execution=pass full_results=passed:4,failed:0 comparison=match snapshot_stability=stable result=pass
Evidence: Configured no-mistakes loader receipt
warning: --depth is ignored in local clones; use file:// instead.
== tests/fm-instruction-owners.test.sh ==
ok - new internal skills have one precise AGENTS.md trigger each
ok - diagnostic-reasoning owns the approved evidence procedure
ok - project-management owns registry, delivery posture, consent, initialization, and removal safety
ok - generic effort fallback applies only below captain and standing configuration
ok - firstmate-coding-guidelines owns compatibility review and deterministic enforcement
ok - state, startup, and ordinary recovery have focused owners and triggers
== tests/fm-scout-implementation-contract.test.sh ==
ok - internal owner metadata and the unique precise trigger are protected
ok - tiers, readiness scoring, and classified claim ledgers are protected
ok - snapshot, approved scope, file mapping, and behavioral dimensions are protected
ok - test classes, delivery choreography, hard stops, and safety are protected
ok - report schema, independent packet, quality gate, and feedback are protected
tmux 3.7b
== tests/a-pass.test.sh ==
ok - fixture a-pass
== tests/fm-instruction-owners.test.sh ==
ok - new internal skills have one precise AGENTS.md trigger each
ok - diagnostic-reasoning owns the approved evidence procedure
ok - project-management owns registry, delivery posture, consent, initialization, and removal safety
ok - generic effort fallback applies only below captain and standing configuration
ok - firstmate-coding-guidelines owns compatibility review and deterministic enforcement
ok - state, startup, and ordinary recovery have focused owners and triggers
== tests/fm-scout-implementation-contract.test.sh ==
ok - internal owner metadata and the unique precise trigger are protected
ok - tiers, readiness scoring, and classified claim ledgers are protected
ok - snapshot, approved scope, file mapping, and behavioral dimensions are protected
ok - test classes, delivery choreography, hard stops, and safety are protected
ok - report schema, independent packet, quality gate, and feedback are protected
== tests/z-pass.test.sh ==
ok - fixture z-pass
firstmate.test-selection.v1 policy_version=instruction-scout-contract-v1 context=gate-shadow target_base_ref=origin/main target_base_tip=ba598b1b3710d17a9fe201f3780e3639b0db5134 merge_base=ba598b1b3710d17a9fe201f3780e3639b0db5134 head=f390a3d775db83f039615b4b08f97013b797d8c1 worktree_state=clean diff_digest=5570bf83b8df672c5e0cb1e633308678bb4464bc diff_count=1 classification=instruction-scout-contract-v1 reason=eligible-skill local_plan=focus gate_plan=full ordered_tests=focus[tests/fm-instruction-owners.test.sh,tests/fm-scout-implementation-contract.test.sh];full[tests/a-pass.test.sh,tests/fm-instruction-owners.test.sh,tests/fm-scout-implementation-contract.test.sh,tests/z-pass.test.sh] focus_execution=pass focus_results=0,0 full_execution=pass full_results=passed:4,failed:0 comparison=match snapshot_stability=stable result=pass
Evidence: Exact-target fail-closed fallback receipt
tmux 3.7b
== tests/fm-afk-inject-e2e.test.sh ==
not ok - Scenario A: digest misclassified (expected injection): e281a353757065727669736f7220657363616c61746520282020202020202031206576656e74287329293a2066616b652d63312e7374617475733a20646f6e653a2050522068747470733a2f2f6578616d706c652e746573742f70722f313030202863617463682d616c6c207363616e2920287072652d726561643b2072652d61726d206e6f74206e656564656420e280942077617463686572206461656d6f6e2d6d616e6167656429	⁣Supervisor escalate (       1 event(s)): fake-c1.status: done: PR https://example.test/pr/100 (catch-all scan) (pre-read; re-arm not needed — watcher daemon-managed)	user
== tests/fm-afk-inject-herdr-e2e.test.sh ==
skip: herdr not found
== tests/fm-afk-launch.test.sh ==
ok - clear-stale: removes escalations buffer, sidecar, and wedge marker
ok - clear-stale: leaves the durable wake-queue intact (no pending work dropped)
ok - refresh: daemon already alive - stale artifacts preserved (current session's buffer kept)
ok - stop-ordering: daemon SIGTERM'd while .afk still present (flush is not a no-op)
ok - stop-ordering: .afk cleared last
ok - stop-ordering: daemon-terminal record removed
ok - stop identity: stale lock cannot signal an unrelated live process
ok - failed start: away flag and delivery artifacts roll back
ok - concurrent start: one serialized daemon terminal remains tracked
ok - launcher lock: incomplete publication receives initialization grace
ok - launcher signal: TERM exits and releases the lifecycle lock
fm-afk-launch: daemon launched in non-visible herdr workspace ws-partial (pane lab:pane-exact), supervising lab:captain
ok - herdr create: malformed response recovers durable exact ownership
fm-afk-launch: herdr create failed after returning exact ids; closing lab:pane-exact
fm-afk-launch: recorded terminal teardown is unconfirmed; preserving exact id
ok - herdr create error: unconfirmed exact id is persisted for reconciliation
fm-afk-launch: failed to run daemon in herdr pane lab:pane-exact; closing it
fm-afk-launch: recorded terminal teardown is unconfirmed; preserving exact id
ok - herdr run failure: unconfirmed exact id remains reconcilable
fm-afk-launch: failed to persist daemon terminal record; closing tmux:exact-session
ok - record failure: newly created terminal is closed by exact id
fm-afk-launch: daemon did not become ready; closing tmux:exact-session
ok - readiness failure: exact terminal and durable record roll back
fm-afk-launch: daemon did not become ready; closing tmux:exact-session
fm-afk-launch: recorded terminal teardown is unconfirmed; preserving exact id
ok - readiness failure: unconfirmed terminal retains its reconciliation id
ok - tmux absence: clean missing differs from transport probe failure
ok - native lifecycle: launcher owns state with no terminal
ok - native lifecycle: uniform stop clears state without closing a terminal
ok - native entry: launcher-prepared lifecycle state is not rewritten
fm-afk-launch: reconciling leaked daemon terminal tmux:exact-session
fm-afk-launch: recorded terminal teardown is unconfirmed; preserving exact id
ok - teardown failure: exact terminal record is preserved
ok - record publication: failed atomic rename preserves the complete prior record
fm-afk-launch: daemon terminal record is malformed; refusing to act on it
ok - record read: malformed record fails closed without acting on a partial id
fm-afk-launch: daemon terminal record is malformed; refusing to act on it
fm-afk-launch: malformed daemon terminal record; refusing to stop away mode
ok - stop: malformed terminal record preserves away state and fails closed
fm-afk-launch: failed to create detached tmux daemon session 'fm-afk-daemon-3393704135-78990-27708-1784189752'
ok - tmux launch: planned exact target is recorded before creation and removed on failure
fm-afk-launch: failed to create detached tmux daemon session 'fm-afk-daemon-480006275-79027-28133-1784189752'
ok - tmux launch: unique names eliminate collision teardown
ok - stop validation: malformed record causes no daemon or state side effects
ok - launcher lock: incomplete metadata fails acquisition and releases lock
fm-afk-launch: failed to clear away-mode flag
fm-afk-launch: away mode stopped; terminal teardown remains recorded for retry
ok - stop state: away-flag removal failure is surfaced
fm-afk-launch: away-mode daemon did not exit after SIGTERM; preserving lifecycle state
ok - stop liveness: captured live daemon preserves lifecycle state after lock release
fm-afk-launch: daemon terminal record is malformed; refusing to act on it
fm-afk-launch: daemon terminal record is malformed; refusing to act on it
ok - refresh record: malformed terminal identity fails closed
fm-afk-launch: failed to clear stale away-mode artifacts
ok - clear failure: native entry aborts and restores prior state
fm-afk-launch: reconciling leaked daemon terminal tmux:exact-session
fm-afk-launch: terminal close command failed, but exact absence was confirmed
ok - confirmed absence: cleanup succeeds and removes the stale record
fm-afk-launch: rollback restoration incomplete; backup retained at /var/folders/_4/q0rlygb56rs6y6xp9sbql5240000gn/T//fm-afk-restore-fail.mcHXEK/state/.afk-launch-backup.8VH7Qt
ok - rollback restore: incomplete restoration retains its recovery backup
ok - flag failure: lifecycle aborts without active state
skip: herdr not found (herdr e2e)
ok - tmux e2e: captain window pane count unchanged after start (no split-window)
ok - tmux e2e: daemon launched in a separate detached session
ok - tmux e2e: captain window pane count unchanged after stop
ok - tmux e2e: daemon session killed by exact id on stop
ok - tmux e2e: record + .afk cleared on stop
== tests/fm-afk-pi-herdr-return-e2e.test.sh ==
skip: set FM_AFK_PI_HERDR_E2E=1 to run the real Pi/Herdr away-return regression
== tests/fm-afk-return.test.sh ==
ok - return catch-up precedes Bearings, owns live blocker remediation, preserves evidence once, and clears idempotently
ok - tmux and Herdr blockers require the same explicit durable reclassification before ordinary work
ok - captain-owned needs-decision remains reportable without masquerading as a firstmate-actionable blocker
ok - away-mode re-entry fails closed while the prior return catch-up is pending
ok - check retries recorded terminal teardown and keeps catch-up gated until success
== tests/fm-arm-pretool-check.test.sh ==
ok - matrix A01: allow through all five entry forms
ok - matrix A02: allow through all five entry forms
ok - matrix A03: allow through all five entry forms
ok - matrix A04: allow through all five entry forms
ok - matrix A05: allow through all five entry forms
ok - matrix A06: allow through all five entry forms
ok - matrix A07: allow through all five entry forms
ok - matrix A08: allow through all five entry forms
ok - matrix A09: allow through all five entry forms
ok - matrix A10: allow through all five entry forms
ok - matrix A11: allow through all five entry forms
ok - matrix A12: allow through all five entry forms
ok - matrix A13: allow through all five entry forms
ok - matrix A14: allow through all five entry forms
ok - matrix A15: allow through all five entry forms
ok - matrix A16: allow through all five entry forms
ok - matrix A17: allow through all five entry forms
ok - matrix R01: allow through all five entry forms
ok - matrix R02: allow through all five entry forms
ok - matrix R03: allow through all five entry forms
ok - matrix R04: allow through all five entry forms
ok - matrix R05: allow through all five entry forms
ok - matrix R06: allow through all five entry forms
ok - matrix R07: allow through all five entry forms
ok - matrix R08: allow through all five entry forms
ok - matrix R09: allow through all five entry forms
ok - matrix R10: allow through all five entry forms
ok - matrix R11: allow through all five entry forms
ok - matrix R12: allow through all five entry forms
ok - matrix R13: allow through all five entry forms
ok - matrix R14: allow through all five entry forms
ok - matrix R15: allow through all five entry forms
ok - matrix R16: allow through all five entry forms
ok - matrix R17: allow through all five entry forms
ok - matrix R18: allow through all five entry forms
ok

... [88458 bytes truncated] ...

oundary, fence-aware, within-limit, numbered, lossless, capped
ok - fm-x-reply keeps a concise reply as a single unnumbered tweet
ok - fm-x-reply auto-splits a long reply into a numbered thread (texts[])
ok - fm-x-reply uses the Discord inbox platform budget instead of the X tweet budget
ok - fm-x-reply keeps numeric X requests on the X tweet budget
ok - fm-x-reply prefers an explicit relay-provided reply limit
ok - fm-x-reply clamps a below-floor max to 50 characters
ok - fm-x-reply posts a thread payload (texts[]) to the relay
ok - fm-x-reply --image posts an image object on answer
ok - fm-x-reply streams large image payloads outside curl argv
ok - fm-x-reply dry-run records compact image metadata for threaded replies
ok - fm-x-reply cleans image and payload temp files
ok - fm-x-reply --image rejects missing and unsupported image paths clearly
ok - fm-x-reply --followup posts to /connector/followup with the same request-bound body
ok - fm-x-reply maps a followup_unavailable follow-up 409 to exit 9
ok - fm-x-reply maps every follow-up 409 to exit 9 even without the marker
ok - fm-x-reply treats answer-endpoint 409 as a generic failure
ok - fm-x-reply --followup --image posts an image object
ok - fm-x-reply --followup is accepted in any position and leaves the answer path default
ok - fm-x-reply --followup dry-run marks the endpoint without changing the answer path
ok - fm-x-reply --followup auto-splits a long follow-up into a marked thread
ok - fm-x-reply followup dry-run keeps endpoint marker and compact image metadata
ok - fm-x-poll records the durable per-request reply context from the relay payload
ok - context registry retention is bounded to the seven-day follow-up window
ok - context registry rewrites preserve the first-seen timestamp
ok - context retention starts only when a live initial answer succeeds
ok - a delayed Discord follow-up stays one message after inbox cleanup via the durable registry
ok - an X follow-up over 280 still splits correctly after inbox cleanup
ok - every unresolved follow-up is refused before posting
ok - a partial registry platform combines with the relay's authoritative budget
ok - concurrent requests each recover their own platform/budget with no cross-overwrite
ok - fm-x-dismiss clears the durable per-request context (a dismissed mention gets no follow-up)
ok - fm-x-dismiss posts a request-bound dismiss and echoes only the request_id
ok - fm-x-dismiss dry-run records the would-be body and never posts
ok - fm-x-dismiss dry-run works without a token
ok - fm-x-dismiss exits non-zero on a non-2xx relay response
ok - fm-x-dismiss exits non-zero on a transport failure
ok - fm-x-dismiss rejects an unsafe request_id (path-traversal guard)
ok - fm-x-dismiss rejects missing or extra arguments with a usage error
ok - fm-x-link records and refreshes the X-request link without disturbing meta
ok - fm-x-link records Discord platform context so follow-ups keep the Discord budget
ok - fm-x-link resolves the platform by request_id so a post-cleanup link keeps the Discord budget
ok - fm-x-link warns loudly and the follow-up is held (not wrongly split) when the platform is unknown
ok - fm-x-link paired carry flags preserve a prior task's follow-up binding onto a successor
ok - fm-x-link recovery relink preserves Discord platform context after inbox drain
ok - fm-x-link rejects malformed or unpaired carry flags
ok - meta rewrites are independent of TMPDIR
ok - fm-x-link rejects unsafe ids, missing meta, and missing arguments
ok - fm-x-followup --check reports postable / not-linked correctly
ok - fm-x-followup --check prunes a link past the 7-day window
ok - fm-x-followup --check prunes a link that already reached the follow-up cap
ok - fm-x-followup posts a follow-up, increments the counter, and keeps the link under the cap
ok - fm-x-followup --final clears the link after one post regardless of the remaining count
ok - fm-x-followup clears the link once the third follow-up reaches the cap
ok - fm-x-followup --image forwards the attachment through fm-x-reply --followup
ok - fm-x-followup keeps the link and counter when the post fails
ok - fm-x-followup tombstones the link when a post-success counter write fails
ok - fm-x-followup treats a relay cap/window rejection as an already-exhausted link, not a retry
ok - fm-x-followup skips silently and clears the link past the 7-day window
ok - fm-x-followup is a no-op for a task with no X link
ok - fm-x-followup dry-run records the follow-up and increments the counter, keeping the link
ok - fm-x-followup dry-run --final clears the link just as a live post would
ok - fm-x-followup rejects malformed invocations
ok - bootstrap activates X mode from an .env token, idempotently
ok - bootstrap reports missing X-mode dependencies before arming
ok - bootstrap does not report X mode on when activation artifacts cannot be written
ok - bootstrap is inert without a non-empty .env token (non-X users unaffected)
ok - bootstrap cleans up X artifacts on opt-out and is silent once off
ok - bootstrap reports failed X artifact cleanup on opt-out
firstmate.test-selection.v1 policy_version=instruction-scout-contract-v1 context=local target_base_ref=origin/main target_base_tip=54bb9c9d94ac3cc89d7e7d379a9a6eac95b01131 merge_base=54bb9c9d94ac3cc89d7e7d379a9a6eac95b01131 head=681fbb07d6c1941fb85ccd6deddd94e7df87f7df worktree_state=clean diff_digest=4be66dce68df3c14e341dcfc80de67fe3290be40 diff_count=5 classification=complete reason=selector-self-change local_plan=full gate_plan=full ordered_tests=full[tests/fm-afk-inject-e2e.test.sh,tests/fm-afk-inject-herdr-e2e.test.sh,tests/fm-afk-launch.test.sh,tests/fm-afk-pi-herdr-return-e2e.test.sh,tests/fm-afk-return.test.sh,tests/fm-arm-pretool-check.test.sh,tests/fm-backend-autodetect-smoke.test.sh,tests/fm-backend-cmux-smoke.test.sh,tests/fm-backend-cmux.test.sh,tests/fm-backend-herdr-eventwait-smoke.test.sh,tests/fm-backend-herdr-prune-safety-e2e.test.sh,tests/fm-backend-herdr-respawn-idem-e2e.test.sh,tests/fm-backend-herdr-smoke.test.sh,tests/fm-backend-herdr-workspace-per-home-e2e.test.sh,tests/fm-backend-herdr.test.sh,tests/fm-backend-orca.test.sh,tests/fm-backend-tmux-smoke.test.sh,tests/fm-backend-zellij-smoke.test.sh,tests/fm-backend-zellij.test.sh,tests/fm-backend.test.sh,tests/fm-backlog-handoff.test.sh,tests/fm-bearings-snapshot.test.sh,tests/fm-bootstrap.test.sh,tests/fm-brief.test.sh,tests/fm-cd-pretool-check.test.sh,tests/fm-composer-ghost.test.sh,tests/fm-composer-lib.test.sh,tests/fm-crew-state.test.sh,tests/fm-daemon.test.sh,tests/fm-dispatch-select.test.sh,tests/fm-ensure-agents-md.test.sh,tests/fm-fleet-snapshot-view.test.sh,tests/fm-fleet-sync.test.sh,tests/fm-gate-refuse.test.sh,tests/fm-gotmp.test.sh,tests/fm-grok-harness.test.sh,tests/fm-herdr-lab.test.sh,tests/fm-instruction-owners.test.sh,tests/fm-lint.test.sh,tests/fm-no-mistakes-ownership.test.sh,tests/fm-pi-primary-live-e2e.test.sh,tests/fm-pi-primary-types.test.sh,tests/fm-pi-watch-extension.test.sh,tests/fm-pr-merge.test.sh,tests/fm-review-diff.test.sh,tests/fm-scout-implementation-contract.test.sh,tests/fm-secondmate-harness.test.sh,tests/fm-secondmate-lifecycle-e2e.test.sh,tests/fm-secondmate-liveness.test.sh,tests/fm-secondmate-safety.test.sh,tests/fm-secondmate-sync.test.sh,tests/fm-send-popup-settle.test.sh,tests/fm-send-secondmate-marker-herdr-e2e.test.sh,tests/fm-send-secondmate-marker.test.sh,tests/fm-send-settle.test.sh,tests/fm-send-strict.test.sh,tests/fm-session-start.test.sh,tests/fm-spawn-batch.test.sh,tests/fm-spawn-dispatch-profile.test.sh,tests/fm-stow-contract.test.sh,tests/fm-supervision-events.test.sh,tests/fm-supervision-instructions.test.sh,tests/fm-tangle-guard.test.sh,tests/fm-teardown.test.sh,tests/fm-test-select.test.sh,tests/fm-transition-lib.test.sh,tests/fm-turnend-guard.test.sh,tests/fm-update.test.sh,tests/fm-wake-daemon-lifecycle-e2e.test.sh,tests/fm-wake-queue.test.sh,tests/fm-watch-checkpoint.test.sh,tests/fm-watch-triage.test.sh,tests/fm-watcher-lock.test.sh,tests/fm-x-mode.test.sh] focus_execution=skipped focus_results=unavailable full_execution=fail full_results=passed:70,failed:4 comparison=not-applicable snapshot_stability=stable result=fail
- Outcome: ⚠️ 1 warning across 1 run (30m42s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

🔧 **Review** - 1 issue found → auto-fixed ✅
  • ⚠️ docs/configuration.md:106 - The gate documentation now says commands.test runs the behavior suite “directly,” but the changed command clones target main, loads its selector, and runs gate-shadow. This hides the trusted-policy/network fail-closed behavior operators need to understand; restore an accurate description of the selector loader and complete-suite backstop.

🔧 Fix: Captain: clarify fail-closed gate documentation
✅ Re-checked - no issues remain.

⚠️ **Test** - 1 warning
  • ⚠️ Four existing tests failed only in the aggregated full-suite run, then all passed together on immediate retry. This is order/timing-sensitive flakiness rather than a reproducible selector defect; the selector correctly retained and reported the failures.
  • command -v tmux >/dev/null || { echo "tmux is required for e2e tests" >&2; exit 1; }; tmux -V; rc=0; for t in tests/*.test.sh; do echo "== $t =="; bash "$t" || rc=1; done; exit "$rc"
  • Baseline supplied as passed: command -v tmux >/dev/null || { echo "tmux is required for e2e tests" >&2; exit 1; }; tmux -V; rc=0; for t in tests/*.test.sh; do echo "== $t =="; bash "$t" || rc=1; done; exit "$rc"
  • bash tests/fm-test-select.test.sh
  • Isolated bash bin/fm-test-select.sh gate-shadow on an eligible contract edit
  • Isolated configured .no-mistakes.yaml commands.test loader execution
  • bash bin/fm-test-select.sh local
  • Retry: bash tests/fm-afk-inject-e2e.test.sh, bash tests/fm-backend-cmux.test.sh, bash tests/fm-backend-herdr.test.sh, and bash tests/fm-composer-lib.test.sh
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

@elixlabssolutions elixlabssolutions changed the title test: add fail-closed test selection test: add fail-closed path-aware test selection Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant