Skip to content

feat(core) astubbs#225: recover the producer when the broker invalidates it, rather than dying - #410

Draft
astubbs wants to merge 102 commits into
feat/225-uncommitted-completions-ledgerfrom
docs/225-producer-fencing-brainstorm
Draft

feat(core) astubbs#225: recover the producer when the broker invalidates it, rather than dying#410
astubbs wants to merge 102 commits into
feat/225-uncommitted-completions-ledgerfrom
docs/225-producer-fencing-brainstorm

Conversation

@astubbs

@astubbs astubbs commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Closes #225.

depends on #472
depends on #474

Cut again, 2026-09-07: two rungs came out from under this PR so recovery can be reviewed against pieces already reviewed - #472 (what the broker reports, and how PC builds another producer: RecoverableProducerCondition, ProducerInvalidatedException, ReplacementProducerSource, ProducerRecoveryPolicy, ReplacementOutcome, the metric definitions) and #474 (the completed-but-uncommitted ledger, the restore path, the processor's drain-then-replay step). This PR now stacks on #474 and carries recovery itself: ProducerRecovery, ProducerRecoveryPass, the manager and processor wiring, detection on both paths, worker deferral and the replay generation, the broker IT, the claim register and the README section. History kept, as before.

Split, 2026-09-02, re-cut 2026-09-03: the producer-ownership half was first extracted whole to #420, then cut again. This PR now stacks on #426 alone - producerConfig with the default constructor, the only rung recovery needs, because re-initialising a replacement under the same transactional.id is what fences the producer it replaces. The derived id, the ProducerFactory, redaction, the deprecation of the instance option and the example migration are #420, now stacked above this PR. What is here is recovery: detection, the aborted-transaction ledger and replay, the replacement with backoff, observability, the broker IT, and the records. The history is unchanged (it still contains #420's commit, undone by the re-cut commit); the diff against the base is the recovery half only.

Description

A transactional Parallel Consumer died the moment the broker invalidated its producer - fenced, epoch bumped, pid mapping lost, or the group generation moved under an offset commit. Kafka Streams treats every one of those as a migration signal, aborts, rebuilds the producer and carries on. This PR makes PC do the same.

The premise of the issue was wrong, and so was the upstream fix

#225 asked PC to rejoin the consumer group after fencing. Traced against kafka-clients 3.9.2, rejoin is not the repair: the poll thread's coordinator already rejoins on generation loss, and a stale-generation commit after recovery returns a CommitFailedException, which is itself in the recoverable set, so recovery simply repeats until a poll has refreshed the generation cache. Rejoining explicitly from the control thread - what the first review proposed - deadlocks against onPartitionsRevoked's spin on the produce/commit write lock. Upstream's confluentinc#839 caught the wrong exception shape: the send future throws ExecutionException(cause), so its catch never fires. That spin on the producer-instance path is pinned here as #411, not fixed.

What changes for a user

How it is proven

Every unit landed test-first, one commit each, with a mutation check per unit recorded in its commit body. ProducerFencingRecoveryIT fences a PC-built producer three times on a real coordinator and observes three recoveries, with a rogue-fenced-in-turn control and the recovery counter as the non-vacuity anchor; with recovery disabled it fails at the first fence. The transactional-guarantee register from #262 gains claim C15, PRODUCER_INVALIDATION_RECOVERED, and its coverage test accepts it. The aborted-transaction replay is proven at unit level (PartitionStateAbortedTransactionReplayTest); the broker IT's fences land between phases, so the replay path is not what it exercises - stated so it is not read as covered twice.

bin/build.sh is green across all eleven modules; the core unit suite is 662 tests with 8 pre-existing skips.

Inherited from #262, which merged mid-flight

Its commit body records four defects found and deliberately not fixed there. Two are fixed here: a throwing abortTransaction() no longer skips closing the producer, and the instance-path InvalidPidMappingException close no longer marks the batch succeeded with offsets committed for records never produced. Its open question - "PC has no recovery path from a poisoned transaction short of close(), design decision left open" - is the decision this PR takes; the plan links both directions. The commit-interval identity-compare defect is out of scope and noted in the plan.

Sequencing with the PRs open beside it

docs/inflight/core-recoverable-producer-fencing.md carries the two merge-time tasks, keyed to the plan's decisions: #352's two fencing tests and its R6 line assume fencing stays fatal, and #408's revoke-path rethrow becomes record-and-decline once recovery exists. Whichever lands second reconciles, in that PR's terms. The bounded revoke wait that recovery makes viable is named in the plan and deliberately not taken here.

The review rounds, and what they changed

A ce-simplify pass folded three hand-rolled cause-chain walks and detect-and-record steps into one each, and its efficiency reviewer found a defect rather than a simplification: detection ran in every commit mode while recovery ran only in the transactional one, so a PC-built producer used under a consumer-commit mode that met a recoverable condition was marked replacing, never replaced, and parked every worker for good. canRecover() now also requires the transactional commit mode.

