Skip to content

refactor(core): run the infer-annotation experiments - two confinement declarations, and a measurement of the rest - #433

Merged
astubbs merged 12 commits into
masterfrom
feat/infer-annotation-sweep
Sep 7, 2026
Merged

astubbs merged 12 commits into
masterfrom
feat/infer-annotation-sweep

Conversation

@astubbs

@astubbs astubbs commented Sep 3, 2026 •

Copy link
Copy Markdown
Owner

Description

The infer lane (bin/infer-test.sh) runs RacerD, pulse and starvation over core main code and gates
on an identity ratchet - and every one of those checkers reads annotations from
com.facebook.infer.annotation, a jar that was not on the compile classpath at all. So the analysis
has been running on what it could infer and nothing the code declared. This PR puts the jar
there, writes the two declarations the code turns out to justify, and measures the rest of the jar
so the next reader does not re-derive the list.

Every verdict here was measured - annotation applied, bin/infer-test.sh re-run, report read -
not reasoned about from Infer's documentation.

Result: the ratchet goes from 17 findings to 11, and every THREAD_SAFETY_VIOLATION in it is
retired.
What remains is the pulse null-deref group, which
docs/inflight/core-stale-arrival-guard-needs-a-null-safety-decision.md owns, and one integer
overflow.

Two @ThreadConfined candidates, and they came out opposite ways

RetryQueueIterator - confined, and the lock discipline already required it. Four known
identities were one boolean, closed, read by hasNext()/next() and written by close()
unsynchronised. RetryQueue.iterator() takes the queue's READ LOCK on the calling thread and
close() releases it, and a ReentrantReadWriteLock read lock may only be released by its holder -
so an iterator that escaped to another thread could never be closed there at all: the unlock throws
IllegalMonitorStateException and strands the read lock, blocking every writer for the life of the
process. @ThreadConfined(ANY) says so, assertOnOwningThread asserts it, and the four identities
come out of the ratchet.

lastCommitTime - NOT confined, and every record of it said otherwise. This row of the infer
register and docs/refactoring.md both had it written by one control-thread method and read by
another, which made confining it look like a free retirement of two more identities.
tryCommitOffsetsOnRevoke() writes it too, from inside onPartitionsRevoked, which the broker
poll thread runs - as that method's own comment says two lines further down. Grepping every
writer was all it took. @ThreadConfined(CONTROL_THREAD) would have been a false declaration, and
RacerD consumes declarations without checking them: it would have believed it and gone quiet over a
real race. The field is volatile instead.

What it changes for a user: nothing observable. The control thread could miss a commit the poll
thread had just made on the revoke path and commit again immediately - a redundant commit, not a
wrong one. Worth fixing because it is a cross-thread field on the commit-timing path in a repo that
tracks commit-timeout flakes, and because the alternative was to declare it confined and stop
looking.

@ThreadSafe - measured, triaged, deliberately not adopted

RacerD infers thread-safety intent from lock use, so a class that shares state without locks is
silent rather than clean. Applied to WorkManager, ShardManager, ProcessingShard,
ConsumerManager, BrokerPollSystem, ProducerManager and PCMetrics together, the lane's finding
count went up roughly tenfold. Two concrete blockers:

  • Over half the new findings are INTERFACE_NOT_THREAD_SAFE, naming org.slf4j.Logger and
    micrometer's Meter - both thread-safe, neither annotated, neither ours to annotate. Every log
    call site in an annotated class is one finding.
    The lever is Infer's --disable-issue-type,
    which is a change to a hosted CI lane's checker set with its own review surface.
  • The largest remaining group is every non-private ShardManager method reading processingShards
    "racing with the write in setProcessingShards" - a package-private setter that exists for tests
    and whose production callers ShardMapIsNeverReplacedArchTest already forbids. RacerD cannot see
    an ArchUnit rule, so the group is right about the seam and wrong about the code.

Group-by-group triage is in the note. Two worth naming: RacerD independently refinds
ConsumerManager.commitRequested, the wakeup counters and BrokerPollSystem.longPollTimeout - all
already in docs/refactoring.md via SpotBugs, so corroboration rather than new ground - and
ConsumerManager.closeInProgressSignal is the @Initializer case in the flesh, a false positive
that exists only because the annotation is on.

@Lockless sees the monitor the ArchUnit rule cannot, and that was not planned

clearCommitCommand() carries a cleared suspicion dated 2026-08-31 whose last paragraph says no
gate protects the invariant
, because ArchitectureTest.rebalanceCallbacksMustNotBlock matches
method calls and a synchronized block is a MONITORENTER it cannot see. Measured: @Lockless on
onPartitionsRevoked reports exactly that monitor, by name, through exactly that method - and does
NOT report commitLock.tryLock(), so it agrees with this repo's decline-rather-than-wait rule.

