Describe a release before tagging it, and refuse a tag for one nobody described [#83] - #151
Merged
Merged
Conversation
… described [#83] An operator holding a bundle has to decide whether the next one is worth taking, and a version number does not answer that. This repository published nothing that did: there was no changelog in the tree, while the repository whose gate this plan takes as its target publishes one. CHANGELOG.md carries what gets an entry and what does not, with the reason for the omission. It records what changes what an operator serves or what a reader can reach: a page added or removed, an address that moves, a budget number, a check that starts refusing something it used to allow, and anything that moves the bytes the build produces from unchanged input. It leaves out the words on the pages, because prose is most of what this site is made of and a file listing every corrected sentence buries the entries somebody is deciding from. That is the same reasoning the version follows in decisions/0013. It is kept by hand. A file generated from commit subjects is a second copy of a history that already exists, and what an operator needs is the sentence saying whether this release moves something they depend on, which a subject line does not say. The refusal is what stops it being a courtesy. go run . changelog refuses a version the file carries no section for, and refuses a heading with nothing under it, because a heading is where a description goes and is not one. The release run asks it before anything is packed or tagged. It is deliberately not a leg of the gate: the version in the tree is the one the next release carries and its section is written when somebody decides to release, so a leg would refuse every ordinary change for a description nobody owes yet. The file is a register of versions rather than a copy of one, so it joins internal/version in the set the row about a second copy excludes. That exclusion is load-bearing rather than decorative, and taking it out was what caught a comment in the new package spelling the version twice. The means is Go, in a package with a verb, because the rule has to be decidable on the machine where the mistake was made rather than only inside a workflow step, and a suite has to be able to prove it bites. Signed-off-by: Nils Lehnen <[email protected]>
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 #83.
What was wrong
Nothing in this repository told a reader what is different between two releases.
The repository whose gate this plan is measured against publishes such a file
and this one did not:
Run 2026-08-12 against
mainat8117129, before this branch.What the change does
CHANGELOG.mdstates what gets an entry and what does not, with the reason forthe omission. It records what changes what an operator serves or what a reader
can reach: a page added or removed, an address that moves, a budget number, a
check that starts refusing something it used to allow, and anything that moves
the bytes the build produces from unchanged input. It leaves out the words on
the pages, because prose is most of what this site is made of and a file listing
every corrected sentence buries the entries somebody is actually deciding from.
That is the version's own reasoning, in
decisions/0013-the-version-scheme.md, applied to the file that describes whatthe number moves for.
It is kept by hand, and the file says so and why. A file generated from commit
subjects is a second copy of a history that already exists.
There is one section for what is unreleased and none for a released version,
because nothing has been released:
Run 2026-08-12.
The refusal, and the proof that it bites
go run . changelogrefuses a version the file carries no section for. On thisbranch as it stands, which is the state a tree is in for most of its life:
With a section for that version written above
Unreleased, and nothing elsechanged:
Both run at
42d0239. The release run asks it before anything is packed ortagged:
Run at
42d0239. So a version with nothing describing it stops the run in itsfirst job, which is before the job that is granted a write ever starts.
The suite holds the shapes the verb has to tell apart, and every fixture is
assembled from the version constant rather than written out, so a version bump
moves the fixtures with it:
Run at
42d0239. A heading with nothing under it is refused for its own reason,because a heading is where a description goes and is not one. A missing file
fails closed rather than reading as a version nobody had to describe.
Why it is not a leg of the gate
The version in the tree is the one the next release carries, and the section
describing it is written when somebody decides to release rather than when they
bump a constant. A gate leg would refuse every ordinary change for a description
nobody owes yet. The release run is the moment it is owed, and that is where it
runs. The verb exists so the same rule can be decided on the machine where the
mistake was made rather than only inside a workflow step.
The register, and what taking it out found
A file describing each release carries a heading per version because that is
what it is for, so it joins
internal/versionin the set the rowversion-lives-in-exactly-one-fileexcludes. That entry is load-bearing ratherthan decorative. With
CHANGELOG.mdtracked, carrying a section for the version,and the entry removed:
Run at
42d0239with those two changes applied and then reverted. The secondline is not the register: it is a comment in the new package that illustrated
the two spellings of a heading with the number they are spellings of, which is a
second copy of the version. The row caught it in this change rather than after
it landed, and the comment now says what it means without writing the number.
The means
Go, in a package with a verb of its own. The rule has to be decidable where the
mistake is made rather than only inside a workflow step, and it has to be
provable by a suite, which is the position this repository already took for the
commit message rules. A shell block in the release file would satisfy neither.
The gate
Run at
42d0239. The network-backed set was not asked for and the run says so.This change carries no second reader. The ruleset on the branch requires no
approving review, so the evidence above stands in place of one, and the merge is
made by the same account that opened this.