Skip to content

ci(integration): shard the gate into a heavy set and a catch-all, and split the 857 probe - #442

Merged
astubbs merged 36 commits into
masterfrom
ci/shard-integration-gate
Sep 6, 2026
Merged

astubbs merged 36 commits into
masterfrom
ci/shard-integration-gate

Conversation

@astubbs

@astubbs astubbs commented Sep 4, 2026 •

Copy link
Copy Markdown
Owner

Built on #439, which has merged - master is now the base and has been
merged in. The dups: clones check that #439 unblocked is what lets
this PR's own CI complete at all.

Description

Splits the Integration Tests lane into one named heavy set and a catch-all defined by
subtraction
, and splits Rebalance857CommitSyncDeadlockProbeIT so the split is worth having.

Measured, every row

arrangement critical path runner-minutes
single job (master) 620s 620s
2 shards, probe intact 519s 870s
2 shards + probe split 450s 780s
this PR (+ rebalanced) 416s 792s
4 shards + probe split (deferred) 355s 1318s

620s → 416s, −33% critical path for +28% runner-minutes.

Why the probe split is the load-bearing part

Rebalance857CommitSyncDeadlockProbeIT was @RepeatedTest(20) in one ~356s class, and forks cannot
split a class — so whichever shard held it was the critical path. Two shards or four made no
difference while it was intact (both modelled at 516s). The twenty repetitions, every assertion and
the 4s revoke dwell are unchanged; the logic moved to an abstract base with four @RepeatedTest(5)
subclasses.

The split costs more than arithmetic says, and that correction is worth carrying: 356s over four
classes was modelled as four 89s classes; measured they are 138-166s, because the repetitions
carry per-class fixed cost that used to be paid once. Splitting further would pay less again.

Why a catch-all rather than N balanced bins

A balanced split must be re-sized as the suite changes and fails silently when it is not — a new
class belongs to no bin, stops running, nothing goes red. Defining the catch-all by subtraction
inverts that: a new test runs there by default, and the only way to lose one is to name it in
HEAVY_CLASSES and delete it, which fails the heavy shard loudly while the catch-all keeps running
the test
. Failing in the safe direction is deliberate.

bin/ci-integration-test.sh carries the guide for when to add a class, and
bin/check-integration-shard-balance.mjs recomputes the optimal partition from recorded per-class
times so drift is a number rather than quiet decay. That checker reads Codecov, so its network call
is opt-in behind SHARD_BALANCE_NETWORK=1 and only Repo Hygiene sets it — check-* is
blanket-granted to the PR reviewer, and bin/AGENTS.md forbids that prefix a network read. The
variable is deliberately not CI: the reviewer holding the grant runs inside Actions, so CI
would disable the read where it is harmless and leave it enabled where the agent is.

Five guards, and what each one alone would miss

Four are name matching in bin/ci-integration-test.sh. The fifth — every class produced a report
somewhere — is bin/check-integration-shard-coverage.mjs, and reads bytecode through javap
rather than Java source: abstract is an access flag, the supertype is a field, @Nested classes are
Outer$Inner, @Tag values are annotation attributes. The shell version it replaces had five
defects, every one a text-matching defect (below), so the guard is now something that can be
unit-tested: its self-test compiles fixtures with javac and pins each of those shapes.

guard catches
heavy: every named class produced a report a renamed or deleted class in the list
catch-all: no named class ran here, and not empty a broken exclusion
every report from an integrationTest package extra tests — the it.test bug below
every class in the tree produced a report somewhere a test that ran nowhere
no class named twice a class run and paid for twice, with both shards passing

Bugs this found, all silent, none visible in timings

  • -Dit.test=!Class ran the entire unit suite under failsafe. Setting it.test replaces
    failsafe's <includes>, and both test source roots compile into the same target/test-classes:
    168 classes and 981 tests instead of 42 and 204, critical path 782s — and it passed, because
    running more tests than you meant to fails nothing. Fixed with a pom-level <excludes>.
  • The report check looked in one module. VertxConcurrencyIT and CoreAppMetricsIntegrationTest
    live elsewhere in the reactor and were reported missing while passing. Two shards went red on it.
  • report_exists inverted its answer on a match. find | grep -q under set -o pipefail
    reports failure when it matches. Caught by bin/check-source-patterns.mjs, whose rule exists
    because check-review-posted.sh shipped the same bug.

What the review rounds changed

The completeness guard — the one that fails a shard when a class ran nowhere — was itself letting
classes through, verified against the classes a green run actually executed rather than by
inspection. Three separate filters, one of them opened by this PR's own de-duplication refactor:

  • a file-wide @Quarantined/@Tag grep exempted a whole class when one method carried the
    annotation, which un-guarded LoadTest;
  • requiring a literal @Test in the file skipped classes that inherit their tests — exactly
    what moving the probe's @RepeatedTest onto a shared base created;
  • the class name came from the filename, so of four package-private classes sharing one file it
    saw only the first.

The last two compounded on Rebalance857CommitSyncDeadlockProbe4IT, which is in the catch-all: it
could have stopped running with nothing going red.

The second review round found a sixth text-matching defect in the same guard — an unanchored
extends grep that a javadoc sentence would satisfy, demanding a report for a helper that can never
run — and that is what turned it into the bytecode gate above rather than a sixth patch. The
self-test caught two more before CI could: @ParameterizedTest lives in org.junit.jupiter.params,
not .api (the source-based check shared that blind spot), and a class whose only tests are @Nested
carries no test descriptor of its own.

A third round - eight review lenses plus an independent validation pass - found the gate's own
green-while-red: a javap that could not run left an empty index, zero required classes, and a
passing verdict over nothing. It exits 2 now, with a fixture pinning it. The same round caught the
Repo Hygiene step making a required check depend on Codecov's uptime (now advisory as its comment
claimed), the gate's error text promising to catch a class moved out of its package while the
candidate filter excluded it first (it now demands any test class whose ancestry reaches an
integration package), and two regressions from the simplify pass an hour earlier.

The drift checker also had two silent-pass bugs: a malformed --fail-over produced NaN, so a job
asking to block exited 0 having gated on nothing, and its could-not-run diagnostic read a field
lib/codecov.mjs never sets, printing (unknown) every time. Branch-scoping its timings was
raised and refuted by measurement — Codecov reports no rows at all for master or main here,
so scoping would make the checker exit 3 forever; the timings are intersected against the checked-in
suite instead.

A second Codex round on the bytecode gate found that tag exclusions were read at class level
only, so a class whose every test method is tagged into an excluded group - which failsafe filters
whole, running nothing and writing no XML - would have been demanded: a permanent false red on the
catch-all. The library now reads each method's own annotation block, and @Tag being @Inherited
(checked on the JUnit jar) a base class's tag is read for its subclasses too. Three compiled fixtures
pin it, and a control arm shows the previous library demanding the all-filtered fixture. No class in
the tree has the shape today. A third Claude round then traced that fix by hand through all three
levels and found nothing blocking; its one observation, that docs/ci.md's guard list omitted the
heavy shard's own per-class report check, is applied.

Required check

Integration Tests (heavy) produces its own status context, and adding a job does not add a
requirement — so the heavy shard's classes would have been non-gating. It has been added to the
master ruleset's required checks, alongside Integration Tests.

Deferred, not rejected

Four shards is built and measured green at 355s on ci/shard-integration-four, and kept as a
deferred note, docs/inflight/ci-four-shard-integration-gate.md, with its numbers; the measurement
record and the ordering argument are in
docs/solutions/performance-issues/shard-count-buys-nothing-while-one-class-sets-the-floor-2026-09-07.md,
and docs/ci.md now owns the lane as it runs. It buys 61s over this PR for +526
runner-seconds — a 15% gain for 66% more machine time, plus four lists instead of one. Revisit if
runner-minutes stop mattering or the suite grows enough that the catch-all dominates again.

Checklist

  • Docs updated - docs/ci.md (the lane as it runs), a docs/solutions/ write-up of the measurements, the deferred four-shard note, plus the guide and the trap notes in bin/ci-integration-test.sh
  • User-facing feature documentation data added under docs/features/ - N/A - a CI lane split; no user-facing feature
  • Tests added/updated - N/A - changes which job runs which existing tests. It adds five guards asserting the selection did what it claims, which is the testing this change needs
  • docs/inflight/ working note (pr-/branch-) started at the PR's first commit - docs/inflight/ci-shard-the-integration-gate.md, extracted before merge into docs/ci.md, docs/solutions/ and the deferred docs/inflight/ci-four-shard-integration-gate.md
  • Title & body reflect the final content of this PR
  • Ran ce-simplify and ce-code-review locally - N/A - asked for @claude review on the PR instead, the route that can open inline review threads

🤖 Generated with Claude Code

https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh

astubbs and others added 7 commits September 4, 2026 08:54
What changed for a user: nothing yet - an investigation, two corrected claims, and a flake
sighting. The measured optimisation follows on this branch.

The Integration Tests lane is the PR build's critical path. This records what it is actually
made of, and the result of the first experiment against it.

THE FINDING. Raising failsafe forkCount from 4 to 6 makes the lane SLOWER - 469s of failsafe
against a 420s baseline - and it destabilised a test that had never failed before. A 2x2
factorial over forkCount {4,6} x the 857 probe {whole, split}, each arm's prediction written
into its commit message before it ran:

  baseline  4 forks, whole   420s failsafe   1528s work   339s tail   pass
  H1        6 forks, whole   469s            1691s        332s        FAIL
  H2        4 forks, split   424s            1533s        161s        pass
  H3        6 forks, split   379s            1710s        160s        FAIL

