feat: launch crews from direct account directories - #24
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
Publish the already validated per-account crew launch cutover onto origin/main through this repository’s no-mistakes pipeline so dependent browser-isolation work can rebase onto it. Preserve the complete thirteen-commit history from 610f55d through f036ae7, including all nine no-mistakes(review) hardening commits and the validation/test commits; do not squash, rebase away, refactor, or extend that work. The pipeline must raise a compliant replacement PR rather than reuse or bypass hand-raised PR #23. Never push directly to main or to upstream, and keep all shell files shellcheck-clean. This is a republication of a result already gate-validated once; only pipeline-owned fixes are permitted if the gate finds an actual issue.
What Changed
Risk Assessment
✅ Low: The narrow fix safely refuses teardown before mutation when retained direct-recovery cleanup is pending, preserves rollback state, adds focused coverage, and leaves the required thirteen-commit history intact.
Testing
The supplied full baseline and targeted launch, recovery, bootstrap, dispatch, and teardown checks passed; CLI transcripts and exact history evidence were captured, while GitHub verification confirmed PR #23 has not been reused but the required replacement PR has not yet been created.
Evidence: Per-account launch cutover transcript
Evidence: Rollback-preserving teardown evidence
Evidence: Preserved thirteen-commit history
Evidence: GitHub publication state
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
AGENTS.md- branch carries 13 commit(s) that exist on your local main branch but were never pushed to origin/main; rebasing would bundle this unrelated work (15 file(s)) into the PR:Push main to origin, or rebase your branch onto origin/main, before gating.
🔧 **Review** - 1 issue found → auto-fixed ✅
bin/fm-spawn.sh:1071- Failed direct recovery persistsdirect_recovery_cleanup, backup, and artifact markers, but teardown only handlesdirect_spawn_cleanup. Tearing down this retained recovery can delete its metadata/worktree while orphaning rollback artifacts and losing the prior-generation restoration path. Handle direct-recovery markers equivalently or explicitly refuse teardown while cleanup is pending.🔧 Fix: Preserve retained direct recovery state during teardown
✅ Re-checked - no issues remain.
fm/cutover-publish-p1; hand-raised PR feat: launch crews from per-account directories (publish local-only cutover) #23 remains open on the separatefm/publish-account-directory-cutoverbranch. The replacement-PR outcome therefore cannot yet be demonstrated during this pre-publication validation. Decide whether to accept this evidence until the pipeline’s push/PR stage runs, or require post-publication verification.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; uv run --directory tools/agent-fleet --locked pytest || rc=1; uv run --directory tools/agent-fleet --locked python -m compileall -q src || rc=1; exit "$rc"Validator-supplied baseline:command -v tmux …; for t in tests/*.test.sh; …; uv run --directory tools/agent-fleet --locked pytest; uv run --directory tools/agent-fleet --locked python -m compileall -q src(passed before this run).FM_TEST_FOCUSED=direct-recovery-cleanup bash tests/fm-teardown.test.shFM_TEST_FOCUSED=direct-recovery-lifecycle bash tests/fm-account-directory.test.shFM_TEST_FOCUSED=account-directory-cutover bash tests/fm-bootstrap.test.shFM_TEST_FOCUSED=account-directory-cutover bash tests/fm-dispatch-select.test.shCommit topology inspection usinggit rev-list,git show, andgit show-ref.Read-only publication checks:gh pr list -R ruby-dlee/firstmate --state all --head fm/cutover-publish-p1 …andgh pr view 23 -R ruby-dlee/firstmate ….Final cleanup check:git status --short --branch.✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.