Still not adopted, and the reason is recorded rather than left implicit: the monitor it reports is
one the design deliberately keeps, so annotating the callback leaves a violation standing whether the
invariant holds or not - the same complaint the cleared suspicion makes of the ArchUnit rule. What it
is good for is a query: it is the only thing here that can enumerate the monitors a rebalance
callback reaches, which has now been done by hand twice (that suspicion, and the
PCMetrics.removeMeter monitor #431 found on the same path and left alone).
The javadoc is amended in place with a dated paragraph rather than rewritten - the 2026-08-31
conclusion is unchanged, only what is now known about checking it again.

@NonBlocking, on the same method over the same Thread.sleep(100), reported nothing.

How it is proven

  • The ratchet, both directions. config/infer-known-findings.txt fails on a new identity AND on
    one that stopped firing, so each retirement is made in the same commit as its change. The
    register's own warning - a retirement is not by itself evidence of a fix - was honoured: the code
    behind each identity was read before its line came out.
  • Non-vacuity arm, run on this tree. With the three assertOnOwningThread calls commented out,
    three of RetryQueueIteratorConfinementTest's five cases go red, and the close case fails as
    IllegalMonitorStateException rather than IllegalStateException - the stranded-lock failure the
    guard exists to replace, observed rather than argued.
  • A modifier tripwire for the volatile. LastCommitTimeFenceTest follows
    PartitionStateDirtyFlagFenceTest. No functional test can see that race - its effect is an extra
    commit - so without a tripwire an unrelated refactor drops the keyword and nothing goes red.
  • Full unit suite BUILD SUCCESS across all modules. bin/check-all.sh: 16 passed, 0 failed. Infer
    lane green, all findings known, none new. Infer v1.3.0, JDK 17.

Test fixture, extracted rather than copied

Every confinement test needs a second thread it can name, and ThreadConfinedConsumerTestBase's
javadoc already records that two hand-rolled copies of that fixture had drifted - only one unwrapped
the ExecutionException, so an assertion failing over there surfaced here as a wrapper naming
neither the assertion nor the thread. The new test is in another package and would have been the
third, so the thread half is now ForeignThread and that base delegates to it. It adds catching,
which returns what the action threw instead of rethrowing, because for a confinement test the refusal
IS the assertion. Registered in docs/testing.md.

Relationship to the two PRs beside it

#410 - this PR was stacked on it and no longer is. That PR also adds the
infer-annotation dependency and a @ThreadConfined rule section, for its own recovery pass. This
PR now carries both independently, written for what exists on master (ThreadConfined.ANY and
assertOnOwningThread, not the named-thread variant that arrives with the recovery pass). Whichever
merges second will conflict in pom.xml and in the engine's AGENTS.md, and both are one-hunk
resolutions.

One thing must not be resolved mechanically: #410 carries
docs/inflight/static-infer-annotations-are-mostly-unused.md, the survey note that asked for this
work. It is superseded by
docs/inflight/static-infer-threadsafe-is-blocked-by-third-party-interfaces.md here, which is that
note rewritten around the one question the survey left open. If #410 merges
after this PR without dropping it, master ends up with both - a stale note describing work that is
done, beside the note that says so. Flagged on that PR too, so the pointer exists from both sides.

#431 is open on RetryQueue and on rebalanceCallbacksMustNotBlock, and
reaches that rule from the opposite side: it closes the rule's method-reference blind spot and
deletes six KNOWN_BLOCKING_VIOLATIONS, while the @Lockless measurement here is about the
MONITORENTER one, which widening the walk cannot reach. Neither makes the other wrong.
docs/inflight/static-archunit-main-code-rules.md enumerates that rule's blind spots and names
neither; #431 was rewriting that file concurrently, so the entry is left for
whoever touches it next rather than written into a conflict - stated in the note so it reads as a
decision rather than an omission.

Where the records went

  • parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/AGENTS.md gains two sections:
    "Declare thread confinement with @ThreadConfined, and assert it at the entry point" - including
    check the premise before you write it, which is the lastCommitTime lesson - and "Which of
    Infer's annotations this repo uses, and which it does not". @Initializer, @Functional and
    @SynchronizedCollection are on the second as not-yet-writable, with the reason: all three exist
    to suppress a report, and none of those reports is raised on an unannotated class.
  • docs/refactoring.md: the lastCommitTime entry is deleted (fixed, and what outlives it is in the
    register and the field's javadoc); RetryQueue.closed STAYS on the SpotBugs list, relabelled as a
    false positive that must not be "fixed" with volatile - SpotBugs reads no confinement annotation
    and will keep reporting it. That finding is baselined, so nothing goes red either way.
  • The measured counts are deliberately not written into the note - they are a command's answer, the
    reproduce line is there instead, and the first draft's numbers were stale before it was committed.

Added since the first review, and why the diff touches two files the summary above does not

  • docs/inflight/test-untracked-ci-flakes.md - CI went red on
    RegistrationRaceStaleResidentIT, which fails its saturation/pause-point setup guard rather than
    the Replace the existing stale container when adding work container confluentinc/parallel-consumer#909 assertion it exists for. Recorded rather than re-run silently, because this
    sighting carries something the earlier ones could not: this branch ran the same content twice,
    passing at 01fb0c4 and failing at 53ef4d6
    , so the same tree produced both outcomes. Every
    earlier sighting was on a different branch and so could not separate branch content from the test.
    Attribution was checked, not assumed: the confinement guard added here has exactly one production
    caller chain, control-thread-confined inside a single method, and is not on the registration path
    this test drives.
  • docs/refactoring.md - the defect-class sweep AGENTS.md requires before a fix merges, with
    its result. One more instance of the confined-object shape found and recorded rather than
    fixed
    : ProducerManager.ProducingLock wraps a read lock taken in one method and released by
    whoever calls its unlock(). The recipe is the one this PR establishes, but applying it blind
    would repeat the lastCommitTime mistake - the premise (acquirer is always releaser) has to be
    established first. For the other fix's shape, numberOfAssignedPartitions is the only other field
    written by the rebalance callbacks, and it is already tracked in that file.
  • Master merged (fix(jstream)! astubbs#122: the result stream waits for results instead of ending on an empty queue #116 jstream, feat(inflight): docs context query - divergence header at read time, keyword injection, inflight docs #419
    docs-context-query). One conflict, on the registration-race row both sides had just edited;
    resolved keeping both controls and master's new AmbientProbeExtensionTest row rather than taking
    either side whole.

Also since the first review

  • RetryQueueTestBase / ForeignThread ownership - the duplication report flagged two things
    this branch had introduced, and both are fixed. RetryQueueIteratorConfinementTest carried a
    verbatim copy of RetryQueueTest's fixture (constants, module, queue, workFor, differing only in
    the topic literal), which is the parallel copy AGENTS.md forbids; both suites now extend one base.
    And the foreign-thread drift incident was told in full in two javadocs, so ForeignThread owns it
    now and the base cross-references. Two other flagged pairs were declined with reasons in the
    commit: the two fence tests share one three-line Truth assertion whose value is its message, and
    the RetryQueueLincheckTest/RetryQueueTest pair predates this branch.
  • Master merged four times, latest carrying fix(core): the claim register refuses to certify a run whose filters deselected its proofs #443's landing. The recurring
    conflict is one row of the flake ledger, and the last one was the subtlest: both sides read
    "12 seen" while counting different seventh sightings, so taking either side whole would have
    looked like a no-op and dropped a real one. Resolved as a union each time, keeping master's
    stronger by-construction control alongside this branch's within-branch one.

Checklist

  • Docs updated - the engine's AGENTS.md, docs/testing.md, docs/refactoring.md, the infer
    register, the new note, and dated javadoc at every changed site
  • User-facing feature documentation data added under docs/features/ - N/A - internal concurrency declarations and static-analysis records; no user-facing option or behaviour changes
  • Tests added/updated - RetryQueueIteratorConfinementTest (5), LastCommitTimeFenceTest,
    ForeignThread extracted and ThreadConfinedConsumerTestBase moved onto it
  • docs/inflight/ working note (pr-/branch-) started at the PR's first commit - N/A - an in-flight note is the SUBJECT of this PR rather than a working note about it, and there is nothing about the branch itself that gh cannot show
  • Title & body reflect the final content of this PR
  • Ran ce-simplify and ce-code-review locally - N/A - asked for @claude review this on the PR instead: it is the only route that can open the inline threads that mechanically block a merge here, and the diff is small enough that the expensive local pass buys little over it

🤖 Generated with Claude Code

https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM

@github-actions

github-actions Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Dependency Review

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

OpenSSF Scorecard

PackageVersionScoreDetails
maven/com.facebook.infer.annotation:infer-annotation 0.18.0 🟢 4.5
Details
CheckScoreReason
Code-Review🟢 9Found 16/17 approved changesets -- score normalized to 9
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Packaging⚠️ -1packaging workflow not detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Fuzzing⚠️ 0project is not fuzzed
Security-Policy🟢 9security policy file detected
Binary-Artifacts⚠️ 0binaries present in source code
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0

Scanned Files

  • pom.xml

@astubbs

astubbs commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Steer, if useful: the load-bearing claims are (1) that RetryQueueIterator really is confined - the argument is that ReentrantReadWriteLock read locks can only be released by their holder, so an escaped iterator could never close - and (2) that lastCommitTime is genuinely written from the poll thread via tryCommitOffsetsOnRevoke, which is what makes volatile the fix and a confinement declaration wrong. Both retire ratchet identities, so a wrong reading there quietly removes a real finding.

@claude

claude Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

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


Review: both load-bearing claims verified

  • Read PR body, commits, and inflight notes
  • Verify claim 1: RetryQueueIterator confinement
  • Verify claim 2: lastCommitTime written from poll thread via tryCommitOffsetsOnRevoke
  • Non-vacuity check: ran RetryQueueIteratorConfinementTest with the guards disabled
  • Spot-check the rest of the diff (docs, AGENTS.md, ratchet file)
  • Post final review

Claim 1 - RetryQueueIterator confinement. Confirmed by reading RetryQueue.java: iterator() takes lock.readLock().lock() on the calling thread (state/RetryQueue.java:111), and the iterator's close() is the only path that unlocks it (state/RetryQueue.java:345). ReentrantReadWriteLock.ReadLock.unlock() does throw IllegalMonitorStateException when called by a thread that doesn't hold the lock - so an escaped iterator genuinely could never be closed by anyone but its opener. The argument is sound, not just plausible.

I also reproduced the non-vacuity claim live rather than taking the PR body's word for it: built the reactor, temporarily commented out all three assertOnOwningThread calls, and reran RetryQueueIteratorConfinementTest. Result matched the PR body exactly - 3 of 5 cases go red, and closeFromAnotherThreadIsRefusedAndLeavesTheLockWithItsOwner fails as

java.lang.IllegalMonitorStateException: attempt to unlock read lock, not locked by current thread

rather than the expected IllegalStateException - i.e. the stranded-lock failure the guard exists to prevent, observed directly rather than argued. Reverted the temp edit afterward; working tree is clean.

Claim 2 - lastCommitTime crosses the poll thread. Confirmed: tryCommitOffsetsOnRevoke() (internal/AbstractParallelEoSStreamProcessor.java:683-695) writes lastCommitTime, and it's called from onPartitionsRevoked (line 655), which is the ConsumerRebalanceListener callback - invoked synchronously on whatever thread calls consumer.poll(), i.e. the broker-poll thread, not the control thread. So a @ThreadConfined(CONTROL_THREAD) declaration would indeed have been false, and RacerD (which consumes but doesn't check the annotation) would have gone quiet over a real cross-thread field. volatile is the right fix given both writes are already under commitLock and only the read in isTimeToCommitNow() is unguarded.

Everything else checked out:

  • config/infer-known-findings.txt now has 11 entries, none THREAD_SAFETY_VIOLATION - matches "ratchet goes from 17 to 11, every THREAD_SAFETY_VIOLATION retired."
  • docs/inflight/static-infer-findings.md, the rewritten static-infer-threadsafe-is-blocked-by-third-party-interfaces.md, docs/refactoring.md, and the engine AGENTS.md's new "Which of Infer's annotations this repo uses" section are all internally consistent with each other and with the two commits (0ddcde64a, f5d1b4a69) - no drift between the prose and the code found.
  • ForeignThread/ThreadConfinedConsumerTestBase extraction is clean: run() rethrows, catching() returns the cause, both correctly unwrap ExecutionException - exactly the drift the javadoc says two earlier copies had.
  • The RetryQueue.closed SpotBugs entry is correctly relabelled as a permanent false positive rather than "fixed" with volatile, which would have reintroduced a sharing that doesn't exist.

Minor observations, non-blocking:

  • The @Lockless/@ThreadSafe triage in the new inflight note is honest about what's not being adopted and why (third-party interface noise, a test-only seam) - good discipline against just landing the annotation for the ratchet number's sake.
  • Whole-reactor build (./mvnw clean install -DskipTests) succeeded clean on this branch, consistent with the PR's reported BUILD SUCCESS.

No correctness issues found. The two "load-bearing" claims the author asked me to scrutinize both hold up under independent verification, including one of them under direct reproduction of the negative-control test run.

@github-actions

github-actions Bot commented Sep 3, 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 26 26 ➖ 0
Duplicated lines 857 857 ➖ 0
Duplication 0.38% 0.38% ➖ 0
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.38%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

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

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Sep 3, 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/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateDirtyFlagFenceTest.java 40.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java 35.5

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java 34.2 34.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 54.8 54.9 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.8 47.9 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.6 33.8 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.3 38.5 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.9 41.0 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 33.0 33.2 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.0 41.1 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 42.9 43.0 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 55.0 55.1 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.6 32.8 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 40.1 40.2 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 51.8 51.9 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 34.0 34.1 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 31.8 31.9 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 31.1 31.2 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 33.2 33.3 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 37.0 37.1 +0.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java 33.6 33.7 +0.1
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.8 41.8 +0.1