The model predicted H1 340-380 and H3 260-300. It was wrong because it assumed class_time_total
is invariant to forkCount. It is not: the same tests cost 11% more CPU time at six forks. More
forks manufacture work, and contention degrades packing on top of that.

So both parallelism directions for this lane are now measured and closed - thread-parallelism in
2026-07, fork oversubscription here. The remaining lever is work reduction, not scheduling.

A TRAP WORTH THE COMMIT MESSAGE. H1 and H3 failed at verify, so Maven never built the other ten
modules and their job_seconds omit ~120s the passing runs paid. H1's job_seconds reads 548
against the 620s baseline while its failsafe was 49s worse. Ranked on job_seconds, the most
harmful arm of the four wins. Rank this lane on core_failsafe_seconds, and refuse to rank a
sample whose build did not succeed.

TWO STALE CLAIMS, corrected here because both are load-bearing and silent:

- parallel-consumer-core/pom.xml withheld a per-fork log directory from failsafe because "it
  declares no forkCount, so it runs at the default of 1". maven.yml passes -DforkCount=4 and
  failsafe pins no <forkCount>, so it takes that bare property - the -DforkCount vs
  -Dsurefire.forkCount trap the same comment warns about. Four JVMs already share one flat
  pc.log.dir, into appenders the comment says lose writes under exactly that condition. The flat
  path stays, on the half of the reason that survives; the false premise does not.

- bin/ci-integration-test.sh said "the ci profile runs sequentially on GitHub-hosted 2-core
  runners", which describes the unparameterised script rather than what CI invokes.

Also records a seventh sighting of the RegistrationRaceStaleResidentIT setup-guard flake, seen on
one of the measurement arms. It is deliberately NOT attributed to fork pressure: codecov shows the
identical assertion failing earlier the same day on an unrelated branch at forkCount=4. The
genuine fork-pressure casualty was ManagedPCInstanceLifecycleTest on the sibling arm, which had
passed every recorded run before this. Conflating the two would waste the next reader's time.

An unverified premise is flagged rather than asserted: the runner reports ubuntu-24.04, and
GitHub moved public-repo runners to 4 vCPU in early 2024, while docs/self-hosted-runner.md,
docs/ci.md and the prior unit-gate run all reason from "2-core" - that run built a 2-CPU Docker
replica to imitate this runner. Nothing here read nproc, so it is named as cheap to settle, not
concluded.
…nd what is still open

What changed for a user: nothing - a working note.

Carries the part of the ce-optimize run that is still moving, so the next session inherits it
rather than re-deriving it: which levers are now closed by measurement (both parallelism
directions), which changes are built and unmerged and on which branches, and the two traps that
cost real time here - rank this lane on core_failsafe_seconds rather than job_seconds, because a
build failing at verify skips ten modules and its job_seconds omits ~120s; and the scratch space
lives under .context/, which is gitignored and does not travel with the branch.

Separate commit rather than an amend: the first commit is unpushed and amending it would have
been safe, but the repo's history-rewrite gate asks before rewriting and there was no reason to
answer it when an ordinary commit does the same job.
…der matters

What changed for a user: nothing - a working note.

Sharding the Integration Tests lane across runner jobs, the way the Chaos Pain Suite already is,
is the lever that would actually halve the PR build's critical path. It is deferred rather than
undecided, and the note records the measurement that sets the order.

Within-job overlap is exhausted: 1528s of test time runs in 420s on four forks, about 91%
parallel efficiency, and six forks fell to 75% while inflating total work 11%. So more overlap
means more JOBS. What stops that being the first move is that each shard re-pays the ~136s of
serial build - testCompile 60s, compile 42s, javadoc 14s, delombok 8s, Truth codegen 7s - so a
4-way split spends roughly 400 extra runner-seconds before saving anything.

And the conversion rates differ: because four forks already overlap the waiting, cutting 3.6s of
test time buys 1s of wall, while cutting 1s of serial build buys a full second. The build
reduction is worth ~3.6x per second AND it is exactly the cost sharding multiplies. Doing it
first is not a detour from sharding - it is what makes sharding pay.
What changed for a user: nothing - two sentences reworded in a working note.

The note said "This branch carries a ce-optimize run" and "What has LANDED on this branch", both
of which name nothing once the branch is gone. Rewritten to name #439 in
the past tense, and marked post-merge: checked so the gate can tell an attestation from an
oversight.

Caught by check-branch-self-reference.sh in the repo: hygiene lane, which failed on both pushes of
this branch while every other branch that day was green - so the attribution needed no guessing.

WHY IT REACHED CI, since the gate is not obscure and AGENTS.md already names the sweep that runs
it: bin/check-all.sh was run and passed - and THEN two more files were added, with only
check-inflight-tags.sh and check-file-refs.sh run against them. A sweep whose whole value is that
the set cannot drift from what you remembered was made to drift by remembering which gates the new
files "needed". The rule is the sweep runs last, after the final edit, not once per session.
What changed for a user: the Integration Tests lane no longer builds a javadoc jar, a sources jar
or delombok output for eleven modules on every run. Nothing in a test lane consumes any of them.

TAKEN ON FIRST PRINCIPLES, NOT ON A MEASUREMENT, and that distinction is the finding. Verified by
counting artefacts in the CI log: a run with these flags builds 0 javadoc jars against 9 without,
and delombok reports skipping 11 times against 2. It provably does less work, so it cannot be
slower. The saving is around 10s of a ~600s job and this lane's wall time CANNOT resolve it -
three concurrent samples of identical code spread 119 seconds, roughly eleven times the effect.

The first cut of this change carried a bug that no timing could have caught: -Dsource.skip=true is
not a property maven-source-plugin reads - it wants maven.source.skip - so sources jars were still
built in both arms while the numbers looked the same either way. Found by counting jars. The
script's header now says to verify these three properties by counting artefacts rather than by
timing the job.

WHAT ELSE THIS SETTLES, all recorded in
docs/plans/2026-09-03-001-investigate-integration-gate-wall-time.md:

- The noise floor of this lane is 119s across three CONCURRENT samples of identical code. The
  postscript retracts an earlier claim in the same document that prebuild_seconds cleanly resolved
  a 10s effect; the control has since moved further than the effect. Incremental optimisation of
  this job is not measurable, which is an argument for sharding rather than more tuning.
- Replacing the 20s compaction sleep with a poll on the log start offset is a proven NO-OP: it
  logged "Compaction did NOT advance" four times out of four, never fired, and paid the full
  deadline anyway. Dropped rather than merged - log compaction need not advance the log start
  offset, so the detector was wrong. The blind spot it exposed is real and now tracked in
  docs/inflight/test-compaction-wait-has-no-observable.md: that sleep asserts nothing, so a run
  where compaction never happened is indistinguishable from one where it did.
- compiler:testCompile, 60s and the largest remaining serial cost, cannot be skipped: the
  integration sources import 19 classes out of src/test/java. The reason is written into the
  script so it is not re-attempted.
What changed for a user: the Integration Tests lane runs as two jobs instead of one. Projected
critical path ~498s against ~620s, about -20%, at the cost of one extra runner's worth of minutes.

THE SHAPE, and why it is not the chaos suite's four balanced bins. `bin/ci-integration-test.sh`
owns a single list, HEAVY_CLASSES; INTEGRATION_SHARD=heavy runs exactly those, and
INTEGRATION_SHARD=rest runs everything else by NEGATION of the same list. Both matrix entries go
through the one script, so the two shards cannot disagree about what is where, and unset still
runs the whole suite for local callers.

A balanced N-way split has to be re-sized whenever the suite changes and fails silently when it
is not: a new class belongs to no bin, stops running, and nothing goes red. Defining the
catch-all by subtraction inverts that - a new test runs by default, and the only way to lose one
is to name it in HEAVY_CLASSES and then delete it, which the report check turns into a hard
failure. It is also a list short enough to reason about, which is the property that makes it
maintainable.

THE HEAVY SET IS ONE CLASS, because one class is the constraint.
Rebalance857CommitSyncDeadlockProbeIT is @RepeatedTest(20) at ~342s and forks cannot split a
class, so whichever shard holds it cannot finish sooner than that - which is also why the saving
is ~20% and not more. Splitting that class four ways (measured green on
optimize/ig-exp002-probesplit, not adopted) moves the floor to PartitionStateCommittedOffsetIT's
~160s and roughly doubles the benefit, at which point the heavy set should be RE-DERIVED from
measured per-class times rather than extended by guess.

A SHARD THAT RAN NOTHING MUST NOT READ AS A PASS. -Dfailsafe.failIfNoSpecifiedTests=false is
required here - the reactor builds ten modules containing none of these classes, and without it
the first one fails the build before the requested tests run, the same trap bin/chaos-test.sh
documents. That flag also means Maven exits 0 whether the selection matched everything or
nothing, so the script asserts afterwards: heavy must have produced a failsafe report for every
named class, rest must have produced some reports and none for the named ones. The two
assertions are deliberately opposite - a renamed class fails the heavy shard loudly while the
catch-all quietly keeps running the test, which is the safe direction.

BLOCKING PREREQUISITE, NOT IN THIS DIFF. "Integration Tests" is a required status check in the
master ruleset and "Integration Tests (heavy)" is not. Adding a job does not add a requirement,
so merging this without updating the ruleset makes the 857 probe NON-GATING - red on it, mergeable
anyway. There is no naming trick that avoids it: each matrix entry gets its own check context, so
whichever job keeps the required name, the other is ungated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
What changed for a user: the catch-all integration shard now runs 42 classes instead of 168.

