Repository navigation
docs(changelog) astubbs#197: finalise the 0.6.0.0 section as the release notes - #498
Conversation
This is the release-time generation of CHANGELOG.adoc's `== 0.6.0.0` section
that docs/releasing.md describes ("What state a changelog section is in": the
section for the release being cut is generated at release time, replacing what
is there, and frozen once it ships). It is therefore the one deliberate
exception to AGENTS.md's "a PR never adds a changelog entry": that rule keeps
per-PR entries out so that this rewrite can be written as a set, and this is
that rewrite. The `(unreleased)` suffix comes off the heading in the same
change, so release.yml's exact heading match now finds the section.
WHAT IT WAS GENERATED FROM. The first-parent commit log from the fork point
(merge-base with origin/upstream/master, 7f29012) to origin/master at
4bc6e7a - every fix, fix!, feat, feat! and deps body read in full, plus the
test and docs commits whose subjects name a user-visible behaviour - and the
release documents: the v6 burn-down note on origin/docs/v6-burndown-checklist
(docs/inflight/release-v6-scope.md: the two decision sections, "What v6 must
say about the confluentinc#857 family", "What v6 must say about data loss and
duplicates", "Known unknowns", "Unknowns made known", the tag-day checks) and
docs/inflight/release-0.6.0.0.md on master (the stability-release framing, the
857 worked example, the breaking-change record, the #204 API change).
Where the burn-down note and a commit body disagreed on a consequence, the
commit body won: #492 corrects the scope note's "misdirection bounded
to one tick" for the revoke sweep to a lost record, and the notes say so.
WHAT WAS REMOVED OR CORRECTED FROM THE OLD TEXT, and why:
- The null-epoch fix (afde8c5) no longer "relates to upstream #326". The
#217 commit body records that attribution as wrong - it is a genuine
fix for a different defect - and asks for it to be dropped at generation.
- "Includes upstream fixes merged after upstream's last release (0.5.3.3)" is
now "upstream's last release on Maven Central is 0.5.3.2; 0.5.3.3 was tagged
but never published", per release-0.6.0.0.md ("0.5.3.3 was never released").
- The "Modernized CI ... automated Maven Central publishing" Improvements
bullet is gone: CI fails docs/releasing.md's entry test (a user cannot
observe it), and publishing is stated in the opening paragraph. Its content
lives in Build & CI.
- "Self-hosted lane: the full suites run per PR" is corrected to dispatch and
schedule only - 025d0b7 took everything per-PR off the box.
- "A release is blocked while any test is quarantined" is kept and the state
added: the registry is empty at this release (#473).
- "Three dormant test classes" and "two of the fixes above" are restated as
shape, per docs/merge-checklist.md's rule against numbers a command could
produce.
- The upstream confluentinc#850 commit-failure-offsets bullet and the upstream confluentinc#892
OffsetMapCodecManager bullet are folded into the #428 log-line bullet
and the #57 PCMetrics bullet respectively, as one entry each.
- The `+` list continuation under Build & CI is a plain paragraph: the
converter renders a continuation as a detached paragraph anyway.
- The file's top NOTE no longer calls the 0.6.0.0 section working text.
DEPENDENCY VERSIONS, re-read against the poms on this tree today:
kafka.version 3.9.2 (fork base 3.9.1); reactor-core 3.8.7 (old text said
3.8.6 - corrected; base 3.6.2); logback 1.6.1 (base 1.5.19, now stated);
mutiny 2.9.5 (base 2.9.4); vertx 4.5.31; junit 5.14.4; mockito 5.23.0;
testcontainers 1.21.4; assertj 3.27.7 (base 3.24.2); slf4j 2.0.18; lombok
1.18.46; netty 4.1.137.Final via netty-bom; micrometer-core 1.13.15 held on
the 1.13 line with CVE-2026-40984, -59295, -59296 (micrometer), -14683 and
-14686 (HdrHistogram) and -82596 (LatencyUtils) excluded, migration target
1.16.7 or later per #493; lz4-java pinned ahead of kafka-clients.
TAG-DAY CHECKS from the burn-down note, those that concern CHANGELOG.adoc:
- Opening paragraph and `=== Breaking` bullet name BOTH the Maven groupId and
the Java packages: yes (the bullet cites #55 and #294).
- `=== Dependencies` re-read against pom.xml immediately before cutting: yes,
today, list above.
- The release page carries the curated notes: the heading is now `== 0.6.0.0`,
so release.yml's own exact match succeeds; the rendered Markdown from
#199's converter, run --strict against this section, is what gets
posted by hand with `gh release edit v0.6.0.0 --notes-file`.
- The #209 breaking changes survived into `=== Breaking`: yes, both, in
one bullet that says only subclasses of the internal controller are affected;
the #267 removal and rename are a second bullet.
- The three `bin/ci-build.sh 3.9.1` references: untouched, as instructed.
- Master green, the module-maturity data recheck, the README trademark wording:
not this change's; the last landed as #495 and the other two are the
tag-day operator's.
NOT IN THE NOTES, DELIBERATELY: the batchSize validation bound (#311)
and the gate-latch WARN (#119), both decided into tier 1 on 2026-09-09
and both on branches, not master. If either merges before the tag, it earns a
correction to the generated text - a Breaking-adjacent bullet for the startup
exception, and a sentence in the intake-stall limitation for the WARN.
ALSO IN THIS CHANGE. docs/inflight/release-0.6.0.0.md is updated only where it
states what the release note will say and that is now settled by the text: the
release-condition paragraph gains the published claim with its two named
transactional exceptions (this supersedes the "claim is amended" paragraph on
origin/docs/v6-burndown-checklist, which inserts at the same point - keep this
one), the #337 and #204 "give it its own line" instructions and
the #209 "check both survived" instruction are marked settled, the
experimental-modules section is marked moot for this release, and the stale
"still blocked by the quarantine guard" block is corrected against
#473. docs/releasing.md's table row and its "not what v6 will publish"
paragraph are corrected the same way.
Verification: bin/check-all.sh clean (16 passed, 0 failed); the converter's
self-test passes on this file, including the every-section-renders arm; the
rendered Markdown was read end to end and the constructs it mangled (bold
spans wrapped across lines, the list continuation) were fixed at the AsciiDoc
source; every line of the section is within 120 characters.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
Brings in #446, the announcement plan. It adds a note and touches no file this branch changes, so the merge is clean and the release notes need no correction for it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
|
@claude review this |
|
Claude finished @astubbs's task in 3m 6s —— View job Review
No correctness issues found. This is an unusually well-substantiated docs PR, and it holds up under fact-checking, not just reading:
One thing worth the author's own judgment call rather than mine, since it's a policy question, not a bug: Spot-checked a representative sample of the ~90 PR/issue links (not all of them) against |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
✅ Duplicate Code ReportTwo engines run in parallel for cross-validation. Each has its own thresholds tuned to its baseline - the real safety net is the per-engine "max increase vs base" check. ✅ PMD CPD
No new clones introduced by this PR. ✅ jscpd (language-agnostic)
No new clones introduced by this PR. Powered by astubbs/duplicate-code-cross-check |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #498 +/- ##
============================================
+ Coverage 82.67% 83.15% +0.47%
- Complexity 1586 1593 +7
============================================
Files 96 96
Lines 5444 5444
Branches 549 549
============================================
+ Hits 4501 4527 +26
+ Misses 746 723 -23
+ Partials 197 194 -3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
🟢 Throughput — OKThis branch measured the same speed as master, on the one test this measures.
Allowable range 🟢 ≥ 0.70 · 🟡 0.50–0.70 (about a 30% loss) · 🔴 < 0.50 (about a 50% loss) What the numbers mean, and what they cannot tell youThe one that gets misread. Why a shape and not a rate. A rate depends on which runner you drew. A shape does not: every test here processes a fixed number of records, so a runner twice as slow doubles the subject and the controls together and leaves their ratio alone. That is the whole trick, and it is why the reported rate is shown last and labelled as this machine only. Reading the comparison. By conservation, not by correction. Every test in this lane processes a fixed number of records, so within one run the ratio of one test's time to another's is invariant under machine speed — a runner twice as slow doubles both terms and leaves the ratio alone. There is no machine-index correction to be wrong, because nothing needed correcting. Per-method times, not class times. A class time is Reference is the median of 10 recent What this still cannot do. It removes machine-to-machine variance. It does not remove this test's own run-to-run variance, measured at about 30% on a single unchanged commit while its controls stayed within 5%. That is a property of the test, not of the comparison, and no arithmetic here can touch it — which is why the reference is a median and the bounds are deliberately coarse. 🟡 means look at this; only 🔴 is outside the measured spread. Runs used: a37d148, e8bd2cb, 1743297, 4bc6e7a, b62c310, c381310, c79424a, 9c67c89, f1aa5eb, eb9fdb0 Since the previous push: ratio 1.009 -> 1, share 1.834 -> 1.818, rate 68206 -> 74887 (+9.8%). One push of difference sits inside this test's measured spread - read it as movement, not as a result. Updated for |
|
…e the release Owner review on #498, five changes: - The opening no longer teases three roadmap items in a clause. A new "What comes next" section lists the queue by state - implemented and on an open PR (fencing recovery, virtual threads, self-tuning concurrency, global rate limiting, Streams and Connect previews, the multi-language sidecar and in-process clients, the commit-failure seam, the health check, residence time, the dashboard, offset density, the direct-pull engine, the docs site, the API gate); designed but not built (the dead-letter queue, batch failure attribution, the poll-path error seam, micro-batching, bounded buffers, the Java 17 baseline); and the 1.0 API settlement. The list is drawn from docs/data/roadmap.yaml and the open PR list, and says so; previews are marked as previews per the announcement note's rule. - Breaking is rewritten as nested bullets: one line of consequence per change, one sub-bullet per thing a reader must do or know, no paragraphs. Same content, about half the words. - The Fixes subsection "Records lost or duplicated with nothing in the logs" is "Priority 1: data loss and duplicates". - The intake-stall limitation no longer says "silently": #497 adds a WARN when the gate has stayed latched with nothing retiring, and is in tier 1 for this release. An AsciiDoc comment beside the bullet records the tag-day dependency: if #497 has not merged, the WARN sentence comes out and "silently" goes back. - A "The size of this release" section quantifies the gap from 0.5.3.2, upstream's last published release: merged PRs, main and test Java lines added and removed with rename detection, and new files, main against test. These are figures a command can produce, which docs/merge-checklist.md warns against; they are here because the section is frozen at the tag and the release is the one place a point-in-time number is the point. The commands are in a comment beside them, and recomputing them is a tag-day check named in the PR body. Lines over 120 columns from the rewrite were rewrapped. The rendered Markdown was regenerated with #199's converter in strict mode and its self-test passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
…ess, not for the failure Owner review on #498: the heading does not say "data loss". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
…ighten Breaking, name what comes next, and size the release Owner review on #498, in one commit. THE SOURCE-COMPATIBILITY CLAIM WAS FALSE, in four places. The opening paragraph said "no method signature changed, but two identifiers did", and the coordinates bullet under Breaking said "no signature changed, so nothing else in your code moves" - while the bullets beneath them listed a renamed exception, a removed method, a new exception type on the commit failure surface, changed protected signatures on the controller, a changed stream contract, and identity equality on RecordContext. The claim had been copied from src/docs/README_TEMPLATE.adoc, which carried it twice (the fork summary and the Upgrading section), written when the rename was the only change and never revisited. All four sites now say: for most users the upgrade is the pom and the imports, it is not source-compatible beyond that, the offset format is unchanged so a consumer group upgrades in place, and the API changes are the short list under Breaking - which the README names, so a reader knows what to look for before following the link. README.adoc is regenerated from the template with the asciidoc-template plugin. WHAT COMES NEXT replaces a one-clause teaser. A new section lists the queue by state, drawn from docs/data/roadmap.yaml and the open PR list: implemented and on an open PR (fencing recovery and the two transactional fixes it unlocks, virtual threads, self-tuning concurrency, global rate limiting, the Streams and Connect previews, the multi-language sidecar and in-process clients, the commit-failure seam, the health check, residence time, the dashboard, offset density, the direct-pull engine, the docs site, the API gate); designed but not built (the dead-letter queue, batch failure attribution, the poll-path error seam, micro-batching, bounded buffers, the Java 17 baseline); and the 1.0 API settlement. Previews are marked as previews, per the announcement note's rule. BREAKING is nested bullets: one line of consequence per change, one sub-bullet per thing a reader must do or know. Same content, half the words. THE PRIORITY-1 FIXES SUBSECTION is named "Priority 1: correctness", for the property rather than the failure. THE INTAKE-STALL LIMITATION no longer says "silently": #497 adds a WARN when the gate has stayed latched with nothing retiring, and is in tier 1 for this release. An AsciiDoc comment beside the bullet records the tag-day dependency - if #497 has not merged, the WARN sentence comes out and "silently" goes back. THE SIZE OF THIS RELEASE is a new section quantifying the gap from 0.5.3.2, upstream's last published release: merged PRs, main and test Java lines added and removed with rename detection, and new files, main against test. These are figures a command can produce, which docs/merge-checklist.md warns against; they are here because the section is frozen at the tag and the release is the one place a point-in-time number is the point. The commands are in a comment beside them, and recomputing them is a tag-day check named in the PR body. The rendered Markdown was regenerated with #199's converter in strict mode and its self-test passes; every line of the section is within 120 columns. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
5abfc96 to
71782d0
Compare
…the project is run Owner review on #498: the section named Lincheck and jcstress but not RacerD, and left out most of what runs on a PR. Checked against .github/workflows, bin/ and the check names on a live PR before writing: - Infer runs with every Java checker on, RacerD among them, as a ratchet against a known-findings set (bin/infer-test.sh); Error Prone's @GuardedBy check is at error level (pom.xml). Both are now named in the static-analysis bullet, which also says the lane is a required check. - Added: GitHub code scanning (CodeQL) and dependency review; per-suite coverage flags with the recorded-history query; the throughput check against recent master runs with its spread reported (#401) and the master-side baseline; the two-engine duplicate-code and file-similarity reports; the repository-hygiene gates (issue references naming their repo, cited paths existing, headers, docs data, shell lint, the PR checklist, PR dependencies); the two-review rule (automated review with blocking inline threads, plus a human LGTM); and tag-as-truth releases with snapshots on every master push. - Fray is named as the next concurrency-testing lane, on the owner's word. - A closing group, "how the project itself is run": every open upstream issue mirrored with a reply pointing at the mirror; the docs/solutions corpus; Dependabot with the held-back majors each recorded with a reason. Not claimed: the Kafka 4.x compatibility lane, which is `if: false` in maven.yml until that work begins. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
Brings in #496, the batchSize validation bound, which is marked breaking and now has its bullet under Breaking in the same push. Its tag-day line in the PR body is retired. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
|
@claude review this |
|
Claude finished @astubbs's task in 2m 51s —— View job Review
No correctness issues found in the two commits added since the last review. Both are owner-driven follow-ups to that review and check out against the current tree:
Nothing here reopens or contradicts anything flagged in the previous review pass — the section still holds up. |
Owner review on #498: the review gates are repository process, not something a user of the library needs told. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… & CI Owner review on #498: how a release is cut is ordinary practice, not a note for a user of the library. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
Tier 3 gains the step the note described only as "regenerated at the tag": the owner is doing that generation by hand in #498, from the commit log and the release document, since no generator exists in bin/. The working-text caveat now names that PR as the point where the section stops being working text, and says that anything merging after it with a release-note line is folded in by hand before the tag. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
The tier 3 item asking the release claim to say which confluentinc#857 mechanisms are closed and which sightings stay unattributed is done in #498: the changelog's rebalance section lists each closed mechanism with its PR and names the one unattributed arm, and the release document gains the claim-as-published paragraph beside the two named exceptions. The box ticks when that PR merges. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
… gates Owner review on #498: the self-hosted lane, the upstream mirrors, the solutions corpus and the dependency bumps are how the repository is run, not what a user of the library is told. Removed, with the trailing pointer to the commit log. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… CI keeps only the testing lanes #496 merged after this branch was cut. Its subject carries the breaking marker and its body states the user-visible change: zero, a negative or null batch size now throws at construction where it used to start a consumer that processed nothing, or died in an ArithmeticException when messageBufferSize was set. The bullet says that, and the one thing a deployment has to know - a property resolving to zero now fails to start. Build & CI, on owner review, is cut back to the lanes that say how the library is tested and analysed; it ends at the CVE scan and the hygiene gates. The tier 1 item that still has no bullet is #497, the gate-latch warning, which is open; its tag-day line in the PR body stands. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
56c3322 to
363796c
Compare
|
@claude review this |
|
Claude finished @astubbs's task in 2m 3s —— View job Review
No correctness issues found. The only change since the last review pass is commit
Consistent with the two prior review passes on this PR and both |
…uired, in the words the rename guard reads bin/rename-packages.sh carries a prose guard over CHANGELOG.adoc: the section must contain either the stale pre-rename claim or its corrected phrases, "two changes are required" and "Rewrite your imports", and bin/test-rename-packages.sh fails when neither is present - which is what the rewrite did, rewording the sentence into something the guard could not see. The `repo: hygiene` and `shell: macos` checks went red on that self-test, on Linux and BSD alike. The coordinates bullet now says both things in those words: two changes are required for the rename, the dependency and the imports, and rewrite your imports with the README's one-line sed. Reproduced red locally with bin/test-rename-packages.sh, green after. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
|
@claude review this |
|
Claude finished @astubbs's task in 2m 1s —— View job Review
No correctness issues found. Only two new commits landed since the previous review pass, both owner-driven tightenings of the "Breaking" and "Build & CI" sections, and both check out:
Re-checked line lengths across the whole No dangling references. The merge commit Nothing here reopens or contradicts either of the two prior review passes. Combined with the two |
Brings in #499, which raises the Lincheck lane's job timeout from 20 to 60 minutes. This branch needed it: its Lincheck leg was cancelled at the 20-minute wall twice on head 86e8c56, once at 22m11s and once at 21m48s, while six sibling maven.yml runs in the same minutes ran the same lane between 6m56s and 20m08s - two of them passing within seconds of the cap. The lane run locally on this head is BUILD SUCCESS in 6m37s with the full six-harness roster, so the red was the cap, not the code, which is the same finding #499's owner ruling records. No changelog content moves. #499 is test and CI only, the Build & CI section states no lane timeout, and the size figures carry their own regenerate-at-the-tag note rather than tracking master. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
|
@claude review this |
|
Claude finished @astubbs's task in 1m 9s —— View job Review
No correctness issues found. The only commit added since the last review pass is This PR's five files (
Nothing here reopens or contradicts any of the four prior review passes, and both |
…e notes Tier 3 ticks the changelog finalisation and the claim amendment it carried. The working-text caveat becomes a fold-in rule for anything merging after it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
Brings in the v6 changelog finalisation (#498), the batchSize bound, the gate-latch warning and the Lincheck timeout change. The changelog heading is now `== 0.6.0.0` on master, so this branch's strict-mode refusal of an `(unreleased)` heading no longer fires on a real run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… is its section verbatim The file was renamed in the previous commit with its AsciiDoc contents intact; this commit converts them. CHANGELOG.adoc used almost nothing of AsciiDoc: headings, `url[text]` link macros, single-star bold, `**` nested bullets, three NOTE admonitions, one continuation and a vestigial toc/ifndef preamble from when the README included it. GitHub release bodies are Markdown, so the file's format was the only reason a converter had to exist between the two - #199's 412-line parser and its 397-line self-test. Converting the file once removes the need for both. The new content is every version section of the old file rendered by that converter in strict mode (all eleven render, including the finalised 0.6.0.0 section, whose body is byte-identical to the one #498 was going to post by hand), under `## <version>` headings, with the preamble converted by hand. The 0.6.0.0 text is unchanged in content. release.yml gains an "Extract the release notes" step before release:prepare that pulls the `## <version>` section with awk and fails the run if it is missing or empty - the strict-mode guarantee #199 had, in six lines, with no fallback to --generate-notes. The GitHub release step posts that file. A dry run rehearses the extraction and puts the body in the job summary. What encoded the AsciiDoc shape changes with it: the changelog citation gate reads `###` section headings and `-` bullets (its tests updated), the package-rename guard's comment names the `### Breaking` bullet, and the live docs name the heading syntax as it is now. docs/releasing.md says what the workflow now does with the file. Supersedes #199, whose converter did its one job here and whose release.yml changes are replaced by the six-line extract. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… is its section verbatim The file was renamed in the previous commit with its AsciiDoc contents intact; this commit converts them. CHANGELOG.adoc used almost nothing of AsciiDoc: headings, `url[text]` link macros, single-star bold, `**` nested bullets, three NOTE admonitions, one continuation and a vestigial toc/ifndef preamble from when the README included it. GitHub release bodies are Markdown, so the file's format was the only reason a converter had to exist between the two - #199's 412-line parser and its 397-line self-test. Converting the file once removes the need for both. The new content is every version section of the old file rendered by that converter in strict mode (all eleven render, including the finalised 0.6.0.0 section, whose body is byte-identical to the one #498 was going to post by hand), under `## <version>` headings, with the preamble converted by hand. The 0.6.0.0 text is unchanged in content. release.yml gains an "Extract the release notes" step before release:prepare that pulls the `## <version>` section with awk and fails the run if it is missing or empty - the strict-mode guarantee #199 had, in six lines, with no fallback to --generate-notes. The GitHub release step posts that file. A dry run rehearses the extraction and puts the body in the job summary. What encoded the AsciiDoc shape changes with it: the changelog citation gate reads `###` section headings and `-` bullets (its tests updated), the package-rename guard's comment names the `### Breaking` bullet, and the live docs name the heading syntax as it is now. docs/releasing.md says what the workflow now does with the file. Supersedes #199, whose converter did its one job here and whose release.yml changes are replaced by the six-line extract. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… is its section verbatim The file was renamed in the previous commit with its AsciiDoc contents intact; this commit converts them. CHANGELOG.adoc used almost nothing of AsciiDoc: headings, `url[text]` link macros, single-star bold, `**` nested bullets, three NOTE admonitions, one continuation and a vestigial toc/ifndef preamble from when the README included it. GitHub release bodies are Markdown, so the file's format was the only reason a converter had to exist between the two - #199's 412-line parser and its 397-line self-test. Converting the file once removes the need for both. The new content is every version section of the old file rendered by that converter (all twenty-nine render - the eleven unprefixed ones in strict mode - including the finalised 0.6.0.0 section, whose body is byte-identical to the one #498 was going to post by hand), under `## <version>` headings, with the preamble converted by hand. The 0.6.0.0 text is unchanged in content. release.yml gains an "Extract the release notes" step before release:prepare that pulls the `## <version>` section with awk and fails the run if it is missing or empty - the strict-mode guarantee #199 had, in six lines, with no fallback to --generate-notes. The GitHub release step posts that file. A dry run rehearses the extraction and puts the body in the job summary. What encoded the AsciiDoc shape changes with it: the changelog citation gate reads `###` section headings and `-` bullets (its tests updated), the package-rename guard's comment names the `### Breaking` bullet, and the live docs name the heading syntax as it is now. docs/releasing.md says what the workflow now does with the file. Supersedes #199, whose converter did its one job here and whose release.yml changes are replaced by the six-line extract. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… is its section verbatim The file was renamed in the previous commit with its AsciiDoc contents intact; this commit converts them. CHANGELOG.adoc used almost nothing of AsciiDoc: headings, `url[text]` link macros, single-star bold, `**` nested bullets, three NOTE admonitions, one continuation, a handful of `//` line comments and a vestigial toc/ifndef preamble from when the README included it. GitHub release bodies are Markdown, so the file's format was the only reason a converter had to exist between the two - #199's 412-line parser and its 397-line self-test. Converting the file once removes the need for both. The new content is every version section of the old file rendered by that converter (all twenty-nine render - the eleven unprefixed ones in strict mode - including the finalised 0.6.0.0 section, whose body is byte-identical to the one #498 was going to post by hand), under `## <version>` headings that keep their original text, with the preamble converted by hand. The 0.6.0.0 text is unchanged in content. Parity against the old file: 29 version sections, 58 section headings, 5 sub-headings, 342 bullets in both of the old file's bullet syntaxes, 75 nested bullets. The converter does not emit AsciiDoc line comments, so the four `//` blocks inside version sections are restored by hand as HTML comments in the positions they held: the recompute commands for the size-of-this-release figures above `### Breaking`; the tag-day note on the latched-gate bullet in Known limitations, indented two spaces so it stays inside the list item (a `<!--` at column zero between two bullets is an HTML block and would split the list); the "there is no 0.5.3.4 release" note at the end of the 0.6.0.0 section; and the upstream release-tag URL under `## v0.4.0.0`. The one comment not carried over annotated the toc/ifndef directives, which have no Markdown equivalent and were dropped on purpose. Three of the four sit inside `## 0.6.0.0`, so they travel in the release body's source without rendering; moving the two maintainer-only ones to docs/releasing.md is the owner's call. release.yml gains an "Extract the release notes" step before release:prepare that pulls the `## <version>` section with awk and fails the run if it is missing or empty - the strict-mode guarantee #199 had, in six lines, with no fallback to --generate-notes. The GitHub release step posts that file. A dry run rehearses the extraction and puts the body in the job summary. What encoded the AsciiDoc shape changes with it: the changelog citation gate reads `###` section headings and `-` bullets (its tests updated), the package-rename guard's comment names the `### Breaking` bullet, and the live docs name the heading syntax as it is now. docs/releasing.md says what the workflow now does with the file. Supersedes #199, whose converter did its one job here and whose release.yml changes are replaced by the six-line extract. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
… is its section verbatim The file was renamed in the previous commit with its AsciiDoc contents intact; this commit converts them. CHANGELOG.adoc used almost nothing of AsciiDoc: headings, `url[text]` link macros, single-star bold, `**` nested bullets, three NOTE admonitions, one continuation, a handful of `//` line comments and a vestigial toc/ifndef preamble from when the README included it. GitHub release bodies are Markdown, so the file's format was the only reason a converter had to exist between the two - #199's 412-line parser and its 397-line self-test. Converting the file once removes the need for both. The new content is every version section of the old file rendered by that converter (all twenty-nine render - the eleven unprefixed ones in strict mode - including the finalised 0.6.0.0 section, whose body is byte-identical to the one #498 was going to post by hand), under `## <version>` headings that keep their original text, with the preamble converted by hand. The 0.6.0.0 text is unchanged in content. Parity against the old file: 29 version sections, 58 section headings, 5 sub-headings, 342 bullets in both of the old file's bullet syntaxes, 75 nested bullets. The converter does not emit AsciiDoc line comments, so the four `//` blocks inside version sections are restored by hand as HTML comments in the positions they held: the recompute commands for the size-of-this-release figures above `### Breaking`; the tag-day note on the latched-gate bullet in Known limitations, indented two spaces so it stays inside the list item (a `<!--` at column zero between two bullets is an HTML block and would split the list); the "there is no 0.5.3.4 release" note at the end of the 0.6.0.0 section; and the upstream release-tag URL under `## v0.4.0.0`. The one comment not carried over annotated the toc/ifndef directives, which have no Markdown equivalent and were dropped on purpose. Three of the four sit inside `## 0.6.0.0`, so they travel in the release body's source without rendering; moving the two maintainer-only ones to docs/releasing.md is the owner's call. release.yml gains an "Extract the release notes" step before release:prepare that pulls the `## <version>` section with awk and fails the run if it is missing or empty - the strict-mode guarantee #199 had, in six lines, with no fallback to --generate-notes. The GitHub release step posts that file. A dry run rehearses the extraction and puts the body in the job summary. What encoded the AsciiDoc shape changes with it: the changelog citation gate reads `###` section headings and `-` bullets (its tests updated), the package-rename guard's comment names the `### Breaking` bullet, and the live docs name the heading syntax as it is now. docs/releasing.md says what the workflow now does with the file. Supersedes #199, whose converter did its one job here and whose release.yml changes are replaced by the six-line extract. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
…ut it (#475) 0.6.0.0 is a bugs-only stability release, and it is overdue: the fork has carried the fixes for upstream's most-reported defects for months while the release waited on features. This note is the source of truth for cutting it - the owner's decisions, the merge queue from those decisions to the tag, every open question, and the checks that make the published artefacts true on the day. #197 is the tracking handle and its body points here; nothing is maintained on the issue. THE DECISIONS, 2026-09-07 and confirmed since. The bar is the stability release and nothing else; Streams and Connect move to the next-0x horizon in the roadmap data; the producer-recovery stack is outside v6. The release claim carries two named exceptions rather than waiting on them: the transactional revoke wait (#44, bounded since #466, not yet declined) and, from 2026-09-09, the poisoned-transaction wedge, both in the transactional producer mode only. The merge queue closed on 2026-09-09; later finds are 0.6.0.x unless they are data loss on a default configuration. THE BURN-DOWN, recorded as each merge landed. Tier 1, the self-contained fixes, is complete: the last two to join were the batchSize bound (#496) and the gate-latch warning (#497), both decided v6-sized on the day the queue closed. Tier 3, the plumbing, has the changelog section finalised as the release notes and the claim amended (#498) and the release page body posted verbatim from CHANGELOG.md by release.yml (#501, closing #199); what remains is the tag-day checks, the drafted issue responses, and the tag. A can-follow list names what is deliberately not v6. WHAT THE RELEASE NOTE SAYS ABOUT THE confluentinc#857 FAMILY, each line with the PR that settled it: the revoke-path deadlock proven by control arm, the eager stall withdrawn as a timing bound that flips with the processor count, the fifth item measured as the consumer-group protocol under churn rather than PC, the poller death fixed, the instance-stall sightings classified as worker saturation from the load side. The intake stall #471 found has its verdict from #487: the record-intake load gate is what stops intake, head-of-line blocking is not why, and any instance that retries forever while a fraction of its stream never succeeds latches eventually at a computable threshold, idle or not. There is no gate fix; the fix bounds the failures (#149's dead-letter queue), and until then #497 makes the state visible. One arm stays unattributed and is named as such. DATA LOSS AND DUPLICATES: the bug-162 replay branch refuted and the false truncation warning fixed (#494, closing #162). KNOWN UNKNOWNS, split in two so nothing is papered over: what is still unknown at the cut - the shard half of the per-shard liveness blind spot, the flake rows kept open with reasons, the maturity claim - and, under its own heading, the unknowns made known on 2026-09-08 and how each was settled. TAG-DAY CHECKS, folded in from the retired blockers note: master green with the lanes known to lie named, the churn scenario's no-progress window settled by replay and widened in #499 with the rebalance-dwell bound named as that class's survivor, the Lincheck lane's timeout raised against runner-speed variance, the rename named in both groupId and packages, the README's trademark wording claiming nothing it does not have (#495), and the changelog section as the release notes since #498, posted as the release body by release.yml since #501. ONE CHANGELOG EDIT, on the owner's decision of 2026-09-10: the "size of this release" table of merged-PR and line counts is removed. Measured on a branch, carrying its own re-measure instruction, stale from the next merge on; the notes make their claim through the fixes they name. Also here: a ci- note from this PR's own last review round - the file-refs gate reads a token as a path only with two segments, so the changelog rename left this branch-only note naming the old file with nothing to go red, and the note records the allow-list that would close it; the vetting sweep's reading and every open bug note's disposition, moved into the ranking note where the tiers override them; a dated survey of upstream items with no fix and no response as its own deferred note; the refactoring registry's codec entry corrected for what #480 did and did not change; and the confluentinc#546 manifest entry marked merged. Two notes retired with their content migrated: the blockers register and the merge-order plan for a far larger v6. The question this note began as, "when is v6 good enough?", was answered on 2026-09-08 and the file renamed. Serves #197; closes nothing. The tracker closes when the tag is cut. Co-authored-by: Claude Fable 5.1 (1M context) <noreply@anthropic.com>
Serves #197, the release tracker. Closes nothing: the tracker closes with the tag.
changelog-ref: N/A - release-time generation per docs/releasing.md
Description
The release-time rewrite of
CHANGELOG.adoc's== 0.6.0.0section, so that it is the published release notes rather than the working text it has been since the fork.docs/releasing.mdsays the section for the release being cut is generated at release time, replacing what is there; there is no generator inbin/, so this PR is that generation, done by hand from the commit log and the release documents. It is the one deliberate exception to the "a PR never adds a changelog entry" rule, which exists precisely so this rewrite can be written as a set.What the section is generated from
fix,fix!,feat,feat!anddepsbody read in full.docs/inflight/release-v6-scope.md): its decisions, its Paused consumption across multiple consumers confluentinc/parallel-consumer#857 and data-loss dispositions, its known unknowns, and its tag-day checks. Those dispositions are treated as decided.docs/inflight/release-0.6.0.0.mdon master: the stability-release framing, the breaking-change record, the fix(core) astubbs#177: report the poll thread's real error, not the commit-response timeout (confluentinc#833) #204 API change.docs/data/roadmap.yamland the open PR list, for the "What comes next" section.Shape of the new section
RecordContext, the two controller narrowings, the Mutiny Java 17 floor.Claims removed or corrected from the old text (each with its reason in the commit bodies): the "source-compatible" claim, which the Breaking list itself contradicted, removed from the changelog and from the README template in two places, with
README.adocregenerated; the wrong upstream attribution on the null-epoch fix that #217 asked to be dropped; "upstream's last release 0.5.3.3" corrected to 0.5.3.2 published; the Reactor version, which said 3.8.6 while the pom says 3.8.7; the self-hosted lane described as per-PR; the quarantine state; two counts restated as shape; two upstream bullets folded into the fork entries that carry them.The heading loses its
(unreleased)suffix in the same change.release.yml's exact heading match now finds the section. The release page body is still posted by hand on the day from the converter's Markdown, per the burn-down's tier 3; #199 follows the tag.Tag-day checks this PR adds (beside the burn-down's own):
Also touched:
docs/inflight/release-0.6.0.0.mdgains the settled release-condition wording at the same insertion point #475 amends it; whichever merges second keeps the settled paragraph. A stale quarantine claim there is corrected in place.docs/releasing.mdno longer says the section's generation is undecided.src/docs/README_TEMPLATE.adocand the regeneratedREADME.adoclose the source-compatibility claim.Checklist
docs/features/- N/A - release notes, no featuredocs/inflight/working note (pr-/branch-) started at the PR's first commit - N/A - the burn-down note on docs(release) astubbs#197: v6 is a bug release, overdue - the burn-down to cut it #475 is the working note for the release, and this PR's commit bodies record what was generated from wherece-simplifyandce-code-reviewlocally - N/A - docs only;bin/check-all.shclean, and asked for@claude review thison the PR instead🤖 Generated with Claude Code
https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk