Cut release 0.4.0 - #58
Merged
Merged
Conversation
Two changes are waiting under `[Unreleased]`, and they grade differently. The `node` block work adds rules and grounds ones already there, which is PATCH under README.md and would make this 0.3.2 on its own. Dropping the pre-0.3.0 pin path is what lifts it: README.md puts "an input renamed or dropped" in its own category, MAJOR whatever it does to the rules, and below 1.0.0 that shifts down to MINOR. Grading it again is arguable, since 0.3.0 already took MINOR for the pin move and said the fallback would come out once no repository was on the old path -- so this is the second half of one interface change. The grade names the review a release demands rather than the novelty of the change, and this one demands that somebody confirm no consumer still sits on the old path, because one that does now fails its drift check on a file it cannot read. All thirteen repositories in repos.json carry `.agent-instructions.toml` and none carries `.agents/instructions.toml`, so the confirmation passes -- but the obligation is what sets the grade, not the outcome. The heading moves in its own pull request rather than with the tag. `release.yml` builds the notes by finding the heading that matches the tag and refuses the release instead of generating a line, so tagging while the entries still sit under `[Unreleased]` aborts after the tag has already been pushed. No `[Unreleased]` section is left behind; the next change to land opens a new one. `blocks/node.md` differs from 0.3.1, so the surface guard has something to compare and will not refuse the tag as churn. Closes #57
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.
Closes #57.
Moves the
[Unreleased]heading to0.4.0so the tag can be cut.CHANGELOG.mdonly — two lines.Why 0.4.0 and not 0.3.2
Two changes are waiting, and they grade differently.
The
nodeblock work (#55) adds rules and grounds ones already there. Nothing is reversed or removed, which is PATCH underREADME.md, and on its own this release would be0.3.2.Dropping the pre-0.3.0 pin path is what lifts it.
README.mdputs a change to the interface a consumer calls in its own category — "an input renamed or dropped ... is MAJOR on its own, whatever it does to the rules" — and an accepted input path being dropped is that, literally. Below1.0.0a breaking change bumps MINOR.The argument the other way is in the issue and worth reading:
0.3.0already took MINOR for the pin move and said the fallback would come out once no repository was on the old path, so grading it again double-counts one interface change. What decides it is that the grade names the review a release demands rather than the novelty of the change. This release demands that somebody confirm no consumer is still on the old path, because one that is now fails its drift check on a file it cannot read.That confirmation has been done — all thirteen repositories in
repos.jsoncarry.agent-instructions.toml, none carries.agents/instructions.toml— but the obligation is what sets the grade, not the outcome.Why the heading moves before the tag
release.ymlbuilds the notes by finding the heading that matches the tag, and refuses the release rather than generating a line when it finds none. Tagging while the entries still sit under[Unreleased]extracts an empty body and aborts after the tag is already pushed. No[Unreleased]section is left behind; the next change to land opens a new one.Test plan
## [0.4.0] - 2026-08-14heading present; no[Unreleased]heading or link reference remains (the one surviving mention of the word is prose inside the 0.3.1 entry, describing this very rule)[0.4.0]link reference resolves as a compare range from0.3.1npx markdownlint-cli2over the repository — 0 issuespython3 scripts/lint_blocks.py—blocks OKgit diff 0.3.1 HEAD -- blocks/ repos.jsonis non-empty, socheck_release_surface.shhas something to compare and will not refuse the tag as churnAfter the merge
git tag 0.4.0 && git push origin 0.4.0scripts/sync.sh 0.4.0for repositories that should not wait. Nothing has to be done by hand in a consumer first — no marker pair is being added, and every repository is already on the pin path this release requires.nodeblock changes create, one issue per repository.