Skip to content

docs(changelog) astubbs#197: finalise the 0.6.0.0 section as the release notes - #498

Open
astubbs wants to merge 8 commits into
masterfrom
docs/v6-changelog-and-release-notes
Open

docs(changelog) astubbs#197: finalise the 0.6.0.0 section as the release notes#498
astubbs wants to merge 8 commits into
masterfrom
docs/v6-changelog-and-release-notes

Conversation

@astubbs

@astubbs astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner

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.0 section, so that it is the published release notes rather than the working text it has been since the fork. docs/releasing.md says the section for the release being cut is generated at release time, replacing what is there; there is no generator in bin/, 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

Shape of the new section

  • Opening: the fork, the coordinates, the stability-release argument in one paragraph, that the upgrade is the pom and the imports for most users but is not source-compatible beyond that, and that two known critical defects sit outside the bar, both transactional-mode only.
  • The size of this release: merged PRs, main and test Java lines and new files since upstream's last published release, measured with rename detection.
  • Breaking, as nested bullets: the coordinates and Java packages, the commit-budget exception, JStream blocking until close, the metadata-policy default, the exception rename and removed listener getter, identity equality for RecordContext, the two controller narrowings, the Mutiny Java 17 floor.
  • Fixes in three subsections: priority 1, correctness - the records lost or duplicated; consumption stopped after a rebalance, which tells the Paused consumption across multiple consumers confluentinc/parallel-consumer#857 story (the mechanisms closed, the detector lines demoted to timing proxies, the one unattributed chaos-only arm); other fixes.
  • Known limitations, stated so the release claims no more than it can show: the transactional revoke wait, the poisoned-transaction wedge, the retry-forever intake stall test(soak) astubbs#119: any retry-forever instance eventually stops fetching, at a threshold you can compute #487 measured with its two workarounds and the new WARN, producer fencing, the per-shard liveness blind spot, the never-reproduced commit-response timeout, revocation redelivery by design, and the unbounded JStream queue.
  • What comes next, by state: implemented and on an open PR; designed and not yet built; toward 1.0.
  • Dependencies, re-read against the poms. Examples. Build and CI, naming every lane that runs on a PR (SpotBugs, Error Prone with NullAway and GuardedBy, Infer with RacerD, CodeQL, dependency review, mutation, coverage with history, throughput against master, duplicate-code, CVE scan, hygiene gates), and Fray as the next concurrency lane.

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.adoc regenerated; 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.md gains 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.md no longer says the section's generation is undecided. src/docs/README_TEMPLATE.adoc and the regenerated README.adoc lose the source-compatibility claim.

Checklist

🤖 Generated with Claude Code

https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk

astubbs and others added 2 commits September 9, 2026 02:33
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
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 3m 6s —— View job


Review

  • Gather context (PR body, branch commits, changed files)
  • Read CHANGELOG.adoc diff in full
  • Read docs/inflight/release-0.6.0.0.md diff
  • Read docs/releasing.md diff
  • Cross-check claimed corrections (upstream attribution, version numbers, Reactor version, etc.) against source of truth
  • Check heading change ((unreleased) suffix removal) against release.yml's matcher
  • Post 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: docs/releasing.md's new wording says the one edit the section may still take before the tag is "a correction for work that lands after generation" — worth double-checking that's exactly the carve-out you want if #496/#497 land before the tag, versus a fuller regeneration.

Spot-checked a representative sample of the ~90 PR/issue links (not all of them) against gh pr view/gh issue view; titles and described behavior matched in every case checked.
· branch docs/v6-changelog-and-release-notes

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

✅ Duplicate Code Report

Two 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

