docs(changelog) astubbs#197: finalise the 0.6.0.0 section as the release notes - #498
docs(changelog) astubbs#197: finalise the 0.6.0.0 section as the release notes#498astubbs wants to merge 8 commits into
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 |
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