An eleven-lens ce-code-review (correctness, standards, testing, maintainability, learnings, security, performance, API contract, reliability, adversarial, prior comments), with an independent validation pass over its top eight findings, found and this PR fixed:

  • Two breaks in the exactly-once claim. A throw inside the drain or replay (a successful-work listener runs user code there) skipped the replay for good, and the aborted offsets then committed; recovery now keeps the replay owed until it completes. Under key or partition ordering, a worker that had parked during the outage produced a later same-key record into the replacement before the earlier record's replay; a batch that waited out a replacement now re-queues behind the restored offsets.
  • Recovery's own failure paths. A replacement whose initTransactions failed was never closed (one producer leaked per attempt); the harness's wake-up interrupt during the write-lock wait closed the instance; an Error from a user factory, or a factory that passed start-up but violated its contract on every rebuild, parked workers forever; recovery ran ahead of a close. All four are fixed and tested.
  • Recovery was not silent to the application. The invalidation took the same arm as a user failure, so per-record failure counts rose and a dead-letter-after-N policy could dead-letter live records. Records that failed only because the producer was invalidated are now re-queued without touching their failure history (recorded as a dated amendment beside the plan's decision).
  • The proofs that could not fail. The broker IT fenced on an empty ledger, so the replay never ran on the wire; a second case fences with a non-empty ledger and goes red with the replay stubbed out. The drain-before-replay step is now a named method with its own test.
  • Records and docs. The README's claim that the instance path was unchanged, the undocumented record retention, four examples still on the deprecated option, and the ledger's monitor inside PartitionState (which had the static analyser reporting thirty unrelated accessors) - the ledger is now its own class.

Left for the owner, recorded where each belongs: the availability state machine's extraction (docs/refactoring.md), and a pre-existing sibling of the interrupt defect on the commit path's own lock wait (docs/inflight/bug-commit-lock-wait-closes-on-wake-up-interrupt.md).

The question the ledger rung's review carried here

The review of #474 asked, of UncommittedCompletions.forget(), whether "the commit it belonged to was the aborted one" still holds once the replay is wired in - specifically whether a commit can be mid-flight, with a snapshot taken for a different, still-live attempt, when the replay runs. It holds, by thread confinement rather than by lock ordering: the ledger retains only in the transactional commit mode, where every commit runs on the control thread and returns only once the broker has answered, and the replay is @ThreadConfined to that same thread and asserted so. A commit and a replay therefore never overlap; the transaction the snapshot belonged to is the one the recovery aborted, because it was the only one open. The one commit that could arrive from elsewhere - the revocation commit - is handed to the control thread as well (#466), so it serialises with the replay in the same way. The commit-window redesign that landed meanwhile (#470) changes the trim, not the premise: the ledger trims only on the acknowledgement of the last offer the partition made, the same rule the clean mark follows, so an older answer cannot trim a newer snapshot even in the modes where answers can arrive out of order.

The analysis surfaces, read and judged

bin/check-pr-analysis-surfaces.sh 410 reports twelve SpotBugs findings on lines this PR wrote. None is a defect, and the verdict is recorded here rather than left in a channel nobody reads:

  • ProducerManager.commitOffsetsEXS_EXCEPTION_SOFTENING_NO_CHECKED. The softening is this PR's subject: invalidatedOrRethrow is what turns a broker verdict into a ProducerInvalidatedException the control thread can recover from.
  • ProducerRecovery.recordInvalidationLO_TOSTRING_PARAMETER. The condition.toString() is load-bearing, not redundant, and the detector does not model why. Checked against the slf4j-api 2.0.18 this build resolves: MessageFormatter.arrayFormat("cond: {}", new Object[]{ throwable }) returns the message cond: {} with the throwable consumed as the stack-trace argument, so dropping the toString() would render a literal {} and lose the condition the debug line exists to name.
  • ProducerManagerRecoveryTest.sourceFailureUWF_UNWRITTEN_FIELD. A deliberate artefact of the stack, not dead code to delete: the test that writes it is the ProducerFactory contract-violation case, which lives one rung above in feat(core) astubbs#225: derive the transactional.id, build the producer through a factory PC enforces, and redact its configuration #420. Removing the field here would break that rung.
  • The remaining nine are fb-contrib style heuristics on test code, each declined on its own terms: four OCP_OVERLY_CONCRETE_PARAMETER-family widenings, one PSC_PRESIZE_COLLECTIONS, one PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS (Mockito stubbing of the same mock twice), one IICU_INCORRECT_INTERNAL_CLASS_USE on a test whose subject is the internal API, and the pair on ProducerRecoveryTest's LoggerFactory.getLogger(ProducerRecovery.class), which is the log capture the "logged louder" assertion needs.

Where the requirements live

docs/plans/2026-09-02-001-feat-recoverable-producer-fencing-plan.md: twenty-four requirements, ten acceptance evidence items each mapped to a named test, eleven key technical decisions (nine session-settled), three document-review rounds before implementation and five reviewer passes on the implementation-ready plan.

Checklist

  • Docs updated - README producer-recovery subsection and upgrade notes, docs/refactoring.md removal queue, docs/data/roadmap.yaml entry, the plan, the in-flight note
  • User-facing feature documentation data added under docs/features/ - N/A - the feature is documented in the README sections above; no docs/features/ entry exists for transactional mode to extend
  • Tests added/updated - eleven new unit test classes, ProducerFencingRecoveryIT, register claim C15, five rewritten closePCWhenInvalidPidMappingException variants
  • docs/inflight/ working note (pr-/branch-) started at the PR's first commit - docs/inflight/core-recoverable-producer-fencing.md, opened at the brainstorm and rewritten as the work moved
  • Title & body reflect the final content of this PR
  • Ran ce-simplify and ce-code-review locally - both run on Fable; what they found and changed is in the section above

🤖 Generated with Claude Code

https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg

… issue's own premise

The issue proposes raising a recoverable exception on ProducerFencedException, aborting the
transaction, and letting the consumer rejoin. Reading the kafka-clients 3.9.2 and Kafka Streams
3.9.2 sources against PC's code refuted two of its three steps and found a third trigger it
did not know about.

WHAT THE RESEARCH CHANGED

- Abort is not available on the fenced producer. KafkaProducer#abortTransaction lists
  ProducerFencedException as a fatal @throws, the same as commitTransaction. Streams' answer is
  to call it anyway and swallow, on the grounds that the broker has already aborted.

- Recovery needs a new producer, which PC cannot build. ParallelConsumerOptions holds a finished
  Producer instance and ProducerWrapper assigns it once from options.getProducer(); PC cannot
  read a KafkaProducer's config back out. initTransactions() runs once from the ProducerManager
  constructor and abortTransaction() is reachable only from close. So the plan's first
  requirement is that PC takes producer config and builds its own producer through an
  overridable factory - Streams' KafkaClientSupplier shape, with DefaultKafkaClientSupplier's
  one-line default.

- "Rejoin" is not the hard part; the transactional.id is. Streams derives it from
  applicationId + processId, so two live instances cannot share one and re-initialisation
  cannot start a fencing war. PC's is whatever the user configured. PC therefore owns the id
  wherever PC builds the producer.

- The quiescence I expected to need already exists. Producing takes the read lock of
  ProducerManager's producerTransactionLock and committing takes the write lock, with
  preAcquireOffsetsToCommit acquiring and flushing before commitOffsets runs. On the commit path
  no worker can be inside send(). Only the produce path needs a worker-to-controller escalation.

THE EVIDENCE THE ISSUE LACKED

The issue reasons entirely from code and KIP-447. confluentinc#830 is a real field report:
transactional mode, UNORDERED, a per-instance UUID transactional.id, and an InvalidPidMapping
after two days of producer inactivity that put PC in an infinite retry loop. The reporter asked
for exactly this feature - "close the producer that is causing this error and create a new
producer instance". What shipped was confluentinc#839, converting the spin into a shutdown, on
the maintainer's stated uncertainty about losing in-flight work. That uncertainty is answerable:
the offsets stay dirty and the records are redelivered. The plan absorbs that case and reverses
the shutdown. Neither upstream issue has a fork mirror.

DEFECT-CLASS SWEEP

produceMessages is referenced only in parallel-consumer-core. The vertx, reactor and mutiny
processors extend ExternalEngine and inherit the core produce path rather than duplicating it,
so the recovery lands in one place. The Kafka Streams execution seam is not affected either -
PcTaskDispatcher builds PC with a stub consumer and no producer, taking only the work manager.

SEQUENCING

#352 merges first and unchanged. Its R6 - a fenced transactional
producer stays immediately fatal without consulting its handler - is true of the behaviour it
was written against. This work makes it untrue and owns the update, including the two tests in
ProducerManagerCommitBudgetTest that pin it.

Requirements-only. No product code changes here.
… design it was proposing that does not work

The note carried #225's proposal verbatim - raise a recoverable exception, abort the
transaction, let the consumer rejoin. Two of those three steps do not work, so a session
designing from it would build the wrong thing.

Replaced with a pointer to the plan plus the three corrections, kept here rather than only in
the plan because this note is what arrives in an agent's context at session start:

- abortTransaction() documents ProducerFencedException as a fatal @throws exactly as
  commitTransaction does, so the abort step is not available on the fenced producer;
- recovery needs a NEW producer, which PC cannot build while ParallelConsumerOptions holds a
  finished instance, so the change is an ownership change rather than an exception swap;
- "whether rejoin is expressible in PC's lifecycle", which the note named as the thing to
  investigate first, is answered: the produce/commit lock pair already gives the control thread
  exclusive access when fencing is detected, so no state-machine addition is needed there.

Also retained here because nothing else records them: confluentinc#830 and confluentinc#839 have
no fork mirrors, and the sequencing behind #352.

Two stale cross-references fixed - the unbounded revoke wait and the commit-failure taxonomy are
now cited as the notes that own them rather than as "the branch that carries this note".
Impact retagged reliability -> crash, matching the vocabulary's own worked example.
@github-actions

github-actions Bot commented Sep 2, 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 2, 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 30 27 🫤 +3
Duplicated lines 1021 949 :face_with_raised_eyebrow: +72
Duplication 0.39% 0.36% 🫤 +0.03%
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.39%)
Max increase vs base +0.1% ✅ Pass (+0.03%)
⚠️ 3 new clones introduced
  • 12 lines (99 tokens): parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java:145 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java:179
  • 15 lines (87 tokens): parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerRecoveryTest.java:466 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerRecoveryTest.java:508
  • 9 lines (71 tokens): parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java:63 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java:81

✅ jscpd (language-agnostic)

PR Base Change
Clones 111 107 🫤 +4
Duplicated lines 1557 1514 :face_with_raised_eyebrow: +43
Duplication 0.83% 0.82% 🫤 +0.01%
Rule Limit Status
Max duplication 2% ✅ Pass (0.83%)
Max increase vs base +0.1% ✅ Pass (+0.01%)
⚠️ 4 new clones introduced
  • 12 lines: parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/ProducerFencingRecoveryIT.java:24 <-> parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java:20
  • 16 lines: parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerRecoveryTest.java:508 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerRecoveryTest.java:466
  • 12 lines: parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java:179 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java:145
  • 7 lines: parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java:19 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java:31

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

📌 Duplicate code detection tool report

The tool analyzed your source code and found the following degree of similarity between the files:

🆕 New file similarities introduced

File A File B Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 44.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java 44.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java 41.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 37.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ReplacementProducerSource.java 35.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 32.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 32.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 32.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerInvalidatedException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java 32.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 31.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 30.1

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 34.1 37.6 +3.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 35.4 36.6 +1.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.8 32.4 +0.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 32.7 33.1 +0.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAbortedTransactionReplayTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateRegistrationOrder370Test.java 30.9 31.4 +0.5
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 35.6 36.0 +0.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java 34.9 35.3 +0.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 73.7 74.1 +0.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java 36.3 36.6 +0.3
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.8 34.1 +0.2
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 44.2 44.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.5 48.7 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 37.8 38.0 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 31.9 32.1 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 56.2 56.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.9 34.0 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 45.3 45.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 31.1 31.2 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.0 33.2 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.5 36.7 +0.1

...and 22 more

Full similarity report
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 38.03
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 33.93
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 37.25
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 36.19
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 54.92 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 38.03
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.25
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 54.92 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 36.19
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 33.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 56.36 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 54.72 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 54.32 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 42.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.76
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 32.61
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.15
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 54.72 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.45
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 40.71
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 37.97
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java 32.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 56.36 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 45.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 30.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 54.32 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 51.22 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 47.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 39.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 36.6
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 32.64
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 51.22 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.76
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 38.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 37.97
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 45.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 37.06
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 33.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 31.17
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 45.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java 40.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 38.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 37.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 34.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 34.23
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 33.14
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 32.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java 32.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 30.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 30.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/DynamicLoadFactor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/DynamicLoadFactor.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LoadFactorCeilingReportingTest.java 30.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 31.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java 40.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 38.74
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 35.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 49.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 45.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java 36.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 36.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 36.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ReplacementProducerSource.java 37.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 36.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 32.37
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 30.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerInvalidatedException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerInvalidatedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java 32.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java 40.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 37.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 37.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ReplacementProducerSource.java 35.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 32.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 32.64
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.37
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 31.17
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java 30.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java 44.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 40.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerInvalidatedException.java 32.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecoveryPass.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerRecovery.java 44.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 37.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ReplacementProducerSource.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ReplacementProducerSource.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 37.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 35.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java 35.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 33.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java 30.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 39.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 30.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 36.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 31.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java 35.77
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 30.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 36.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 48.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 45.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 49.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 38.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 31.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java 30.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java 35.77
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 57.71 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 34.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 57.71 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 33.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 49.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 38.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 31.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 49.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 36.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 30.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 35.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 35.15
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 43.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 35.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java 31.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java 30.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 43.96
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 38.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 33.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 32.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 43.96
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 39.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 37.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerRevokeSweepNpeTest.java 30.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 48.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 36.07
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 32.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 43.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 36.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 36.67
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 36.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 35.15
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java 34.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 58.45 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 45.44
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 32.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java 32.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 53.52 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 45.44
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.25
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 32.19
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 45.03
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java 35.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 34.06
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java 31.3
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 30.56
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 45.03
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 36.02
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 32.12
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 34.84
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 32.12
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 30.56
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 35.22
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 31.3
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 58.45 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 53.52 ⚠️
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 36.41
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 42.97
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 40.24
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 36.81
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.13
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.69
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 43.96
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 42.97
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 38.43
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 51.45 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 43.96
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 36.81
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java 38.68
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 39.61
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java 38.68
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java 39.61
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.69
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 51.45 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 40.24
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.43
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 33.13
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 33.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java 51.34 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java 51.34 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java 30.77
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java 30.77
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 30.39
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java 30.39
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java 36.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java 30.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 34.48
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 30.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java 30.62
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java 30.27
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 43.72
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 39.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java 30.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java 31.68
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 30.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 52.2 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 50.4 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 45.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java 35.27
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java 34.89
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java 34.89
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java 42.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java 42.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java 31.68
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 32.51
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java 31.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java 31.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 30.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 39.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 43.72
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 34.48
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 31.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java 34.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java 34.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 87.91 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.65 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.65 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.86 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.86 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 36.02
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 34.06
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 33.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 45.57
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 30.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java 45.57
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 31.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 30.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java 35.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java 36.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 40.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateDirtyFlagFenceTest.java 39.46
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LoadFactorCeilingReportingTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LoadFactorCeilingReportingTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/DynamicLoadFactor.java 30.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 33.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 40.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 37.06
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 31.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 33.14
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 31.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java 43.95
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerRecoveryTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java 43.95
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 40.84
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 34.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 33.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 33.14
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 33.14
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 32.79
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 32.19
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 40.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 36.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 39.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java 35.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java 35.27
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 74.14 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 44.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 36.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java 33.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 35.69
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java 34.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 30.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java 39.21
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 33.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 30.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java 37.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java 37.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 31.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java 30.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 42.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 36.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAbortedTransactionReplayTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAbortedTransactionReplayTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateRegistrationOrder370Test.java 31.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 42.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java 39.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 39.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateDirtyFlagFenceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateDirtyFlagFenceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java 39.46
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 31.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 30.84
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateRegistrationOrder370Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateRegistrationOrder370Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAbortedTransactionReplayTest.java 31.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java 44.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 58.49 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java 58.49 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 36.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 38.84
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java 43.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 39.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 32.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 33.56
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 30.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 38.84
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 31.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 31.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerRevokeSweepNpeTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerRevokeSweepNpeTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 30.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java 44.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 36.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 38.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 37.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 32.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 30.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 74.14 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 53.04 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 48.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 31.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 43.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 53.04 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 44.43
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java 36.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java 36.65
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java 35.66
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java 39.28
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java 36.74
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 35.1
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.0 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 81.86 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 76.35 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java

