docs(release) astubbs#197: v6 is a bug release, overdue - the burn-down to cut it - #475
docs(release) astubbs#197: v6 is a bug release, overdue - the burn-down to cut it#475astubbs wants to merge 83 commits into
Conversation
…ely ignores Thirty-nine items are in flight - 32 open PRs plus seven with no PR yet - and the ordering had been re-derived from scratch three times in one session, differently each time. This writes it down once. Ordered by value to the release, explicitly not by merge mechanics: conflicts, red checks and stale bases are not inputs to it. Records the two hard constraints (#199 cannot be applied after the tag, #207 decides what already deployed v6 readers will tolerate forever), the one item with schedule risk (the Connect PoC is not written yet), and the three open decisions the order cannot settle on its own. Per the directory's rules it names no PR titles or states - `gh pr list` owns those - and gives the command to re-check coverage instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four decisions the owner took in one conversation, written where each one is read from rather than left in a chat log: - The bar for 0.6.0.0 is the stability release and nothing else. Work that does not fix an open bug or clear a release gate is out, however finished. Recorded in release-when-is-v6-good-enough.md, which had carried the question since 2026-08-19. - Streams and Connect do not ship in v6. Both roadmap entries move to the next-0x horizon; the announcement carries them as what is coming. The feature-record note that waited on their modules is deferred. - The transactional revoke wait (#44) is undecided and for now outside v6, because its fix (#408) depends on producer-fencing recovery (#410) by design. The release condition in release-0.6.0.0.md is amended to name it as the one known critical defect outside scope, which is the order that paragraph prescribes: amend the claim, never the standard. - The 0.6.0.0 label now means "closes when the release ships". The sweep was done on GitHub the same day. Also corrects the known-defects roadmap entry, which still described #444 as an open fix attempt; it merged as a measurement showing the residual is the consumer-group protocol. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q99GxTheRQL6d7TDt1bUum
…ut it The "when is v6 good enough" note asked a question and left three parts of it open. The owner answered on 2026-09-08: it is a stability release, that is the whole bar, the date has passed, and perfect has been getting in the way of a large improvement. This rewrites the note into the record of that decision and the burn-down that gets from here to the tag. What the note now carries, and why each part is there: - The decision and the answers to the three open questions, plus the mental hurdle named so it stops steering: the delta since 0.5.3.3 is the largest this codebase has shipped in one version, and the roadmap announcement (#446) is what decouples "first release" from "only thing anyone sees". - A proposed cut-off (the merge queue closes today; later finds are 0.6.0.x unless they are data loss on a default configuration) and an order of work in three tiers, each merge independently shippable. Tier 1 is the self-contained data-loss and stall fixes waiting only on LGTM; tier 2 is the producer-recovery stack, in a bug release because the poisoned-transaction wedge and the transactional revoke wait (#44, upstream verified) are stacked on it; tier 3 is release plumbing. The "can follow" list is named so nobody re-argues it in. - The ruling that "draft" here means "needs the owner to merge", not unfinished: the queue's red checks are the human-LGTM gate and the stack-dependency gate, so the flag carries no information. - What the release note must say about the confluentinc#857 family (closed mechanisms, and the still-open ones by name), about data loss and duplicates, and the known unknowns it should not paper over - with a proposed disposition for each undecided item. - A dated survey of upstream items with no fix PR and no prepared response, kept here because the pre-release sweep is when they get answered, with the commands that reproduce it. release-0600-blockers.md loses a stale clause: MDC propagation landed in #205, so the still-open list there is only the empty release body, which #199 fixes. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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 |
A 2026-08-08 merge-order note for v6 lives only on branch docs/v6-merge-order and was never merged; the read-time docs hook surfaced it after the first commit. It ordered a far larger release, with new surface and new opt-in modules in it, on the argument that a first release should ship the surface to make "maintained" credible. AGENTS.md says an overridden inherited decision must record the reasoning it overrides, where it overrides it. This does that: the note's first two tiers have all merged; the 2026-09-08 bug-release decision overrides its surface and module tiers; two of its points survive unchanged into tier 3 (the release body cannot be applied after the tag, and the tracker body reads as more blocked than it is); its publishing question is moot. The citation is by branch and by the command that shows the note, closed with the file-refs paragraph marker because the path does not exist on master. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its Updated for Superseded by a newer quarantine lane report. |
The docs/v6-merge-order branch was merged into this PR on the owner's instruction so its one note, release-v6-merge-order.md, reaches history rather than dying with a local branch. This commit removes the file: its job is done by release-when-is-v6-good-enough.md, which records what it ordered, which of its tiers merged, which the 2026-09-08 bug-release decision overrides and why, and the two points that survive into the burn-down. Nothing in it is both true and unowned elsewhere, which is the inflight rule for removing a note. The citation in the burn-down now points at the path as history, closed with the file-refs paragraph marker because the path no longer exists. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its Since the previous push: Updated for Superseded by a newer quarantine lane report. |
…v6 burn-down release-0600-blockers.md asked "are the things 0.6.0.0 publishes true on the day we cut it?", and the burn-down already pointed at it from three places. The owner asked for one v6 note to burn down rather than three, so its live content moves into release-when-is-v6-good-enough.md as the tag-day artefact checks - the changelog regeneration check for the rename, the half-conditional maturity file and the recheck it still owes, the release body, the three 3.9.1 references and why two are correct, the after-it-ships sweep - plus the three "context worth inheriting" bullets the day needs. The file is removed: nothing left in it is both true and unowned elsewhere. Four documents cited it. The two live notes now cite the burn-down, which contains the same item. The two dated records (a plan and a solution write-up) may not be rewritten, so each carries a history pointer to the last commit holding the file, which is the repair docs/citations.md prescribes and the file-refs gate recognises. The same commit closes the branch-self-reference gate that went red on the merge head: the paragraph recording the merged merge-order note now names #475 rather than "this PR", inside a post-merge checked block. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its No quarantined test changed outcome since the previous push. Updated for Superseded by a newer quarantine lane report. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #475 +/- ##
============================================
+ Coverage 82.67% 83.19% +0.51%
- Complexity 1586 1592 +6
============================================
Files 96 96
Lines 5444 5444
Branches 549 549
============================================
+ Hits 4501 4529 +28
+ Misses 746 720 -26
+ Partials 197 195 -2
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 about 2% faster than master, on the one test this measures. That is INSIDE this test's own run-to-run spread of about 17%, so read it as a reading and not as a result - re-running the same commit moves it by about as much.
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 0.936 -> 1.021, share 1.978 -> 1.78, rate 62719 -> 73817 (+17.7%). One push of difference sits inside this test's measured spread - read it as movement, not as a result. Updated for |
|
… v6 bar "Gate on already-open bugs" is only a rule if every open bug has a disposition, and the burn-down had classified only the data-loss and stall notes. The owner asked whether anything beyond tier 1 still had to go in or be looked at; the honest answer was "not quite", and this records why. Every bug- note on master that no queue PR addresses is now sorted: two to look at before the tag because they contradict the release claim if left silent (the eager-mode stall that reproduces with the fixes applied, and a dead poll thread leaving the consumer open in the shipped default commit mode); one for the owner to decide (the run-length plausibility ceiling, data-loss class but reachable only through a corrupt payload); and the rest named as 0.6.0.x by impact - config lies, blind spots, misdirection, a teardown race, and one note that is mostly stale on master. The cross-module simpleBatchTest flake is named as a signal that is not a gate. The earlier poller-death disposition is softened to match. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…on to #408 #466 merged while the burn-down was being written: the revoke-path commit now drains the work mailbox first in transactional mode, its proof left quarantine with it, and the README caution is gone. The burn-down ticks it and moves it from "fixed in the queue" to "fixed on master". Its commit body records a collision with #408 on tryCommitOffsetsOnRevoke, to be resolved by whichever landed second. That is now #408, so its tier 2 line says so - it was already the one PR in the queue needing work rather than a merge. The #473 line no longer orders itself after #466; it clears the two quarantine entries that remain, which the release guard blocks on. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its Since the previous push: Updated for Superseded by a newer quarantine lane report. |
[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its No quarantined test changed outcome since the previous push. Updated for Superseded by a newer quarantine lane report. |
The branch carried one commit from 2026-09-07 recording four scope decisions the owner took that day, in the same note this branch rewrote a day later without having seen it: the bar is the stability release and nothing else; Streams and Connect move to the next-0x horizon; the transactional revoke wait (#44) is outside v6 for now with the release claim naming it as the exception; the 0.6.0.0 label means "closes when the release ships". It also amended release-0.6.0.0.md's release condition and corrected the roadmap's known-defects entry. Conflict resolution, in the v6 note only: the branch's "Decided 2026-09-07" section and its trimmed "Still open" are folded into this branch's decision section, which now records 2026-09-07 as the base and 2026-09-08 as the confirmation. Tier 2 - which had proposed the whole producer-recovery stack for v6 - is rewritten to match the 2026-09-07 call: the stack is outside v6 unless the owner reopens it, its order is kept so nothing is re-derived, and one gap the decision did not name is put to the owner: the poisoned-transaction wedge is fixed by a PR on the same stack, so the claim has two exceptions or v6 carries a smaller standalone abort. The roadmap, release-0.6.0.0.md and the experimental-records deferral merged clean. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…st, upstream, core Ten notes carried a PROPOSED vetting marker from the 2026-09-07 sweep. Each proposal was reviewed and accepted by the owner; this applies them, re-checking the evidence against the tree first and recording what each check returned in the note's own marker. - ci-merge-guard-fails-open-on-bsd-stat: CLOSED. The hook probes the platform once and fails closed on a non-numeric mtime (ffba759), and repo-hygiene.yml runs the self-tests on macos-latest (11c6551). Kept rather than deleted: the fail-open class it names - a guard that finds its evidence and discards it, and a suite green because it only runs where the bug is invisible - is what a later reader wants. - ci-the-coverage-uploads-still-use-the-inert-glob: CLOSED. Its own delete-when holds - #475, a PR with no Java, has both per-flag gates green, and master's two flags no longer report an identical figure. docs/ci.md pointed at this note for an outstanding proof, so that paragraph now records the proof arriving. - static-sneaky-throws-blind-the-analysers: counts corrected by removing them. The title said 21 main-code sites and the body 122 test ones; both had drifted, and the test figure matches neither number depending on whether src/test-integration is counted. Replaced with the two greps that answer it, per this directory's rule against writing a count down. - static-infer-threadsafe-is-blocked-by-third-party-interfaces: Blocker 2 rewritten. The setProcessingShards question is discharged - ShardMapIsNeverReplacedArchTest now shuts both doors to a replacement and pins the names its rules depend on - so the group is a ratchet entry with a reason, not a code change to make first. Blocker 1 and the MONITORENTER gap stand. The setter itself still exists, Lombok-generated; the note says so rather than repeating the proposal's wording. - test-retry-queue-behaviour-untested: shrunk to the two unasserted bullets, re-add with a different retry-due and the unique/sorted invariant. Four RetryQueue* test classes now exist, the shard/queue orphan is fixed in ProcessingShard.getWorkIfAvailable, and revoke is covered by RetryQueueRequeueWindowTest. - ci-codecov-flags-not-like-for-like: shrunk. The first open item - the fix could not be verified by the change that makes it - is discharged. What remains is the shared jacoco glob, which maven.yml's own comment names this note as owning, and master's two-band unit history, whose jumps stopped after #464 without the mechanism ever being named. - ci-bsd-portability-gaps: shrunk. The third item's guard half shipped as gnu-bsd rows in bin/check-shell-hazards.sh. The unreachable quarantine source fallback and the pr-ready mtime coverage gap stand. - upstream-173-revocation-duplicate-processing: shrunk to the unposted draft answer and the two mirror-body corrections. The adoc misdirection it was filed against reads REFUTED and carries the do-not-close rule, and next-steps 1 and 2 shipped. The draft's mitigation paragraph is corrected: the fourth matrix cell has been measured rather than predicted. - core-unmailboxed-container-recovery: shrunk. Its option 2 shipped as failFatallyOnUnmailboxableRecord across core, ExternalEngine and vert.x, so the three options are no longer live choices; the note keeps the recovery-mechanism blind spot and the one test that would settle it. - test-chaos-teardown-double-close: item 2 rewritten to the half still open. doStopDrain now calls markStopRequested(), but a drain still adds nothing to closingPcs, so settleFleet's isClosePending wait still reads false immediately. Items 1, 3 and 4 unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W511R2TZFAqEiqgS5yogTv
…hecklist #476 vetted every open note and touched five this branch also edits. Three conflicted and each is resolved on the side that reflects the later decision: - release-0600-blockers.md: deleted here, modified there. Kept deleted; the two corrections the sweep made to it are folded into the burn-down's tag-day checks. One of them is only half right and is recorded as such: release.yml does build a notes file from the changelog (#72), but its exact heading match fails on the "(unreleased)" suffix and falls back to generated notes, which is what #199 fixes. The sweep's "the MDC gap is real" is refuted on the tree - MdcPropagation captures and restores the caller's context since #205 - so the burn-down keeps that correction. - release-experimental-module-records.md: the 2026-09-07 deferral wins over the sweep's vetted marker, per the per-note contract (a deferred note carries the state, not the marker). - release-when-is-v6-good-enough.md: the sweep's dated "the date passed" paragraph and its stale vetted marker ("the question is still unanswered") are dropped; the rewritten note records the decisions and names the failure mode in its own words. Also carried from the sweep: the citation to the poisoned-transaction wedge note is repointed to the sibling #476 merged it into; the burn-down now points at the sweep's own "what gates v6" list in process-candidate-ranking.md and records where the two disagree (the sweep reads the poisoned pair as not gating, and the batchSize validate() bound as the cheapest real fix, which could ride in tier 1); and the #44 exception is narrowed - #466 bounded the revoke wait, so what #408 still owns is declining rather than waiting. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…tes #475 #476 cited #475 inside ci-the-coverage-uploads-still-use-the-inert-glob.md as the docs-only PR whose two coverage flags both went green. That is evidence that stays true after #475 merges, and the self-reference gate cannot tell that on its own, so the line carries the marker. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
The no-PR triage said the dead-poll-thread defect joins tier 1 if its fix is as small as the note proposed. #477 shows it is: one predicate derived from state the poll system already owns, one condition in the existing close path, proven red on both consumer-commit modes and green on the transactional control arm, with a defect-class sweep that found no other cleanup gated on a role whose holder may be dead. The burn-down moves it from "look at before the tag" to tier 1, marks the confluentinc#857 still-open bullet as fixed in the queue, and stops linking the inflight note, which #477 retires into docs/solutions/ - a link here would dangle the moment that PR lands. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…s, and narrow the named exception Three edits from the owner's 2026-09-08 pass over the burn-down: - The vetting sweep's "what gates v6" reading moves out of process-candidate-ranking.md and into the burn-down, attributed as the agents' reading with their stated confidence, so the release has one note to burn down. Where it disagrees with the tiers the tiers now say so in the same place: the poisoned-transaction pair, the bound on the revoke wait, and the batchSize validation bound. The ranking note keeps a pointer and the ranking of everything else. - Every known unknown is now being pursued, each by its own agent on its own branch. The note records the one scheduling decision that matters: code-shaped questions run in parallel, replay-shaped ones one at a time, because several chaos or soak replays on one machine produce the starvation artefacts they exist to rule out. The replay order is written down so it survives the session. - The release claim's named exception narrows. #466 replaced the unbounded transactional revoke wait with one bounded by commitLockAcquisitionTimeout; what #408 still adds is declining rather than waiting. The release note says "bounded, not yet declined", which is what a user on that mode will actually experience. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…thdrawn, rejoin is expressible Two of the burn-down's open items closed on 2026-09-08, each by its own agent, and the note records both as things that happened rather than things to do. The eager-mode PERIODIC_CONSUMER_SYNC stall (the confluentinc#857 family's fourth open item) is withdrawn by #478: four replays of the recorded seed on today's master drained completely with zero loss, and the "stall" was the Class 2 timing bound, whose crossing flips with the processor count at a fixed seed and tree. The grid it was opened on was also never a one-term A/B. Nothing to ship or to name; what survives is the per-shard liveness gap, already tracked and deferred. Whether "rejoin" after producer fencing is expressible in the lifecycle is known by a read of the #472/#474/#410 diffs against the engine's ownership rules: it is, and the question dissolves, because the instance never leaves the group - rejoin reduces to abort, replace and replay on the control thread under the write lock. The stack respects the @GuardedBy ledger, thread confinement and the lock pair. What it leaves is review-sized: #420's territory, one wire-level test nobody wrote, and the plan's one open question about declining the lock during a rebalance. None of it changes the tier 2 decision. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…rphan is known unreachable Two things moved under the burn-down on 2026-09-08. The owner's #481 supersedes #431 for the retry-queue lock on the rebalance path: the poll thread never touches the queue and the controller collects what it leaves. #431 is closed; tier 1 now lists #481, ready and green, and notes that #483 stacks on it. The sweep's reading, moved into this note earlier, still called #431 a draft; it is annotated rather than rewritten, since it is the sweep's dated reading. The shard-displacement orphan window is known unreachable by #483, with the one caveat worth carrying: the proof's last leg is a Kafka property (the fetch position never goes backwards within a generation), so an in-generation offset replay reopens the window and nothing goes red. #481's purge bounds the cost to one tick of misdirection. Two more by-key removals of the same shape are named and left for #468, whose identity-equals change is what makes conditional removal possible. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…s own key draw, not the batcher The register's most-sighted row is settled by #482: simpleBatchTest computed its expected batch count from the record count while drawing keys with replacement, and under KEY ordering a shard yields one record per retrieval round, so a three-way key collision deterministically forces a fourth batch. That is the 2+1+1+1 shape every sighting carried, at about the rate the sightings showed, and only on the KEY parameter, which a contention reading could never explain. Reproduced red with a forced collision, green with keys drawn without replacement; the exact assertion is kept and a new core test covers the collision case. The burn-down strikes the item from the known unknowns and from the no-PR triage's "signal" line, and records that the automated review found nothing blocking and the PR is out of draft. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ness blind spot The known unknown that a wedged shard is invisible to every gating detector is narrowed: a commit that never lands now gates, on a position difference rather than an elapsed time, with its red control built first and both replay seeds re-run silent. What remains is the shard half, which has no red control and is a reachability question first. The burn-down records the narrowing and the sibling the sweep found. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…y-key removal are on master The intake-stall measurement landed with the retry-cadence arm and the interim latch warning as what remains, and its box is ticked. The last by-key shard removal the #483 sweep reported is fixed on master, red first with an ablation arm per leg of the guard. The known unknown that named it is struck through with the outcome, and the retry queue's same-shaped removal is recorded as that queue's keying model rather than a remaining instance. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
… named, and five stale lines are corrected Owner's decisions, 2026-09-09: the merge queue is closed as of today, with later finds 0.6.0.x unless data loss on a default configuration; the poisoned-transaction wedge is the second named exception beside #44, and the release-note draft now carries it; the gate-latch warning #487 argued for is v6-sized and joins tier 1 as the last item; the upstream flat-counter reporters are not asked. Corrections from the owner's read of the note: the release page body is posted by hand on the day with gh release edit, because release.yml's exact heading match misses the unreleased heading on master - so #199 follows the tag rather than gating it, and the two lines that said the workflow already publishes the curated section are fixed; the #468 line no longer asks the reader to check a PR body for two by-key removals that #468 dismissed and #492 fixed; the vetting sweep's opening claim that the quarantine registry is non-empty is struck as the sweep's dated reading; and the disposition list names the three deferred bug notes it omitted. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
|
@claude review this |
|
Claude finished @astubbs's task in 5m 59s —— View job Review complete
This is a docs/roadmap-data-only PR (12 files, no What checks out:
Two small issues found:
Not checked: I wasn't able to run Neither finding is blocking — both are precision/formatting nits in an otherwise well cross-referenced consolidation. No factual inconsistencies found in the substantive release-scope content (decisions, tier ordering, the confluentinc#857 family dispositions, and the tag-day checks all agree with each other and with |
The last decision the burn-down was waiting on: the owner moved the batchSize validation bound into tier 1 on 2026-09-09, the validation half of #311 only, with the over-request arithmetic still deferred. The three places that filed it as 0.6.0.x now say so, and an agent is building it red-first on its own PR. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…a heading gets its blank line The automated review read "Merged" after "joins tier 1 as its own item" as the gate-latch warning having merged; it was #487 that merged, and the sentence now says so. The data-loss heading gains the blank line every other section boundary has. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks - both findings were right and are fixed in
On the tooling caveat: |
Owner's instruction, 2026-09-09: remove what does not help cut the release. Nothing is deleted; three records move to the notes that own them and four histories compress to a line each. Moved: the #476 vetting sweep's reading of what gates v6, and the dated disposition of every open bug note, go back to process-candidate-ranking.md - both are agent readings the tiers override, and the disposition list is derivable from the notes' own markers. The survey of upstream items with no fix and no response becomes its own note, deferred past the tag, since it is research for the next release's triage rather than scope. Compressed: the intro, the record of what the tracking issue's body carried, the resolved-or-reassigned narratives under the 857 section, and the unknowns made known - each entry is now one line naming the verdict and the PR, with the PR and its solutions write-up holding the evidence. The tag-day checks gain one line naming the five lanes known to lie or fail on their own, with their notes, so a calibration question like the churn scenario's no-progress window lives where it is worked rather than in the scope. The note is a third shorter and is the thing a reader burns down. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ed and #162 is closed The last data-loss-section item with no PR is on master: a partition with no commit data starts quietly, absence recorded from the codec rather than inferred from a sentinel a real commit shares. All three defects behind upstream's "Truncating state" string are settled, so the mirror closed with the merge. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
#494 squash-merged on 2026-09-09 and closed the mirror; a squash cannot flip its own manifest entry, so the lifecycle transition rides here on the release burn-down PR, which is level with master. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…62 note #494 retired docs/inflight/bug-162-offset-state-truncation.md into a solutions write-up when it merged, and the scope note's data-loss section still linked the note, which the file-refs gate caught on the merge ref. The citation now names the write-up. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Serves #197, the release tracker. Closes nothing. The plan for the v6 announcement - the theme, the LinkedIn/blog/release-notes funnel, the points inventory, and the performance-claims decision ratified on 2026-08-24 with its amendment - had lived only on the language-proxy branch and the stacks cut from it since 2026-08-15. None of those branches merges before v6, so a release-scoping read of docs/inflight/ on master could not see that the announcement had a plan at all. It was found by diffing every live ref's notes against master. This lifts the largest version, from feats/hasten-micro-mvp, to docs/inflight/release-v6-announcement.md. The content is unchanged apart from em-dashes replaced with the repo's spaced dash; tags moved from feature-with-no-impact to task + release-gate, because writing the announcement is the last task of the release rather than a capability; a provenance paragraph saying where it came from and why it moved; and a file-refs: N/A marker on each paragraph citing a document that exists only on the source branches, naming the branch, so bin/check-file-refs.sh passes without pretending those documents are on master. The original stays on the branches that carry it - retiring it there is those branches' job when they next merge master, since a rename-on-merge would otherwise touch nine open PRs. QUALIFIED BY THE OWNER BEFORE IT LANDED, which is the part that changes how the note reads. It is an aggregate written when 0.6.0.0 was going to carry features, and 0.6.0.0 is now a bugs-only release (decision of 2026-09-07). The top of the note therefore says which of it applies to 0.6.0.0 - the theme, the ordering and the experimental-claims rule - and that the rest, Streams, Connect, the other runtimes, self-tuning, the polyglot positioning and the whole performance inventory, is material for 6.1. It also says once and up front that every performance figure in it was measured on the experimental engine branch it came from, whose engine differs substantially from master's, so none of those figures describes 0.6.0.0 and the claims decision reduces there to no performance claim at all. The note carries inflight-state: deferred to 6.1 accordingly; the plan itself is not rewritten, and the v6 scope note on #475 stays the source of truth for what ships. FOUR MASTER-STATE CI REDS WERE RECORDED ALONG THE WAY, because a docs-only branch is the cleanest control arm a flake register can get: nothing it draws can be its own. Two were recorded in the earlier rounds - a ChaosChurnStormIT NO_PROGRESS firing, and a RegistrationRaceStaleResidentIT one whose row master had already retired via #490, so the register takes master's side whole there. Two more arrived on 2026-09-09, and reading each one turned up a correction its note needed: Integration Tests went red with the whole broker suite erroring - one class slowly at the container-start timeout, every other in milliseconds on NoClassDefFoundError, which Codecov renders as "20 Tests Failed" and which ci-broker-container-exit-126-is-undiagnosable.md exists to say is one failure. The cause was in the log all along: Testcontainers prints the failed container's own output one line below the "Wait strategy failed" line that note quotes, and it reads "sh: /tmp/testcontainers_start.sh: Text file busy" - ETXTBSY, because the container waits for its starter script to exist and then executes it, so a script the daemon has not finished extracting execs as busy and the shell reports exit 126. Refetching the 2026-08-25 job the note was written from shows the identical two lines, so its premise that the container's stdout is nowhere in the job log was false of its own founding evidence. The re-run of the identical commit passed, which is the control that note prescribes. Chaos Pain Suite 4/4 went red on #495, also docs-only, with NO_PROGRESS at 96632/100000 against a 30s bound on seed 3717713223451201639. The fleet then kept consuming to 99569, taking the outstanding count from 3368 to 431 - inside the TAIL_SLACK of 500 - so it lands on the drains branch of the deciding experiment in test-no-progress-window-may-not-transfer-to-w1.md, in the weak form: no recovery diagnostic, and churn ended ten seconds after the firing. The larger finding is that this experiment had already been answered twice, on two other seeds, both draining, and that note never took delivery of either. The six merges that landed on master the same day were the obvious suspects and are ruled out by control arm rather than by argument: #491 does touch ProgressProbe.java, but not the NO_PROGRESS path, and the same chaos test passed on two heads carrying every one of those merges, minutes either side of the failing run. Both corrections are left as PROPOSED vetting markers rather than applied - both notes carry impact misdirection, which docs/inflight/AGENTS.md makes the owner's call. Nothing is quarantined and docs/quarantined-tests.md stays empty. Co-authored-by: Claude Opus (1M context) <noreply@anthropic.com>
… qualified as 6.1 material The last tier 3 item before the tag-day checks is done: the announcement plan is on master, with the owner's qualification that it is 6.1 material whose figures came from an experimental branch, and that 0.6.0.0 takes only its theme, its ordering and its experimental-claims rule. The table row links it rather than naming the PR that carried it. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ecklist # Conflicts: # docs/inflight/process-candidate-ranking.md
Tier 1 ticks its batchSize box: #496 landed the validate() bound rejecting zero, a negative and null, the validation half of #311. The arithmetic half stays deferred and the issue stays open. The bound is a startup exception where there was silence, so it carries the breaking marker and the release note names it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
…as post-merge-correct The announcement plan arrived from master naming #475 as the carrier of the scope note. On this branch that is a self-reference, and the gate asks whether it still reads correctly once the PR has merged. It does: a merged PR still identifies the note it landed. Marked, not rewritten. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
The tier 1 line still read "no PR yet". #497 has been open as a draft since the item was decided, with the Claude review answered and the Codex review in progress. The box stays open until it merges. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
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
…nd the Lincheck cap raised The tag-day lanes bullet no longer says the churn scenario's window is being settled on a branch: #499 replayed every recorded seed, every firing watched past detection drained, and the window is widened to the 60s the revoke scenario already held, with the caveat that the value is borrowed and its sufficiency measured on one desktop. The sweep's one survivor, the rebalance-dwell bound still armed on that scenario, is named so a red from it on the day is read correctly. The Lincheck lane's timeout raise and its cause, runner speed against a fixed budget, are recorded beside it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
Serves #197, the release tracker, whose body now points here. Closes nothing.
Description
docs/inflight/release-v6-scope.mdis the source of truth for 0.6.0.0: the owner's decisions, the burn-down to the tag, every open question, and the tag-day checks. It began on 2026-09-07 as "when is v6 good enough?", was answered - v6 is a bugs-only stability release - and since 2026-09-08 it has carried the merge queue that gets from that answer to the tag. This PR grew alongside that queue and records each merge as it landed.What the note carries now:
next-0xhorizon; the producer-recovery stack is outside v6; the transactional revoke wait (confluentinc#803: Transactional Producer instance gets timeout getting commit lock while second instance starts #44) and, since 2026-09-09, the poisoned-transaction wedge are the two named exceptions the release claim carries; the merge queue closed on 2026-09-09 with later finds 0.6.0.x unless data loss on a default configuration.gh release edit(the workflow's exact heading match misses the unreleased heading), the tag-day checks, the amended claim, the drafted issue responses, the tag. A "can follow" list names what is deliberately not v6, ci(release) astubbs#197: publish the curated changelog section as the GitHub Release body #199 among it.bug-note's disposition against the bar, including the three deferred notes.Branches merged in, on the owner's instruction:
docs/v6-scope-decisions(the 2026-09-07 decisions, the amended release condition, the roadmap horizon moves) anddocs/v6-merge-order(a merge order for a far larger v6, retired after its content was recorded here). Two notes were retired with their content migrated:release-0600-blockers.mdandrelease-v6-merge-order.md. The ranking note's "what gates v6" section is a pointer here. The refactoring registry'sOffsetMapCodecManagerentry records what #480 did and did not change.Deliberately not done here: no change to
module-maturity.yaml(the maturity value is a tag-day recheck); the roadmap changes are only the ones the 2026-09-07 commit carried; the announcement note lands separately on #446 and this note's table will link it once both are on master.Checklist
docs/features/- N/A - no feature; a release-planning note and two roadmap horizon movesdocs/inflight/working note (pr-/branch-) started at the PR's first commit - N/A - the PR is the inflight note; nothing here thatghcannot show beyond what the note itself recordsce-simplifyandce-code-reviewlocally - N/A - docs only;bin/check-all.shrun clean instead, and@claude review thisrequested on the PR🤖 Generated with Claude Code
https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD