docs(contributing): make the release steps run - #38
Conversation
Followed literally, the four commands either tagged a commit that squash-merging replaces or required the direct push to `main` that this same file rules out two sections earlier. `v0.4.0` points at the squashed commit, `build: bump the version to 0.4.0 (#12)`, so the order that actually happened is bump, land, then tag what landed -- and only that order leaves the tag on an ancestor of `main`. The block says so now, and gains a `git status --short` so the tag names a clean tree. Three claims around it were wrong or missing. The section opened by asking for credentials on two registries. Both publish through trusted publishing, so the workflow mints its own short-lived token and there is nothing to hold here or locally. Asking a maintainer to obtain a credential the design deliberately does not use is the wrong first instruction for the section. `verify` was never mentioned, and it is the job every publish waits on. It re-runs both suites and the fuzzer at the tagged commit, and it builds and tests the Rust with `--locked`, which `make check` never passes -- so a lockfile disagreeing with its manifest goes green locally and red after the tag is frozen, when the remedy is the next patch number. Only the Cargo side is exposed, because that job's Python step passes no equivalent. And nothing here said a red smoke run has a consequence. It has exactly one: `alias` waits on it, so the major alias stays on the previous release while the version has already shipped. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PR Summary by QodoFix release checklist ordering and document release gates
AI Description
Diagram
High-Level Assessment
Files changed (1)
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #38 +/- ##
=======================================
Coverage 87.40% 87.40%
=======================================
Files 3 3
Lines 691 691
=======================================
Hits 604 604
Misses 87 87 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Code Review by Qodo
1.
|
What changes, and why
The
## Releasingblock, followed literally, does not work.Squash is the only merge method the
mainruleset allows, so a squash merge replaces the commit the bump was made on. Tagging before the merge names a commit that never reachesmain; tagging after it requires a step the block does not have.v0.4.0points atbuild: bump the version to 0.4.0 (#12)— the squashed commit, an ancestor oforigin/main— so the order that actually happened is bump, land, then tag what landed. The block says that now, and gains agit status --shortso the tag names a clean tree.Three claims around it were wrong or absent.
Registry credentials. The section opened "it needs push access to the tag and credentials on two registries." Both registries authorize through trusted publishing —
release.yml'spypiandcratesjobs mint an OIDC token, andgh api .../actions/secretsholds no registry secret. Asking a maintainer to obtain a credential the design deliberately does not use is the wrong first instruction for the section.The
verifygate. Never mentioned, and it is the job all three publishing paths wait on —binaries,pypiandcratesare eachneeds: [verify, build]. It re-runs both suites and a 400-seed differential fuzz at the tagged commit. It also builds and tests the Rust with--locked:So a
Cargo.lockdisagreeing withCargo.tomlpassesmake checkand fails after the tag is frozen, when the remedy is the next patch number rather than a retag. Only the Cargo side is exposed — that job's Python step passes no equivalent — and the paragraph says so rather than over-claiming.The one gate after the publishes. Nothing here said a red smoke run has any consequence. It has exactly one:
aliaswaits on it, so@v0stays on the previous release while the version has already shipped.Depends on #32
The sentence "
release.ymlruns onv*.*.*and nothing else" is left as written because #32 deletes theworkflow_dispatchtrigger that made it false. If #32 does not land, that clause still needs the correction described there.Corpus
The corpus is the specification, and both implementations answer to it. Tick what applies.
corpus/pins the new behavior. The case was written first and failed first.Checks
make checkpasses, ormake testdoes and this touches no Rust.make tidy, plusunwrap-markdown-prose-py --fail-on-change CONTRIBUTING.mdsincetidyskips this repository's own hook. One Markdown file.