FOUND BY MEASURING, NOT BY REVIEW, AND IT PASSED THE WHOLE TIME. The first cut selected the
catch-all with -Dit.test=!Rebalance857CommitSyncDeadlockProbeIT. Setting it.test REPLACES
failsafe's <includes>, and both test source roots compile into the same target/test-classes - so
the negated form silently dropped the `**/integrationTest*/**` restriction and ran the entire UNIT
suite under failsafe as well.

Measured on CI: 168 classes and 981 tests instead of 42 and 204, 2283s of test work instead of
~1470s, critical path 782s against a 620s single-job baseline. So the split made the lane WORSE,
and the shard reported success throughout - running more tests than you meant to fails nothing.

Nothing would have caught this. The shard's own checks ask whether the right tests RAN, and the
failure was 126 extra ones. The harness gate is `test_classes_run >= 42`, and 168 satisfies it -
a floor cannot see a ceiling. RunLengthEncoderTest, a unit test, appearing in the failsafe
per-class timings is what gave it away, on a run whose only visible symptom was being slow.

THE FIX, in three parts:

- The root pom's failsafe block gains <excludes> driven by ${it.excluded.classes}, defaulted to a
  pattern matching nothing. An <excludes> leaves <includes> intact, so the catch-all is the
  complement of HEAVY_CLASSES *within the integration packages*, by construction rather than by
  hoping. bin/ci-integration-test.sh is its only caller.
- The rest shard uses that property instead of a negated it.test.
- A provenance guard: every failsafe report in either shard must be for a class in an
  integrationTest package. This is the check that would have caught it, and it asks about where
  the tests came from rather than how many there were - the axis the count-based gates cannot see.

The heavy shard still uses -Dit.test, which has the same include-replacing behaviour, but its
list is exact class names and the provenance guard now covers it.

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

github-actions Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

License Issues

.github/workflows/maven.yml

PackageVersionLicenseIssue Type
astubbs/duplicate-code-cross-checkb462149cbfcdc7585c851e3109763c72787699a7NullUnknown License
Excluded from license check: pkg:githubactions/actions/github-script

OpenSSF Scorecard

PackageVersionScoreDetails
actions/astubbs/duplicate-code-cross-check b462149cbfcdc7585c851e3109763c72787699a7 UnknownUnknown

Scanned Files

  • .github/workflows/maven.yml

@github-actions

github-actions Bot commented Sep 4, 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-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 33.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserterTest.java 30.0

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java 36.9 37.0 +0.1
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/ChaosRevokeUnderWorkDrainIT.java 38.6 38.7 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.6 37.7 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 55.5 55.6 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 49.3 49.4 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.4 31.5 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 47.4 47.5 +0.1
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/ChaosRevokeUnderWorkKeyOrderIT.java 51.6 51.7 +0.1
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/ChaosKeyOrderIT.java 43.2 43.2 +0.1
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/ChaosChurnStormIT.java 42.6 42.6 +0.1
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java 35.7 35.8 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.8 40.8 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.6 47.7 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.1 38.2 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 31.0 31.1 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 51.6 51.6 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 35.8 35.9 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 43.3 43.3 +0.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.4 33.4 +0.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 36.2 36.3 +0.0

...and 95 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.68
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 34.76
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.55
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 36.68
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.24 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 38.68
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.55
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.24 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 36.68
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 34.76
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.71
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.03
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.25
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 54.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 54.65 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 42.76
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 32.96
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.55
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 31.03
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.65 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.67
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 40.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.19
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.53
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.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 31.06
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.94
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.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 54.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 51.64 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 47.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 40.02
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 33.18
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.64 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.8
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 38.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 38.19
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 45.9
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.6
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 36.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 30.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 45.9
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.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 39.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 35.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 35.87
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 34.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java 32.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 31.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 30.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 30.39
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.87
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.83
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.22
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.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 39.51
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 35.25
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java 30.41
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.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 47.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 46.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.71
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java 37.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 36.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.51
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.0
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.18
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.03
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleCollaboratorOwnershipTest.java 30.41
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.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 30.8
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.73
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 35.87
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.33
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 31.06
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.44
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 31.04
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.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.98
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 36.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 32.05
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.81
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.32
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.51
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 44.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 32.63
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.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 44.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.03
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.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 30.88
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.81
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.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.25
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.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.98
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.16 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 37.67
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 32.05
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.16 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 36.88
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.16
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.39
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.32
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.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 36.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 35.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 34.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 32.81
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.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 34.85
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 32.06
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.78
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 37.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 32.81
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.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 35.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 35.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 34.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 32.16
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.15
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.17 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 45.39
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.39
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.39
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.26 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 45.39
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.14
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.87
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.56
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 34.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java 32.6
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 31.43
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.56
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 35.58
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 33.31
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 36.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.41
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 33.31
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 31.43
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.6
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.17 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 53.26 ⚠️
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 36.26
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.61
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 40.74
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 37.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.68
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.97
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.24
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 42.61
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 38.7
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.68 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 43.24
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 37.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 33.83
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 40.0
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 40.0
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.97
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.68 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 40.74
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.7
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 33.83
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 33.68
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.16 ⚠️
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.16 ⚠️
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.46
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.46
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.47
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.87
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.45
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.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 39.72
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.71
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.87
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 30.71
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.45 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 50.66 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 44.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java 30.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.37
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.4
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.4
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.16
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.16
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.87
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.41
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.06
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.06
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 31.87
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PollContextInternalTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueTest.java 31.23
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 39.72
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 30.58
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.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 30.58
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.26 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.88 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.88 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.5 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.5 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.5 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.01 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.01 ⚠️
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.58
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 34.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 33.41
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.18
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.55
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.27
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.22
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 36.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java 31.04
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.41
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.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 40.6
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 32.82
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.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 32.82
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.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 36.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 36.45
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 36.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 34.81
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 33.87
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.7
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.63
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 37.47
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.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.96
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.18
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.75 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 45.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 37.43
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserterTest.java 30.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserterTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java 30.0
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 35.87
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.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/JStreamLiveResultStreamTest.java 30.37
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.15
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.33
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.44
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 36.13
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.34
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.34
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 30.88
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckHarness.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 30.61
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/LincheckHarness.java 30.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 30.56
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.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 36.63
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.18
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.27
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/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.69
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 30.27
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.86
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.93 ⚠️
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.93 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 36.63
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.35
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PollContextInternalTest.java 31.23
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.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 31.8
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.35
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 32.69
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 31.7
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 30.56
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.89
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.86
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 33.55
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.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 32.06
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 31.8
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.75 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 54.34 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 49.78
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.7
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.89
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.34 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 45.53
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.39
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.39
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.77
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.18
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java 36.54
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 35.04
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.5 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.83 ⚠️
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.01 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.34 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.83 ⚠️
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.54
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.92 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java 35.77
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.72
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 39.18
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.5 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.83 ⚠️
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.01 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.34 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.83 ⚠️
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.92 ⚠️
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.5 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 79.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.83 ⚠️
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.72
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 35.04
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.22
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.37 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.66 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 48.26
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.16
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.48 ⚠️
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.88 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.17 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.8 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.99 ⚠️
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.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 30.41
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.37 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 52.45 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.95
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.16
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.48 ⚠️
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.88 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.17 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.8 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.46 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.99 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.99 ⚠️
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 42.76
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.65
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 37.86
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 37.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 33.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 33.53
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.23
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 40.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.55
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.37
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 35.25
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.23
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 40.37
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.86
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.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.14
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.26 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.17 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.17 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.82 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.34 ⚠️
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.95
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 48.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 44.47

@github-actions

github-actions Bot commented Sep 4, 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 07dcddc · run 33914758980 · 2026-09-04 20:14 UTC

Superseded by a newer quarantine lane report.

@codecov

codecov Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.25%. Comparing base (fb5ea93) to head (638784f).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##             master     #442      +/-   ##
============================================
+ Coverage     81.99%   82.25%   +0.25%     
- Complexity     1465     1473       +8     
============================================
  Files            95       95              
  Lines          5133     5133              
  Branches        500      500              
============================================
+ Hits           4209     4222      +13     
+ Misses          724      714      -10     
+ Partials        200      197       -3     
Flag Coverage Δ
chaos 52.94% <ø> (?)
integration 61.83% <ø> (+0.22%) ⬆️
performance 52.36% <ø> (?)
unit 78.06% <ø> (-0.22%) ⬇️

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 4, 2026 •

Copy link
Copy Markdown

⚠️ SpotBugs Report

331 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 638784f · run 34063245260 · 2026-09-06 22:17 UTC

@github-actions

github-actions Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

[superseded - status changed to FLAG] 🟢 Throughput — OK

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

What Value Meaning
Compared with master 0.919 above 1.00 is faster, below is slower
Subject test took 52.2s the test under measurement
Control tests took 32.1s the other tests in this same run
Subject ÷ controls, here 1.628 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.495 median of recent master runs
Reported rate 71694 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.696.

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: fb5ea93, 6573781, c30aaee, ca9c21b, 77fbba8, 7a8a7f0, 2e2705a, 28c6be6, c813942, 558fcfb