...and 94 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.6
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 34.68
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.44
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 36.6
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 55.17 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 38.6
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.44
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 55.17 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 36.6
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 34.68
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 55.62 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.07
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.2
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/ParallelEoSStreamProcessor.java 55.07 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 54.94 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 43.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 41.02
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 33.18
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 31.17
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.94 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.93
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.46
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.8
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.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 30.97
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 55.62 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 46.89
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.41
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 55.07 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 51.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 47.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 40.21
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 34.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 33.34
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.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 41.02
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 38.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 38.46
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 46.02
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 40.44
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 36.16
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 30.62
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 46.02
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 41.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 39.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 35.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 35.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 34.16
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java 32.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 31.87
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 30.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 30.35
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 35.89
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerPauseCacheTest.java 30.17
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 31.87
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.26
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 41.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 39.32
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 35.27
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java 30.39
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.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 47.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 46.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java 37.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 36.33
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.44
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 37.02
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/ParallelEoSStreamProcessor.java 33.34
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.17
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleCollaboratorOwnershipTest.java 30.5
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/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 34.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.16
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 30.62
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.56
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 36.01
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 33.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 30.97
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 41.19
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 30.77
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.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.22
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 37.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 32.09
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 36.79
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.33
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 47.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 44.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 32.73
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.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 44.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.07
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 37.86
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 31.05
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 36.79
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 58.02 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 33.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.2
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 58.02 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 32.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.93
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 50.22 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 37.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 32.09
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 50.22 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 37.06
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 32.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 32.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.35
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.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 32.25
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/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 38.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 36.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 35.14
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 34.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 32.54
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 36.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 34.88
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 31.88
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 49.87
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 37.55
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 32.54
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.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 35.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 35.14
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 34.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 32.1
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.36
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.22 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 45.48
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 33.37
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 33.37
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.38 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 45.48
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.19
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 33.75
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 46.39
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java 36.75
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java 32.62
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 31.28
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 46.39
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 35.4
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 33.16
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 35.74
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 33.16
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 31.28
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 36.75
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 32.62
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.22 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 53.38 ⚠️
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 36.37
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.62
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 40.76
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 37.39
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.88
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.99
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 30.15
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.19
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 42.62
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 39.07
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.7 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 43.19
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 37.39
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.92
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.69
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.94
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.69
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.94
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.99
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.7 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 40.76
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 39.07
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 33.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 33.88
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 31.6
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.22 ⚠️
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.22 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java 30.53
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/ChaosScenarioBase.java 31.6
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 30.15
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 37.29
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 31.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 30.5
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 44.66
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 40.02
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.66
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 32.81
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 30.66
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.5 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 50.7 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 44.52
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java 30.5
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.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/JStreamLiveResultStreamTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java 30.28
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 35.24
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 35.24
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 44.19
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 44.19
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 32.81
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.45
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 32.17
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 32.17
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 31.83
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 40.02
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 30.55
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 44.66
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 30.55
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 35.48
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 35.48
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.29 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.91 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.91 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.05 ⚠️
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 35.4
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 33.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 33.26
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.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerPauseCacheTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 30.17
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 33.71
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 41.3
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.97
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.26
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 35.67
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java 30.77
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleCollaboratorOwnershipTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.5
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 45.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 40.44
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 32.86
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 36.38
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 32.86
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 45.09
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 36.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 36.16
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 35.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 34.57
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 33.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.6
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 41.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 37.29
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 40.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.18
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.07
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.45
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.87 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 45.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 37.55
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 36.01
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.56
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/JStreamLiveResultStreamTest.java 30.28
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.36
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 33.12
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 41.19
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 35.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataTest.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataTest.java 30.38
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.03
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.15
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.15
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.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java 30.03
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 30.18
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 44.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 36.6
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 44.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java 40.02
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 30.29
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 40.02
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.97
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 32.46
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 30.29
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.95
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.94 ⚠️
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.94 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 36.6
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 40.26
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 34.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 31.81
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 40.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 32.46
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 31.34
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 30.18
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/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java 31.84
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.95
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 33.71
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.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 31.88
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 31.81
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.87 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 54.42 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 49.87
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.34
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/ShardManagerRevokeSweepNpeTest.java 31.84
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 54.42 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 45.65
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.25
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.25
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.75
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.6
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 35.13
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.82 ⚠️
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 82.05 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.32 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 76.44 ⚠️
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.6
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.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java 35.75
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.82
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.82 ⚠️
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 82.05 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.32 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 76.44 ⚠️
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.93 ⚠️
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.53 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.23 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.82 ⚠️
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.82
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 35.13
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 42.27
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.39 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.7 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 48.3
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.14
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.51 ⚠️
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.91 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.14 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.77 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.97 ⚠️
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 42.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 30.39
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.39 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 52.5 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.98
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.14
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.51 ⚠️
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-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.91 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.14 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.77 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.44 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.97 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.97 ⚠️
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-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 43.02
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 38.0
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 37.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 34.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 33.8
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.29
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 41.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.75
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 40.4
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 35.27
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.29
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 40.4
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 38.0
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.37
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.19
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.29 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.14 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.14 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.79 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.32 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.32 ⚠️
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 49.98
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 48.3
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 44.52

@github-actions

github-actions Bot commented Sep 3, 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

🔴 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.

Updated for 01fb0c4 · run 33727251236 · 2026-09-03 07:22 UTC

Superseded by a newer quarantine lane report.

@codecov

codecov Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (master@cc36b64). Learn more about missing BASE report.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff            @@
##             master     #433   +/-   ##
=========================================
  Coverage          ?   82.30%           
  Complexity        ?     1470           
=========================================
  Files             ?       95           
  Lines             ?     5142           
  Branches          ?      501           
=========================================
  Hits              ?     4232           
  Misses            ?      712           
  Partials          ?      198           
Flag Coverage Δ
chaos 52.60% <55.55%> (?)
integration 61.68% <66.66%> (?)
performance 52.34% <55.55%> (?)
unit 78.21% <100.00%> (?)

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

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

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

@github-actions

github-actions Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

⚠️ SpotBugs Report

333 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 4d89369 · run 34067548710 · 2026-09-06 23:47 UTC

@github-actions

github-actions Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

🟢 Throughput — OK

This branch measured about 3% faster than master, on the one test this measures. That is INSIDE this test's own run-to-run spread of about 17%, so read it as a reading and not as a result - re-running the same commit moves it by about as much.

What Value Meaning
Compared with master 1.034 above 1.00 is faster, below is slower
Subject test took 52.1s the test under measurement
Control tests took 33.5s the other tests in this same run
Subject ÷ controls, here 1.557 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.609 median of recent master runs
Reported rate 70450 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.400 – 1.739.

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: cc36b64, 1941cdf, 05c02bb, 5706686, c668acb, fb5ea93, 6573781, c30aaee, ca9c21b, 77fbba8

