Skip to content

Release v3.18.0#96

Merged
atomantic merged 10 commits into
releasefrom
main
Jun 27, 2026
Merged

Release v3.18.0#96
atomantic merged 10 commits into
releasefrom
main

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

Release v3.18.0 — see .changelogs/v3.18.0.md for the full notes.

Highlights

  • Parallel issue draining with /do:next --swarm. Ship several independent open issues in one run — each in its own worktree subagent — with only the merges serialized so every PR lands on the advancing default branch. Defaults to 3 agents (--swarm=N, clamped 1–6); a PR that isn't review-clean or can't cleanly re-sync is left open instead of force-merged.
  • Review loops now guard against self-inflicted fix spirals. After each fix round the loop scans the fix diff itself for the two patterns that trigger review ping-pong — unscoped state-clearing writes and side effects on a hot path — and adds a focused regression test. Wired into the local-agent, ollama, and parallel multi-reviewer loops.
  • CI flake handling in the merge gates. A required check that fails during the in-session watch gets one conservative same-commit re-run: pass-on-rerun is treated as a flake (merge proceeds, logged with the run URL), fail-again as a real failure (PR left open / release aborted). Mechanism-only — no project-specific signature matching.

Full Diff: v3.17.2...v3.18.0

Test plan

  • node --test test/*.test.js — 156/156 pass
  • Local code review of the full release...main diff (13 files): clean, no findings

atomantic and others added 10 commits June 26, 2026 16:29
… pipeline

Two hardening passes on the autonomous review-to-merge loop, both targeting
recurring friction in long claim-to-ship sessions:

fix regression guard (lib/fix-regression-guard.md): after a review round
applies fixes and before it re-reviews/pushes, scan the *fix diff itself* for
the two classes that cause review spirals — unscoped state-clearing/restoring
writes (a "restore" keyed to a whole collection instead of the one record the
finding named) and side effects folded onto a hot path (an updatedAt/event/
cache write on every tick) — and add a focused regression test where the fix
touches scoping or timestamp/side-effect logic. Wired into the local-agent,
ollama, and multi-reviewer (parallel) loop bodies; it earns its keep most in
parallel mode, which runs no automatic re-review to catch a fix's own bug.

CI flake handling (lib/ci-flake-handling.md): when a required check fails
during the in-session checks watch in /do:pr and /do:release, do one
conservative re-run on the same commit — pass-on-rerun is a flake (merge
proceeds, logged with the run URL), fail-again is real (PR left open / release
aborted). One re-run, required checks only, same SHA only; mechanism-only with
no project-specific signature matching so the commands stay project-agnostic.

Both new libs added to the install.sh/uninstall.sh LIBS allowlists (parity
test enforces this). A parallel-claim --swarm follow-up is tracked in #93.
…d-ci-flake

Add post-fix regression guard and CI-flake re-run to the review/merge pipeline
/do:next shipped one item per run; --swarm (issues mode) now claims and ships
up to N independent open issues at once and serializes only the merge — the
throughput multiplier the single-issue flow couldn't be.

Design is an orchestration layer over the existing single-issue phases, not a
new claim path: a partition step up front (Swarm Phase A) selects the first N
independent eligible issues off the same priority/oldest queue — skipping any
that depend on, or obviously file-overlap, another in the batch — then one
subagent per issue (Phase B) runs the unchanged Phases 2-6 in its own worktree
with /do:pr --no-merge, and a serialized merge queue (Phase C) merges the PRs
one at a time, re-syncing each onto the advancing default branch (deletions-win
on changelog/PLAN conflicts) and routing flaky-CI failures through the existing
ci-flake-handling guard. Reconcile/cleanup (Phase D) sweeps worktrees, releases
a died agent's claim back to the queue, and re-evaluates parent epics.

Each agent claims its handed issue through the normal Phase 2 assignee-marker +
race read-back, so the same lease that guards two tabs guards two swarm agents;
the partition just makes a collision unlikely. --swarm bare runs 3 agents,
--swarm=N sets the count (clamped 1..6, ≈N× tokens). Issues-mode only,
incompatible with an explicit target, and falls back to sequential when the
harness can't spawn parallel subagents. Closes #93.
…ntial fallback, explicit return shapes

- State each agent runs single-issue Phases 2–6 (no merge, no Phase 7) rather
  than overclaiming "is a /do:next run" — keeps the spec from implying the
  agent merges/cleans up.
- Make the fan-out return shape explicit (PR-opened vs yielded/skipped) and
  have Phase C dispatch on `pr_number` presence, closing a gap where the merge
  queue's status handling didn't match the shapes Phase B produces.
- Add the missing sequential-fallback path to Phase B for harnesses that can't
  spawn parallel subagents (the precondition promised it; Phase B didn't do it).
- Reference single-issue Phase 6's merge gate and Phase 7's closure step from
  the merge queue instead of re-enumerating them, so they can't drift; drop the
  misleading "died agent" mention from Phase C (handled in Phase D).
- Trim the duplicated throughput-multiplier tail from the README paragraph.
…lign sequential-fallback wording with Phase B
…flight; run Phase 1 explicit-number validation+setup before each agent's claim
…lure to yielded result, closed/missing to skipped
…d ci-flake-handling copy in release merge gate
…e merging

Swarm agents open PRs with /do:pr --no-merge, so /do:pr's CI merge gate
never runs; the re-sync in Phase C step 2 also pushes a fresh SHA. Step 3
merged immediately without watching required checks, contradicting its own
prose about flake handling and bypassing the gate on protected repos. Add
the gh pr checks --required --watch step before gh pr merge, matching the
single-issue Phase 6 and /do:pr merge gates.
@atomantic atomantic merged commit ad24951 into release Jun 27, 2026
4 checks passed
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