release: cut v1.0.0 - #73
Merged
Merged
Conversation
VERSION named the 0.0 line and the workflow opened every new line at patch 1, so bumping to 1.0 would have published v1.0.1 — the tag a 1.0 announcement names, and the one `@v1.0.0` pins resolve, would have pointed at nothing. A new line now opens at .0; the existing v0.0 line keeps incrementing from its tags. Docs pinned `uses: ...@v0`, which releases stop moving the moment the 1.0 line opens, freezing every CI consumer at v0.0.30. They now pin @v1, and a gate derives the expected major from VERSION so the two cannot drift again. Also states the compatibility promise 1.0 makes: flags, JSON fields and exit classes are stable within the major line, and moving a failure between exit classes is a major release. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FppcuDXVnYaoGk3PHTLhzT
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
A modified action test now refers to @v1 but still stubs/expects a v0.* “latest” tag, making the test inconsistent with the new 1.x release line.
Pull request overview
This PR prepares the repository for the v1.0.0 release by updating the manually-maintained VERSION line, fixing the release workflow so the first release on a new line is .0, and updating documentation/tests to recommend pinning the moving major tag (@v1) instead of @v0.
Changes:
- Bump
VERSIONto1.0and adjustrelease.ymlto start new MAJOR.MINOR lines at patch0(sov1.0.0exists). - Update docs and action messaging to recommend
uses: ...@v1(major tag that releases move). - Add supply-chain tests that execute the workflow’s version computation logic against fixture git repos/tags.
File summaries
| File | Description |
|---|---|
| VERSION | Bumps release line to 1.0. |
| .github/workflows/release.yml | Starts new lines at patch 0 and updates major-tag movement commentary. |
| tools/supplychain/version_test.go | Executes the workflow’s “Compute next version” step against fixture repos to prevent vX.Y.0 gaps and doc-pin drift. |
| tools/action/version_test.go | Updates major-tag pin test to @v1 (needs a small follow-up fix: the stubbed “latest” tag should be v1.*). |
| tools/action/setup.sh | Updates messaging/comments to reference @v1 and v1.0.0 examples. |
| tools/action/manifest_test.go | Updates assertions/messages to reference the @v1 major pin. |
| action.yml | Updates version input example to v1.0.0. |
| README.md | Updates CI usage guidance from @v0 to @v1. |
| docs/INSTALL.md | Updates action pin and input table text to @v1. |
| docs/LINTING.md | Updates CI example pin to @v1. |
| install.sh | Updates example pinned VERSION to v1.0.0. |
| docs/GUARANTEES.md | Adds explicit 1.0 compatibility guarantee statement. |
| CONTRIBUTING.md | Clarifies that post-1.0 exit-class moves are major releases. |
| CHANGELOG.md | Promotes 1.0 stability promise and rolls Unreleased into 1.0.0 dated 2026-08-27. |
Review details
Suppressed comments (1)
tools/action/version_test.go:84
- This test now asserts behavior for the recommended major pin
@v1, but it still stubs/expectes av0.0.28“latest” tag. That makes the test description misleading and weakens the intended guarantee for the 1.x line; the stubbed GH response and the expected installed VERSION should be a v1.* tag (e.g. v1.0.0 for this release).
r := run{actionRef: "v1", withGH: true, ghTag: "v0.0.28", stubVersion: "v0.0.28"}.exec(t)
if r.exitCode != 0 {
t.Fatalf("setup.sh exited %d, want 0\n%s", r.exitCode, r)
}
if got := r.installed["VERSION"]; got != "v0.0.28" {
- Files reviewed: 14/14 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
Bumps
VERSIONto1.0— and fixes the two things that would each have made that bump publish something other than a usable 1.0.The tag
1.0.0would have named nothingVERSIONholdsMAJOR.MINOR; the release workflow assignsPATCH, opening a fresh line at 1. SoVERSION=1.0on its own publishes v1.0.1, andv1.0.0— the tag an announcement names, the oneuses: ...@v1.0.0andbrew install codeowners-tool@1.0.0resolve — points at nothing, permanently. A line now opens at.0. The existingv0.0line is untouched: its patch still increments from its own tags (v0.0.30 → v0.0.31), which is what keeps the workflow from trying to republish an immutable release.Docs pinned a major tag that releases stop moving
README,
docs/INSTALL.mdanddocs/LINTING.mdrecommenduses: jordonpeterson/codeowners-tool@v0. The release moves the major tag of the line it publishes — so the moment 1.0 opens, nothing movesv0again and every CI consumer following those pages is frozen at v0.0.30, silently and with a green build. They now pin@v1, which this release creates.Compatibility
The changelog's
0.x"flags, JSON fields and exit codes may change in a minor release" caveat becomes the promise 1.0 makes: stable within the major line, added to but never removed or repurposed, and moving a failure between exit classes is a major release. Stated once inCHANGELOG.md,docs/GUARANTEES.mdandCONTRIBUTING.md's exit-code section. The accumulatedUnreleasedbody becomes## [1.0.0] - 2026-08-27.Tests
New
tools/supplychain/version_test.go, written first. It doesn't read the workflow, it runs it: theCompute next versionstep is extracted fromrelease.ymland executed against fixture git repos, because the failure here is arithmetic and a regex over the YAML would have passed on the broken version..0— failed withv1.0.1, and against the committedVERSIONtooVERSIONrather than hardcoded, so the two cannot drift apart at the next majormake vet,go test ./...andmake docsare clean; noBEHAVIOR.mddrift, sincegendocswalksinternal/*only.What merging does
The
VERSIONpath filter triggersrelease.yml, which publishes v1.0.0 with binaries, checksums and a build-provenance attestation, then creates thev1tag the docs now point at. Worth a look before merge: the date on the changelog heading, and whether everything under it is what you want 1.0 to commit to.Generated by Claude Code