Merge Queue Readiness
Trigger
Before adding the PR to the merge queue (or before the final push if the repo uses a merge queue).
Protocol
- Fetch latest main:
git fetch origin main - Run the simulation command (preferred):
The optional positional/swarm ci-simulate [<pr-ref>]<pr-ref>is the PR branch/ref to simulate (defaults to the current branch). It does NOT accept--base/--headflags. The command runs fixed local gates:bun run typecheck,bun run lint,bun run build, then a full-batchbun test. It creates a temporary detached worktree underos.tmpdir()/swarm-ci-simulate(a SIBLING of the project root, not project-relative), merges the PR ref, runs the gate sequence, removes the worktree, and prunes metadata. It does not accept arbitrary shell commands and does NOT replicate CI's quarantine/retry semantics — it is a fast pre-merge signal, not a CI parity check. - Manual fallback: If the command is unavailable, create a temporary simulation worktree (do NOT mutate the PR branch). The default worktree base is a SIBLING of the project root (
<parent>/.swarm-worktrees/), overridable via theworktree_dirconfig; on Windows, very long paths may be shortened toos.tmpdir()/swwt/.... Place the worktree under that base. Do NOT hardcode/tmp— it does not exist on Windows.git worktree add ../.swarm-worktrees/merge-sim origin/main cd ../.swarm-worktrees/merge-sim git merge <pr-branch> --no-edit - Run integration + unit tests against the merged result:
(Use per-file loops for hot modules per AGENTS.md invariant 6)bun test tests/integration --timeout 120000 bun test tests/unit --timeout 120000 - If failures: Fix on the PR branch, re-push, re-simulate. Always run the cleanup step (6) before re-simulating or on any exit path — do not leave the simulation worktree behind.
- Cleanup for manual fallback (run on EVERY exit path, including failure): Prefer non-force
git worktree remove ../.swarm-worktrees/merge-sim. If the removal is blocked or fails, surface the block to the user (the worktree guard fails closed for safety) and rungit worktree prune. - Only after simulation passes, add PR to the merge queue.
Why this matters
PR-branch CI and merge-group CI test DIFFERENT things:
- PR-branch: tests the PR head commit in isolation
- Merge-group: tests a temporary merge of PR head + latest main
Integration tests that pass on the PR branch may fail in merge-group context due to test interactions exposed by the merged result.
Automation
/swarm ci-simulate automates the merge-result worktree, merge, command run,
worktree removal, and metadata prune. Use the manual protocol only when the
command is unavailable or the repo needs bespoke setup.