docs(changelog): record v0.9.13 - #244
Merged
Merged
Conversation
Moves the Unreleased entries under a dated heading, so the tag push publishes
notes a human already reviewed (`changelog-section.sh` reads this section).
TWO STRUCTURAL FIXES WHILE MOVING THEM.
- Unreleased had FIVE `### Fixed` blocks — one per merge that landed its own
heading rather than appending to the one above. Merged into one.
- The entries were in reverse-chronological order, which broke every
back-reference in them. Three entries open by naming "the previous entry",
and in that order the entry each one named appeared BELOW it: #234's "the
previous entry made curl present the token through a config file" pointed at
#233, seven bullets further down the page. #236 cites #234, #237 cites #236,
#238 cites #237, #239 cites #237 and #238 — every one of them forward.
Reordered oldest-first, so the section reads in the order the work happened
and each reference points backwards at text the reader has already passed.
This is the same class the v0.9.12 release commit fixed for a single pair.
NOTHING WAS REWRITTEN. The reordering is verified as a permutation: the sorted
set of non-blank content lines before and after is byte-identical (187 lines),
so no prose was gained, lost, or edited while regrouping. `changelog-section.sh`
extracts v0.9.12 byte-for-byte identically, and v0.9.13 cleanly at 204 lines.
ONE ENTRY ADDED, for #242, which had none: the 25-line in-file count sweep in
`tests/test-tools-d.sh` that #239's tree-wide rule made redundant. It belongs
with the count-idiom group and states why the wider rule is strictly better on
both sides — it catches `|| echo 0`, which the in-file version missed, and
leaves an `[[ … ]] && x || y` ternary alone, which the in-file version flagged.
#243 (the doubled blank lines) deliberately gets no entry: it is whitespace
that changes no rendering and moves no section boundary, and an entry for it
would be noise in notes describing ten real fixes. `changelog-coverage.sh`
therefore reports 10 non-docs merges against 0 Unreleased entries — the
documented false positive it fires on every release commit by construction,
since a release empties Unreleased.
VERIFIED: hermetic suite 79/79; no doubled blank line anywhere in the file.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0126gRFGLpVTdGi19dkCh9uz
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.
Moves the
Unreleasedentries under a dated heading, so the tag push publishes notes a human already reviewed —changelog-section.shreads this section and is the only author of the release body.Two structural fixes while moving them
Five
### Fixedblocks became one. Each merge since v0.9.12 landed its own heading rather than appending to the one above.The entries were in reverse-chronological order, which broke every back-reference in them. Three entries open by naming "the previous entry", and in that order the entry each one named appeared below it:
curlpresent the token through a config file"Reordered oldest-first, so the section reads in the order the work happened and each reference points backwards at text the reader has already passed. This is the same class the v0.9.12 release commit fixed for a single pair.
Nothing was rewritten
The reordering is verified as a permutation, not an edit: the sorted set of non-blank content lines before and after is byte-identical at 187 lines, so no prose was gained, lost, or altered while regrouping.
changelog-section.sh v0.9.12extracts byte-for-byte identically before and after — no boundary movedchangelog-section.sh v0.9.13extracts cleanly, 204 lineschangelog-section.sh Unreleasedcorrectly reports the section as emptyOne entry added, for #242, which had none
The 25-line in-file count sweep in
tests/test-tools-d.shthat #239's tree-wide rule made redundant. It belongs with the count-idiom group and states why the wider rule is strictly better on both sides: it catches|| echo 0, which the in-file version missed, and it leaves an[[ … ]] && x || yternary alone, which the in-file version flagged.#243 (the doubled blank lines) deliberately gets no entry: it is whitespace that changes no rendering and moves no section boundary, and an entry for it would be noise in notes describing ten real fixes.
changelog-coverage.shtherefore reports 10 non-docs merges against 0Unreleasedentries — the documented false positive it fires on every release commit by construction, since a release emptiesUnreleased. That is the reasonAGENTS.mdrejects wiring it as a per-PR gate.Verified
awk 'BEGIN{p=""} {if($0=="" && p=="") print NR; p=$0}' CHANGELOG.mdreturns nothing)Once this merges, the annotated tag
v0.9.13is pushed andrelease.ymlpublishes.🤖 Generated with Claude Code
https://claude.ai/code/session_0126gRFGLpVTdGi19dkCh9uz