docs: flip the changelog, the introduction and the README to v2.0.0 (#272) - #298
Conversation
…roke (#272) Everything under [Unreleased] — M13's protocol-2.0 work, M14's bookkeeping, and the M12 and M13 records, nineteen entries — becomes `## [2.0.0] — 2026-09-06`, with a fresh empty [Unreleased] above it and the compare links updated, as #186's and #242's flips did before it. The date is the tag's, and is amended before tagging if the tag slips a day. What this release needs and those did not is a block an adopter can act on: 2.0 is the first major, and a 1.x repository stops working the moment the extension is upgraded. `### What broke, and what to do` therefore leads the section — the layout move and `LAYOUT_LEGACY` in one paragraph, the five migration steps as a list (upgrade; migrate hubs before spokes; read the commit; push and open the PR; paste the `action needed` lines), and one paragraph naming the other breaks, each pointing at its own entry below rather than restating it. The heading follows 1.0.0's `### What 1.0 promises`, the other section here that summarises rather than records. No entry is added for this task itself, as with #186 and #242. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr
The `cc:` labels entry's third bullet still closed with the sentence SPEC §4 stopped saying in dd5913d — "`migrate` runs once, on a repository whose labels nobody chose; `init` reruns, on one whose labels somebody may have" — while the fourth bullet, edited in that same commit, already carried the corrected reading: the *move* runs once, the label step is what a rerun repeats, and a label restyled deliberately after the migration is set back to the defaults. Two bullets of one entry disagreed about the verb they both describe. The third now uses §4's own wording, which puts the weight on `init` as the verb a project reruns. Nothing else in the entry changes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr
…272) `docs/introduction.md`'s "What exists" flips: **Shipped:** v2.0.0 implementing protocol 2.0, and the `version` example to `v2.0.0 (protocol 2.0)`. The verb list gains `migrate`, checked against `internal/cli/cli.go`'s dispatch — the verb shipped in #256 while 2.0 sat on `main` unreleased, so a paragraph headed **Shipped:** was right to omit it until now and wrong to keep omitting it. The dated "On `main` and not yet released" paragraph #284 added goes: what it described is what this release ships, and the migration guidance it pointed at now leads the changelog. README's matching block under "Start now" goes the same way, replaced by one short paragraph for an adopter already running CodeCrew — v2.0.0 is the current release, a 1.x repo is refused rather than read, `gh codecrew migrate` moves it forward hubs before spokes, and the changelog's lead has the steps. Docs only. `git grep '1\.2\.0'` outside CHANGELOG.md and docs/milestones/ is then ROADMAP.md's M12 row alone, which records which milestone shipped it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Zu94NTC5DJskcpMTSofzr
There was a problem hiding this comment.
Requesting changes.
- PR body, first line: the body says this is "deliberately not
Closes #272", but the literal closing keyword is still present. GitHub is parsing it as an auto-close reference:gh pr view 298 --json closingIssuesReferencesreports #272. That violates the task/dispatch requirement that this Part A PR leave #272 open until Part B and the operator verification finish. Please remove the literal closing phrase, for example by saying "not a closing PR for #272" without a GitHub closing keyword.
Checks run: gofmt -l ., go vet ./..., go test ./..., go build -o ./gh-codecrew ./cmd/codecrew, ./gh-codecrew help, and GH_TOKEN=... ./gh-codecrew migrate --dry-run. The code checks passed, and the built dry run reports this hub is already on protocol 2.0 with labels at the defaults.
|
Thanks — the body is fixed, and the second half of the finding turns out to be structural rather than editorial. |
There was a problem hiding this comment.
Approved.
Round-two body check passes: the PR body says "Part A of #272" and I found no close/fix/resolve closing keyword immediately before #272. GitHub still reports #272 through the linked branch, and the Decision recorded on #272 accepts that flow for Part B and operator verification, so I am not holding the PR on that reference.
I rechecked the release flip against M14-R3. The accumulated origin/main Unreleased entries are present under ## [2.0.0], with only the recorded label-entry tidy plus the new lead block; the fresh ## [Unreleased] is empty; and the compare refs are in the requested shape, with v2.0.0 expected to resolve after the Part B tag. README.md and docs/introduction.md no longer carry the interim "main and not yet released" paragraphs and read consistently for the v2.0.0/protocol 2.0 release.
Verification run: gofmt -l ., go vet ./..., go test ./..., go build -o ./gh-codecrew ./cmd/codecrew, ./gh-codecrew help, and ./gh-codecrew migrate --dry-run. I also checked gh extension upgrade codecrew --dry-run; the command form is accepted by gh, and this checkout fails only because the installed extension is local. No Go files are touched, the task and milestone record have the required Decisions, and the commit subjects meet the convention and reference (#272).
Part A of #272; not a closing PR for that task. #272 stays open until Part B — the annotated tag,
release.yml, the five assets — and the operator's own verification are done, so this PR carries no auto-close reference and deliberately spells none anywhere in this body.M14-R3, first half. As #242's PR #246 did for v1.2.0, with the one thing a major earns that a patch does not: a block a 1.x adopter can act on, at the top of the section rather than four hundred lines into it.
What changed
CHANGELOG.md—## [Unreleased]becomes## [2.0.0] — 2026-09-06, with a fresh empty## [Unreleased](Nothing yet.) above it. The nineteen entries that were under Unreleased — M13's protocol-2.0 work, M14's bookkeeping, and the M12 and M13 records — move into 2.0.0 unchanged but for the tidy below. Link definitions:[Unreleased]now comparesv2.0.0...HEAD;[2.0.0]added asv1.2.0...v2.0.0. No entry for this task itself, as with #186 and #242 (Decision).The lead block — a new
### What broke, and what to doopens the 2.0.0 section: the.codecrew/move in one paragraph, that a 2.0 binary refuses a 1.x repo withrefused[LAYOUT_LEGACY]and there is no dual read, then the migration as five numbered steps (upgrade the extension;gh codecrew migrate --dry-runthenmigratein each repo, hubs before their spokes, because a spoke reads the hub's.codecrew/config.ymland refusesHUB_UNREADABLEwhile the hub is still on 1.x;git showto read the commit; push and open the PR yourself, sincemigratenever pushes; paste theaction neededlines into a kept rootAGENTS.mdorCLAUDE.md). A final paragraph names the other breaks — typed identities, routing failing closed, the entry point's move, the three deleted 1.0 shims, and the record grammar that reclassifies text already written on GitHub — each pointing at its own entry below rather than restating it. The heading form follows 1.0.0's### What 1.0 promises, the other section in this file that summarises rather than records. Decision, including the deliberate overlap with the older "Moving a repo forward" block.The one tidy — the
cc:labels entry's third bullet still ended on the sentence SPEC §4 stopped saying in dd5913d ("migrateruns once, on a repository whose labels nobody chose;initreruns, on one whose labels somebody may have"), while the fourth bullet, edited in that same commit, already carried the corrected reading. The third now uses §4's own wording. Its own commit, so the flip diff stays readable.docs/introduction.md— "What exists":**Shipped:** v1.2.0 … protocol 1.0→v2.0.0 … protocol 2.0, and theversionexample →v2.0.0 (protocol 2.0). The verb list gainsmigrate, checked againstinternal/cli/cli.go's dispatch: the verb shipped in #256 while 2.0 sat onmainunreleased, so a paragraph headed Shipped: was right to omit it until now (Decision). The dated "Onmainand not yet released" paragraph #284 added is deleted — what it described is what this release ships.README.md— the matching "Onmainand not yet released" block under "Start now" is replaced by one short paragraph for an adopter already running CodeCrew: v2.0.0 is the current release, a 1.x repo is refused rather than read,gh codecrew migratemoves it forward hubs before spokes, and the changelog's lead has the steps.What deliberately did not change
ROADMAP.md's M12 row (v1.2.0 and the field fixes behind it) is the only1.2.0left outsideCHANGELOG.mdhistory anddocs/milestones/, and it records which milestone shipped that release — flipping it would make it false, the same call #242 recorded fordocs/extensions.mdanddocs/platform-interop.md.The
docs/introduction.mdandREADME.mdlinks to the M13 record went with the paragraphs that carried them; the record itself is unchanged, and the changelog is where 2.0's break is now documented for a reader who is not archaeology-minded.versionis ldflags-stamped from the tag, so there is nothing to bump in Go; the protocol version2.0has been ininternal/configsince #255.Checks
Docs only, no Go touched.
gofmt -l .silent,go vet ./...clean,go test ./...green as the boundary check.git grep 'not yet released'outsidedocs/milestones/finds nothing;git grep '1\.2\.0'outsideCHANGELOG.mdanddocs/milestones/finds only the ROADMAP row above. Commit subjects measured: 80, 71, 75 characters.After the merge
Part B, on the coordination layer's word: the annotated tag
v2.0.0with messagev2.0.0 (protocol 2.0)cut on the merge commit by the implementer identity,release.yml(gh-extension-precompile) watched to success, the five platform assets confirmed, and the evidence posted on #272 as #242's was. If the tag slips past 2026-09-06 the date in the## [2.0.0]heading is amended before tagging. The operator's own verification —gh extension upgrade codecrew→ v2.0.0,statusclean on this migrated hub,migrate --dry-runreporting already 2.0 — and the twelve-repo migration are the operator's to run and record on #269.