Skip to content

Release v3.29.0 - #144

Merged
atomantic merged 4 commits into
releasefrom
main
Aug 15, 2026
Merged

Release v3.29.0#144
atomantic merged 4 commits into
releasefrom
main

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

Release v3.29.0. Two behavior changes plus this repo's own changelog restructure.

No command requests a reviewer on its own anymore. /do:rpr was the last holdout — it defaulted to a conditional Copilot review, requesting one whenever a PR had none. It now matches every other command: no built-in default, so bare /do:rpr resolves the PR's existing threads and requests nothing. Anyone relying on the implicit Copilot request needs --review-with copilot (or a saved default). Copilot is demoted to a legacy opt-in throughout the docs — the slug works exactly as before, it's just never selected for you.

Changelog and task-tracking conventions are derived from the project, not hardcoded. /do:push, /do:next, /do:better, and /do:better-swift no longer assume a .changelogs/NEXT.md staging file; they read a stated convention first, otherwise imitate whatever changelog already exists, otherwise write nothing. /do:release now resolves how a project produces release notes before touching anything, treats "derive them from the commits since the last release" as a first-class path, and leaves the changelog alone when release-please/semantic-release/changesets owns it.

This repo dropped its own NEXT.md staging area. Release notes are rolled up once, at release time. release.yml reads the versioned changelog file directly, and the "archive changelog on main" job — which pushed to main and force-synced main:release from CI — is gone.

These notes were themselves generated by the new flow: rolled up from git log v3.28.1..HEAD, with no staging file involved.

Test plan

  • npm test — 189 pass
  • node bin/cli.js --help, --list --env claude — validate
  • Installed the local build (node bin/cli.js --env claude) and cut this release with it, exercising the new commit-history rollup end to end
  • release.yml parses to 11 steps; the changelog step takes the .changelogs/v3.29.0.md branch (5.3 KB, well under GitHub's 125 K release-body cap)
  • Verified no remaining references to the removed archive job or the v{major.minor}.x.md pattern

/do:rpr was the only command that still summoned a reviewer on its own: its
built-in "conditional copilot" default requested a Copilot review whenever the
PR had none, and an @<login>-only --review-with value fell back to it too.
Every other command already documented "there is no built-in default reviewer;
copilot is never added implicitly" — rpr now matches. With no flag and no saved
default it requests nothing and just resolves the threads the PR already has,
which was always its reviewer-agnostic core job.

Adds the missing empty-REVIEW_AGENTS branch to rpr's dispatch (step 2) and its
re-request gate (step 8), which previously had no defined behavior because the
default guaranteed a reviewer was always present.

Also demotes copilot in the docs: it moves to last in every accepted-slug list
and abort message, is marked legacy in the README reviewer table and in
copilot-review-loop.md, and the local-agent loop is reframed as the primary
path rather than "an alternative to Copilot". The slug still works when asked
for by name.

Two checklists asserted "Copilot review must complete before merge" as pipeline
discipline regardless of which reviewer ran; both are now reviewer-agnostic.
…hardcoded paths

The commands hardcoded one project's layout: check for .changelogs/ or
.changelog/, append to NEXT.md, group under feature-named headings, flip
PLAN.md checkboxes. In a repo that keeps a rolling CHANGELOG.md, uses changesets
or towncrier, or derives its release notes from commit messages, that was wrong
in a way that silently created files the project never wanted.

/do:push now resolves the convention instead of assuming one: a stated
convention in CLAUDE.md/AGENT.md/AGENTS.md/CONTRIBUTING.md wins; otherwise
imitate whatever changelog artifacts already exist; otherwise skip and let the
commit message carry the change. Same for task tracking — mark an item done the
way that tracker already marks things done, rather than prescribing
"- [ ]" to "- [x]" on a PLAN.md that most projects don't have.

/do:next gets the same resolution (its staging snippets no longer hardcode
.changelogs/NEXT.md paths), and /do:better and /do:better-swift's HAS_CHANGELOG
probe was a bare directory test — better.md only ever checked .changelog/, so it
silently missed .changelogs/.

/do:release now resolves how a project produces release notes before touching
anything, and treats "derive them from the commits since the last release" as a
first-class path rather than a fallback — including the case where the notes go
nowhere on disk and become the release body directly. It also learns to leave
the changelog alone when release-please/semantic-release/changesets owns it.
…it log

Staging every change into .changelogs/NEXT.md was meant to save tokens at
release time, but it cost more than it saved: every push edited the same file,
parallel /do:next claims conflicted on it, and the entries duplicated
information the commit history already carried. The commit log is the changelog.

/do:release now rolls up `git log {last_tag}..HEAD` into .changelogs/v{version}.md
as part of the release PR, so the release body is still curated and
feature-grouped — the synthesis just happens once, at release time, instead of
incrementally on every push.

release.yml's changelog step drops its NEXT.md and v{major.minor}.x.md branches
(it now reads the versioned file, or falls back to a raw commit list for a
hand-cut release, and says so on stderr). That makes the "Archive changelog on
main" job dead: it existed only to promote v{mm}.x.md to v{version}.md after the
fact, and it pushed to main and force-synced main:release from CI to do it.
Removed — the workflow no longer writes to any branch.

CONTRIBUTING.md states the convention explicitly. That's load-bearing now that
the commands resolve conventions from context files: the 81 archived
.changelogs/v*.md files would otherwise read as evidence of a staging layout.
@atomantic
atomantic merged commit 7aaeb89 into release Aug 15, 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