📄 parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 36.74
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java 63.89 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java 35.66
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 45.35
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 39.28
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.0 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 81.86 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 76.35 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java 63.89 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.32 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.71 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java 45.35
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 35.1
parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java

📄 parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java

File Similarity (%)
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java 41.93
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 81.29 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.4 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.12
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java 47.3
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java 69.63 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.8 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.65 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.56 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java

📄 parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java

File Similarity (%)
parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java 41.93
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 81.29 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 52.2 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 50.85 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java 47.3
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java 69.63 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.8 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.65 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.56 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.82 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 43.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 42.26
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 38.14
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 37.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 33.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 33.5
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 43.15
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 43.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 40.71
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.15
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 37.9
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 35.42
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java 31.04
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 43.15
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 38.14
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 37.9
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

📄 parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 36.41
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.25
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 87.91 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.8 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.8 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.0 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.0 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 31.04
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 50.85 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 49.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 45.22

#411 mirrors confluentinc#830, the only field report behind this work. Created on demand
rather than by a sweep: the 2026-08-05 bulk import covered all 78 OPEN upstream issues and a
separate cohort covered the 28 closed by the 2023 administrative sweep, and confluentinc#830 is in
neither - it was closed in 2024 by a genuinely merged fix. Closed-and-actually-fixed issues were
out of scope by design, on the reasoning that they have nothing outstanding. This one does: the
fork intends to reverse the fix, which makes the original report load-bearing evidence.
docs/inflight/upstream-coverage-completeness.md already registers the general obligation.

confluentinc#839 deliberately gets neither a mirror nor a manifest entry. Mirrors are for issues,
and the manifest keys on FORK work (fork.branches, fork.prs, fork_issue) - confluentinc#839 is an upstream PR
that merged upstream and is already carried here as 1dbc015, so there is no fork-side mapping to
record. It is covered inside the #411 body instead.
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

⚠️ SpotBugs Report

369 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 35e7f6b · run 34319353871 · 2026-09-09 06:37 UTC

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
ProducerManagerTest.producedRecordsCantBeInTransactionWithoutItsOffsetDirect 🔴 failing (expected) #262 quarantine holding
MultiInstanceRebalanceTest.largeNumberOfInstances 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature

🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its @Quarantined annotation + docs/quarantined-tests.md entry (a merge-blocking review thread has been opened). Lane: non-gating; rules: see the Quarantine Audit check.

Superseded by a newer quarantine lane report.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

🟢 Throughput — OK

This branch measured about 8% slower 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.

