Skip to content

docs(changelog): record v0.9.13 - #244

Merged
ivan-gudak merged 1 commit into
mainfrom
release/v0.9.13
Sep 4, 2026
Merged

ivan-gudak merged 1 commit into
mainfrom
release/v0.9.13

Conversation

@ivan-gudak

Copy link
Copy Markdown
Collaborator

Moves the Unreleased entries under a dated heading, so the tag push publishes notes a human already reviewed — changelog-section.sh reads this section and is the only author of the release body.

Two structural fixes while moving them

Five ### Fixed blocks 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:

entry cites where it sat
#234 — "the previous entry made curl present the token through a config file" #233 seven bullets further down
#236 #234 further down
#237 #236 further down
#238 #237 further down
#239 #237 and #238 further down

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.12 extracts byte-for-byte identically before and after — no boundary moved
  • changelog-section.sh v0.9.13 extracts cleanly, 204 lines
  • changelog-section.sh Unreleased correctly reports the section as empty

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 it 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. That is the reason AGENTS.md rejects wiring it as a per-PR gate.

Verified

  • hermetic suite 79/79
  • no doubled blank line anywhere in the file (awk 'BEGIN{p=""} {if($0=="" && p=="") print NR; p=$0}' CHANGELOG.md returns nothing)

Once this merges, the annotated tag v0.9.13 is pushed and release.yml publishes.

🤖 Generated with Claude Code

https://claude.ai/code/session_0126gRFGLpVTdGi19dkCh9uz

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
@ivan-gudak
ivan-gudak merged commit 279f000 into main Sep 4, 2026
7 checks passed
@ivan-gudak
ivan-gudak deleted the release/v0.9.13 branch September 4, 2026 02:01
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.

1 participant