Since the previous push: ratio 0.918 -> 0.919, share 1.629 -> 1.628, rate 65929 -> 71694 (+8.7%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for 2ee8419 · run 33936789096 · 2026-09-05 01:47 UTC

Superseded by a newer throughput report.

astubbs and others added 5 commits September 4, 2026 13:32
…th having

What changed for a user: the Integration Tests lane runs as four jobs, and
Rebalance857CommitSyncDeadlockProbeIT's twenty repetitions are spread over four classes instead of
one. Modelled critical path ~337s against 620s for the single job.

FOUR SHARDS WOULD HAVE BOUGHT NOTHING ON THEIR OWN, which is why the probe split is in the same
commit rather than deferred again. Modelled from measured per-class times - and the model
reproduced the two-shard measurement to within 3s, predicting 516s against 519s measured:

  2 shards, probe intact   516s critical,  870s runner
  4 shards, probe intact   516s critical, 1417s runner   <- +547 runner-seconds, zero gain
  2 shards, probe split    355s critical,  709s runner
  4 shards, probe split    337s critical, 1158s runner

The probe was @RepeatedTest(20) in one ~356s class and forks cannot split a class, so whichever
shard held it WAS the critical path at 516s for any shard count. Splitting it is worth 161s; going
from two shards to four is worth 18s. The twenty repetitions, every assertion and the 4s revoke
dwell are unchanged - the logic moved to an abstract base and four *IT subclasses declare
@RepeatedTest(5) each.

THE SHAPE: three NAMED shards plus a catch-all defined by SUBTRACTION, sized by
longest-processing-time packing over measured times. A new test lands in the catch-all by default
and can never belong to no shard, which is the inversion of N explicit bins - whose failure mode is
a new class running nowhere with nothing going red.

WHAT KEEPS IT FROM DECAYING, since a partition is only right on the day it was measured:

- bin/check-integration-shard-balance.mjs recomputes the optimal partition from RECORDED per-class
  times and reports how much wall-clock the checked-in one leaves on the table. The same runs that
  make the lists stale also measure their staleness, so drift becomes a number rather than quiet
  decay. Advisory by default - 119s of measured noise on this lane is no basis for blocking a merge
  - with --fail-over <seconds> for a caller that wants it blocking. It also names classes that are
  in a list but have no recorded history, which is what a rename looks like before a build catches
  it. Run against live data it already flags the three new probe classes as unrecorded, correctly.
- Each named shard asserts a failsafe report for every class it was assigned, so a rename fails
  that shard loudly WHILE the catch-all keeps running the test. Failing in the safe direction.
- No class may appear in two lists, checked on every invocation: it would run twice, be paid for
  twice, and both shards would pass.
- Every failsafe report in every shard must come from an integrationTest package. This is the guard
  that caught -Dit.test silently running the whole unit suite, and it is the only one that could
  have - that failure was 126 EXTRA tests, and no "ran at least N" gate can see extra.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
What changed for a user: shards 1 and 2 stop failing on tests that ran and passed.

The membership check globbed parallel-consumer-core/target/failsafe-reports. Integration tests also
live in parallel-consumer-vertx and the example modules, so VertxConcurrencyIT and
CoreAppMetricsIntegrationTest were reported as "produced no failsafe report" while both had run and
passed in their own module. Two of four shards went red on the first four-way run for that reason
alone - a false RED, in a check whose entire job is to distinguish "did not run" from "ran".

Now scans every module's failsafe-reports. The same helper backs all three checks - membership, the
catch-all's emptiness test, and the integrationTest-package provenance guard - so none of them can
drift back to a single module.

Worth noting which way this failed. The guard was written against core because that is where the
timings that sized the shards came from, and core is where 41 of the 45 classes are - so it was
right about the classes it was tested on and wrong about the four it was not. A check that is
correct for the common case and silently wrong for the rest is the shape this repo keeps finding;
here it announced itself immediately, which is the good version.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
What changed for a user: nothing yet - the bug was introduced and fixed before this branch ran
again. Recording it because the mechanism is worth more than the diff.

`all_reports | grep -q PATTERN` under `set -o pipefail` reports FAILURE when it MATCHES. grep -q
exits the instant it finds one, find takes EPIPE and dies with 141, and pipefail promotes that to
the pipeline's status. So report_exists() would have said "no report" for classes that had one -
the exact false RED the previous commit was written to fix, reintroduced two lines below it.

Caught by bin/check-source-patterns.mjs, whose rule exists because check-review-posted.sh shipped
this and reported "no review posted" on four PRs that had one. ShellCheck does not catch it, and it
hides well: the writer only reaches EPIPE with more than a pipe buffer left to write, so small
inputs pass forever. This tree has 45 report files and would have crossed that line as the suite
grew, not on the run that introduced it.

Fixed with a herestring - no pipeline, so nothing for pipefail to promote.

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

What changed for a user: Rebalance857CommitSyncDeadlockProbeIT's twenty repetitions run as four
classes instead of one, and the heavy shard is re-sized around that. Modelled critical path ~440s
against the 519s this branch's parent measured, and 620s for the single job.

WHY THE PROBE SPLIT IS THE WHOLE POINT. The probe was @RepeatedTest(20) in one ~356s class and
forks cannot split a class, so whichever shard held it WAS the critical path. Two shards or four
made no difference while it was intact - both modelled at 516s. The twenty repetitions, every
assertion and the 4s revoke dwell are unchanged; the logic moved to an abstract base and four *IT
subclasses declare @RepeatedTest(5) each.

THE SPLIT COSTS MORE THAN ARITHMETIC SAYS, and this is the correction worth carrying forward.
356s over four classes was modelled as four 89s classes. Measured, they are 138-166s: the
repetitions carry per-class fixed cost - broker and fixture setup - that used to be paid once and
is now paid four times. Total test work rose from 1545s to ~2000s. It still wins decisively,
because that work spreads across shards while the old 356s tail could not spread at all, but
splitting FURTHER would pay less again.

FOUR SHARDS WERE BUILT, MEASURED GREEN AT 355s, AND NOT TAKEN. Against two shards' ~440s that is
85s of critical path, for 1318s of runner time against ~880s and ~500s of manufactured work -
per-shard fixed costs are paid per shard, the same shape as per-fork costs when forkCount went
4->6. Not worth a 50% machine-time increase and four lists to keep straight instead of one. The
arrangement is preserved on ci/shard-integration-four.

THE HEAVY SET IS NOW FIVE CLASSES, sized from measured post-split times, and the script carries the
guide for maintaining it: move a class only when its own wall exceeds the catch-all's work/forks
(bin/check-integration-shard-balance.mjs prints that number live - currently 240s), balance WALLS
rather than counts, prefer a set that packs evenly across four forks, treat removal as equal to
addition, and re-derive from measurement rather than from reading the code. Every sizing guess in
this lane's history has been wrong, including this commit's own.

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

What changed for a user: two classes move from the catch-all into the heavy shard. Predicted
critical path ~403s against the 450s measured before, at NO extra runner cost - same two jobs, same
machine time, less idle.

THE HEAVY SHARD HAD FREE CAPACITY AND THE NUMBERS SAID SO. Measured on run 33829977814: heavy 330s
against the catch-all's 450s. Heavy was TAIL-BOUND - its slowest class,
PartitionStateCommittedOffsetIT at 208s, exceeded its own work/4 of 178s, so three of its four forks
were partly idle. Work added to a tail-bound shard costs nothing until its total reaches
forkCount x its slowest class: 834s here, against the 710s it was carrying. The catch-all is
work-bound at 975s/4, so every second removed from it comes straight off the critical path.

RebalanceEoSDeadlockTest and Rebalance857CommitSyncDeadlockProbeIT move across - the two largest in
the catch-all, and the modelled optimum. Moving four or more makes it WORSE, because heavy stops
being tail-bound and starts paying for the work.

This is the guide in this file being used rather than illustrated: rule 1 says move a class only
when it bounds the catch-all, and bin/check-integration-shard-balance.mjs prints the threshold.

EXPECT ~415-425s RATHER THAN 403s. The model treats per-shard overhead as fixed, and it is not:
the catch-all's overhead measured 203s against heavy's 122s, because it runs 40 classes and pays
more fixed setup. Moving classes moves some of that with them. The direction is solid; the exact
number is not, and the measurement is what settles it.

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

@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

… no report

What changed for a user: the catch-all shard now fails if any integration test class in the tree
produced no failsafe report anywhere, in either shard.

WHY THIS ONE IS DIFFERENT FROM THE OTHER GUARDS. The existing checks all start from the RUN and ask
whether what ran was right - every named class present, no named class in the catch-all, every
report from an integrationTest package. None of them can see a test that ran NOWHERE, because a
test that runs nowhere leaves no trace to inspect. This check starts from the SOURCE instead, which
is the only direction that can find it. AGENTS.md: "a test that never runs is not a passing test,
and nothing goes red to tell you."

IT NEARLY SHIPPED AS A GATE THAT FAILED EVERY BUILD. The first draft demanded 55 classes against
the 38 that actually run, because an integrationTest package holds helpers and fixtures as well as
tests. It needs four subtractions - HEAVY_CLASSES, abstract bases, chaos/performance groups,
@Quarantined - plus "must declare @Test/@RepeatedTest/@ParameterizedTest". Dry-run against run
33831283169: 37 required, 0 missing. The comment says to dry-run any change to that filter, because
getting it wrong makes this a permanent red rather than a check.

NOT ALSO ADDED, having been considered and dropped: a static bin/check-*.mjs asserting every
integration test sits in a package failsafe collects. TestConventionRules already ArchUnit-enforces
exactly that, in every unit run. A second implementation of a rule that already has one is a place
for the two to disagree.

Also folds the four-shard measurements into docs/inflight/ci-shard-the-integration-gate.md as
deferred work rather than a rejected idea - it is faster (355s against 416s) and costs +526
runner-seconds, which is a trade someone could reasonably revisit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
@astubbs astubbs changed the title ci(integration): split the gate into one named heavy set and a catch-all ci(integration): shard the gate into a heavy set and a catch-all, and split the 857 probe Sep 4, 2026
@astubbs

astubbs commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Most of the risk here is in bin/ci-integration-test.sh, and specifically in the five guards rather
than the sharding itself — the split is two Maven flags, but the guards are what stop a shard
passing while testing the wrong things. Three of them exist because an earlier version of this PR
shipped exactly that bug.

Worth your attention, in order:

  1. The completeness check (INTEGRATION_SHARD=rest, the unrun loop). It walks the tree and
    demands a failsafe report for every integration test class. Its four subtractions — HEAVY_CLASSES,
    abstract bases, chaos/performance tags, @Quarantined — plus "must declare
    @Test/@RepeatedTest/@ParameterizedTest" are load-bearing: the first draft demanded 55
    classes against the 38 that run and would have failed every build. Please check the filter cannot
    over-demand (a permanent red) or under-demand (a class it should require but silently skips —
    the failure that leaves a test running nowhere, which is the whole point of the check).

  2. The rest shard's exclusion. -Dit.excluded.classes feeds failsafe's <excludes> while
    heavy uses -Dit.test, which replaces <includes>. That asymmetry is deliberate and
    documented, but please confirm the sed that builds the exclude patterns
    (s#[^,][^,]*#**/&.java#g) cannot mis-handle a class name — and that a name which is a prefix of
    another cannot over-exclude.

  3. report_exists and the herestring. It was find | grep -q, which inverts under pipefail.
    Please check no other pipeline in this script has the same shape — I fixed the one the gate found,
    not necessarily the only one.

Lower priority but genuinely uncertain: bin/check-integration-shard-balance.mjs searches "largest N
classes" for the best two-way split. That is the shape the guide tells a maintainer to pick, so the
comparison is deliberately constrained rather than an unconstrained optimum — is that a defensible
baseline to report drift against, or does it flatter the current partition?

Not looking for comment on the shard membership itself; it is derived from measured times and will
drift by design, which is what the balance checker is for.

@claude

claude Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

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


Review: the five guards in bin/ci-integration-test.sh

  • Gather context (PR body, diff, comments)
  • Completeness check (INTEGRATION_SHARD=rest, the unrun loop)
  • rest shard's exclusion — the sed pattern and prefix-collision question
  • report_exists / pipefail — scanned the rest of the script for the same shape
  • bin/check-integration-shard-balance.mjs — the "largest N" baseline question
  • Post findings

Went through in the order you asked, plus the balance-checker question. Verdicts first, one real (but currently dormant) gap.

1. Completeness check — mostly solid, one real blind spot

The four subtractions and the annotation-presence test are each individually correct as far as I can tell (I checked against actual files, not just the regexes):

  • case ",${HEAVY_CLASSES}," in *",${cls},"*) is comma-anchored, so it can't partial-match a class name.
  • The abstract-class regex correctly matches Rebalance857CommitSyncDeadlockProbeBase's abstract class declaration (line 93), so this PR's own new base class is excluded as designed.
  • The @(Test|RepeatedTest|ParameterizedTest) line-start regex correctly finds @RepeatedTest(5) on each of the four new Probe{2,3,4}IT/ProbeIT subclasses (verified Probe4IT.java:19) — I initially worried the annotation lived only on the shared base and would be invisible per-subclass-file, but each subclass declares its own @RepeatedTest(5) method, so this is fine.
  • sanity/ProgressBarTest.java is a good stress case: its only method is @Test + method-level @Disabled. It still passes the check (verified: the PR's own comment records "37 required, 0 missing" against a real run), which only works because JUnit5/Failsafe still emit a skipped-test report for a class with zero enabled tests — worth knowing if that ever looks like a false pass, but it isn't one.

The one real gap: grep -qE '@Tag\("(chaos|performance)"\)|@Quarantined' "$f" && continue matches anywhere in the file, not on the specific method or the class declaration. Today that's harmless — grep -rl "@Quarantined" .../test-integration/ turns up exactly one file, MultiInstanceRebalanceTest.java, and it's already in HEAVY_CLASSES so the case statement excludes it before this line is ever reached. But the check is written to also handle classes reached via the catch-all, and if a future class mixes @Quarantined on one method with ordinary @Test methods alongside it, this line exempts the entire class from the "must have run somewhere" requirement — even though its non-quarantined methods still need to run. That's exactly the failure mode this whole check exists to catch (a test running nowhere, nothing going red), just relocated to a case that doesn't exist yet. Same theoretical exposure applies to @Tag("chaos"|"performance"), but I checked every occurrence in chaostests/ and all of them are class-level, so that half is fine in practice today.

Given it's dormant (0 live instances that reach this line), I'd call this a documentation-or-narrow-the-check item rather than a blocker — but worth a one-line comment above it saying the exemption is file-wide and why that's currently safe, so the next class with a mixed quarantine doesn't slip through silently.

Fix this →

2. rest shard's exclusion — confirmed safe, including the prefix case

sed 's#[^,][^,]*#**/&.java#g' is correct: [^,][^,]* greedily matches each full comma-delimited token (not just one character), so "A,B,C" becomes "**/A.java,**/B.java,**/C.java" cleanly — commas are never touched by the pattern, so tokens can't bleed into each other.

On the prefix question specifically: I traced this into pom.xml (line 1140, <exclude>${it.excluded.classes}</exclude>) to see what actually consumes the comma list. Failsafe's include/exclude matching is filename-anchored (**/ClassName.java), requiring both a path separator before and the .java suffix immediately after the name. That means **/Foo.java cannot match FooBar.java — a class name that is a prefix of another can't over-exclude, because the match is against the whole filename, not a substring. Same reasoning applies symmetrically to heavy's -Dit.test. No fix needed here.

3. report_exists / pipefail — confirmed, no other occurrence in this script

Walked every pipeline in bin/ci-integration-test.sh for the cmd | grep -q (or | awk) shape under set -o pipefail:

  • dupes=$(echo ... | tr | sort | uniq -d) — no early-exiting reader, no SIGPIPE risk.
  • found=$(all_reports | wc -l | tr -d ' ') — wc -l reads to EOF, same reasoning.
  • strays=$(all_reports | grep -v '\.integrationTest' || true) — grep -v (no -q) reads all input rather than exiting on first match, and the || true only absorbs the "no strays" case (exit 1). This is the correctly-composed version of the pattern, not the buggy one.

So the one you fixed was the only instance in this file.

4. bin/check-integration-shard-balance.mjs — the "largest N" baseline

I think this is a defensible baseline, and specifically not one that flatters the current partition. The reason: it searches exactly the strategy space ci-integration-test.sh's own guide tells a maintainer to use — a single named heavy set, chosen by size — so "drift" measures distance from the best decision available under the actual maintenance process, not distance from an unconstrained bin-packing optimum nobody would hand-implement from a comment block. Comparing against the true optimum would likely show permanent drift (since shardWall packs each shard's classes across FORKS via LPT, the ideal 2-way split isn't guaranteed to be a contiguous prefix of the size-sorted list), which would make the number noise rather than signal.

Two things worth knowing about the constraint, not blockers:

  • The search caps at k < Math.min(bySize.length, 20) — if the suite ever grew enough that the right heavy set is >20 classes, this stops looking. Given the whole design premise is "a handful of classes," that's consistent with intent, but it's an assumption baked into the loop bound rather than derived.
  • Because it only ever tries prefixes-by-size, it can't tell you "two 150s classes together would beat your one 280s class" if that's ever true under FORKS-way packing. That's a real blind spot relative to a true optimum, but per the above, matching the guide's decision procedure is the point, not a shortcoming of it.

Summary

Nothing here blocks merging on correctness grounds. One item worth a follow-up comment or narrow fix before it can bite (§1, the file-wide @Quarantined/@Tag grep) — dormant today, would reintroduce a silent "ran nowhere" gap the moment a class mixes quarantined and ordinary tests. Items 2 and 3 check out. The balance-checker's constrained search is the right call, not a flattering one.
· branch ci/shard-integration-gate

Base automatically changed from optimize/integration-gate to master September 4, 2026 07:45
astubbs and others added 2 commits September 4, 2026 19:47
…and three modelled figures

What changed for a user: nothing - corrections to claims in the note itself.

The note said the probe split landed "in the PR stacked on it". That stopped being true when the
stacked branch was folded into #442, so it described an arrangement that
never shipped, and "the measurements live with those PRs" was plural about one PR.

It also compared four shards against two shards' "~440s", which was the MODEL. The measured figure
is 416s, so the stated gap of 85s is really 61s and the runner comparison was against ~880s rather
than the measured 792s. The table now marks each row modelled or measured, and the shipped row is
labelled cumulative rather than reading as a third alternative.

Adds the dependency the note only implied: the probe split and the rebalance are not independent
wins. The rebalance moves Rebalance857CommitSyncDeadlockProbeIT into the heavy shard, which is a
134s class only BECAUSE the split happened - at its pre-split 356s it would have blown the heavy
shard past the catch-all immediately. The split created the granularity the rebalance needed.

Found by check-branch-self-reference.sh, which fired for a formal reason - the line named this PR
without a post-merge attestation - and the re-reading it forced turned up the substantive errors.
The marker is now there with its reason.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
Three conflicts, resolved hunk by hunk rather than by taking either whole file - `--theirs`/`--ours`
take everything and a merge that discards the other side renders as nothing at all in a
diff-vs-base review.

- `bin/ci-integration-test.sh`: kept THIS branch's sharding blocks (master has no sharding) but took
  MASTER's javadoc wording, which #439 corrected after review - this branch still carried the "~10s"
  figure that #439's own postscript retracts as drift. Verified all three survive: the corrected
  size estimate, #439's testCompile-is-closed note, and the shard guide.
- `docs/plans/2026-09-03-...md`: took MASTER for both hunks. Same reason - master carries #439's
  review fixes (testCompile closed, the size relabelled as an estimate) and this branch predates them.
- `docs/inflight/ci-shard-the-integration-gate.md`: kept THIS branch for both. Master describes
  sharding as "deliberately deferred", which was true when #439 was written and is not now.

Checked rather than assumed after resolving: the duplicate-code action pin #439 added survived the
auto-merge of maven.yml, and both integration matrix entries are still there.

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

github-actions Bot commented Sep 4, 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 94 🫤 +1
Duplicated lines 1339 1330 :face_with_monocle: +9
Duplication 0.83% 0.84% 🙂 -0.01%
Rule Limit Status
Max duplication 2% ✅ Pass (0.83%)
Max increase vs base +0.1% ✅ Pass (-0.01%)
⚠️ 2 new clones introduced
  • 13 lines: bin/test-check-integration-shard-balance.mjs:27 <-> bin/test-check-integration-shard-coverage.mjs:39
  • 9 lines: bin/test-check-chaos-shards.mjs:34 <-> bin/test-check-integration-shard-coverage.mjs:43

Powered by astubbs/duplicate-code-cross-check

astubbs and others added 2 commits September 4, 2026 20:00
…our copies

What changed for a user: nothing - the same twenty repetitions run as the same four classes. The
method body now exists once.

`dups: similarity` failed this PR at 89.6% on the four probe subclasses, and it was right to. Each
redeclared an identical `@RepeatedTest(5)` method whose only job was to call the parent's
`runOneProbeIteration()`, so four files differed by a class name and a javadoc line. That is
duplication, not an artefact of the tool's threshold.

The fix is the obvious one I had missed: the annotation and the body go in the abstract parent, and
JUnit collects inherited non-private test methods, so each concrete subclass runs its five without
declaring anything. The subclasses are now one line each. Verified all four still compile to
separate classes, which is what makes them independently schedulable.

They also share ONE FILE now. Java allows several package-private top-level classes per file, and
failsafe collects compiled CLASSES rather than source filenames, so scheduling is unchanged - four
forks can still take one each. Four files holding one line each would still have tripped the
similarity bound, and would have been duplication for the filesystem's benefit rather than a
reader's.

Not done instead, and worth saying why: `ignore_directories` is the only exemption this check
offers, and pointing it at the integration package would blind it to every integration test to
excuse four shims. Raising `fail_above` would weaken the gate globally for the same reason. The
check found real duplication; the answer was to remove it.

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

The check exists so that a class silently ceasing to run fails the build. Three
separate filters were letting classes past it, and one of the three was opened by
this branch's own parent-class refactor.

Established against ground truth, not by inspection: the classes failsafe actually
ran in the green run at 4ac1128 (heavy 7, catch-all 38). Before, the check required
37 of those 38. Now it requires exactly 38, with no class demanded that does not run
- the failure mode that matters most here, since one false demand fails every build.

1. THE @Quarantined/@tag GREP WAS FILE-WIDE, so one method carrying the annotation
exempted every other method in its class. Raised in review as a latent risk; it was
not latent. It exempted LoadTest and MultiInstanceRebalanceTest, both of which carry
a method-level @tag("performance") beside ordinary tests and both of which run.
MultiInstanceRebalanceTest is named in HEAVY_CLASSES so the membership check covered
it; LoadTest is in the catch-all and had nothing. Now anchored at column 0, which
separates a class-level annotation from an indented method-level one.

2. A TEST CLASS NEED NOT DECLARE ITS TEST METHODS. Requiring a literal @test in the
file skipped any class that inherits them - which is what the refactor two commits
back created, by moving the probe's @RepeatedTest onto the shared base. The check now
also accepts a class extending a type in this tree that declares one.

3. THE CLASS NAME CAME FROM THE FILENAME. Java allows several package-private
top-level classes per file and the four probe subclasses share one, but failsafe
collects compiled CLASSES - so the filename saw only the first and was blind to the
other three. Now every top-level declaration in the file is enumerated, with abstract
judged per declaration rather than per file so a file holding a base and a concrete
test does not lose the concrete one.

2 and 3 compounded on the same class. Rebalance857CommitSyncDeadlockProbe4IT is in
the catch-all rather than HEAVY_CLASSES, so no membership check covered it either: it
could have stopped running with nothing going red - precisely the hole this check
exists to close, reopened by the commit that removed the duplication.

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

astubbs commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review this

check-branch-self-reference flagged the maven.yml comment 0e52229 corrected: it names
#442 and carried no post-merge marker. The wording was already
past tense - the ruleset change it records is done - so this attests it rather than
rewriting it.

Second time this gate has passed locally and failed in CI on this branch, for the reason
its previous fix recorded: the worktree branch is ci/shard-two-with-probe-split and the PR
head is ci/shard-integration-gate, so locally there is no PR for the head and nothing is
flagged. GITHUB_HEAD_REF=ci/shard-integration-gate reproduces CI's view - red before,
green after, same command.

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

github-actions Bot commented Sep 5, 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 2ee8419 · run 33936789080 · 2026-09-05 01:44 UTC

Superseded by a newer quarantine lane report.

… setup-guard flake

Same guard, same signature - `control thread must reach the mid-loop pause point (offset
25)` - in the catch-all shard at 2ee8419, three heads after the eighth at 7075b26 on the
same PR. That is two of the four catch-all runs this PR has had, which is worth writing
down as a rate rather than a count: on this lane it is now closer to one in two than to
the one in several the earlier sightings suggested. Recorded, not diagnosed, and not
retried in-build; the ledger is where the signal goes, per AGENTS.md.

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

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

🔴 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 638784f · run 34063245274 · 2026-09-06 22:14 UTC

@github-actions

github-actions Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

[superseded - status changed to OK] 🟡 Throughput — FLAG

This branch measured about 32% slower than master, on the one test this measures. That is larger than this test's own run-to-run spread of about 17%, so it is worth looking at.

What Value Meaning
Compared with master 0.679 above 1.00 is faster, below is slower
Subject test took 75.9s the test under measurement
Control tests took 34.5s the other tests in this same run
Subject ÷ controls, here 2.202 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.495 median of recent master runs
Reported rate 32394 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.696.

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: fb5ea93, 6573781, c30aaee, ca9c21b, 77fbba8, 7a8a7f0, 2e2705a, 28c6be6, c813942, 558fcfb

Since the previous push: status OK -> FLAG, ratio 0.919 -> 0.679, share 1.628 -> 2.202, rate 71694 -> 32394 (-54.8%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for b23c13d · run 33937283483 · 2026-09-05 01:55 UTC

Superseded by a newer throughput report.

…a-varying-machine note

MultiInstanceHighVolumeTest struck its 60-second GATING_CEILING at 1,948,661 of 3,000,000
records on the Performance Tests lane at b23c13d, and the
throughput report read it as 32% slower than master. The code is identical to four earlier
heads of the same PR on which this lane passed; the head differs from the previous one by
a single markdown line. Recorded in the note that already argues this shape is the
instrument, not the code: a 1.54x spread on identical code against a fixed ceiling, and a
failing run reporting records-reached-over-sixty-seconds as if it were a rate.

The push that carries this is the re-run: `gh run rerun --failed` is refused while the
rest of the run is still in flight, and a fresh run on a new head is the same thing with
the sighting recorded before the lane goes green again.

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

github-actions Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

🟢 Throughput — OK

This branch measured about 5% 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.048 above 1.00 is faster, below is slower
Subject test took 46.3s the test under measurement
Control tests took 32.4s the other tests in this same run
Subject ÷ controls, here 1.427 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.495 median of recent master runs
Reported rate 80038 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.696.

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: fb5ea93, 6573781, c30aaee, ca9c21b, 77fbba8, 7a8a7f0, 2e2705a, 28c6be6, c813942, 558fcfb

Since the previous push: ratio 0.95 -> 1.048, share 1.574 -> 1.427, rate 86933 -> 80038 (-7.9%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for 638784f · run 34063245260 · 2026-09-06 22:18 UTC

… is now four for four

ReactorBatchTest.simpleBatchTest[3] on the Unit Tests lane at f1e87d8: same Awaitility
alias, same 30 seconds, expected 3 batches and got 4. Identical code had passed that lane
at the three previous heads of the same PR, and no commit on the branch touches main Java.

What makes this one worth more than a tally mark: the failing batch dump shows key 66 at
offsets 0, 1 and 2 - three of five records on one key - which is the three-way collision
the third, fourth and fifth sightings each carried. That lead in the ledger has now held
on every sighting that recorded its batch contents. Still undiagnosed, still not
classified, and still the shared BatchTestMethods lambda; recorded here so the next person
starts from four-for-four rather than from zero. Re-run on the same head as the control.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
@astubbs
astubbs marked this pull request as draft September 5, 2026 02:42
astubbs and others added 2 commits September 5, 2026 14:45
…decided

The learning behind the coverage gate's rewrite, captured while the evidence is fresh.
The completeness guard began as a shell scan of .java files and accumulated six defects
over three review rounds, every one a text-matching defect - a file-wide annotation grep,
a class name taken from the filename, inherited test methods invisible in the subclass's
file, an `extends` matched inside a javadoc sentence, one-hop inheritance, a same-named
class picked by filesystem order. Each fix was another fragment of a Java parser written
in grep, and a grep-parser's failure mode is silent in both directions, which is exactly
what a guard must never be.

The practice: when a guard reasons about compiled artefacts - class identity, modifiers,
inheritance, annotation scope, which tests exist - read the compiler's output through
javap rather than the source text, pin the contract with fixtures compiled by the real
javac, and make a tool that did not run exit 2 rather than read as a suite with nothing
to demand. It names the deliberate exception too: the drift checker still regexes source
because its job has no build to read, and its consequence is advisory.

Grounded against the tree by a validator: twenty-seven claims checked, one corrected
(the quoted historical regex), the PR's open state confirmed live. Filed beside its
sibling, the guard that lexes shell commands, under the corpus's own vocabulary.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
… setup-guard flake

Same guard, same offset, same lane: `control thread must reach the mid-loop pause point
(offset 25)` in the catch-all shard, on the head that added the learning doc and nothing else.
That makes this the cleanest control arm the ledger has: 4fc15b8 differs from the green
69ecd0d immediately before it by one markdown file, so the Java under test was identical
across a green run and a red one twenty minutes apart.

Recorded before the branch merges, per the sighting discipline - the log expires, the entry
does not. The rate claim is unchanged: three reds in the catch-all shard on this PR against
roughly as many greens, which is the one-in-two the row already stated.

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

astubbs commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

@codex review this

Second Codex round. Since your review at 07dcddc the completeness guard was rewritten as a Node gate that reads bytecode through javap (bin/lib/compiled-classes.mjs, bin/check-integration-shard-coverage.mjs, with a javac-compiled fixture self-test), the drift checker's Codecov read became opt-in behind SHARD_BALANCE_NETWORK, and the quarantine contract test resolves the shell variable it reads. Everything from your first round is addressed in the resolved threads.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 87fe5ba6e2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread bin/lib/compiled-classes.mjs Outdated
astubbs and others added 2 commits September 7, 2026 09:45
…ore the split lands

docs/inflight/ci-shard-the-integration-gate.md described work this PR itself lands, which the
directory's first rule forbids - track only what is OPEN. It held three different things, and
each now lives where the next reader will look for it:

- docs/ci.md gains "The Integration Tests lane runs as two shards": the shape and why it is not
  the chaos suite's four balanced bins, the two required checks and why the catch-all kept the
  old name, the four guards with what each one caught, how to read a red shard, and the
  forkCount ceiling. The workflow bullet points at it.
- docs/solutions/performance-issues/shard-count-buys-nothing-while-one-class-sets-the-floor
  holds the measurement record: the cumulative table from 620s to 416s, the model that matched
  two shards to within 3s and then mispredicted the probe split, the two arithmetic traps
  (splitting a repeated class does not divide its time; shards manufacture work), the 1:3.6
  conversion that put the serial-build cut first, and the two-not-four decision.
- docs/inflight/ci-four-shard-integration-gate.md is the one item still open: the four-shard
  arrangement, built and measured and not taken, deferred with the reason and what would change
  it - re-derive rather than restore, and the four-way calculator it needs first.

The 2026-09-03 plan cited the old note for the ordering argument; per docs/citations.md the
address is repaired to the solutions doc that now contains that exact item, with a line saying
where it was when the plan was written. The PR body's three references follow. bin/check-all.sh
is clean, file refs and inflight tags included.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
…- method, class, ancestor

The second Codex review found the case the fixtures never covered: a class whose EVERY test
method is tagged into an excluded group (`@Tag("performance")`, or `@Quarantined` on the method)
is filtered whole by failsafe, runs nothing, and writes no XML - and the gate, which checked
exclusions only against class-level tags, would have demanded a report from it. A permanent false
RED on the catch-all shard, in the safe direction but still wrong. No class in the tree has that
shape today (the method-level performance and quarantine tags in LoadTest and
MultiInstanceRebalanceTest sit beside untagged tests, which is why CI reported 45 of 45); the guard
is for the one that will.

The same defect class had a second instance the review did not name: `@Tag` is `@Inherited`
(read off the junit-jupiter-api 5.14.4 jar, not assumed), so a `@Tag("chaos")` on a BASE class
filters every subclass, and the gate read only the concrete class's own tags.

bin/lib/compiled-classes.mjs now reads a member's annotations from the block javap indents under
that member - the same column discipline that already separated a class-level tag from a method's -
so every record carries its test methods with their tags, meta-annotations included. Exclusion is
then decided where JUnit decides it: classTagsInScope() walks the ancestry for class-level tags,
hasRunnableTest() asks whether at least one test method in the class or its ancestors survives the
excluded groups, and a class fails either test is not demanded. The test-annotation match moved
from a substring search of the constant pool to the per-method annotation list, which is what made
the method-level reading possible at all.

Pinned by compiled fixtures: AllFilteredIT (both tags, one plain and one meta), FilteredBase with an
undecorated FilteredLeafIT (nothing runnable inherited) beside FilteredPlusIT (one plain test of its
own - demanded), and a @tag("chaos") ChaosBase with an untagged InheritsChaosIT. The stub Tag now
carries @inherited and the stub Quarantined targets METHOD, as the real ones do. Negative control:
the previous library, run over the AllFilteredIT fixture, demands it; this one does not.

If failsafe turned out to write an empty XML for a wholly-filtered class, this change would still be
correct - the gate would merely stop demanding a report that exists, for a class that by
construction runs no test.

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

astubbs commented Sep 6, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Third round. Since the second review at 5ebc4e8 the completeness guard was rewritten as a Node gate reading bytecode through javap (bin/lib/compiled-classes.mjs, bin/check-integration-shard-coverage.mjs, with a javac-compiled fixture self-test); the Codex round on it found that tag exclusions were read at class level only, fixed in ece676b by reading method-level and inherited tags; the quarantine contract test resolves the shell variable it reads; the shard inflight note was extracted into docs/ci.md, a docs/solutions/ write-up and a deferred four-shard note; and the flake ledger gained sightings with control arms. Every earlier thread is resolved.

@claude

claude Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

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


Review: third round — bytecode gate rewrite, tag-scope fix, doc extraction

  • Gather context (PR body, diff since round 2, round-2 findings and their fixes)
  • bin/lib/compiled-classes.mjs / bin/check-integration-shard-coverage.mjs — verify the bytecode approach and the method-level/inherited tag fix (ece676b)
  • bin/test-check-integration-shard-coverage.mjs — confirm the fixtures actually pin the new tag-scope behavior
  • QuarantinedAnnotationContractTest.java — the shell-variable resolution fix
  • Doc extraction — docs/ci.md, the docs/solutions/ write-up, the deferred four-shard note — check nothing was lost or left stale
  • Post findings

Verified HEAD is ece676bc1, matching the PR's latest commit, so this review is against the code CI actually ran.

1. The tag-scope fix (ece676b) — correct, and traced through by hand, not just by reading the self-test

The second Codex round's finding was that tag exclusions were read only at class level, so a class whose every method was tagged into an excluded group (or whose only tests came from a tagged-out base) would still be demanded — a permanent false RED once such a class existed. The fix now reads tag scope at the three places JUnit actually applies it:

  • Method-level: memberAnnotations() in bin/lib/compiled-classes.mjs:157 walks each member's own RuntimeVisibleAnnotations: block (column-6, distinct from the class's column-2 block), so testMethods carries per-method tags. hasRunnableTest() then asks "does at least one test method (own or inherited) survive the exclusion", not "is the class tagged".
  • Ancestor class-level: classTagsInScope() walks superName to closure, correctly modeling @Tag's @Inherited semantics (confirmed the fixture's stub declares @Inherited on Tag.java:57, matching the real annotation).
  • Meta-annotation, now at both levels: resolveMetaTags() collects "used" annotation types from r.classAnnotations and r.testMethods.flatMap(m => m.types) (compiled-classes.mjs:228) — the round-2 gap was specifically that a method-level @Quarantined wasn't in that set, so its @Tag("quarantined") never resolved.

I traced the ordering in classesRequiringReports() to make sure the two levels compose correctly rather than one silently shadowing the other: the outer/top-level loop checks classTagsInScope(index, name) (the class's own + ancestor class-level tags) before ever calling producesReport/hasRunnableTest. That's the right order — a class-level (or inherited) tag exclusion in real JUnit cascades to every test in the class regardless of any method's own tags, so short-circuiting there is correct, and only once that's cleared does per-method filtering via hasRunnableTest get a chance to matter. I also checked the @Nested path in producesReport() (compiled-classes.mjs:290): it calls classTagsInScope(index, inner) for the nested class itself, but since the enclosing class's own tag-exclusion is already checked one level up (before producesReport is invoked at all), a tag on the outer correctly cascades to everything nested beneath it — there's no gap here, it just isn't obvious from reading producesReport in isolation.

2. The self-test fixtures — they actually exercise the fix, not just assert around it

bin/test-check-integration-shard-coverage.mjs adds exactly the shapes round 2 asked for: AllFilteredIT (one plainly-tagged method + one meta-tagged method, no plain test — the case the previous fixture set structurally couldn't produce, since LoadTest always paired a tagged method with an untagged one), FilteredBase/FilteredLeafIT/FilteredPlusIT (inherited-tagged-out vs. inherited-plus-own-test), and ChaosBase/InheritsChaosIT (ancestor class-level tag via @Inherited). Each fixture is compiled with the real javac/javap, not hand-transcribed output, which is the right discipline given this module's whole reason for existing. The negative control claimed in review comments (old code demands AllFilteredIT, new code doesn't) is consistent with what the fixture asserts (test-check-integration-shard-coverage.mjs:192).

3. QuarantinedAnnotationContractTest — the shell-variable resolution is sound

Traced hardcodedExcludedGroups()'s regex against the actual script text: bin/ci-integration-test.sh:134 has readonly EXCLUDED_GROUPS=performance,chaos,quarantined,lincheck and line 180 passes -Dexcluded.groups="${EXCLUDED_GROUPS}". Walked the resolution by hand — strip the surrounding quotes, detect the leading $, strip ${/}, then match ^\s*(?:readonly\s+)?EXCLUDED_GROUPS="?([A-Za-z0-9_,]+)"?\s*$ against the script body — and it resolves to the literal list correctly. The restriction to [A-Za-z0-9_,]+ also does what the commit message claims: an env-overridable assignment like NAME=${OVERRIDE:-a,b,c} would fail to match and correctly fail the test rather than silently accepting a script that stopped hardcoding the list.

4. Doc extraction — consistent, nothing stale

docs/inflight/ci-shard-the-integration-gate.md is gone; its content is split across docs/ci.md ("The Integration Tests lane runs as two shards"), the new docs/solutions/performance-issues/shard-count-buys-nothing-while-one-class-sets-the-floor-2026-09-07.md, and the deferred docs/inflight/ci-four-shard-integration-gate.md (correctly carrying an inflight-state: deferred - ... line, so it won't misread as open work). Cross-checked the workflow references cited in docs/ci.md against .github/workflows/maven.yml — the two job names (Integration Tests (heavy), Integration Tests) and the ordering claim about which one the ruleset required first both match what's in the workflow file. The docs/solutions/best-practices/a-guard-that-greps-java-must-read-what-javac-decided.md write-up (landed before the tag-scope fix) doesn't mention the method/ancestor tag-scope bug, but that's correctly out of its scope — that doc is about bytecode-vs-source-text, not about which bytecode facts to read, and its "45 must report / 38 reports found" figure is unaffected since the module's own header notes no class in the tree had the all-tagged-out shape the fix was written for.

One very minor observation, not a defect: docs/ci.md's "guards, and what each one caught" list (around line 413) doesn't explicitly call out the two shell-level membership checks (heavy shard missing a named class; catch-all running a named class twice) that bin/ci-integration-test.sh also enforces — it covers completeness, package-provenance, and drift, but a reader relying solely on that doc's bullet list wouldn't learn those two exist. Not worth a fix on its own; flagging only in case it's useful next time that section gets touched.

Summary

Nothing blocks merging. The three items opened since the last review round — the tag-scope fix, its fixtures, and the quarantine test's variable resolution — all check out against the actual code and against real JUnit/bash semantics, not just against their own descriptions. The doc extraction is complete and cross-references correctly.
· branch ci/shard-integration-gate

@astubbs
astubbs marked this pull request as ready for review September 6, 2026 21:54
astubbs and others added 3 commits September 7, 2026 09:58
…-correct

check-branch-self-reference flagged the one line in the extracted note that names this PR. The
sentence already reads as it will after the merge - the two-shard lane it describes is what lands -
so it only needed the marker saying someone judged it so. Reproduced locally under the PR's head
branch name, since the worktree branch is spelled differently and the gate passes there by
construction.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
The third Claude review read the new "guards, and what each one caught" list against
bin/ci-integration-test.sh and found it covered completeness, package provenance, the
no-duplicates rule and drift, but not the check the heavy shard runs on itself: every class in
HEAVY_CLASSES must have produced a report, so a rename or deletion fails the LIST loudly while the
catch-all keeps running the class. A reader relying on the doc alone would not have learned that
guard exists; it is the one that makes the subtraction shape safe in the other direction.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
…tIT setup-guard flake

Same guard, same offset, catch-all shard, on eb1e88a - a head whose only change from its parent
is one documentation bullet. The last catch-all run that completed before it was 87fe5ba, green;
the three heads between were cancelled by their successors' pushes. Nothing under the Java test
roots changed between 87fe5ba and eb1e88a - the diff is docs, the Node gate library and its
self-test - so the green run stands as the same-code control arm for this red one.

Recorded before the branch merges. The rate claim on this lane is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WUpkpGoTw9GGpC8J9CpUoh
@astubbs
astubbs merged commit c668acb into master Sep 6, 2026
39 checks passed
@astubbs
astubbs deleted the ci/shard-integration-gate branch September 6, 2026 22:23
astubbs added a commit that referenced this pull request Sep 6, 2026
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
astubbs added a commit that referenced this pull request Sep 6, 2026
…either goes

#442's bin/lib/compiled-classes.mjs and this branch's
TransactionalClaimCoverageTest.effectiveTagsOf both answer "which tags would
JUnit apply to this test?", and both had to get the same three cases right -
method, class, and a tag reached only through a meta-annotation such as
@Quarantined. They arrived independently, days apart, and agree.

Recorded rather than queued, because consolidating them is the wrong move: one
reads javap output from Node before any JVM starts, the other resolves
annotations inside a running test JVM through JUnit's own AnnotationSupport.
Neither can call the other, and a shared derivation would be a third
implementation rather than one fewer. What the entry asks for instead is that a
change to either is applied to both or explained - the rule is JUnit's, so it
moves only when JUnit's does, and a divergence is silent in both directions.

Also repairs a citation this branch broke itself: the inflight note named the
new check by the name it carried before review renamed it. Caught by the merge
checklist's rename sweep rather than by anything that goes red.

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

RegistrationRaceStaleResidentIT.freshArrivalCollidingWithStaleShardResidentMustStillGetProcessed
failed on #438's CI with the same mid-loop pause-point signature every
other sighting in that row carries - its saturation setup guard, not the confluentinc#909
assertion the test exists to make.

The row already argued master-state and test-side by comparison: the same test passing on the
same branch at a neighbouring commit, and two documentation-only heads on #442. This
sighting reaches the same conclusion by construction instead. Those documentation-only heads
still sit on branches whose earlier commits changed Java, so the tree that was built carries
those changes; #438's whole branch diff is bin/ and docs/, compiling no Java and changing
no test, so the tree built there is master's exactly. A branch that could not have caused an
integration failure produced one, and no neighbouring commit is needed to see it.

The reproduce line is asked of the pull request rather than of the branch, because the branch is
deleted on merge and the check has to outlive it - the answer is identical either way.

Recorded before the observing PR merges, per AGENTS.md: seeds and job logs expire, and while
`bin/inflight.mjs codecov test` holds the per-commit outcome independently, no command produces
the interpretation.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 6, 2026
… new IT lands in the catch-all shard by design

Two conflicts, both resolved by keeping both sides rather than picking one.

docs/quarantined-tests.md: #440 quarantined
RegistrationRaceStaleResidentIT on the recorded ledger (rule 1), which this branch had cited as
master-state twice but not quarantined. That entry stays verbatim. Beside it, this branch's rewrite of
the largeNumberOfInstances entry replaces master's "measured but not explained" text - the mechanism
is measured now, and the registry is one of three places that said otherwise.

docs/inflight/test-untracked-ci-flakes.md: master's row had reached 12 sightings, including
#447's by-construction one on a docs-only branch; this branch's 2026-09-04
sighting on #444 and its same-head re-run control were not among them.
Merged to 13 with both. Either side taken whole would have dropped a sighting under an
authoritative-looking count - the same trap the previous merge of this file recorded.

#442 sharded the integration lane; ClosingMemberRebalanceIT is not in
HEAVY_CLASSES and lands in the catch-all by subtraction, which its design calls the safe direction:
a new class runs by default. At ~52s for five cases it does not belong in the heavy set.

ChaosScenarioBase auto-merged (#435's classification beside this branch's
getMessage type fix); test-compile confirms it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WErnxQd9Ew57F9SsqzdPU5
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 8, 2026
56 commits of master, none of which touched this PR's mechanism: master
changed neither `.github/workflows/release.yml`, `bin/release-notes.py`,
`bin/test-release-notes.sh` nor `.github/workflows/mutation-full-sweep.yml`
since the branch's last master merge, so the renderer and the workflow step
that calls it merge unchanged. Master's `release.yml` still carries the inline
`awk`/`sed` converter this PR replaces.

Master also changed six of the files this PR touches. Four auto-merged:
`docs/releasing.md` and `bin/AGENTS.md` (#457's job batching, #442's
integration sharding), `.gitignore` (#378, #440), and
`docs/inflight/release-0.6.0.0.md` (#448, #476). Two conflicted.

`docs/inflight/release-0600-blockers.md` - the #197 triage bullet, inside
the `post-merge: checked` markers. This branch (2026-09-01, 2026-09-03) rewrote it
in post-merge terms as "all four landed"; master's grooming sweep (#476,
2026-09-08, correcting on 2026-09-07) rewrote the same bullet to say the
empty-release-body item **was already false when written** - #72 gave the
workflow a `--notes-file` built from the `CHANGELOG.adoc` section on 2026-07-29,
with `--generate-notes` only as a fallback. Master's correction is right and is
the later decision, so it is kept; master's claim that MDC is still open is not -
#205 merged 2026-08-27, which is why this branch corrected it, and that
correction is kept. Resolved as one bullet carrying both later facts, and it now
states what #199 actually does (replace the inline converter, and fail the
release on a missing or unrenderable section) rather than the retired claim that
it restores a body that was never absent.

`docs/refactoring.md` - two unrelated new sections appended at the same point.
Both kept: this branch's "`bin/release-notes.py` is Python in a Node-default
`bin/`" and master's "JUnit tag resolution is implemented twice". No content
from either side dropped.

Neither `--ours` nor `--theirs` was used.

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