Since the previous push: ratio 1.017 -> 1.034, share 1.583 -> 1.557, rate 77335 -> 70450 (-8.9%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for 4d89369 · run 34067548710 · 2026-09-06 23:48 UTC

astubbs and others added 3 commits September 3, 2026 10:51
… so declare it and assert it

The infer lane (`bin/infer-test.sh`) runs RacerD, pulse and starvation over core main code and
gates on an identity ratchet, and every one of those checkers reads annotations from
`com.facebook.infer.annotation` - a jar that was not on the compile classpath at all. So the
analysis ran on what it could *infer* and nothing the code *declared*. This puts it there
(`provided`, CLASS-retention, same reasoning as the Error Prone annotations beside it) and writes
the first declaration.

Four of the ratchet's known `THREAD_SAFETY_VIOLATION` identities are one boolean,
`RetryQueueIterator.closed`, read by `hasNext()`/`next()` and written by `close()` with no
synchronisation. They are confined, and not by convention: `RetryQueue.iterator()` takes the
queue's READ LOCK on the calling thread and `close()` releases it, and a `ReentrantReadWriteLock`
read lock may only be released by its holder. An iterator that escaped to another thread could
therefore never be closed there at all - the unlock throws `IllegalMonitorStateException` and
strands the read lock, blocking every writer for the life of the process. The lock discipline
already required the confinement; nothing said so, so RacerD had no way to know.

WHAT CHANGES

- `@ThreadConfined(ThreadConfined.ANY)` on `RetryQueueIterator` - ANY rather than a named thread
  because which one it is varies by caller, and the invariant is that it is only ever the one.
- `assertOnOwningThread`, the runtime half. An annotation nobody enforces is a comment that
  silences a detector, which is worse than no annotation: RacerD believes it and stops looking. It
  runs BEFORE the closed check in all three methods - a foreign thread reading `closed` is exactly
  the unsynchronised read the declaration promises cannot happen, so answering it, even to refuse,
  would honour the wrong contract first.
- The engine's `AGENTS.md` gains the rule: declare confinement, assert it at the entry point, and
  check the premise before writing either.
- The four identities are deleted from `config/infer-known-findings.txt` in this commit, which is
  the ratchet's contract.

HOW IT IS PROVEN, both directions

- `RetryQueueIteratorConfinementTest`, five cases. The decisive one is the foreign `close()`: it
  must be refused BEFORE the unlock so the read lock stays with its owner, which the test asserts
  positively by then taking the WRITE lock from another thread - a still-held read lock makes that
  hang rather than fail, and `ForeignThread.catching` reports the timeout naming the fixture
  rather than returning "nothing was thrown".
- Non-vacuity arm, run: with the three `assertOnOwningThread` calls commented out, three of the
  five go red, and the close case fails as `IllegalMonitorStateException` rather than the expected
  `IllegalStateException` - the stranded-lock failure the guard exists to replace, observed rather
  than argued.
- `bin/infer-test.sh` (Infer v1.3.0, JDK 17): the four `RetryQueue$RetryQueueIterator` identities
  no longer fire. The register's own warning applies and was honoured - a retirement is not
  evidence of a fix, so the code was read before the lines came out.

TEST FIXTURE, EXTRACTED RATHER THAN COPIED

Every confinement test needs a second thread it can name, and `ThreadConfinedConsumerTestBase`'s
javadoc already records that two hand-rolled copies of that fixture had drifted - only one
unwrapped the `ExecutionException`, so an assertion failing over there surfaced here as a wrapper
naming neither the assertion nor the thread. This test is in another package and would have been
the third, so the thread half is now `ForeignThread` and that base delegates to it. It adds
`catching`, which returns what the action threw instead of rethrowing, because for a confinement
test the refusal IS the assertion.

WHAT THIS DOES NOT FIX, and is now wrong on purpose

SpotBugs reports `AT_STALE_THREAD_WRITE_OF_PRIMITIVE` on the same field and reads no confinement
annotation, so it will keep reporting it. `docs/refactoring.md` now says so and says not to "fix"
it with `volatile`, which would assert a sharing that does not exist. The finding is baselined, so
nothing goes red either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
…and not confined

The second candidate for a `@ThreadConfined` declaration, and it came out the other way - which is
the more useful of the two outcomes, because the value was in checking the premise.

Every record of this field said it was written by `commitOffsetsThatAreReady()` and read by
`isTimeToCommitNow()`, both control-thread methods, which made confining it look like a free
retirement of two known `THREAD_SAFETY_VIOLATION` identities. `tryCommitOffsetsOnRevoke()` writes
it too, from inside `onPartitionsRevoked` - which the broker POLL thread runs, as that method's own
comment says two lines further down ("this runs inside the poll thread's rebalance callback").
Grepping every writer of the field is all it took to see it.

So the field is genuinely shared across the two threads this engine's defects are all about, and
`@ThreadConfined(CONTROL_THREAD)` would have been a FALSE declaration - one RacerD consumes and
does not check, so it would have believed it and gone quiet over a real race.

WHAT CHANGES

- `lastCommitTime` is `volatile`. Both writes are under `commitLock`; the read in
  `isTimeToCommitNow()` is not, so the modifier is the only happens-before edge available without
  moving the read under the lock. Same shape and same fix as `lastWorkRequestWasFulfilled`
  (#201) and `failureReason`.
- The field's javadoc carries the poll-thread writer by name, because the reading every record got
  wrong is the one the next person will form too.
- Both identities are deleted from `config/infer-known-findings.txt` in this commit.
- `docs/refactoring.md`'s entry is deleted rather than edited: the finding it staged is now fixed,
  and what outlives it - which writer, which thread, why not confined - is in the register row and
  the field's own javadoc.

WHAT IT MEANS FOR A USER

Nothing observable. The control thread could miss a commit the poll thread had just made on the
revoke path and commit again immediately - a redundant commit, not a wrong one. Worth fixing anyway
because it is a cross-thread field on the commit-timing path in a repo that tracks commit-timeout
flakes, and because the alternative was to declare it confined and stop looking.

HOW IT IS PROVEN

- `bin/infer-test.sh` (Infer v1.3.0, JDK 17): the `controlLoop` and `isTimeToCommitNow` identities
  no longer fire. The register's warning that a retirement is not evidence of a fix applies, and the
  code was read before the lines came out - the modifier establishes the edge, it does not merely
  hide the report.
- `LastCommitTimeFenceTest` pins the modifier, following `PartitionStateDirtyFlagFenceTest`. No
  functional test can see this race - its effect is an extra commit - so without a tripwire an
  unrelated refactor drops the keyword and nothing goes red.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
… of them this repo can use

Two commits below put the annotation jar on the classpath and wrote the first two declarations.
This is the survey of everything else in it, so the next reader does not re-derive the list: every
verdict was MEASURED - the annotation applied, `bin/infer-test.sh` re-run, the report read - rather
than reasoned about from Infer's documentation. None of the annotations measured here is kept in
the tree; what is kept is what each one did.

`@ThreadSafe` - THE ONE THAT WOULD MOVE THE LANE, AND WHY IT CANNOT YET

RacerD only reports on code it believes is meant to be thread-safe and infers that from lock use,
so a class that shares state without locks is SILENT rather than clean. Applied to `WorkManager`,
`ShardManager`, `ProcessingShard`, `ConsumerManager`, `BrokerPollSystem`, `ProducerManager` and
`PCMetrics` together, it took the lane's finding count up roughly tenfold. Two things stop it being
adopted, and both are concrete:

- Over half the new findings are `INTERFACE_NOT_THREAD_SAFE`, and the interfaces are
  `org.slf4j.Logger` and micrometer's `Meter`. Both are thread-safe, neither is annotated, and
  neither is ours to annotate - so every log call site in an annotated class is a finding. The lever
  is Infer's `--disable-issue-type`, which is a change to a hosted CI lane's checker set.
- The largest remaining group is every non-private `ShardManager` method reading `processingShards`
  "racing with the write in `setProcessingShards`" - a package-private setter that exists for tests
  and whose production callers `ShardMapIsNeverReplacedArchTest` already forbids. RacerD cannot see
  an ArchUnit rule, so the group is right about the seam and wrong about the code.

The rest of the triage is in the note, group by group. Two are worth naming here: RacerD
independently refinds `ConsumerManager.commitRequested`, the wakeup counters and
`BrokerPollSystem.longPollTimeout`, all already listed in `docs/refactoring.md` by SpotBugs -
corroboration rather than new ground; and `ConsumerManager.closeInProgressSignal` is the
`@Initializer` case in the flesh, a false positive that exists only because the annotation is on.

`@Lockless` - IT SEES THE MONITOR THE ARCHUNIT RULE CANNOT

`clearCommitCommand()` carries a cleared suspicion dated 2026-08-31 whose last paragraph says no
gate protects the invariant, because `ArchitectureTest.rebalanceCallbacksMustNotBlock` matches
method calls and a `synchronized` block is a `MONITORENTER` it cannot see. Measured: `@Lockless` on
`onPartitionsRevoked` reports exactly that monitor, by name, through exactly that method - and does
NOT report `commitLock.tryLock()`, so it agrees with this repo's decline-rather-than-wait rule.

It is still not adopted, and the reason is worth having written down: the monitor it reports is one
the design deliberately keeps, so annotating the callback leaves a violation standing whether the
invariant holds or not - the same complaint the cleared suspicion makes of the ArchUnit rule. What
it is good for is a query: it is the only thing here that can enumerate the monitors a rebalance
callback reaches, which has now been done by hand twice - that suspicion, and the
`PCMetrics.removeMeter` monitor #431 found on the same path and left alone. The javadoc is
amended in place with a dated paragraph rather than rewritten, because the 2026-08-31 conclusion is
unchanged; only what is now known about checking it again.

That is also the boundary with #431, which is open on the same rule: it closes the rule's
METHOD-REFERENCE blind spot and deletes six `KNOWN_BLOCKING_VIOLATIONS`, while this is about the
`MONITORENTER` one, which widening the walk cannot reach. Neither makes the other wrong.
`docs/inflight/static-archunit-main-code-rules.md` enumerates that rule's blind spots and names
neither; #431 was rewriting that file concurrently, so the entry is left for whoever touches
it next rather than written into a conflict - stated in the note so it reads as a decision.

`@NonBlocking` - INERT

On the same method, over the same `Thread.sleep(100)`, it reported nothing.

WHAT IS RECORDED WHERE

- `parallel-consumer-core/.../AGENTS.md` gains "Which of Infer's annotations this repo uses, and
  which it does not" - the durable half, next to the `@ThreadConfined` rule it completes.
  `@Initializer`, `@Functional` and `@SynchronizedCollection` are on it as not-yet-writable, with
  the reason: all three exist to SUPPRESS a report, and none of those reports is raised on an
  unannotated class, so they become worth writing the day `@ThreadSafe` goes on and not before.
- The one open question gets the note -
  `docs/inflight/static-infer-threadsafe-is-blocked-by-third-party-interfaces.md` - tagged
  `blind-spot` so it arrives at session start rather than needing to be remembered.
- The measured counts are deliberately NOT written into the note. They are a command's answer, the
  reproduce line is there instead, and the first draft's numbers were stale before it was committed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
@astubbs
astubbs force-pushed the feat/infer-annotation-sweep branch from 01fb0c4 to 53ef4d6 Compare September 3, 2026 10:52
@astubbs
astubbs changed the base branch from docs/225-producer-fencing-brainstorm to master September 3, 2026 10:52
@astubbs

astubbs commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Re-requesting: the branch was re-cut off #410 and onto master, so this is a different head from the earlier request - three commits now, and the infer-annotation pom dependency is carried here rather than inherited.

Steer, if useful: the load-bearing claims are (1) that RetryQueueIterator really is confined - the argument is that a ReentrantReadWriteLock read lock can only be released by its holder, so an escaped iterator could never close - and (2) that lastCommitTime is genuinely written from the poll thread via tryCommitOffsetsOnRevoke, which is what makes volatile the fix and a confinement declaration wrong. Both retire ratchet identities from config/infer-known-findings.txt, so a wrong reading there quietly deletes a real finding.

@claude

claude Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

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


Review: both load-bearing claims re-verified on the re-cut branch

  • Read PR body, commits, and inflight notes
  • Verify claim 1: RetryQueueIterator confinement
  • Verify claim 2: lastCommitTime written from poll thread via tryCommitOffsetsOnRevoke
  • Non-vacuity check: independently reproduced with the guards disabled
  • Spot-check rest of diff (docs, AGENTS.md, ratchet file, pom.xml, tests actually run)
  • Post final review

This is a re-request on a branch re-cut off #410 and onto master (HEAD 53ef4d688, 3 commits, 77fbba821 merge-base) — a fresh independent verification, not a repeat of the earlier review.

Claim 1 — RetryQueueIterator confinement. Read RetryQueue.java directly: iterator() (line 111) takes lock.readLock().lock() on the calling thread, and the iterator's close() (line 345) is the only path that unlocks it. ReentrantReadWriteLock.ReadLock.unlock() does throw IllegalMonitorStateException when called by a non-holder thread, so an escaped iterator genuinely could never be closed by anyone but its opener — the argument holds.

I reproduced the non-vacuity claim live rather than trusting the PR body: commented out all three assertOnOwningThread calls, reran RetryQueueIteratorConfinementTest, then reverted. Result matched exactly — 3 of 5 cases go red, and closeFromAnotherThreadIsRefusedAndLeavesTheLockWithItsOwner fails as

java.lang.IllegalMonitorStateException: attempt to unlock read lock, not locked by current thread

rather than the expected IllegalStateException — the stranded-lock failure the guard exists to prevent, observed directly. Working tree confirmed clean (git status --porcelain) after the revert.

Claim 2 — lastCommitTime crosses the poll thread. Confirmed by reading AbstractParallelEoSStreamProcessor.java: tryCommitOffsetsOnRevoke() (line 668, writes at line 680) is called from onPartitionsRevoked() (line 626, call at line 640) — the ConsumerRebalanceListener callback, which per the Kafka client contract runs synchronously on whatever thread calls poll(), i.e. the broker-poll thread, not the control thread. The method's own comment at line 683 says so explicitly ("this runs inside the poll thread's rebalance callback"). isTimeToCommitNow() is called from maybeAcquireCommitLock() (line 1517), which is on the control-thread path. So @ThreadConfined(CONTROL_THREAD) would indeed have been false, and volatile is the correct fix — both writes are already under commitLock; only the unguarded read needed the modifier as a happens-before edge.

Ratchet integrity verified independently, not just asserted: config/infer-known-findings.txt diffs cleanly across the two fix commits (4 identities removed for RetryQueueIterator, 2 for lastCommitTime), and the file now contains zero THREAD_SAFETY_VIOLATION lines — matches "every THREAD_SAFETY_VIOLATION retired."

Both new tests run green on this tree (via surefire reports, not just -q output):

  • RetryQueueIteratorConfinementTest: 5/5 passed
  • LastCommitTimeFenceTest: 1/1 passed, and it's a sound reflection-based modifier tripwire — correctly named, with a message that tells a future editor what to do if it fails.

Everything else checked out:

  • pom.xml: single infer-annotation dependency declaration, provided scope — correct, matches the stated reasoning (CLASS-retention, must not leak onto library consumers' classpath), no duplication from the re-cut.
  • docs/refactoring.md: lastCommitTime entry deleted (fixed); RetryQueue.closed correctly relabelled as a permanent SpotBugs false positive rather than "fixed" with volatile — which would have reintroduced sharing that no longer exists once the class is confined.
  • ForeignThread/ThreadConfinedConsumerTestBase extraction: run() rethrows, catching() returns the cause, both correctly unwrap ExecutionException, and a timeout is reported as AssertionError naming the fixture rather than swallowed — matches the javadoc's claim about the prior drift this fixture consolidates.
  • The new inflight note (static-infer-threadsafe-is-blocked-by-third-party-interfaces.md) is internally consistent with the engine AGENTS.md's "Which of Infer's annotations this repo uses" section and with the commit bodies — no drift found.
  • Whole-module test run (RetryQueueIteratorConfinementTest + LastCommitTimeFenceTest via -pl parallel-consumer-core -am) built and ran clean, including the ArchUnit suite alongside it.

No correctness issues found. Both "load-bearing" claims hold up under independent verification against the actual re-cut tree, including direct reproduction of the negative control.

@astubbs astubbs closed this Sep 3, 2026
@astubbs astubbs reopened this Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

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

Quarantined test Outcome Owner Meaning
MultiInstanceRebalanceTest.largeNumberOfInstances 🔴 failing (expected) ⚠️ unowned quarantine holding

🔴 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 53ef4d6 · run 33746899088 · 2026-09-03 11:01 UTC

Superseded by a newer quarantine lane report.

…from branch content

`RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed`
went red on this branch's CI, failing its saturation/pause-point setup guard - "control thread must
reach the mid-loop pause point (offset 25)" - which is the shape the ledger already records, not the
confluentinc#909 signature assertion the test exists for.

Recorded rather than re-run silently, because this sighting says something the previous four could
not. The branch ran the SAME code twice: it PASSED at `01fb0c4` and FAILED at `53ef4d6`, and the
only difference between those heads is a re-cut that changed the commit split and merged one
unrelated reactor-test commit. Nothing this test drives changed between the two. The four earlier
sightings were each on a different branch, so none of them could separate "this branch's content"
from "this test"; a pass/fail pair on one content set can.

Attribution was checked rather than assumed, since this branch does touch concurrency:

- The confinement guard it adds has exactly one production caller chain -
  `AbstractParallelEoSStreamProcessor.getTimeToBlockFor` to `WorkManager.getLowestRetryTime` to
  `ShardManager.getLowestRetryTime`, which opens and closes the iterator inside one method on one
  thread. It cannot fire across threads, and it is not on the consumer-sync registration path this
  test drives.
- `bin/inflight.mjs codecov test <name>` shows the same guard red on an unrelated branch within the
  same hour and green on many heads either side, across branches that carry the test and branches
  that do not.
- The ambient probe reports 10% of the deadline used - elapsed 30.8s against 300s - so what expires
  is the guard's own wait, not the test running out of time.

Left in the ledger rather than quarantined: quarantine is master-state and wants a diagnosis or a
sighting ledger, and this is the ledger doing its job. The diagnosis is still open, and the section
below the table owns it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
@github-actions

github-actions Bot commented Sep 3, 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

🔴 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.

No quarantined test changed outcome since the previous push.

Updated for 3632224 · run 34064409791 · 2026-09-06 22:40 UTC

Superseded by a newer quarantine lane report.

@astubbs
astubbs marked this pull request as draft September 3, 2026 11:31
astubbs and others added 2 commits September 4, 2026 04:14
Inherited: #116's jstream result-stream fix (breaking, and it WITHDRAWS the queued
JStream deprecation - `docs/refactoring.md` loses those entries here as a result, which is
master's change and not this branch's), and #419's docs context query, which moves
`bin/lib/inflight-tags.sh` to `.mjs` and rewrites the prior-art section of the root `AGENTS.md`.
Neither touches the infer lane, the retry queue or the commit-timing path.

One conflict, in `docs/inflight/test-untracked-ci-flakes.md`, on the registration-race row both
sides had just edited. Resolved by keeping BOTH controls rather than either side's:

- master's same-day CROSS-branch control (the same guard red on two unrelated branches within an
  hour, green at neighbouring commits on both), from #419;
- this branch's WITHIN-branch control (the same content passing at `01fb0c4` and failing at
  `53ef4d6`), which is the stronger of the two because no cross-branch comparison can hold content
  fixed.

