docs(changelog): condense the [Unreleased] section to the brevity standard - #280
Merged
Conversation
…ndard The [Unreleased] entries had grown into multi-hundred-word implementation walkthroughs (private field names, probe/bit-shift mechanics, JIT rationale, per-facet parity notes). Since release.yml extracts the whole section verbatim as the GitHub Release body — and GitHub caps release bodies at ~125k — an accumulation of paragraph-per-change entries risks failing the release. Collapse each change to one tight, user-facing entry stating what observably changed and why it matters to a caller, per the convention codified in CLAUDE.md (#279). The section drops from ~11.3k words to ~1k with no loss of the information a caller needs. Released sections are left untouched (historical, not on the release path). Also mirror a short "Changelog entries" note into CONTRIBUTING.md's Versioning section so the human-facing contributor guide carries the same rule. Closes #278 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates repository documentation to enforce the changelog brevity convention so release notes remain user-focused and within GitHub Release body size constraints.
Changes:
- Condenses
CHANGELOG.md’s entire## [Unreleased]section into short, caller-facing entries. - Adds a “Changelog entries” subsection to
CONTRIBUTING.mdunder Versioning, mirroring the brevity rule for human contributors.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| CONTRIBUTING.md | Documents the changelog brevity convention and explains the release-note size constraint rationale. |
| CHANGELOG.md | Rewrites the [Unreleased] entries to the “few sentences, user-facing” standard. |
…self auto-close The parenthetical implied that writing `Closes #NNN` in a changelog entry auto-closes the issue. GitHub only auto-closes from the PR description, a commit message, or an issue comment — not from changelog/release-notes text. Reword to frame `Closes #NNN` as a traceability convention, with the actual auto-close coming from the referencing PR/commit. Addresses PR review feedback on #280. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
CONTRIBUTING.md:121
- The new guideline says “End the entry with
Closes #NNN”, but the same PR’s condensed## [Unreleased]entries include several bullets that don’t end with aCloses …reference (e.g.,XorFilter<T, THasher>,PooledCeleritySet<…>,BitWriter/BitReader). To avoid a docs-internal contradiction, please make the guidance conditional (only when there’s a tracking issue) or clarify what to do when there isn’t one.
**Keep each entry short and user-facing — a few sentences at most.** State *what* observably changed and *why it matters to a caller*, not how it's implemented. Don't name private fields, list bit-shift/probe steps, or explain JIT/codegen internals — those belong in the PR description or code comments. One tight entry per change: if it needs a paragraph, put the paragraph in the PR body and leave a one-line pointer here. End the entry with `Closes #NNN` — a traceability convention here, since the issue is actually auto-closed by the PR description or commit message that references it, not by the changelog text. (GitHub treats `Closes`/`Fixes`/`Resolves` as equivalent for that; this repo standardizes on `Closes` so the changelog reads consistently.)
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.
What
Condenses the entire
## [Unreleased]section ofCHANGELOG.mdto the brevity convention codified inCLAUDE.md(from #279), and mirrors a short version of that convention intoCONTRIBUTING.md's Versioning section.Closes #278.
Why
Every
[Unreleased]entry had grown into a multi-hundred-word implementation walkthrough — private field names (_words,_version,head/count), bit-shift/probe-chain mechanics, JIT/codegen rationale, and a per-facet "parity note" per change. That detail belongs in the PR description or code comments, not a changelog a caller reads to decide whether/how to upgrade.It's also a release-safety issue:
.github/workflows/release.ymlextracts the whole## [X.Y.Z]section verbatim as the GitHub Release body, and GitHub caps release bodies (~125k). An accumulation of paragraph-per-change entries in one section risks exceeding that and failing the release (this has bitten a prior release). The[Unreleased]section becomes the next release section, so it is squarely on the release path.What changed
CHANGELOG.md— each[Unreleased]change is now one tight, user-facing entry stating what observably changed and why it matters to a caller, ending withCloses #NNNwhere an issue exists. The per-type test/benchmark/dashboard/docs bullets and the parity notes are dropped (they're how the feature ships, not user-facing changes). The already-conventionalBitSet.Flip### Changedentry (the perf(BitSet): add AggressiveInlining to Flip to match Get/Set (#253) #277 example) is kept as-is. The section drops from ~11,272 words to ~987 (~91%).CONTRIBUTING.md— a new### Changelog entriessubsection under Versioning mirrors the rule for human contributors (the canonical guide previously only said "updateCHANGELOG.mdfirst"), and points atCLAUDE.mdfor the agent-facing copy.Scope notes
DisjointSet/Deque/BitWriter/BitReaderas examples, but all 13[Unreleased]entries were equally verbose and all sit in the same release section — condensing only three would not keep the extracted release body within limits, so the whole section was brought to standard.[2.2.0]) is intentionally left out: it's marked optional/lower-priority, those sections are historical, and the size risk is per-release-section so past sections are not on the release path. Left untouched to keep this diff focused.CLAUDE.mdreads clearly + mirror intoCONTRIBUTING.md):CLAUDE.md's guidance from docs: add CLAUDE.md with a CHANGELOG brevity convention #279 reads clearly as-is; theCONTRIBUTING.mdmirror is included here.No code, tests, or public API touched — docs only.
🤖 Generated with Claude Code