Conversation
/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.
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.
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:rprwas 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:rprresolves 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-swiftno longer assume a.changelogs/NEXT.mdstaging file; they read a stated convention first, otherwise imitate whatever changelog already exists, otherwise write nothing./do:releasenow 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.ymlreads the versioned changelog file directly, and the "archive changelog on main" job — which pushed tomainand force-syncedmain:releasefrom 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 passnode bin/cli.js --help,--list --env claude— validatenode bin/cli.js --env claude) and cut this release with it, exercising the new commit-history rollup end to endrelease.ymlparses to 11 steps; the changelog step takes the.changelogs/v3.29.0.mdbranch (5.3 KB, well under GitHub's 125 K release-body cap)v{major.minor}.x.mdpattern