The count is the union of the two sighting lists, and master's new `AmbientProbeExtensionTest` row
is kept - it arrived in the same hunk and taking either side whole would have dropped it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
… object, recorded not fixed

`AGENTS.md` asks for a search for other instances of a defect before its fix merges, and for the
result to be stated either way. Both fixes on this branch were swept.

**The confined-object shape - one more instance found.** `ProducerManager.ProducingLock` wraps a
`ReentrantReadWriteLock.ReadLock` taken in `acquireProduceLock` and released by whoever calls its
`unlock()`: structurally identical to `RetryQueueIterator`, and carrying the same constraint, since
a read lock may only be released by its holder. Its own javadoc already describes what an
unreleasable hold costs - "the same permanent block on the next commit's write-lock acquisition".
Recorded rather than fixed, because the recipe must not be applied blind: the premise is that the
acquirer is always the releaser, and being wrong about exactly that premise is what the
`lastCommitTime` commit on this branch is about. Where I looked: every `ReentrantReadWriteLock` in
core main code, and every method returning an `Iterator`/`Closeable`. `PollContext.iterator()` and
`Range.iterator()` were checked and dismissed - they iterate local or immutable data and hold no
lock.

**The assumed-confinement shape - one instance, already tracked.**
`AbstractParallelEoSStreamProcessor.numberOfAssignedPartitions` is a plain `int` assigned in all
three rebalance callbacks, so it is the same class as `lastCommitTime` and already sits in this file
under SpotBugs' `AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE`. It is the only other field written by
those callbacks - checked by extracting each callback body and resolving every assignment against its
declaration, rather than by eye.

Neither is fixed here. Naming where the search ran matters as much as the hits: a first pass over
`readLock().lock()` call sites and iterator-returning methods found nothing, and that was the
pattern being wrong rather than the tree being clean - `ProducerManager` holds its `ReadLock` in a
field, not at a call site the grep could see.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
@astubbs

