Skip to content

Cut release 0.4.0 - #58

Merged
sehkone merged 1 commit into
mainfrom
sehkone/issue-57
Aug 14, 2026
Merged

Cut release 0.4.0#58
sehkone merged 1 commit into
mainfrom
sehkone/issue-57

Conversation

@sehkone

@sehkone sehkone commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Closes #57.

Moves the [Unreleased] heading to 0.4.0 so the tag can be cut. CHANGELOG.md only — two lines.

Why 0.4.0 and not 0.3.2

Two changes are waiting, and they grade differently.

The node block work (#55) adds rules and grounds ones already there. Nothing is reversed or removed, which is PATCH under README.md, and on its own this release would be 0.3.2.

Dropping the pre-0.3.0 pin path is what lifts it. README.md puts 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. Below 1.0.0 a breaking change bumps MINOR.

The argument the other way is in the issue and worth reading: 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 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.json carry .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.yml builds 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-14 heading 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 from 0.3.1
  • npx markdownlint-cli2 over the repository — 0 issues
  • python3 scripts/lint_blocks.pyblocks OK
  • git diff 0.3.1 HEAD -- blocks/ repos.json is non-empty, so check_release_surface.sh has something to compare and will not refuse the tag as churn
  • Script tests — pytest is not available on this machine; the change touches no script, and CI is the gate

After the merge

  1. git tag 0.4.0 && git push origin 0.4.0
  2. Let the scheduled apply carry it, or run scripts/sync.sh 0.4.0 for 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.
  3. File the consumer follow-ups the node block changes create, one issue per repository.

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
@sehkone
sehkone merged commit 173207f into main Aug 14, 2026
1 check passed
@sehkone
sehkone deleted the sehkone/issue-57 branch August 14, 2026 04:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cut release 0.4.0

1 participant