PR Base Change
Clones 27 27 ➖ 0
Duplicated lines 949 949 ➖ 0
Duplication 0.37% 0.37% ➖ 0
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.37%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 106 106 ➖ 0
Duplicated lines 1503 1503 ➖ 0
Duplication 0.82% 0.82% ➖ 0
Rule Limit Status
Max duplication 2% ✅ Pass (0.82%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.15%. Comparing base (e8bd2cb) to head (941eb5d).
⚠️ Report is 1 commits behind head on master.
✅ All tests successful. No failed tests found.

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     
Flag Coverage Δ
chaos 53.37% <ø> (?)
integration 62.89% <ø> (-0.06%) ⬇️
performance 47.65% <ø> (?)
unit 79.40% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

🟢 Throughput — OK

This branch measured the same speed as master, on the one test this measures.

What Value Meaning
Compared with master 1.000 above 1.00 is faster, below is slower
Subject test took 55.4s the test under measurement
Control tests took 30.5s the other tests in this same run
Subject ÷ controls, here 1.818 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.817 median of recent master runs
Reported rate 74887 rec/s this machine only; not comparable across runners

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 you

The one that gets misread. Subject ÷ controls is a shape, not a speed. 1.7 means the subject took 1.7 times as long as the control tests in the same run - it says nothing about master on its own, and a reviewer has already read it as "1.7x faster than master". Only Compared with master answers that question.

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. master ÷ this run. Above 1.00 the subject is proportionally quicker here than on master; below 1.00 it is slower. 0.50 means it takes twice as long relative to its controls - that is the failing bound, not a small one.

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. share = subjectSeconds / controlSeconds, both from this same run.

Per-method times, not class times. A class time is work + setup, and container startup and @BeforeAll do not scale with work — they are the non-conserved term, and leaving them in breaks the invariant.

Reference is the median of 10 recent perf baseline (master) run(s), read from their artifacts. There is no committed baseline to go stale, and a share is dimensionless, so an old entry stays comparable to a new one without re-baselining. Shares observed: 1.613 – 1.915.

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 941eb5d · run 34315269727 · 2026-09-09 05:43 UTC

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

⚠️ SpotBugs Report

354 bug(s) found (rule-level exclusions only - see docs/inflight/static-spotbugs-rule-registry.md). See the annotations on the Files Changed tab for details.

Updated for 941eb5d · run 34315269727 · 2026-09-09 05:43 UTC

astubbs added a commit that referenced this pull request Sep 9, 2026
…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
astubbs added a commit that referenced this pull request Sep 9, 2026
…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
@astubbs
astubbs force-pushed the docs/v6-changelog-and-release-notes branch from 5abfc96 to 71782d0 Compare September 9, 2026 03:18
astubbs and others added 2 commits September 9, 2026 03:34
…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
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026

Copy link
Copy Markdown

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:

74c68a3 — the batchSize bullet. Verified the new "Breaking" bullet against ParallelConsumerOptions.batchSizeValidation() (parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java): batchSize == null and batchSize < 1 both throw IllegalArgumentException naming the field via Fields.batchSize, exactly as the changelog states — including the "nothing changes for one or more" claim and the pre-existing failure modes it replaces (silent no-op consumer, or a bare ArithmeticException only when messageBufferSize is set, per the class javadoc's own account of the old behavior).

d160be5 — the expanded Build & CI section. Spot-checked the specific additions against the actual workflows/config rather than just the commit body's claim:

  • RacerD and Error Prone's @GuardedBy at ERROR: confirmed in bin/infer-test.sh (full checker set, not --racerd-only) and pom.xml's comment on the @GuardedBy dependency.
  • CodeQL and dependency review: present (dependency-audit.yml, repo-hygiene.yml, maven.yml).
  • Tag-as-truth release: release.yml does exactly what's claimed — checks the latest CI run on master for conclusion == success before running release:prepare, and the antipattern comment about re-releasing an ancient commit is in the workflow's own header.
  • Dependabot-held-back majors: JUnit 6, Testcontainers 2, Vert.x 5, Mutiny 3, WireMock 3 are all in docs/inflight/deps-deferred-majors.md with reasons; Kafka 4 is ignored in .github/dependabot.yml (org.apache.kafka:* — "needs Java 11 baseline") with its own reasoning in docs/inflight/pr-53-java-baseline-kafka4.md. All six are accounted for, just split across two docs.
  • Fray is only mentioned in CHANGELOG.adoc itself (nowhere else in the tree) — consistent with the commit body's own framing ("on the owner's word," i.e. a forward-looking claim, not something already wired up).
  • Line-length check re-run after both commits: every line >120 chars is still confined to the pre-existing top-of-file NOTEs or the legacy sections (≥685), none inside the == 0.6.0.0 section the new bullets landed in.

Nothing here reopens or contradicts anything flagged in the previous review pass — the section still holds up.
· branch docs/v6-changelog-and-release-notes

astubbs added a commit that referenced this pull request Sep 9, 2026
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
astubbs added a commit that referenced this pull request Sep 9, 2026
… & 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
astubbs added a commit that referenced this pull request Sep 9, 2026
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
astubbs added a commit that referenced this pull request Sep 9, 2026
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
astubbs added a commit that referenced this pull request Sep 9, 2026
… 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
@astubbs
astubbs force-pushed the docs/v6-changelog-and-release-notes branch from 56c3322 to 363796c Compare September 9, 2026 04:02

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026

Copy link
Copy Markdown

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 363796c ("the batchSize bound joins Breaking, and Build & CI keeps only the testing lanes"), and it holds up:

  • The batchSize Breaking bullet (CHANGELOG.adoc:101-106) matches the code exactly. Verified against ParallelConsumerOptions.batchSizeValidation(): batchSize == null and batchSize < 1 both throw IllegalArgumentException naming the field via Fields.batchSize, at validate()/construction time — matching the bullet's claims about the old failure modes too (silent no-op consumer, or a bare ArithmeticException only when messageBufferSize was set), which the field's own javadoc corroborates (ParallelConsumerOptions.java:500-506, citing Batching requests a full extra in-flight target of work, and batchSize is unvalidated #311).
  • The link targets are correct and current. gh pr view 496 confirms MERGED; gh issue view 311 confirms OPEN — matching the bullet's pull/496 + issues/311 split (a PR link for the fix, an issue link for the still-open tracker) rather than treating both as the same kind of reference.
  • The Build & CI trim is a clean removal, not a rewrite. It deletes the "Two reviews before a merge," "Releases are tag-as-truth," "self-hosted lane," "upstream issue mirrors," "solutions write-ups," and "dependencies move on their own" bullets, leaving the section running straight from the intro ("parts that say something about how carefully the library is tested") to "Repository hygiene as a required check," which is now the last bullet — exactly what the commit body describes ("ends at the CVE scan and the hygiene gates"). Grepped the whole file for the removed bullets' distinctive text (tag-as-truth, self-hosted, Two reviews before a merge, issue mirrors, Dependencies move on their own) — no dangling cross-references or orphaned mentions elsewhere in CHANGELOG.adoc.
  • Fray, the concurrency-lane forward-looking claim flagged in the previous review, is untouched by this trim — still present at line 601-602, unaffected since it sits in the retained "Concurrency testing" bullet, not the removed ones.
  • Nothing else changed in this commit — README.adoc, docs/releasing.md, docs/inflight/release-0.6.0.0.md, and src/docs/README_TEMPLATE.adoc are unchanged since the prior review, which already covered them.

Consistent with the two prior review passes on this PR and both lgtm reviews from the author — nothing here reopens or contradicts either.
· branch docs/v6-changelog-and-release-notes

…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
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 2m 1s —— View job


Review

  • Gather context (PR body, prior reviews, branch commits)
  • Identify what's changed since the last @claude review this pass (which covered through d160be5)
  • Read and verify the new commits (363796c, 86e8c56) against the codebase
  • Post 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:

363796c — the batchSize bullet. #496 merged after this branch was cut (confirmed MERGED, subject fix(core)! astubbs#311: reject a batch size below one...). The new bullet's claims match ParallelConsumerOptions.batchSizeValidation(): batchSize == null and batchSize < 1 both throw IllegalArgumentException naming the option via Fields.batchSize, and the class's own javadoc (lines ~604-608) confirms the pre-existing ArithmeticException-only-when-messageBufferSize-is-set failure mode the bullet describes as the old behavior. This commit also trims the "Two reviews before a merge" / "tag-as-truth releases" / "self-hosted lane" / "how the project itself is run" bullets from Build & CI — read the surrounding section afterward and it's still coherent: the "the library is tested:" lead-in flows straight into the remaining static-analysis/CI bullets with no orphaned reference to what was cut.

86e8c56 — the coordinates bullet. This is a real fix, not just a rewording: bin/rename-packages.sh (line 550-551) carries a literal prose guard over CHANGELOG.adoc requiring either the old claim or the exact phrases "two changes are required" / "Rewrite your imports". The prior wording in this PR ("Update the dependency, then find-and-replace the imports") satisfied neither, which would have failed bin/test-rename-packages.sh and gone red on repo: hygiene/shell: macos — exactly as the commit body describes. The new text contains both required phrases verbatim.

Re-checked line lengths across the whole == 0.6.0.0 section (through line 645, where == 0.5.3.3 starts) after both edits — the only lines over 120 chars are the pre-existing top-of-file NOTEs; nothing introduced by these two commits crosses it.

No dangling references. The merge commit 752ab11 that brought #496 in from master doesn't touch CHANGELOG.adoc itself (that edit is 363796c's), and there's no leftover mention of #496 anywhere in this PR's files as a still-pending tag-day item — it's now folded into the merged-PR citation as expected.

Nothing here reopens or contradicts either of the two prior review passes. Combined with the two lgtm reviews already on this PR, I don't see anything blocking merge.
· branch docs/v6-changelog-and-release-notes

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
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 1m 9s —— View job


Review

  • Gather context (prior 4 review passes, branch commits, PR comments)
  • Identify what's changed since the last @claude review this pass (covered through 86e8c56)
  • Read and verify any new commits against the codebase
  • Post review

No correctness issues found. The only commit added since the last review pass is 941eb5d ("Merge origin/master into docs/v6-changelog-and-release-notes"), and it's a pure sync merge — confirmed with git diff 86e8c56 941eb5d -- CHANGELOG.adoc README.adoc docs/inflight/release-0.6.0.0.md docs/releasing.md src/docs/README_TEMPLATE.adoc, which is empty. Everything the merge pulled in (.github/workflows/maven.yml, the chaos-test/docs/inflight changes for confluentinc#857) lands in files this PR doesn't touch, so none of it changes what's under review.

This PR's five files (CHANGELOG.adoc, README.adoc, docs/inflight/release-0.6.0.0.md, docs/releasing.md, src/docs/README_TEMPLATE.adoc) are unchanged since the previous review pass at 86e8c56, which already verified:

Nothing here reopens or contradicts any of the four prior review passes, and both lgtm reviews from the author still stand against the current tip.
· branch docs/v6-changelog-and-release-notes

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