astubbs commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Third request, on a materially changed head: master is merged in (#116 jstream, #419 docs-context-query) and two records were added since the last review — a registration-race flake sighting, and the defect-class sweep result in docs/refactoring.md.

The load-bearing claims are unchanged and were verified last round; what is new and worth scrutiny:

  1. The merge conflict resolution in docs/inflight/test-untracked-ci-flakes.md. Both sides edited the same registration-race row within the hour. I kept both controls and master's new AmbientProbeExtensionTest row; the thing to check is that nothing of either side was dropped, since a lost row here fails silently.
  2. The defect-class sweep claim in docs/refactoring.md. It asserts ProducerManager.ProducingLock is the same shape as RetryQueueIterator and that numberOfAssignedPartitions is the only other field written by the rebalance callbacks. Both are falsifiable — if there is a third site, the sweep is wrong and so is the record of it.

@claude

claude Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

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


Review: both new claims verified, nothing lost in the merge

  • Read PR body, commits, and inflight notes
  • Verify the merge conflict resolution in docs/inflight/test-untracked-ci-flakes.md - nothing lost from either side
  • Verify the defect-class sweep claim in docs/refactoring.md: ProducerManager.ProducingLock is the same shape as RetryQueueIterator
  • Verify the defect-class sweep claim: numberOfAssignedPartitions is the only other field written by the rebalance callbacks
  • Post final review

This is the third review, on HEAD 4f9474a6e (branch re-cut with master merged in, plus two new doc-only commits). The two load-bearing concurrency claims (RetryQueueIterator confinement, lastCommitTime volatility) were independently verified in the prior two rounds and are unchanged on this head, so I focused on what's new per the steer.

1. The merge conflict resolution — verified clean, nothing dropped from either side.

I diffed both parent tips against the merge result directly rather than trusting the commit message's account:

  • git diff c30aaee15(master) 3b38dd457(merge) — the entire diff is exactly one hunk: the RegistrationRaceStaleResidentIT row goes from master's "6 seen" to the merge's "7 seen". Every other row and section master added (including the whole new AmbientProbeExtensionTest section) is byte-identical in the merge result.
  • git diff 92bab4047(branch tip) 3b38dd457(merge) — the additions are exactly master's new sections (AmbientProbeExtensionTest, the "Rule 2 is now satisfied" paragraph, the second/third RegistrationRaceStaleResidentIT sightings) layered on top of the branch's file, plus that same one row.
  • The merged row itself: branch's content contributed the within-branch control (01fb0c4 passing → 53ef4d6 failing, the 10%-headroom-used phrasing), master's content contributed the cross-branch control (two unrelated branches, same guard, same hour) — both are present verbatim in the merged prose, just reordered with "And a WITHIN-branch control, which is stronger still" bridging them.
  • The count itself checks out as a true union, not an accidental sum: producer-branch(1) + #419(2) + #429(2) + #433(1) = 6 "on 2026-09-03", plus the 2026-09-01 sighting = 7, matching both the row's stated total and its own enumeration.

Nothing from either side is missing.

2. ProducerManager.ProducingLock is the same shape as RetryQueueIterator — confirmed by reading the code.

ProducerManager.java:207-226 (acquireProduceLock): takes producerTransactionLock.readLock() via tryLock, wraps it in a ProducingLock. ProducingLock.unlock() (line 534-535) calls produceLock.unlock() on that same ReadLock — structurally identical to RetryQueueIterator: a ReentrantReadWriteLock.ReadLock acquired by one call and released only through an explicit unlock(), with the same ReadLock-can-only-be-released-by-its-holder constraint. A repo-wide grep confirms there are only two ReentrantReadWriteLock fields in core main code — RetryQueue.lock and ProducerManager.producerTransactionLock — so there's no third instance the sweep could have missed. The doc is also appropriately hedged: it does not claim confinement is established, only that the shape matches, and explicitly defers declaring @ThreadConfined until "which thread performs the release" is confirmed — exactly the caution the lastCommitTime false-premise cost taught.

3. numberOfAssignedPartitions is the only other field written by the rebalance callbacks — confirmed.

Read all three callback bodies in AbstractParallelEoSStreamProcessor.java (onPartitionsRevoked:626, onPartitionsAssigned:709, onPartitionsLost:728) plus what they call directly (tryCommitOffsetsOnRevoke, clearCommitCommand, notifySomethingToDo). The only plain-field reassignments (=) are numberOfAssignedPartitions in all three, and lastCommitTime inside tryCommitOffsetsOnRevoke — already known and already fixed on this branch, so correctly excluded as "other." Everything else touched from these paths (isRebalanceInProgress, commitCommand) is a final AtomicBoolean mutated via .set()/.get(), not a field reassignment, so it's rightly out of scope for the AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE shape. numberOfAssignedPartitions is also already present in docs/refactoring.md's SpotBugs section (line 384-385) predating this commit, matching the "already tracked" claim. No third field found.

No correctness issues found. Both falsifiable claims hold up, and the merge conflict resolution preserved the full content of both sides.

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

lgtm

@astubbs
astubbs marked this pull request as ready for review September 4, 2026 05:24
…ead reasoning

The duplication reports on #433 flagged four new file similarities. Two are this branch's
doing and are fixed here; the other two are not.

**`RetryQueueIteratorConfinementTest` carried a verbatim copy of `RetryQueueTest`'s fixture** - the
`TOPIC`/`PARTITION`/`EPOCH` constants, the `PCModuleTestEnv`, the queue, and `workFor(long)`,
differing only in the topic literal. That is precisely the parallel copy `AGENTS.md` forbids when it
says to reuse test utilities, and the shape behind the drifted topic-creation helper that became a
flaky-CI source. Both suites now extend `RetryQueueTestBase`. The topic is one constant for both on
purpose: neither suite asserts on it, so two names bought nothing and were the part most likely to
drift.

**The foreign-thread fixture's reasoning was stated in full in two places.** `ForeignThread` was
extracted from `ThreadConfinedConsumerTestBase` earlier on this branch, and both javadocs then
explained the same drift incident - the two copies where only one unwrapped the
`ExecutionException`. `ForeignThread` is the owner now and the base cross-references it, per
`AGENTS.md`'s rule that a fact stated twice is two facts that drift apart. This is the same
duplication in prose that the first item is in code.

NOT FIXED, AND WHY

- **`LastCommitTimeFenceTest` and `PartitionStateDirtyFlagFenceTest` at 40%.** The shared part is
  one Truth assertion over `Modifier.isVolatile`, three lines, and what each test is actually FOR is
  its message - the field, the two threads, and what a future editor should do when it fails.
  Extracting the assertion would move that message one level away from the failure and buy three
  lines. Following an existing precedent deliberately is not duplication to remove.
- **`RetryQueueLincheckTest` and `RetryQueueTest` at 30.1%.** Pre-existing on master; this branch
  touches neither, and `AGENTS.md` scopes the duplication follow-up to clones this PR introduced.

The two engines disagreed and both were right: PMD CPD and jscpd reported no new clones, because
they count token-level clones and none of this is one. The platisd tool measures text similarity
including comments, which is what caught the copied fixture and the twice-told story.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
astubbs and others added 2 commits September 4, 2026 05:44
`dups: clones` came back CANCELLED on three consecutive heads of #433. It is a required
check, so a cancelled row blocks the merge - and a re-run that went green would have looked
identical to a fix, which is why this is recorded before re-running rather than after.

WHAT IT ACTUALLY IS

The job carries `timeout-minutes: 5`. The cancelled attempt ran 05:30:41 to 05:35:48 - 5m07s - and
the runner's cleanup names what was still going: `Terminate orphan process: pid (2693) (npm exec
jscpd@)`. The action runs PMD CPD **and** jscpd over the whole tree, twice (PR and base), inside
those five minutes, so the cap has no meaningful headroom and the lane tips over on a slow runner.

WHY IT IS NOT THIS BRANCH

- The same lane **completed on an earlier head of this same PR** and posted its full report, with
  both engines' tables and "No new clones introduced by this PR" - so the tree is analysable inside
  the cap when the runner cooperates.
- Its sibling `dups: similarity` succeeded in the same run, so this was not a superseded workflow.
- The job is `if: github.event_name == 'pull_request'`, so it never runs on master. Master history
  shows `skipped`, which is the absence of evidence rather than evidence of health - worth stating,
  because the reflex is to compare against master and read those skips as green.

Not to be confused with the failure `ci-duplication-report-can-fail-to-post.md` already owns: that
one is `dups: clones` FINDING a real clone and being unable to post it. This is the lane never
finishing. A cancelled tick and a failed tick look alike in the checks list and mean opposite
things.

The durable fix is a CI change on master - raise the cap, or split the two engines into separate
jobs so neither pays the other's time - so it is recorded here rather than attempted from a feature
branch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
… correct the record

The previous commit filed `dups: clones` as a flake-ledger row saying the lane "tips over on a slow
runner". A fourth attempt, on a fresh five minutes from a new head, failed identically, and the
framing does not survive it. The row is retired and replaced with a note that says what the evidence
actually supports.

WHAT THE EVIDENCE SAYS

Outcomes split cleanly by DATE, not by branch or runner: two attempts on 2026-09-03 succeeded and
posted the full report; four on 2026-09-04 were cancelled. One of those four is on an unrelated PR,
which is what rules out branch content - a second PR failing the same way at the same time cannot be
explained by either branch's diff. The boundary is master gaining #419 and #116.

Each cancelled attempt dies a few seconds past the five-minute cap with jscpd still running, named
by the runner's own cleanup as an orphan process. The action runs PMD CPD and jscpd over the whole
tree twice - PR and base - inside one five-minute budget, so corpus growth is paid four times.

WHY THE FILING MATTERS AS MUCH AS THE DIAGNOSIS

A deterministic breakage sitting in a flake ledger invites the response a flake deserves - re-run
until green - which here would burn runner time and hide a required check that no longer works. It
also is not the failure `ci-duplication-report-can-fail-to-post.md` already owns: that one is the
lane FINDING a clone and failing to post it. A cancelled tick and a failed tick look alike in the
checks list and mean opposite things.

WHAT IT COSTS RIGHT NOW

`dups: clones` is a required check, so while this holds no PR in the repository can merge. That is
why the note is `impact: stall` rather than a CI-hygiene item, and why the fix belongs on master
rather than on the feature branch that happened to find it.

Master history cannot be used to attribute it: the job is `if: pull_request`, so on master it is
`skipped`, which reads as green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
astubbs and others added 3 commits September 6, 2026 22:27
Inherited #439, #445 and #442. The first and third matter to this branch: they
fix the `dups: clones` lane that was blocking it, and they do so with a cause this branch got wrong.

THE DUPS NOTE THIS BRANCH ADDED IS DELETED, NOT UPDATED

`ci-dups-clones-lane-times-out-and-blocks-every-merge.md` described a problem #442 has fixed,
so keeping it - even rewritten as a was-fixed narrative - is what `docs/inflight/AGENTS.md` forbids.
Nothing in it survives as both true and unowned: master's workflow now carries the explanation at the
point of use, and states it better.

**Its causal claim was also wrong, which is the part worth recording.** The note attributed the
timeout to corpus growth from #419 and #116, reasoning from a clean date boundary -
every attempt on 2026-09-03 passed, every attempt on 2026-09-04 failed, corroborated on an unrelated
PR. The mechanism was right (the job exceeding its five-minute cap with jscpd still running) and the
attribution was not. The real cause, per #442's workflow comment: the action installed jscpd
with `npx jscpd@4` inside the step it measures, so the base-branch engine paid a cold install the
PR-branch step did not - 288s against 15s on the same tree - and npm's 300s default fetch-timeout let
one stalled registry request consume the whole budget. The date boundary tracked registry conditions,
not master's content.

That is a reasoning failure worth naming rather than quietly dropping: a correlation across two
branches felt like a controlled comparison, and it was not - both branches shared the runner and the
registry, which is exactly the variable that moved. The control that would have settled it was
re-running an OLD head, which this branch never did.

THE FLAKE LEDGER'S REGISTRATION-RACE ROW, CONFLICTED AND UNIONED

Both sides had grown it independently and neither is a superset. Master's version carries four
#442 sightings - two of them on documentation-only heads - and counts a `ce-optimize` sighting
where this branch counts #433; those are different runs, so the count is their union rather
than either side's. This branch's WITHIN-branch control is restored, because master's row never had
it and it is the strongest evidence in the row: the same tree produced both outcomes. Master's
documentation-only heads are that same argument from the other direction, so they are kept beside it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
Inherited #440, #447 and #435. Two of them touch this branch's ground.

#440 QUARANTINES the registration-race test this branch has been recording sightings of.
Nothing here needs to change for that - the ledger row and the quarantine registry are different
instruments, and master keeps both - but it means a future red from that test is no longer this
branch's problem to attribute.

THE LEDGER ROW, CONFLICTED A THIRD TIME AND UNIONED AGAIN

Both sides said "12 seen" and neither was a superset: they count DIFFERENT seventh sightings on
2026-09-03 - master's is #438, this branch's is #433 - so the union is thirteen. A
count that matches on both sides is the easiest kind of conflict to resolve wrongly, because taking
either side whole looks like a no-op and silently drops one real sighting.

Master's #438 control is the stronger of the two and is kept as such: that branch's whole
diff is `bin/` and `docs/`, compiling no Java, so the tree built there IS master's - branch content
is excluded by construction rather than by comparison. This branch's within-branch control is kept
beside it because it establishes something that one cannot: one tree, both outcomes, which excludes
the tree itself and leaves only the runner. They are different arguments, not two tellings of one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3KnLcX4KibVMCP6sMfNgM
@github-actions

github-actions Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
MultiInstanceRebalanceTest.largeNumberOfInstances 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature
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.

No quarantined test changed outcome since the previous push.

Updated for 4d89369 · run 34067548714 · 2026-09-06 23:46 UTC

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

lgtm

@astubbs
astubbs merged commit 9999144 into master Sep 7, 2026
43 checks passed
@astubbs
astubbs deleted the feat/infer-annotation-sweep branch September 7, 2026 00:02
astubbs added a commit that referenced this pull request Sep 7, 2026
…this branch's sighting

#433 and #443. One conflict, the
RegistrationRaceStaleResidentIT ledger row, and both sides had reached "13 seen" while counting
different sets - so either taken whole would have dropped a sighting under an authoritative-looking
number, for the third time on this file.

Master's side is the base and deserves to be: it carries the #442 and #438 sightings
and, more importantly, a WITHIN-branch control this branch had no way to know about - #433 ran
the same content twice, green then red after a re-cut that changed only the commit split, so one tree
produced both outcomes and the tree itself is ruled out, leaving the runner. That is a stronger claim
than the cross-branch controls it joins.

Added to it: this branch's 2026-09-04 #444 sighting with its same-head re-run, and one clause
noting that sighting is another of the same-day cross-branch kind. 14 seen.

Recorded because the first attempt at this resolution asserted on an anchor that did not exist,
wrote nothing, and the file was then staged WITH its conflict markers - caught by grepping the
markers rather than trusting the exit code. The second attempt carries an anchor-free fallback that
announces itself.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WErnxQd9Ew57F9SsqzdPU5
astubbs added a commit that referenced this pull request Sep 7, 2026
…ot only a JDK deny list

`RetryQueue.remove`, `add`, `removeAll` and `clear` take the write lock unconditionally, and the
rule that they are for the controller thread only was prose on one javadoc plus a deny-list of JDK
blocking signatures. Neither is a check on the caller: the prose is not read by anything, and the
deny list answers a narrower question than the rule asks - `RetryQueue.tryRemove` takes the SAME
lock through `tryLock()`, which is correctly absent from the list, so no entry in it can tell a
waiting acquire from a declining one when the method itself is ours.

`@ControllerThreadOnly` (new, in `state`, beside the class it governs - main code declares no
annotation type of its own until now) makes the contract a declaration, and
`ArchitectureTest.rebalanceCallbacksMustNotBlock` now reports a reach INTO an annotated method
exactly as it reports a deny-listed call: same `root => target` exemption key, same message shape,
for a direct call and a method reference alike. `KNOWN_BLOCKING_VIOLATIONS` semantics are unchanged.
The owner type is checked as well as the method, because the annotation targets TYPE too and a
class-level declaration the walk ignored would be a silent gap rather than a narrower rule.

**Deliberately NOT Infer's `@ThreadConfined`**, and the marker's javadoc says so. The engine's own
rule - `parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/AGENTS.md`, "Declare thread
confinement with `@ThreadConfined`, and assert it at the entry point" - requires that one to be
paired with a runtime assertion because RacerD CONSUMES it, so an unpaired declaration silences a
detector and is worse than nothing. This marker is read by no analyser and silences nothing, so the
pairing rationale does not reach it; it is checked by ArchUnit reachability and nowhere else. The
runtime half - a named-thread `@ThreadConfined` plus an `assertOnOwningThread`, in the shape
#433 established for `RetryQueue.RetryQueueIterator` and
`ThreadConfinedConsumer` - is deliberately not implemented here and is tracked in the note that
follows this commit.

**The premise was checked rather than assumed, per that same AGENTS.md rule.** Every production
caller of the four annotated methods, on this branch:

- `ProcessingShard.getWorkIfAvailable` -> `retryQueue.remove(removed)` (last-resort stale sweep) and
  `retryQueue.removeAll(..)` (work taken), reached from `ShardManager.getWorkIfAvailable` ->
  `WorkManager.getWorkIfAvailable` -> `AbstractParallelEoSStreamProcessor.retrieveAndDistributeNewWork`
  - the control loop.
- `ShardManager.onSuccess` -> `retryQueue.remove(wc)` and `ShardManager.onFailure` ->
  `retryQueue.add(wc)`, reached from `WorkManager.handleFutureResult` ->
  `AbstractParallelEoSStreamProcessor.processWorkCompleteMailBox` - the control loop.
- `clear()` has no production caller at all.
- The two rebalance-path sweeps that used to reach `remove` - `ShardManager.removeWorkFromShardFor`
  and `ProcessingShard.removeStaleWorkContainersFromShard` - both go through `tryRemove` since
  83115d6, which is why the rule is green with the annotations on.

**RED FIRST, twice, because a rule that is green on arrival has proved nothing.**

1. With the rule UNCHANGED, routing a callback back onto the waiting method (one temporary
   `this.retryQueue.remove(ignoredRemovedWC)` in `ShardManager.removeWorkFromShardFor`) already
   turns it red: ArchitectureTest 3 tests / 1 failure, six violations, every one
   "reaches blocking call java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock() via
   bz.stub.parallelconsumer.state.RetryQueue.remove(..)", from `onPartitionsRevoked` and
   `onPartitionsLost` on `AbstractParallelEoSStreamProcessor`, `PartitionStateManager` and
   `WorkManager`. That is the deny list doing its job, and it is the control arm for the second
   proof.
2. With the production code untouched and `tryRemove` temporarily annotated, the same rule reports
   the same six roots through the ANNOTATION - "reaches @ControllerThreadOnly call
   bz.stub.parallelconsumer.state.RetryQueue.tryRemove(java.lang.String, int, long) via
   bz.stub.parallelconsumer.state.ShardManager.removeWorkFromShardFor(..)" - even though `tryLock()`
   is not deny-listed and the walk has nothing else to match. That is the whole point: the
   annotation path works independently of the JDK deny list. Both temporary edits reverted, empty
   diffs verified.

The standing proof is a second fixture beside `archfixture/BlockingReachThroughAMethodReference`:
`ControllerThreadOnlyReachFromARebalanceCallback` reaches one annotated method from a
callback-named method twice, once by call and once by method reference, and its annotated method
WAITS FOR NOTHING - a field write - so no entry in the deny list can match it and the annotation
check is the only thing that can report it. `RebalanceCallbackRuleControlTest` asserts both kinds
are reported. Checked red: with the annotation block removed from `inspectReach`, the rule reports
one violation (the sibling blocking fixture) and the new test fails on the missing
`onPartitionsAssigned` reach.

Records: the rule's javadoc gains the paragraph and corrects its "a green run means" sentence, which
now names the declaration as well as `BLOCKING_CALLS`; `inspectReach`'s javadoc says why the deny
check runs on a name and the annotation check on the resolved member;
`docs/inflight/static-archunit-main-code-rules.md` gains the measurement beside its dated text.
`RetryQueue.remove`'s prose contract is replaced by a pointer at the annotation, so it is stated once.

Fresh surefire: ArchitectureTest 3/0/0/0, RebalanceCallbackRuleControlTest 2/0/0/0,
RetryQueueTest 10/0/0/0, RetryQueueRebalancePathTest 6/0/0/0. Core unit suite 672/0/0/8, whole
reactor 752/0/0/8, `bin/check-all.sh` 16 passed 0 failed.

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

The commit before this one made "only the controller thread may call these" a declaration checked by
ArchUnit reachability. That check is static, and its own javadoc enumerates three ways a poll-thread
call can still arrive at a waiting acquire with the rule green: a reference that is STORED rather
than invoked (ArchUnit's model gives a gauge or an executor task the same shape as a stream stage,
so the walk cannot say WHEN a reach happens), a user-supplied `ConsumerRebalanceListener` (dynamic
dispatch through an interface is out of reach of any deny list, and it is code the walk cannot start
from), and a `synchronized` BLOCK (a MONITORENTER is not an access - the reason the rule would not
have caught confluentinc#857 itself). None of those is closable by widening the rule.

The note describes the guard that closes them, and it is NOT implemented here: the
#393 ownership shape applied to `RetryQueue`. That PR's pieces are named so
the next reader copies rather than designs - `ConsumerOffsetCommitter`'s volatile
`Optional<Thread> owningThread`, set once by `claim()` when the owning thread's loop starts and read
by `isOwner()`, and `PCModule.consumerManager()`'s thread-confinement wrapper, whose own comment
states the lifecycle rule this would follow. Applied here: the controller claims the queue when the
control loop starts (a lifecycle step, not a constructor argument, because the object exists before
the thread that will own it), the `@ControllerThreadOnly` methods assert the current thread is the
owner and fail loudly instead of taking the lock, and the guard is UNARMED while nobody has claimed -
which is what leaves unit tests that drive a `RetryQueue` directly, and init-time use, unaffected.
Cost: one reference compare per call, on a path already taking a lock.

It is positioned against the convention on master rather than beside it.
`parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/AGENTS.md` owns
"Declare thread confinement with `@ThreadConfined`, and assert it at the entry point", and the note
cites it: the two existing patterns are `RetryQueue.RetryQueueIterator`
(`@ThreadConfined(ThreadConfined.ANY)` plus `assertOnOwningThread`, with
`RetryQueueIteratorConfinementTest` failing when the two disagree) and `ThreadConfinedConsumer`, both
from #433. This guard is that shape with a NAMED thread - the control thread
- which the rule says is the right value when the code really does pin one, and which is what gives
the assertion something specific to compare against.

Two design questions are what defer it, and both are stated rather than guessed. What "fail loudly"
does inside `consumer.poll()`: a throw leaves a rebalance callback abnormally and its blast radius is
the group, while "log an error and decline" is the behaviour the queue-first sweep already treats as
safe - the better signal in a test is the worse one in production. And claim/release across a
restart: `claim()` is called once and never released, so a controller that stops and starts, or a
second processor in one JVM, needs a decision on whether a claim can be replaced, refused or dropped
at close.

Filed per `docs/inflight/AGENTS.md`: `core-` because it is product behaviour and the prefix names an
area, `task` + `reliability` because no single defect is named yet, `concurrency` label, and
`deferred` with what it waits on. No counts and nothing a command could answer.

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

Asked at merge prep: can the concurrency annotations help here, or expose this
better? Recorded because the intuitive answer is wrong in a way that would cost
something.

A DECLARATION HERE WOULD BE FALSE, AND FALSE IS WORSE THAN ABSENT. RacerD reads
com.facebook.infer.annotation.ThreadConfined and consumes declarations without
checking them, so @ThreadConfined(CONTROL_THREAD) on the state the revoke-path
drain would mutate does not expose this defect - it silences the detector that
might otherwise find it. RetryQueue's own usage already states the rule: an
annotation nobody enforces is a comment that silences a detector.

INDEPENDENT CORROBORATION, WHICH IS THE PART WORTH KEEPING. #433 reached
this same seam from the other direction while putting the infer annotations on the
compile classpath. It evaluated lastCommitTime as a confinement candidate, found
every record of the field claiming two control-thread accessors, grepped the
writers, and found tryCommitOffsetsOnRevoke() writes it from inside
onPartitionsRevoked on the broker poll thread. It made the field volatile instead
and said so in the field's javadoc. One investigation started from the mailbox
drain and one from a field's writers; both landed on the revoke path running
control-thread work on the poll thread, and neither knew about the other.

WHAT THE ANNOTATIONS ARE FOR HERE IS THE FIX. @GuardedBy does not fit - this is
confinement rather than lock discipline, and the core AGENTS.md records that it
silently checks nothing on a ReadWriteLock. The shape that fits is
RetryQueueIterator's: once the thread-ownership decision at this seam is taken,
declare the confinement AND assert it on the owning thread in the same change, so
the decision cannot rot back. Until that decision exists there is nothing truthful
to declare, which is why this note stays open.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MWLkoGdvM2CHQCsYpgUMAR
astubbs added a commit that referenced this pull request Sep 7, 2026
…pair with

Base movement, 19 commits. #437 (440b9bd) closes the retry-queue orphan
window by confirming shard residency AFTER the re-queue's add, and #433
(9999144) declares `RetryQueue.RetryQueueIterator` `@ThreadConfined(ANY)` with an
`assertOnOwningThread` at every entry point. Both land in files this branch rewrites.

NOTHING CONFLICTED, which is the case to be suspicious of rather than pleased about - the two sides
touch adjacent regions of the same four files and git merged them without asking. Checked by hand
afterwards, both sides' intent is present and distinct:

- `RetryQueue`: #433's `@ThreadConfined(ThreadConfined.ANY)` on the iterator type plus its three
  `assertOnOwningThread` guards, AND this branch's `@ControllerThreadOnly` on `remove`/`add`/
  `removeAll`/`clear`. They answer different questions - one is consumed by RacerD and paired with a
  runtime assertion, the other is read only by `ArchitectureTest.rebalanceCallbacksMustNotBlock` -
  and the marker's own javadoc says why it is deliberately not the Infer annotation.
- `ShardManager`: #437's post-add `isResident` confirmation in `onFailure`, AND this branch's
  queue-first `tryRemove` in `removeWorkFromShardFor`.
- `ProcessingShard`: #437's `isResident` predicate and its use in `includeInSelection`, AND this
  branch's `removeStaleWorkContainersFromShard(RetryQueue)`.

THE RED IS EXPECTED AND IS THE NEXT COMMIT'S STARTING EVIDENCE.
`RetryQueueRequeueWindowTest.theProductionSweepsQueueRemovalIsGatedOnItsShardRemoval` fails at its
final assertion - "PRODUCTION IS SHARD-FIRST, and the confirmation in ShardManager.onFailure depends
on it". That arm exists precisely to go red the moment production stops being shard-first, and this
branch is what stops it. `RetryQueueRequeueWindowTest` 9 tests / 1 failure.

Its sibling `aQueueFirstSweepDefeatsTheOneShotConfirmation` is GREEN, and that is not a reprieve: it
hand-builds both orderings, so production moving cannot move it - the over-claim review caught on
#437 and the reason the production arm was added. It still has to be re-stated against the paired
removal.

Everything else green on the merged tree: `ArchitectureTest` 3/0/0/0, `RetryQueueTest` 10/0/0/0,
`RetryQueueRebalancePathTest` 6/0/0/0, `RebalanceCallbackRuleControlTest` 2/0/0/0,
`RetryQueueIteratorConfinementTest` 5/0/0/0.

`bin/check-branch-self-reference.sh` is red on 12 references in three notes that arrived from master
and name #431 in the future tense - the note addressed to this PR, the shard
displacement note, and the Infer `@ThreadSafe` note. All three are the next commit's work, because
what they should say depends on what it does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018rEzrWYFr6oEzy6porczd3
astubbs added a commit that referenced this pull request Sep 7, 2026
Master moved 21 commits under this branch in two days. Three touch the rider's own files and none
argues with it: #450 registers a record's offset before publishing it to
its shard (PartitionState, adjacent to but not inside the commit path this branch changed);
#452 makes the codec's encodingCounters a ConcurrentHashMap (the
encode-path static this branch's tryToEncodeOffsets calls through); #106
walks only the offsets where completion state changes when no encoder needs every offset (the
overhead table's domain is unchanged by it, and its tests pass on the merge).

Two text conflicts, both in append-only records, both resolved in master's favour plus this
branch's additions: config/infer-known-findings.txt keeps master's retirement of every
THREAD_SAFETY_VIOLATION identity (#433) and this branch's three
BUFFER_OVERRUN_L1 identities; docs/refactoring.md keeps master's rewritten thread-safety entry for
the codec (#452 replaced the "not thread-safe" heading and body) and this
branch's two entries above it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkRtYPnDuAPLEmHFYSnAiJ
astubbs added a commit that referenced this pull request Sep 7, 2026
…dy produced (#436)

The control loop commits like this: take the producer write lock, drain the work mailbox, then
commit. Draining is what makes the transactional guarantee hold - a record already produced into
the open transaction has its success sitting in the mailbox, and only the drain marks its partition
dirty so the offset collection includes it. The revoke path takes the same lock and commits, and
never drains. So a revoke-time commit can publish a transaction whose offsets omit work whose
success is still queued: output committed, input offset not, next owner reprocesses that input and
produces the output again. Exactly-once degrades to at-least-once on that path.

THE WINDOW IS REACHABLE, AND THE ARGUMENT THAT IT MIGHT NOT BE WAS BACKWARDS. The note this
started from guessed the produce read lock, held across the send and its acks, might leave the
mailbox empty of produced work whenever a commit could begin. The ordering is send, then
addToMailbox, then release: cleanUpContext is the single release point and runs in
runUserFunction's finally, strictly after the batch is mailboxed. A returned produce lock therefore
GUARANTEES the work is already queued, and a commit granted the write lock always has undrained
work in front of it. The lock discipline does not close the window; it guarantees the window is
open. Controlled experiment, prediction stated first: the revoke as it stands is red, sending
offset 1 where 2 is required; the identical arm with processWorkCompleteMailBox inserted before the
revoke is green. Same magnitude, different position, so the drain is the term. Deterministic -
hand-driven control loop, mocked producer, no broker, no load.

WHAT IT DOES TO THE REGISTER. C9 NO_PRODUCE_WITHOUT_ITS_OFFSET and C4 OFFSET_AND_RECORDS_ATOMIC
both move PROVED to REFUTED: they are two statements about the same commit and one run falsifies
both, so leaving C4 proved beside a refuted C9 would have had the register assert and deny one
observation. C4's exemption does not cover it - that exemption is marker-delivery ordering within a
commit, and here the offset is never committed by that transaction at all. Both keep their
control-loop proofs, because that half still holds. C14 RESULTS_EXACTLY_ONCE_UNDER_FAILURE is
deliberately left PROVED with a scope note: the route to a duplicate is sound but no duplicate has
been observed, and C14's own record says its red and green were each seen rather than argued.
Refuting it on reasoning would make it the register's first argued status and break the
observed-versus-argued distinction that is the register's whole value. The README caution names
both refuted guarantees and states the front-page promise is not refuted; STRATEGY.md names the
refuted claims instead of counting statuses.

NOT FIXED HERE, DELIBERATELY. The one-line fix - drain from onPartitionsRevoked - runs on the
broker-poll thread and mutates control-thread-confined WorkManager state, the shape that corrupted
numberRecordsOutForProcessing in #29. The control loop also keeps draining during a
rebalance, so a poll-thread drain would race it. The red arm is quarantined rather than deleted, so
the proof keeps executing and the lane demands its removal the day it passes; it is not
@ProvesClaim, so C9 keeps enforced coverage from the two control-loop proofs that run.

THE FIX'S POSITION IS RECORDED, checked against #408 rather than guessed. That PR declines
the revoke commit only when the lock is contended; the uncontended inline commit is this defect's
path, so it neither narrows nor widens it. Recorded: decline unconditionally in transactional mode,
as its own change from master. The question that decides its correctness is not established and is
stated as such - on decline, is the transaction's produced output aborted, or committed later
without the revoked offset. It must be run, not argued. A confinement declaration cannot yet be
written truthfully at this seam; #433 reached the same conclusion independently from
lastCommitTime's writers. The fix owes the declaration and its runtime assertion in the same change.

Reviewed by Codex and by Claude, six findings fixed and one escalated to the operator, whose ruling
is the C4/C14 split above. A test-soundness finding was worse than it looked: the sampled assertion
sat in the shared helper, so the flake would have landed in the control arm, which gates.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 7, 2026
…rd to its shard, as #370 established on the poll path

#450 swapped maybeRegisterNewPollBatchAsWork to register-then-publish and left this branch an
instruction in the refactoring backlog: the replay loop repeats the old order. It did. A scanner that
selects and completes a replayed container the instant it is reachable through its shard completed
an offset the partition had not yet re-registered, and onSuccess's assert fired from inside the
replay - latent for the same reason it was latent on the poll path, one control thread doing both,
and the same defect the day there is a second selector.

Pinned the way #450 pinned its half: a shard manager installed through the module's seam that
selects and completes the container on publish. RED on the old order (the AssertionError escaped the
replay, observed before the swap), GREEN after, with the seam checked to have fired so a test that
never raced cannot pass by accident. The backlog line that asked for this is retired.

Also in this commit, because it was staged with it: the Infer annotations survey note is retired.
#433 did what it proposed and more - confined the retry-queue iterator, showed the
lastCommitTime confinement would have been a false declaration (the poll thread writes it too),
measured every other annotation in the jar, and put the verdicts in the engine's AGENTS.md with the
one open item in its own note. Two records of the same question would drift.

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.

1 participant