What Value Meaning
Compared with master 0.918 above 1.00 is faster, below is slower
Subject test took 59.9s the test under measurement
Control tests took 30.3s the other tests in this same run
Subject ÷ controls, here 1.979 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.817 median of recent master runs
Reported rate 64471 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 0.958 -> 0.918, share 1.931 -> 1.979, rate 79778 -> 64471 (-19.2%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for 35e7f6b · run 34319353871 · 2026-09-09 06:36 UTC

@codecov

codecov Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.07650% with 29 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.12%. Comparing base (16a9716) to head (35e7f6b).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...tub/parallelconsumer/internal/ProducerManager.java 86.74% 8 Missing and 3 partials ⚠️
...r/internal/AbstractParallelEoSStreamProcessor.java 82.50% 3 Missing and 4 partials ⚠️
...ub/parallelconsumer/internal/ProducerRecovery.java 96.59% 4 Missing and 2 partials ⚠️
...arallelconsumer/internal/ProducerRecoveryPass.java 83.87% 4 Missing and 1 partial ⚠️
Additional details and impacted files
@@                              Coverage Diff                              @@
##             feat/225-uncommitted-completions-ledger     #410      +/-   ##
=============================================================================
+ Coverage                                      83.30%   84.12%   +0.82%     
- Complexity                                      1639     1762     +123     
=============================================================================
  Files                                            102      104       +2     
  Lines                                           5559     5884     +325     
  Branches                                         557      599      +42     
=============================================================================
+ Hits                                            4631     4950     +319     
+ Misses                                           733      730       -3     
- Partials                                         195      204       +9     
Flag Coverage Δ
chaos 50.83% <23.77%> (-1.98%) ⬇️
integration 63.41% <63.38%> (+1.11%) ⬆️
performance 46.05% <29.50%> (-1.25%) ⬇️
unit 80.81% <91.53%> (+1.10%) ⬆️

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.

…quirements that rested on them

Six-persona document review of the plan. Two findings were verified against the tree and both
overturn something the plan asserted; the rest close gaps the plan left.

WHAT WAS WRONG

- "Aborting leaves the offsets dirty and the records are redelivered" is false for an instance that
  SURVIVES. PartitionState.onSuccess removes the offset from the incomplete set and raises the
  succeeded watermark at success time; onOffsetCommitSuccess only records the committed offset and
  clears the dirty flag. Redelivery today is a consequence of the instance DYING and rebuilding its
  offset state from the broker. Recovery in place would commit offsets whose output the abort
  discarded - silent result loss, which is precisely the doubt confluentinc#839 was settled on. The
  plan told the reader that doubt was answerable; it is not, without an explicit un-completion step,
  which is the pairing Kafka Streams makes between resetProducer and closeRunningTasksDirty. Now R13.

- The produce-path catch does not fire on the ack wait. FutureRecordMetadata.valueOrError throws
  new ExecutionException(exception), so futureSend.get() can only surface an ExecutionException,
  which falls past the typed InvalidPidMappingException catch into the generic handler -
  PCInternalRuntimeException("Error while waiting for produce results", e), verbatim the stack trace
  in confluentinc#830. closePCWhenInvalidPidMappingException mocks a synchronous throw from
  produceMessages, so it passes without covering the reported path. Detection must unwrap first
  (now R9), and confluentinc#839's shutdown appears not to fire for the case it was written for -
  recorded as a defect in its own right rather than assumed handled.

WHAT WAS MISSING

- Producer configuration would print at INFO on every startup: ParallelConsumerOptions carries a bare
  @tostring and is logged whole; today the field is a Producer whose toString is an identity hash, a
  config map is SASL and keystore secrets. Now R7.
- The derived transactional.id had no ACL story - substituting it stops an operator's existing
  TransactionalId grant matching, and initTransactions fails fatally. Now R6 (documented stable
  group-derived prefix) and R19 (re-grant as an upgrade step).
- Failure of the recovery attempt itself was unspecified, so the natural implementation hot-loops on
  the control thread through a coordinator outage. Now R14.
- The single response omitted the group rejoin, so the group-generation member of the condition set
  recurs immediately and never converges. Now in R10.
- The transactional.id had to be stable and reused, or the replacement never fences its predecessor
  and the old transaction blocks read_committed consumers until it times out. Now in R4.
- Unbounded recovery had no non-progress signal, so a permanently fencing instance looks healthy.
  Now R22, inside the settled logs-and-metrics boundary.
- The configuration path was scoped to transactional flows while the deprecation covered every flow,
  stranding non-transactional producers. R1 widened; recovery stays transactional-only.

Requirements renumbered R1-R22; every Governs, Covers and Trigger reference updated. Four new
acceptance examples. One open question raised rather than settled: whether the deprecated
producer-instance option's removal is queued for the major being cut now.
…cation has an end date

The plan deprecates the `Producer`-instance option without saying when it goes, which leaves the two
paths permanently non-equivalent: only the PC-built one can rebuild a producer the broker has
invalidated, so every future change to producer handling gets written twice - once on a path that
recovers and once on a path that cannot.

Queued in `docs/refactoring.md` under the next-major section, whose gate is open: 0.6.0.0 is
unreleased and is the release being cut now. The plan gains R20 (the deprecation javadoc names that
release) and a Scope Boundaries line saying the removal itself lands in the refactoring queue rather
than in this work. Requirements renumbered R20-R23 in the Observability group.
… outcomes where mechanisms cannot be validated

Round 1 corrected the plan's claims. It wrote those corrections at requirements level without checking
they were implementable, and two were not. Both were caught by two independent reviewers and verified
against the tree.

THE REJOIN DEADLOCKS

ProducerManager.isTransactionCommittingInProgress() is `return producerTransactionLock.isWriteLocked()`,
and onPartitionsRevoked opens `while (isTransactionCommittingInProgress()) Thread.sleep(100)`. Round 1
had recovery rejoin the group BEFORE releasing that write lock, so the revoke callback the rejoin
triggers spins forever on a lock the rejoining thread will not release. unsubscribe() runs the callback
on the calling thread (self-deadlock); enforceRebalance() defers it to the poll thread (cross-thread).
It is also not issuable from there at all: ThreadConfinedConsumer confines consumer calls to the poll
thread, and the two rejoin verbs are unguarded delegates that throw ConcurrentModificationException
from KafkaConsumer. Streams can do this inline only because one thread owns both the consumer and the
processing; PC splits them.

R14 now states the OUTCOME - recovery ends with PC a full member on a live generation, and the first
commit after it does not carry pre-recovery metadata - and sends the mechanism to planning.

UN-COMPLETION ALONE STALLS THE PARTITION

incompleteOffsets maps offset -> the ConsumerRecord, and onSuccess removes the entry, so the record
goes with the offset; ProcessingShard.onSuccess then retires the WorkContainer. Restoring a bare offset
yields one that is incomplete with no work that can complete it, pinning the committable offset at
firstIncomplete-1 forever. Nothing seeks, and under the cooperative assignor retained partitions are
never re-fetched. R13 now states that no aborted-transaction offset is committed and the work runs
again, names why restoring the offset is not sufficient, and defers what state PC retains.

ALSO CORRECTED

- R8's four types were Kafka Streams' COMMIT-path set. Its send path differs: StreamsProducer.isRecoverable
  adds UnknownProducerIdException and omits CommitFailedException; RecordCollectorImpl adds
  OutOfOrderSequenceException. UnknownProducerIdException is what a leader returns after producer state
  expires from inactivity - the shape of the one field report we have.
- AE2 asserted the instance stays alive, which the plan's own reasoning shows is already true on master.
  It now asserts progress.
- Prefixed Kafka ACLs match literally, so granting `orders` also authorises `orders-eu` - enough to fence
  another application. R6 now requires a non-aliasing prefix.
- R7's redaction keyed on Kafka's PASSWORD type missed untyped serializer and Schema Registry secrets.
  Now deny-by-default.
- "Discards the producer" never said close it, leaking sender threads and SASL sessions under unbounded
  recovery. R10 now closes with a bounded timeout.
- R15 now says producing is suspended while no usable producer exists.
- R2 gives the factory a contract; a caller returning a cached producer would otherwise defeat recovery
  permanently.
- The #411 reporter supplies a Producer instance, so the fix does not reach them without a
  migration. Said in the Problem Frame; R20 widened to the whole migration.
- R19's WARN moved from failure time to options validation.
- R21 and the refactoring.md entry named the release that DEPRECATES the option as the one that removes
  it, contradicting R16. Both now name the major after it.
- The #352 supersession decision cited the produce-path requirement; that PR's
  R6 is about the commit path.

Requirements R1-R24. Dependencies records three constraints the plan was leaning on silently: consumer
thread confinement plus the revoke wait, zombie fencing coming from group metadata rather than the id,
and per-run id uniqueness not fencing a restart's predecessor.
…that defeated its own requirements

Third review round, six personas. The trend is the result worth recording: round 1 falsified two of the
plan's claims, round 2 falsified both of round 1's repairs, round 3 falsified nothing. The feasibility
pass - the persona that broke the plan twice - returned zero findings and went further than accepting
the two deferrals, locating a working mechanism for each: PartitionState already has an insertion route
carrying the ConsumerRecord, and ConsumerManager.updateCache refreshes group metadata after every poll,
with the classic protocol rejoining automatically on the next poll after a generation loss.

WHAT ROUND 2 GOT WRONG

- R8's "the two before it are send-path only" is false. TransactionManager maps UNKNOWN_PRODUCER_ID and
  INVALID_PRODUCER_ID_MAPPING through abortableErrorIfPossible in three handlers, and maybeFailWithError
  rethrows the stored error wrapped in KafkaException from the NEXT transactional call -
  sendOffsetsToTransaction and commitTransaction included. Only CommitFailedException is single-path.
  Also UnknownProducerIdException extends OutOfOrderSequenceException, so the list named a subclass beside
  its parent; the parent now covers both.
- R14's freshness clause made the flagship scenario unpassable. An expired producer id after two days of
  inactivity involves no rebalance, so the generation never changes and the first commit after recovery
  necessarily carries metadata predating it - and must succeed. Reworded to freshness against the group's
  LIVE generation.
- F1 undid R13's own deferral by ordering restoration before lock release, which forecloses the
  seek-based candidate: that needs the consumer, confined to the poll thread, which may be spinning on
  the very lock F1 holds. Taken literally it rebuilds the round-2 deadlock.
- R19 claimed the instance path "keeps its current terminal behaviour" when this plan's own Problem Frame
  establishes that behaviour is the spin. The defect was named and then owned by no requirement and no
  boundary; it is now stated in R19, in F3's outcome, and as an explicit Scope Boundaries exclusion.
- The Goal Capsule said "Open blockers: None" while the two mechanisms the feature stands on were
  deferred precisely because every concrete candidate had failed.

ALSO CORRECTED

R7 contradicted itself - "never rendered" followed by "any diagnostic that does render it" - and
"redacts by default" implied a reveal mode that would ship credentials; now one unconditional rule.
AE1 and AE4 claimed coverage of the membership and prefix requirements while asserting neither. R14
arrived with no governing decision, repeating R13's round-2 pattern. R15's suspension collided with the
existing produce-lock and send timeouts and released nothing on the terminal path. F3 and AE5 still
emitted and asserted the deprecation WARN at failure time after R19 moved it to options validation.
The Outstanding Questions derivation entry now records the trap two reviewers found independently: no
prefix-plus-group.id-plus-delimiter scheme satisfies R6, since "app" yields a literal prefix of "app-x".

Scope-guardian confirms the 16 -> 24 growth is corrective accretion rather than scope drift, and that a
split is not warranted: the ownership requirements are load-bearing for recovery, so splitting would
sever cross-references without removing coupling.
…e the roadmap entry it belongs to

TWO THINGS THE #225 REVIEW SURFACED THAT ITS OWN PLAN DELIBERATELY DOES NOT FIX

bug-411-wrapped-send-failure-spins-forever.md. ParallelEoSStreamProcessor catches
InvalidPidMappingException around the produce-and-ack block and closes PC. That catch was
confluentinc#839, written to end the infinite retry loop #411 (confluentinc#830) reported. It
cannot fire for that report: FutureRecordMetadata.valueOrError throws new ExecutionException(exception),
so the ack wait can only surface an ExecutionException, which falls past the typed catch into the
generic handler producing PCInternalRuntimeException("Error while waiting for produce results", e) -
verbatim the stack trace in the report, from a build that already carried the fix. From there the record
is marked failed and re-dispatched onto the same invalid producer, which is the reported spin.

The typed catch fires only on a synchronous throw from produceMessages, which is exactly what
closePCWhenInvalidPidMappingException mocks - so the test is green over a path the reporter never took.

Not fixed by the #225 work: that plan requires unwrapping before matching, but only where PC
builds its own producer, and every user today supplies a Producer instance. The plan excludes it in
Scope Boundaries rather than absorbing it, and now cites this note as the owner. Two ways out are on
the page; choosing between them is a product call, so the note records both rather than assuming one.

Deliberately NOT claimed: that the spin reproduces on master today. The reasoning is from the current
tree and the kafka-clients 3.9.2 sources; nobody has run it. The note says what a reproduction needs.

ROADMAP

survive-producer-fencing advances idea -> requirements-drafted. Its stage_detail said "no design yet",
which stopped being true when the requirements plan landed, and product review flagged the entry as
underselling the banked design. done_when is rewritten to what the contract actually commits to -
a replaced producer, no offset from the aborted transaction committed, its work processed again -
and to say the guarantee applies where PC builds the producer, since the deprecated path keeps today's
behaviour. Adds the field report and the PR as related links.
…is directory carries

docs/inflight/AGENTS.md: a note that maps to a GitHub issue carries a DRAFT response to that issue
before its PR merges, because the agents who did the work hold the best context at merge time and by
release time it has to be re-mined from commit logs. Two notes on this branch map to issues and had
none.

issue-response-225.md states the three things scoping the plan overturned in the issue's own
proposal - abort is not available on an invalid producer, recovery needs a new producer PC cannot
build from a supplied instance, and the "is rejoin expressible" question the issue named as the thing
to investigate first is answered without a state-machine addition - plus the field evidence the issue
did not have.

issue-response-411.md tells the reporter what their report now means: the upstream fix that closed it
cannot fire for the failure they described, their own suggested remedy is the direction the fork took,
and it will not reach their configuration until they move off the deprecated producer-instance option.
It says plainly that the spin has not been reproduced on a current build and what a reproduction needs.

Both tagged and shaped like issue-response-120.md: task + coordination, deferred until the sweep or an
explicit instruction, and post-merge exempt because a draft deliberately outlives the PR that wrote it.
Neither is posted. Per the directory's rule a draft is deleted when it is POSTED, not when its PR
merges - the merge is exactly when nobody is looking.
…ubject is written about

`docs/solutions/` front matter carries `related_components` and `applies_when` - the classes a
write-up is about, and the situations it should be read in. NOTHING READ EITHER.
`grep -rln applies_when bin/ .claude/` returned nothing while a majority of write-ups carried one:
retrieval metadata written, reviewed, and inert.

WHY IT MATTERS, MEASURED RATHER THAN ASSERTED

two-threads-one-consumer-why-the-commit-seam-keeps-deadlocking.md records that THREE separate 2026
investigations each re-derived part of it before acting. A fourth followed on #225: a review
proposed that fencing recovery rejoin the consumer group from the control thread while holding the
produce/commit write lock, which deadlocks against `onPartitionsRevoked`'s spin on
`isTransactionCommittingInProgress()` - literally `producerTransactionLock.isWriteLocked()`. A review
round caught it. One paragraph of that write-up would have, and its `applies_when` names the
situation twice over.

WHAT SHIPS

A PreToolUse hook on Write|Edit|MultiEdit naming the write-ups whose `related_components` appear in
the text being written. Once per write-up per session; never blocks.

THE DESIGN DECISION, AND THE MEASUREMENT THAT SETTLED IT

The obvious hook fires when you edit a file a write-up names. Measured against the incident it was
built for, that design fires ZERO times - the whole episode was spent writing a requirements
document and no Java file was touched at any point. Matching the TEXT fires five, including both
write-ups that would have prevented the defect. So the trigger is the text.

It reads `related_components` only. `applies_when` is free prose, and a fuzzy match on it rebuilds
the noise that makes a flat session-start list ineffective - which is the thing this hook exists to
be the complement of, not a second copy of.

PROVEN ABLE TO FAIL

`bin/test-check-solutions-hook.mjs` - eight cases, every positive paired with a negative control that
must stay silent, plus a regression case carrying the incident's own shape. Two mutants were run
against it and both were killed: removing the word-boundary match reddens the substring control, and
removing self-suppression reddens the author control. The suite is idempotent - the hook's per-session
memory made the first draft pass once and fail forever after, which is a red that means nothing.

WRITTEN IN NODE, AND THE FIRST DRAFT SHOWS WHY

The first draft was bash driving python through two heredocs; a second stdin redirection silently
clobbered the first, so the hook emitted nothing - indistinguishable from "no write-up matched". That
is the exact class `bin/AGENTS.md` cites for the Node-first ruling. `check-source-patterns.mjs` also
caught a live `printf | grep -q` under `pipefail` in the shell self-test, which inverts its own answer
above one pipe buffer and survives only because fixtures are small.

Coverage is bounded by how many write-ups name a real Java type - a minority, since the field also
carries concepts like `documentation` that match no filename. Stated in docs/agent-harness.md rather
than left to rot unmeasured.
@astubbs
astubbs marked this pull request as ready for review September 2, 2026 10:20
@astubbs astubbs changed the title docs(plans) astubbs#225: scope recoverable producer fencing, and correct the issue premise it was built on docs(plans) astubbs#225: scope recoverable producer fencing, and make the write-up that would have caught its worst draft arrive on time Sep 2, 2026
@astubbs

astubbs commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Two halves, and they want different scrutiny.

The plan has already been through three review rounds with six personas each. Round 1 falsified two of its claims, round 2 falsified both of round 1's repairs, round 3 falsified no mechanism. So the interesting question is not "are there findings" but whether anything in the current text is still wrong after that much editing — particularly:

  • R13 and R14 state outcomes with their mechanisms deferred, because every concrete mechanism proposed so far failed against the produce/commit locking and consumer thread confinement. Is deferring them honest, or does it relocate an unsolved problem somewhere harder to see?
  • The requirements were renumbered twice with mid-list insertions. Every Governs, Covers and in-prose reference was re-checked, but that is exactly the class that survives re-checking.
  • R8 lists six exception types across two paths. That list has been wrong once already.

The tooling is new and unreviewed. bin/test-check-solutions-hook.mjs was mutation-checked — two mutants run, both killed — but the case set is mine, so it only proves the controls I thought of have teeth. Worth asking what a seventh case would catch.

One thing I would rather have challenged than agreed with: the hook matches text against related_components and deliberately ignores applies_when, on the grounds that free prose matches fuzzily. That is the field carrying most of the retrieval intent, and skipping it may be the wrong trade.

@claude

claude Bot commented Sep 2, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 5m 27s —— View job


Review complete

  • Read trigger comment and PR body/context
  • Read the plan doc — R13/R14 deferred-mechanism honesty, renumbering/cross-reference integrity, R8's exception list
  • Read the updated in-flight note, both issue-response-*.md drafts, and bug-411-wrapped-send-failure-spins-forever.md for consistency with the plan
  • Read the new tooling: hook + lib + bin/test-check-solutions-hook.mjs
  • Check docs/agent-harness.md, docs/refactoring.md, docs/data/roadmap.yaml
  • Post findings

The plan

R13/R14 — is deferring the mechanism honest, or does it hide the problem? Honest. The Goal Capsule's "Open blockers" states outright that every concrete mechanism tried so far failed against the lock pair and thread confinement, and that "a failed candidate reopens the recovery shape rather than merely the requirement" — that's a real commitment, not a hedge. The same caveat is repeated verbatim-in-spirit at R14 itself, in Dependencies/Assumptions (onPartitionsRevoked spins on the write lock recovery holds), and in Outstanding Questions (whether an explicit rejoin is even needed). Four placements of one fact reads like the duplication AGENTS.md warns against, but here each placement serves a different reader (exec summary / requirement / assumption / question-for-planning) and they don't drift from each other — I'd leave it.

Renumbering integrity. Walked every Governs/Covers list against R1–R24: full coverage, no orphans, no requirement claimed by a decision that doesn't match its content. Every stray in-prose R6 (there are 7) is either this plan's own R6 or explicitly disambiguated at the point #352's R6 is superseded — no ambiguous ones survived. AE1–AE10 don't cover R1–R3, R20–R23, but those are config/observability-shape requirements where an acceptance example would mostly restate the requirement; not a gap I'd hold the PR for.

R8's exception list. Internally consistent (5 named + UnknownProducerIdException as a stated subclass of OutOfOrderSequenceException = "six exception types across two paths," matching your framing). I don't have network access in this session, so I couldn't re-verify the kafka-clients 3.9.2 hierarchy independently — that's the one piece of this review that's "internally consistent" rather than "re-derived from source." Given the list has been wrong once already, if nobody outside this plan's own research has independently re-checked it against actual kafka-clients javadoc, that's worth doing before requirements freeze.

One drift I did find, outside what was asked about: docs/data/roadmap.yaml's survive-producer-fencing entry still titles itself "Abort and rejoin when the producer is fenced, rather than dying", but this PR rewrote that same entry's stage_detail to say group-membership refresh is one of two mechanisms deliberately left open. The title bakes in "rejoin" as settled; the body it sits next to now says it isn't. Small, but it's exactly the "title didn't get the memo the body did" class of drift this session's plan review was watching for — worth a one-line title fix (e.g. "Recover the producer when it's fenced, rather than dying") in this PR or the next touch of that entry.

The tooling

Read .claude/hooks/inject-solutions-for-named-components.mjs and lib/solutions-for-named-components.mjs via git show HEAD:<path> rather than the working tree — this session's checkout has both files deleted and the Write|Edit|MultiEdit hook registration reverted out of .claude/settings.json relative to this PR's HEAD (0b4b11a). That's consistent with the harness declining to auto-execute a hook a PR just introduced against its own reviewing session (the same reasoning the tool-allowlist note at the top of this session gives for workflow permissions), not a defect in the PR — git show confirms the committed content matches what's described. One consequence worth flagging plainly: I could not execute bin/test-check-solutions-hook.mjs in this session (Bash needed approval that wasn't available), so the "two mutants killed" claim is verified by reading, not by re-running.

On the logic itself: word-boundary regex, self-referential exclusion (both the write-up-editing-itself case and the fixture-name check), per-session dedupe keyed off a hashed session id, and the hidden-count-honesty behavior all read correctly and match their test cases.

What a 7th/8th case would catch, concretely:

  • Every case in test-check-solutions-hook.mjs drives the hook end-to-end against the real docs/solutions/ corpus and the real Java source tree — none use the types/docs injection parameters that match() already exposes for exactly this purpose. That means the suite is coupled to corpus content that other PRs routinely touch: rename a related_components entry, retitle the two-threads write-up, or move ProducerManager, and cases 1–2 redden for a reason that has nothing to do with hook logic. Given the module was clearly built to be unit-testable (pure exported functions, injectable vocabulary/docs), a case or two built on a fixed fixture rather than the live corpus would decouple "does the hook still work" from "does the corpus still look like it did in September."
  • The hook has real handling for the MultiEdit shape (ti.edits[].new_string), but every test case drives it via content/file_path (the Write shape). Nothing exercises tool_input.edits, so a break in that array-parsing path — wrong property name, non-array edits, etc. — would ship silently.

On the applies_when trade, since you asked to be challenged rather than agreed with: the matching decision is right — free prose against arbitrary text would reproduce the noise this hook exists to cut through, and that's measured, not asserted, against the one incident you have. But the implementation goes a step further than the stated trade: writeUps() never parses applies_when at all, and render() never shows it even for a write-up that already matched on related_components. Once a doc has already surfaced — zero false-positive cost at that point — showing its applies_when text alongside the title would hand the reader exactly the retrieval intent you said that field carries, instead of sending them to open the file to get it. That's a small, low-risk addition, not a reason to revisit the matching design.

Summary

No blocking findings on either half. The plan's requirement structure holds up under a full cross-reference walk; the one real inconsistency found is cosmetic (roadmap title vs. its own updated body). The tooling's core logic and self-suppression are sound by reading; its test suite would be more durable against unrelated corpus edits with a couple of fixture-based cases, and applies_when is a cheap, zero-risk addition to the display path even though excluding it from matching is the right call.

…en its subject is written about"

This reverts commit 0b4b11a, which cherry-picked the solutions hook onto this branch.

The hook keeps its own PR (#413) after all. It was folded in here on a
misreading and is being separated again; nothing about the hook changed, and this branch returns to
the requirements plan it is named for.
@astubbs astubbs changed the title docs(plans) astubbs#225: scope recoverable producer fencing, and make the write-up that would have caught its worst draft arrive on time docs(plans) astubbs#225: scope recoverable producer fencing, and correct the issue premise it was built on Sep 2, 2026
@astubbs

astubbs commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Correction to my review request above: the tooling half is not in this PR.

The solutions hook was briefly cherry-picked here and has been reverted; it lives in #413, which is open again. Please disregard the "tooling" section of that comment — bin/test-check-solutions-hook.mjs, the .claude/hooks/ files and the docs/agent-harness.md entry are all on that PR, not this one.

What stands from the request: this PR is the requirements plan, three review rounds deep, and the questions worth pressing are whether deferring R13/R14's mechanisms is honest, whether the cross-references survived two mid-list renumbers, and whether R8's six-type split across the two paths is right — that list has been wrong once already.

…ody said rejoin is open

Caught by the automated review on the PR. This branch rewrote the survive-producer-fencing entry's
stage_detail to say group-membership refresh is one of two mechanisms deliberately left open, and
its done_when to what the contract actually commits to - but left the title reading "Abort and
rejoin when the producer is fenced", which bakes in as settled the very thing the body beneath it
says is not. Same class as the plan-doc drift the three review rounds were watching for: the title
did not get the memo the body did.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
@astubbs

astubbs commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Thanks — all four points land, and the one real drift is fixed.

Roadmap title — fixed in 8fc2645. It now reads "Recover the producer when the broker invalidates it, rather than dying", matching the body beneath it. Exactly the title-didn't-get-the-memo class, and it was mine.

R8's exception list — you couldn't re-verify without network; I did, against the kafka-clients 3.9.2 sources jar, before it went in. UnknownProducerIdException extends OutOfOrderSequenceException is declared at line 26 of that class, and the abortable-error rethrow path (abortableErrorIfPossiblemaybeFailWithError wrapping in KafkaException on the next transactional call) is what makes every condition but CommitFailedException reachable on both paths. Verified by reading source, not javadoc.

The tooling findings — all three are right, and they now belong on #413, where the hook lives after the un-fold. Applied there: the literal .claude/hooks/... path so the harness coverage check can see the self-test; applies_when shown in the display path for a write-up that has already matched (zero false-positive cost at that point, as you say); and fixture-based cases via the types/docs injection plus a MultiEdit edits[] case, so the suite stops being coupled to what the live corpus looked like in September.

R13/R14 fourfold placement — agreed it stays. Each copy serves a different reader and they say the same thing; I'll hold that line if a later edit makes them drift.

astubbs added a commit that referenced this pull request Sep 2, 2026
…ake the self-test visible to the harness

Three changes, all from the automated review that read this hook while it was briefly folded into
#410.

THE CI RED. bin/test-check-agent-hooks.sh proves every registered hook is self-tested by finding the
literal `.claude/hooks/<name>` in test CODE - deliberately code, so a hook cannot buy coverage with
a sentence in a comment. This suite built the path with path.join(root, '.claude', 'hooks', name),
three segments the regex never sees, so the harness reported the hook untested however thoroughly
it was. One literal now. The doc's stated counts moved with it: fifteen scripts, seventeen
registrations - the check verifies both against settings.json rather than trusting the next editor.

APPLIES_WHEN IS DISPLAYED, STILL NOT MATCHED. The review's challenge: matching on
related_components only is right, but render() never showed applies_when even for a write-up that
had ALREADY matched - where it costs no false positives and is the field carrying the retrieval
intent. Parsed alongside related_components now, shown capped at three lines per matched write-up.
The header prose that said the hook "does not read applies_when" now says precisely which half.

SIX CASES THE REVIEW ASKED FOR. Every prior case drove the real docs/solutions/ tree, so a retitled
write-up or a moved class would redden them for reasons unrelated to hook logic. Five fixture-based
cases now pin the LOGIC through the types/docs parameters match() exposes for that purpose - exact
match, the three boundary shapes, a concept-only entry staying inert, applies_when render, hidden
count. And one for the MultiEdit shape: the hook parsed edits[].new_string and nothing exercised it,
so a wrong property name there would have shipped silently. Fourteen cases; idempotent.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
@astubbs
astubbs changed the base branch from master to feat/225-uncommitted-completions-ledger September 7, 2026 10:34
astubbs and others added 2 commits September 7, 2026 10:38
…producer-fencing-brainstorm

This PR now stacks on the ledger rung (#474), itself on the groundwork rung
(#472), both cut out of this branch's tree today. Resolved by hand: the
processor and the module resolve to this branch's versions, which are the rungs' text plus recovery;
the README template takes the ledger rung's new retention section and points the recovery section's
retention sentence at it; a restore entry point the merge placed twice in WorkManager is kept once.
The ledger rung also carries two master commits this branch had not merged yet (the rebalance-callback
rule and the Lincheck shard harness), which arrive with it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
…ut today

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
astubbs added a commit that referenced this pull request Sep 7, 2026
…m this branch already uses

The merge of #410 brought the groundwork rung's three module tests in
their rung-1 shape (a caller-supplied transactional.id, the rung-1 helpers).
On this branch the id is derived and the module is built through the
factory, so the tests are re-expressed with this file's helpers: the derived
id is asserted by prefix, and every build is shown to receive the same one.
The instance-path case was already covered here and is not duplicated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
astubbs added a commit that referenced this pull request Sep 7, 2026
…left behind

Moving the reactor and vertx examples onto the configuration path added an
import block on top of one that already imported the same type, so each file
ended up importing java.util.Map twice, and VertxApp imported
JStreamVertxParallelStreamProcessor twice as well. Nothing fails on it - javac
accepts a repeated single-type import, -Xlint:all does not warn, and the
examples compile and their tests pass either way - so it would have merged
silently and stayed.

Removed the added copy in each case, leaving HashMap and Map in the order the
rest of the file uses. No behaviour changes; test-compile of both example
modules and their dependencies is green, and bin/check-all.sh passes.

Swept the whole tree for the same defect class rather than the two files the
duplicate-code bot named. Four files carry a repeated import; two are these,
introduced by this branch and fixed here. The other two are inherited and
deliberately left alone: WorkManager's ThreadConfined, added by the base rung
#410 in f0af594 and f6bc1f8, and
CommitHistorySubject's two truth-generator imports, which predate master's
fork point. Neither is on a line this PR wrote.

Nothing enforces this - no gate, no compiler warning - which is why the sweep
found instances on two branches at once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
astubbs and others added 2 commits September 7, 2026 11:02
…y it explained

8027778 deleted `1 THREAD_SAFETY_VIOLATION AbstractParallelEoSStreamProcessor.controlLoop`
from the baseline, because the infer lane on the merged head listed it among the known races that
no longer fire - master's 9999144 declared the control-thread confinement RacerD now reads. The
five-line comment block that 73bdd13 had written to justify that entry was not deleted with it.

What it leaves behind is worse than clutter. The block now sits immediately above
`1 NULLPTR_DEREFERENCE AbstractParallelEoSStreamProcessor.processWorkCompleteMailBox`, so it reads
as that line's justification while describing a THREAD_SAFETY_VIOLATION on a different method - and
its claim, that the controlLoop race "came back when the recovery pass moved into
ProducerRecoveryPass", is the claim 8027778's own measurement overturned.

Deleting it is lossless: the reasoning for adding the entry is in 73bdd13's body and the reasoning
for retiring it is in 8027778's, which is where the file's header says a retirement's evidence
belongs. With the block gone, this branch's `config/infer-known-findings.txt` is byte-identical to
its base, which is the honest state - the branch adds no baseline identity and retires none.

No gate catches this: the ratchet parses entries, and a comment for an entry that is not there
cannot fail it. Found by reading the PR's own diff against its base while babysitting
#410.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
…nder it grew to five

ab86e34 rewrote the list in this section for today's re-cut - #472 and
#474 cut out from under this PR - and left the heading above it saying
"three PRs (2026-09-03)". A reader who trusts the heading over the list it introduces gets the
stack's shape wrong, and this note exists precisely to tell a later PR which rung it has to
reconcile against.

Verified against GitHub rather than the list: #426 MERGED, then
#472 -> #474 -> #410 ->
#420 all open, each based on the one before it. Five rungs, one landed,
which is what the heading now says. The list's own contents were already correct and are untouched.

Nothing enforces a heading against the block it introduces; grepped the tree and every ref first, as
AGENTS.md requires before moving a labelled block - the string is cited nowhere, it only appears as
this heading on the branches that carry their own copy of the note.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
MultiInstanceRebalanceTest.largeNumberOfInstances ⚪ not run ⚠️ unowned report missing - check the lane job
ProducerManagerTest.aRevokeTimeCommitIncludesTheOffsetOfEveryRecordItAlreadyProduced 🔴 failing (expected) ⚠️ unowned quarantine holding
RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed ⚪ not run ⚠️ unowned report missing - check the lane job

🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its @Quarantined annotation + docs/quarantined-tests.md entry (a merge-blocking review thread has been opened). Lane: non-gating; rules: see the Quarantine Audit check.

Since the previous push: MultiInstanceRebalanceTest.largeNumberOfInstances: 🟡🎲 passed (flapper) → ⚪ not run; RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed: 🟡🎲 passed (flapper) → ⚪ not run.

Updated for 0f25100 · run 34114577132 · 2026-09-07 11:05 UTC

Superseded by a newer quarantine lane report.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

[superseded - a quarantined test changed outcome] 🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
MultiInstanceRebalanceTest.largeNumberOfInstances 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature
ProducerManagerTest.aRevokeTimeCommitIncludesTheOffsetOfEveryRecordItAlreadyProduced 🔴 failing (expected) ⚠️ unowned quarantine holding
RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature

🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its @Quarantined annotation + docs/quarantined-tests.md entry (a merge-blocking review thread has been opened). Lane: non-gating; rules: see the Quarantine Audit check.

Since the previous push: MultiInstanceRebalanceTest.largeNumberOfInstances: ⚪ not run → 🟡🎲 passed (flapper); RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed: ⚪ not run → 🟡🎲 passed (flapper).

Updated for 46f7130 · run 34114754034 · 2026-09-07 11:09 UTC

Superseded by a newer quarantine lane report.

The ledger rung and the confinement commit on this branch each added the
import; the merge kept both. javac accepts a repeated single-type import
and no lint warns, so nothing went red. The sweep of every module's source
for repeated import lines finds one other, in the generated Truth subject,
which predates the fork and is not this branch's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

[superseded - the quarantine lane is now empty] 🧪🔒 Quarantine Lane Report

The superseded report, collapsed because it no longer applies
Quarantined test Outcome Owner Meaning
MultiInstanceRebalanceTest.largeNumberOfInstances 🔴 failing (expected) ⚠️ unowned quarantine holding
ProducerManagerTest.aRevokeTimeCommitIncludesTheOffsetOfEveryRecordItAlreadyProduced 🔴 failing (expected) ⚠️ unowned quarantine holding
RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature

🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its @Quarantined annotation + docs/quarantined-tests.md entry (a merge-blocking review thread has been opened). Lane: non-gating; rules: see the Quarantine Audit check.

Since the previous push: MultiInstanceRebalanceTest.largeNumberOfInstances: 🟡🎲 passed (flapper) → 🔴 failing.

Updated for 94e929e · run 34125128619 · 2026-09-07 13:07 UTC

Superseded by a newer quarantine lane report.

@astubbs

astubbs commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 5m 15s —— View job


Review complete

  • Read trigger comment and PR context (this is the 3rd @claude review this on PR feat(core) astubbs#225: recover the producer when the broker invalidates it, rather than dying #410; prior rounds covered the plan, the initial implementation, and two Codex-flagged findings)
  • Checked the four commits since the last review pass (ab86e34, 0f25100, 46f7130, 94e929e) individually via git show (shallow clone blocks range diffs without --unshallow, which needs approval I don't have in this session)
  • Read the recovery mechanism itself: ProducerRecovery, ProducerRecoveryPass, ProducerManager, the AbstractParallelEoSStreamProcessor wiring, WorkContainer/WorkManager replay-generation plumbing
  • Confirmed the two Codex-flagged findings fixed in 88604a1c8 are still intact
  • Checked docs/inflight/core-recoverable-producer-fencing.md for consistency with the current stack shape

The four newest commits are all legitimate small fixes

  • ab86e34/46f7130 — doc corrections to the in-flight note after the 2026-09-07 re-cut (stack now five rungs, heading text corrected to match). 0f25100 — a genuinely stale/misleading comment in config/infer-known-findings.txt removed (its claim was overturned by an earlier commit's own measurement; verified the diff, this is a clean deletion, not a suppression of a real finding). 94e929e — a harmless duplicate ThreadConfined import removed from WorkManager.java, left behind by a merge. None of the four touch behavior.

The re-scope since the last full review is real and consistent

The PR body's 2026-09-07 note says two rungs (#472: recoverable-condition detection/policy/metrics, #474: the ledger) were cut out from under this PR, which now stacks on #474. That's borne out in the code: PCModule.java's diff here is now tiny (+5/-7) and contains none of the ProducerFactory/WeakReference identity-tracking machinery Codex reviewed on 2026-09-02 — that whole area (and both Codex findings about it: "reject every previously returned producer instance" and "close the PC-built producer when startup initialization fails") now belongs to #420, stacked above this PR. Grepped ProducerRecovery.java, ProducerRecoveryPass.java and ReplacementProducerSource usage for any leftover ProducerFactory reference — none. The two Codex fixes that do still belong here (capping the mailbox wait on the retry-queue return path, and closing a PC-built producer when ProducerManager's constructor throws) are both present and still pinned by their tests (ProducerRecoveryTest#aDeferredReplacementIsRetriedOnItsOwnScheduleEvenWhileARecordWaitsInTheRetryQueue exists at HEAD; PCModule.producerManager() still closes the wrapper on construction failure at PCModule.java:143-158).

The recovery mechanism itself holds up

Read ProducerRecovery, ProducerRecoveryPass and the relevant ProducerManager/AbstractParallelEoSStreamProcessor sections end to end against the specific defects the PR body says the 11-lens review found and fixed, and traced each one in the current code:

  • Replay-owed survives a listener throw. beginReplacement() sets replayOwed = true before releasing control; replayCompleted() only clears it after the drain-and-replay returns normally; completeReplacement() refuses to build while it's still owed and reschedules. Traced the retry path: on the next pass pendingInvalidation() is null (already consumed) but isReplayOwed() is true, so beginReplacement() re-enters, correctly preserves the original conditionUnderRecovery label (guarded by if (condition != null)), and re-attempts the replay. Consistent.
  • Ordering under key/partition mode. The replay-generation stamp (WorkContainer.dispatchedAtReplayGeneration) is written on the control thread in submitWorkToPoolInner before submission to the pool, and acquireProduceLock compares it against recovery.replayGeneration() before handing out the lock, re-queuing a mismatch. The total order the javadoc claims (stamp and replay both control-thread-only) checks out.
  • Recovery is silent to the application's failure history. WorkContainer.deferForRecovery() calls recordVerdict(false) without updateFailureHistory, so a dead-letter-after-N policy can't see it; WorkManager.onFailureResult correctly skips the failed-record counter via wc.isDeferredForRecovery().
  • Error during abort/close doesn't strand the write lock. beginReplacement()'s catch is RuntimeException | Error, releases the commit lock, and rethrows — matches the javadoc's stated decision.
  • The recovery-cap applies to both getTimeToBlockFor() return paths (line 2062 and 2069 both go through capAtNextRecoveryAttempt), confirming the fix Codex asked for and astubbs applied is still in both places after the re-cut.

No new correctness issues found in this pass. Given how many rounds of adversarial review (ce-simplify, the 11-lens ce-code-review, an independent validation pass, two Codex passes) this has already been through and how narrowly this pass's changes are scoped (four commits, all non-behavioral), that's the expected outcome rather than a surprising one.

One thing worth a plain look, not a blocker

ProducerManager.close(Duration) (close() around line 569) reads producerWrapper directly rather than through recovery, and does so after calling recovery.markTerminal(). Since close() is only ever called from the control thread (AbstractParallelEoSStreamProcessor.java:1201, in innerClose, which runs after the control loop — and therefore after maybeRecoverProducer() — has stopped), there's no concurrent recovery pass that could be racing it, so this reads correctly single-threaded. Flagging only because it's the one place recovery and shutdown share state without going through the availabilityMonitor, in case a future change moves close() off the control thread. Confirm this if changing close()'s calling thread →

CI / quarantine status at HEAD (94e929e)

Per the latest quarantine lane report on this PR: MultiInstanceRebalanceTest.largeNumberOfInstances and ProducerManagerTest.aRevokeTimeCommitIncludesTheOffsetOfEveryRecordItAlreadyProduced are both failing as expected (owner PRs open elsewhere), non-gating per this repo's quarantine lane rules. Nothing here is new to this PR's own diff.

Summary

No blocking findings. The four newest commits are trivial and correct; the 2026-09-07 re-cut that split #472/#474 out from under this PR is reflected consistently in the code (the ProducerFactory-related Codex findings no longer apply here because that code moved to #420); the recovery mechanism's handling of replay-ordering, failure-history isolation, and Error paths all match what the PR body describes as fixed, traced directly in the current source rather than taken on faith.
· branch docs/225-producer-fencing-brainstorm

astubbs added a commit that referenced this pull request Sep 8, 2026
…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>
astubbs added a commit that referenced this pull request Sep 8, 2026
 wins the transactional revoke path

Master landed #466 (the revoke-path commit hands itself to the control thread), #468
(WorkContainer equality is identity) and #471, and this PR went CONFLICTING. #466 is a
different answer to the question this branch answered: in transactional mode onPartitionsRevoked no
longer commits on the poll thread at all - it posts a request, wakes the control loop through the
mailbox, and waits, bounded by commitLockAcquisitionTimeout; the confluentinc#548 spin is gone; and
it refutes this branch's decline by experiment (a revoke that commits nothing leaves its output in
the open transaction for the next commit to publish without the offset - the same duplicate through
a different door). Master's own re-premising of docs/inflight/bug-857-transactional-revoke-wait.md
says what is left for this PR: not the absence of a bound, but whether the bound is the right value
- five minutes, against a max.poll.interval.ms it can exceed.

So the resolution is master's on that path, per file:

- AbstractParallelEoSStreamProcessor: master's onPartitionsRevoked, commitOnRevokeViaTheControlThread
  and the no-argument consumer-commit tryCommitOffsetsOnRevoke replace this branch's parameterised
  decline, its performCommit extraction and its post-catch wake (moot: the served commit runs on the
  control thread, which recovers itself); commitOffsetsThatAreReady is master's again; the mailbox
  loop keeps master's wake-up message skip in front of #410's first-failure try; one of two
  identical assertOnControlThread helpers (#410's and master's) is kept - master's, which
  names the new design.
- RebalanceEoSDeadlockTest: master's whole file. Its unamended assertion that committed offsets
  advance inside the callback holds again by construction under #466, and it now reads the
  output topic at read_committed for duplicates; this branch's decline amendment is superseded.
- ArchitectureTest: master's whole file (#465). This branch's interface-hop widening does not
  merge onto it; its note now records that the blind spot is still open on master and the widening
  is to be re-applied on top of #465 as its own change.
- ProducerManagerTest: master's revoke-request tests and this branch's five revocation tests, both
  kept; PartitionState: master's onSuccess(long) javadoc with #410's ledger cross-reference
  folded in; TransactionalClaim: master's scope note plus #410's C15.
- config/infer-known-findings.txt, bug-857-family.md, core-recoverable-producer-fencing.md: master;
  bug-wedged-after-poisoned-transaction.md: master's deletion (the grooming sweep); the three vetted
  notes keep master's markers and this branch's concurrency label; test-untracked-ci-flakes keeps
  master's rows and this branch's three later sightings.
- ProducerRecoveryTest's revoke-path fence test is retargeted to the served-commit shape: the fence
  now fires on the control thread inside the served pass, the callback returns promptly on the failed
  pass, nothing is stranded, and the replacement is built. Its wake assertion is gone with the wake.

What is red, on purpose: Revoke857TransactionalWaitProbeIT, 5/5, with the callback at 19.2s of a 20s
in-flight dwell against its 10s poll-interval budget - and never the 79s starvation the spin
produced. That is the measurement of #466's bound, and it is this PR's remaining acceptance
test, not a broken instrument. What is now dead main code, held for the owner's call: the three
ProducerManager revocation lock helpers and the DeclineCountingProducerManager instrument, which
count a decline the transactional path no longer makes.

Verified: ProducerRecoveryTest, ProducerManagerTest, ProducerManagerDetectionTest, ArchitectureTest
and the convention rules, PartitionStateAbortedTransactionReplayTest, TransactionalClaimCoverageTest;
RebalanceEoSDeadlockTest 5/5, ProducerFencingRecoveryIT 2/2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVL2FEJ645T76PbybEBUZ6
astubbs added a commit that referenced this pull request Sep 8, 2026
…3-bound-transactional-revoke-wait

The base this PR is stacked on moved again - its own master merge and a re-cut into five rungs -
and GitHub reads the PR against that base. Four conflicts: the infer ratchet takes #410's
one new entry (the lane is the judge); the revoke-drain note takes master's retirement into
docs/solutions; the flake ledger's rows were identical on both sides; the transactional claim
register keeps master's newer wording of the same scope note ahead of #410's C15.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVL2FEJ645T76PbybEBUZ6
astubbs added a commit that referenced this pull request Sep 8, 2026
 and #473

Two conflicts. PartitionState: #470 counts an async commit as committed only when the
broker answers the latest offer, and #410's ledger trims on commit success; joined so the
ledger snapshots before the offer is made and is trimmed only on the answer to that offer - a stale
answer to an older offer leaves the newer snapshot in place, so a replay can only over-replay, never
under. The flake ledger takes master's updated rows and #473's retirement of the section it
fixed, and keeps this branch's three later sightings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVL2FEJ645T76PbybEBUZ6
astubbs added a commit that referenced this pull request Sep 8, 2026
, #481, #482, #485

Two conflicts, and one silent auto-merge artefact that only the compiler found.

PartitionState. #469 replaced the pair of booleans with a version counter, deleting
stateChangedSinceCommitStart; #410's ledger snapshots at the same point. Joined by taking
master's counter whole - the single completionCount load, tested and stashed as
completionCountBeingCommitted - and moving the ledger's snapshotForCommit() inside that same branch,
still ahead of createOffsetAndMetadata(), so the ledger is still snapshotted before the offer is made
and trimmed only on the answer to that offer.

The artefact: restoreCompletedButUncommittedWork() still called setDirty(), which #469
deleted, and git merged both sides clean because neither touched the other's lines. It is
recordCompletion() now - the replay has moved the partition's state on, so it stamps a new version
and isDirty() derives the rest. PartitionStateAbortedTransactionReplayTest 7/7 and
PartitionStateCommitWindowSeamTest 3/3 cover the join.

The flake ledger takes both sides' rows and master's retirement of the simpleBatchTest section, which
#482 fixed - expectation-versus-input, not the library.

config/infer-known-findings.txt takes master's version whole. The
"1 NULLPTR_DEREFERENCE AbstractParallelEoSStreamProcessor.processWorkCompleteMailBox" line this
branch carried was a merge artefact: #346 added it, #466 retired it in the same change
that reshaped the mailbox loop, and an earlier merge here re-took #410's older side. The
static lane was red on it. Re-ran infer locally on the merged tree - 9 findings, all known, none new.

Verified: ProducerManagerTest 22/22, ProducerRecoveryTest 15/15, the PartitionState family, the
RetryQueue family, WorkManagerTest, ArchitectureTest, TestConventionsArchTest,
TransactionalClaimCoverageTest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
astubbs and others added 2 commits September 9, 2026 04:02
…producer-fencing-brainstorm

Brings the ledger rung's merge of #472, and with it the master that
rung merged: the review fix on #472, the commit-window redesign
(#469, #470), the revoke commit handed to the control thread
(#466), and the grooming sweep (#476). Resolved by hand:

- maybeAcquireCommitLock: master's revoke-commit override and this
  branch's replacement guard compose. A periodic commit waits out a
  replacement; a revoke commit is answered regardless, since its request
  was taken for the pass, and while no producer exists it completes with
  nothing committed - consistent, because the aborted transaction
  published nothing and no offset was committed, so the next owner
  reprocesses. controlLoopPass says so at WARN when it happens.
- The branch's own assertOnControlThread helper is dropped for master's,
  which has the same contract.
- PCModule.replacementProducerWrap keeps #472's javadoc on why only
  the replacement build runs as user code, with this rung's sentence that
  ProducerRecovery builds through it.
- TransactionalClaim: master's settled scope note on the revoke-path claim
  and this branch's C15 recovery claim both stand.
- The flake ledger takes master's table, which retired the entries whose
  tests master fixed or quarantined since, and keeps this branch's one
  sighting master never had (TransactionTimeoutsTest's long arm).
- Two notes the grooming sweep retired are accepted as deleted; the plan's
  citation of one now points at the history that holds it.
- The stack note keeps this branch's heading and impact and takes master's
  vetting record, attested post-merge-correct.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
…add today's

The merge of the ledger rung took master's flake table, and master never
carried the LoadFactorCeilingReportingTest row: every sighting of that
capture leak is local to this stack, so taking master's table dropped the
row and its section rather than superseding them. Both are restored as
they were, with a sixth sighting from today's full core run on the merged
tree - the same captured-line shape, passing alone.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

🧪🔒 Quarantine Lane Report

The quarantine lane is empty - no @Quarantined tests remain, so none ran.

Any earlier row on this PR asking for a @Quarantined annotation or a docs/quarantined-tests.md
entry to be deleted is withdrawn - there is nothing left to delete. A merge-blocking review
thread, if one was opened for that row, still has to be resolved by hand.

Lane: non-gating; rules: see the Quarantine Audit check.

No quarantined test changed outcome since the previous push.

Updated for 35e7f6b · run 34319353802 · 2026-09-09 06:30 UTC

var fenced = new ProducerFencedException("fenced by another producer with the same transactionalId");
doThrow(fenced).when(wrapper).sendOffsetsToTransaction(anyMap(), any(ConsumerGroupMetadata.class));
var manager = managerThatCanRecover();
assertThat(manager.canRecover()).isTrue();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Duplicate code detected - 9 lines duplicated with parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerDetectionTest.java:81

astubbs and others added 5 commits September 9, 2026 04:21
…producer-fencing-brainstorm

Brings master as of #496 up through the stack, for the CVE exclusion
(#493) and the scan split (#489) that turned the required
check red on every rung. Two docs conflicts, resolved by hand:

- The flake ledger keeps every row: master's updated
  ManagedPCInstanceLifecycleTest count and this branch's three rows master
  never carried.
- docs/refactoring.md: master added a bullet asking this branch to swap
  its replay loop to register-then-publish when it lands. The swap is
  already on this branch (c0a1ef3, pinned by the completion-on-publish
  case in PartitionStateAbortedTransactionReplayTest), so the bullet is
  retired here rather than carried to master as a stale instruction. The
  two bullets beside it stand.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
…producer-fencing-brainstorm

# Conflicts:
#	docs/inflight/test-untracked-ci-flakes.md
…ke, on the recovery rung

The Integration Tests lane failed once at 6ff294e on the fourth repetition
of ManagedPCInstanceLifecycleTest's rapid-toggle case. The head differs from
the passing one before it by a docs commit, the rung above passed with the
same code, and the arm runs the default consumer-commit mode, which none of
this stack's transactional-mode code touches. Both sightings today came in
the hour every lane of the stack was pushed at once to one runner - the load
the test's fixed sleep is already recorded as not tolerating. Recorded as a
sighting; nothing is retried.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
… the recovery rung, seed recorded

Chaos Pain Suite 4/4 failed once at a8768a1 on the churn storm's outer
Awaitility wait, with zero gating violations and lag-stagnation
observations on every partition - the signature the note's 2026-09-08
entry names and the per-shard-liveness note owns. The head differs from
the passing one before it by a docs commit, and the rung above passed the
shard on the same code; the runner was saturated at the time. The seed is
recorded before the log expires; nothing is replayed or retried.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
…ard's next run, seed recorded

Chaos Pain Suite 4/4 failed again on the next head of the recovery rung,
which differs from the previous one by the sighting it records and nothing
else. This time the churn storm tripped the ZOMBIE_MEMBER/REBALANCE_BLOCKED
arm, 747ms over its 15s bound with no member stalled holding work - the
2026-09-07 sighting's shape. The rung above passed the shard four times on
the same code in the same window, on a saturated runner. Seed recorded
before the log expires; a quiet-runner replay is owed and named.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
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.

Producer fencing kills the instance; it should abort and rejoin, like Kafka Streams' TaskMigratedException

1 participant