fix(release)!: declare the breaking changes, so the version stops understating them - #105
Merged
Merged
Conversation
…erstating them The release was cut as 2.3.0 — a MINOR — for a release that moves exit codes and wire contracts on six spells. Not one of its 521 commits carried a `!` or a `BREAKING CHANGE:` footer, which is the only thing release-please reads, so the generated changelog had `### Features` and `### Bug Fixes` and no breaking section at all. ⛔ AND THE ABSENCE WAS AN ACTIVE SIGNAL, NOT MERELY A GAP. The same CHANGELOG carries real `### ⚠ BREAKING CHANGES` sections for earlier releases, so a consumer scanning it learns this project flags breaks when they happen — and reads their absence on this release as "there are none". Anyone pinned `^2` would have taken exit-code changes silently. ⚠ AND THE COUNT WAS WRONG EVERY TIME IT WAS SAID. Drafts of the release note, and this session's own summaries, said "twelve breaking changes" — a figure counted at an earlier commit and repeated without being re-derived. Enumerated at the release commit: FIFTEEN wire-and-exit-code changes plus one removed human affordance. `docs/releases/3.0.0-breaking-changes.md` is the list, grouped by what an integrator would act on: exit codes, depended-on behaviour, the event stream. Where a count and a list disagree, trust the list. Typed `fix` rather than `docs` deliberately: this corrects release metadata that would have misinformed consumers about compatibility, and a type whose section is hidden by default is the wrong place to put a notice that must be rendered. BREAKING CHANGE: Exit codes and event-stream contracts changed on six spells. Exit codes: "no session" moved 2 → 5 on glamour, imago and bounty (joining magpie and mind-mapper); bounty's cooperative refusals moved off exit 1 to 6 `conflict` / 5 `not_found` with stdout now empty; grapevine `pull` on a missing channel 2 → 5 and `send` to an archived channel 2 → 6; mind-mapper's needs-project and 409 family 2 → 6 and unknown entity → 5; a bare invocation is now exit 2 on grapevine, magpie and glamour where it exited 0. Behaviour: grapevine's read verbs (`pull`, `read`, `wait`, `triage`, bare `topic <name>`) now 404 instead of silently creating the channel; `--timeout 0` reversed meaning on magpie and bounty to "never idle-close"; magpie's `--timeout` now means "linger after the last subscriber leaves" rather than "longest idle while connected"; unknown flags are rejected and flags are scoped to their verb. Event stream: mind-mapper's cursor field is `id`, not `seq`, and its keepalive is `: hb`, not `: keepalive`; SSE streams now open with a `: connected` comment on astrolabe, magpie, glamour and bounty; bounty's presence frames left the replay log and carry no `id`; imago's proposal frames carry the proposal as `proposalId` instead of overwriting the `id` cursor. UI: grapevine's watch surface drops the per-row close button for a context menu. The full list, with the reasoning for each, is `docs/releases/3.0.0-breaking-changes.md`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BiZGj5ZTDSZi1mB8YtuRcx
ichabodcole
added a commit
that referenced
this pull request
Sep 15, 2026
…said otherwise Ruleset "Main Gate" (`22059514`) was created 2026-09-01T18:39:36-07:00 — the day after the backlog item asking for it was filed — is `enforcement: active` on `~DEFAULT_BRANCH`, and requires the status check `gate`. It ran and passed on both PRs that went into `main` for the 3.0.0 release (#104 4m38s, #105 4m25s). Nobody closed the item, so for two weeks the tree asserted the opposite. ⛔ AND IT REACHED A PUBLISHED RELEASE NOTE. The 3.0.0 note lists as a standing limit that "`gate` has to be marked required in GitHub's settings, and no agent can do that — until a human does, a red `gate` does not block a merge", and adds that a check which caught two real defects on its first outings "is not yet allowed to block a merge". Both are false, and they are frozen in the `develop`→`main` merge commit body. The note cites the backlog item by filename for the detail, so closing that item with the evidence is the only correction that reaches a reader once the merge commit is published. ⚠ THE REASONING ERROR, WHICH IS THE PART WORTH KEEPING. The note said of the workflow header's assertion: "nothing in this tree can confirm it — treat that sentence as an instruction to a human, not a statement of fact." The first half was true; the conclusion was not. `gh api repos/<owner>/<repo>/rulesets` reads repo configuration directly, and the same session used `gh` freely for PRs, runs and logs the whole time. **"Not verifiable from the tree" was silently upgraded to "not verifiable"**, and a stale backlog item was then taken as current state because nothing in the tree contradicted it. The investigation's clause that seeded it ("not something an agent can land or verify") is corrected in place rather than rewritten: landing is Cole's, verifying is one API call. `.github/workflows/ci.yml`'s header was right all along and is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BiZGj5ZTDSZi1mB8YtuRcx
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.
Declares the breaking changes this release carries, so release-please recuts #104 as 3.0.0 instead of 2.3.0. See docs/releases/3.0.0-breaking-changes.md.