Skip to content

feat(api) #126: health-check surface on the ParallelConsumer interface - #226

Draft
astubbs wants to merge 19 commits into
masterfrom
feats/health-check-api
Draft

astubbs wants to merge 19 commits into
masterfrom
feats/health-check-api

Conversation

@astubbs

@astubbs astubbs commented Aug 7, 2026 •

Copy link
Copy Markdown
Owner

Description

Closes #126 (mirror of confluentinc#71), open since 2021, and answers the interface half of #157.

Building a Spring Boot Actuator health indicator meant downcasting ParallelConsumer to ParallelEoSStreamProcessor, because the only health-adjacent method on the interface was isClosedOrFailed() and the failure cause was declared on the concrete class. getHealth() now returns a PCHealth snapshot from the interface, so no cast is needed.

What is genuinely new is the detail, not the up/down answer. For a running, paused or cleanly closed consumer the verdict matches what !isClosedOrFailed() already gave. What is new is the typed run state, the cast-free failure cause, and — because the two are reported together — the ability to tell a clean shutdown from a crash, which isClosedOrFailed() returns true for alike.

ParallelConsumer<String, String> pc = ...;   // no cast
PCHealth health = pc.getHealth();
if (!health.isHealthy()) {
    health.getFailureCause().ifPresent(cause -> log.error("PC failed", cause));
}

Deliberately not included: a stall / progress signal

#157 asks the sharper question — can I tell a stuck consumer from a working one? That is not answered here, and #157 stays open as its home. Three findings from this repo's own evidence decided it:

  1. lastCommitTime is not a progress marker — commits are only attempted when the work manager is dirty, and only success sets dirty, so an all-failing or idle workload freezes it on a perfectly healthy consumer.
  2. Every stall documented in this repo happens while the run state is RUNNING, so the state field cannot carry the signal either.
  3. Our own calibrated ProgressProbe still has open RED calibration — it has never reproduced a true unbounded stall on master.

The Javadoc and README say this out loud rather than implying coverage. Reasoning and the candidate mechanism are recorded in docs/inflight/parked-health-stall-signal.md.

Breaking changes (both before 0.6.0.0 ships)

  • State moves from io.confluent.parallelconsumer.internal to io.confluent.parallelconsumer, so the snapshot can expose it without leaking an internal type. An enum has no source-compatible shim, so this is irreversible once published — taken now because the type was effectively unreachable (no accessor anywhere returned one).
  • AbstractParallelEoSStreamProcessor#setState(State) is no longer public. It was a Lombok @Setter default rather than designed API, and let any caller holding the concrete type force the instance to CLOSED.

Two further changes are release-gated and queued in docs/refactoring.md.

The defect review caught

The first implementation read only state and failureReason, dropping the control-thread-liveness term isClosedOrFailed() carries. The control task catches Exception, so an Error — OOM, StackOverflowError, a LinkageError — kills the thread without writing either field, and isHealthy() returned true forever for a dead consumer. The new API was strictly weaker than the boolean it replaces, on exactly the failure a liveness probe exists to catch. Fixed by reconciling against the same term, with two tests that failed before the fix.

A second ordering defect was caught earlier: the snapshot read the failure cause before the run state, which admits a null cause paired with a CLOSED state — the shape of a clean shutdown, reported for a crash.

Checklist

  • Docs updated - README section (template + regenerated README.adoc), Javadoc, CONCEPTS.md, docs/inflight/, docs/refactoring.md
  • Tests added/updated - 34 tests across 4 new classes; full unit suite green on all 11 modules
  • Title & body reflect the final content of this PR
  • Self-hosted runner / security implications considered - N/A - no CI runner or workflow files touched

astubbs added 11 commits August 7, 2026 20:07
`State` described the controller's lifecycle but lived in
`io.confluent.parallelconsumer.internal`, so nothing could be exposed
publicly without leaking an internal type. Move it to
`io.confluent.parallelconsumer` unchanged - same constants, same
`getValue()` ints, which are a published contract through the
`pc.status` and `pc.poller.status` gauges.

Add `State#isRunningOrPaused()`: true for UNUSED/RUNNING/PAUSED, false
for DRAINING/CLOSING/CLOSED. Named after what it tests rather than
"healthy", following `KafkaStreams.State#isRunningOrRebalancing()` -
a method name travels into call sites and log lines where the caveat
that RUNNING says nothing about progress does not.

BREAKING: `io.confluent.parallelconsumer.internal.State` moves package.
An enum has no source-compatible shim, so this is deliberate and taken
before 0.6.0.0 ships. The type was effectively unreachable - there is
no accessor anywhere that returns one.

Register the move in `bin/check-copyright-headers.sh`'s rename list so
the moved file is still recognised as upstream-derived.
…g its setter

Prerequisites for reading health from a caller thread.

`state` and `failureReason` were both plain fields. `state` is written
by at least three threads and `failureReason` by the control thread and
`closeOnException`, while a health check reads both from a fourth with
no happens-before edge. The visible failure mode is specific: a reader
sees a fresh `RUNNING` beside a stale null cause, and reports a
consumer that has already recorded a fatal error as healthy. Both are
now `volatile`.

Lombok's bare `@Setter` on `state` generated a *public* `setState`,
while no getter existed - so a caller holding the concrete type could
force the instance to `CLOSED`. Narrowed to `AccessLevel.PACKAGE`.
Transitions in this class assign the field directly; the setter is only
used by a test in the same package.

BREAKING: `AbstractParallelEoSStreamProcessor#setState(State)` is no
longer public. It was a Lombok default rather than designed API, and
shipping a public read surface beside an unguarded write hole would be
incoherent.

Guarded by reflection rather than ArchUnit - the shared convention
suite uses `ImportOption.OnlyIncludeTests`, so a rule about production
modifiers would pass vacuously against an empty set.
Carries the control-loop run state, the broker-poller run state, the
failure cause as an `Optional`, and one derived verdict `isHealthy()`
for an orchestrator to act on.

Three things the type is deliberate about:

- A present failure cause overrides the state. A control loop that
  died can leave the state field untouched, so state alone would
  report a crashed instance as healthy.
- The poller state is diagnostic and excluded from the verdict. The
  two states diverge in entirely normal operation - `pauseIfRunning()`
  moves only the control loop, and before `poll()` the control loop
  reads UNUSED while the poller already reads RUNNING. Folding it in
  would manufacture false alarms.
- The verdict is liveness-scoped, and the javadoc says so: it answers
  "does this need restarting", never "is this making progress". A
  consumer processing nothing still reports RUNNING and still reports
  healthy. Progress is observed through the `pc.*` meters.

Both states are `@NonNull` so an incomplete snapshot is rejected at
`build()` rather than surfacing as an NPE when the verdict is computed.
Closes the cast. Building a Spring Boot Actuator health indicator
previously meant downcasting `ParallelConsumer` to
`ParallelEoSStreamProcessor`, because the only health-adjacent method
on the interface was `isClosedOrFailed()` and the failure cause was
declared on the concrete class. `getHealth()` returns a `PCHealth`
snapshot from the interface, so no cast is needed.

What is genuinely new is the detail, not the up/down answer: the typed
run state, the failure cause, and - because the two are reported
together - the ability to tell a clean shutdown from a crash, which
`isClosedOrFailed()` returns `true` for alike.

Added as a `default` method so no third-party implementor breaks;
there is no binary-compatibility gate in this build to catch that.
The default derives what it can from `isClosedOrFailed()`, and its
javadoc says plainly that those states are derived rather than
observed and that its empty failure cause carries no clean-versus-crash
meaning - without that, the fallback would report a crashed instance
as a clean shutdown, inverting the distinction the API exists for.

The override reads each volatile field exactly once into a local,
failure cause first, so a snapshot cannot contradict itself; worst case
it reports a failure beside a slightly stale state, never a healthy
verdict for an instance that had already failed.

`BrokerPollSystem` gains a package-private `getRunState()` read only -
its initialiser and transitions are untouched, so `pc.poller.status`
gauge values are unchanged.
Adds a Health Checks section covering the cast-free `getHealth()` call,
what each field of the snapshot means, and - explicitly - what the
verdict does not claim: healthy means not shut down and not failed,
never "making progress". A consumer processing nothing still reports
RUNNING and still reports healthy, so the section points at the
Micrometer meters for progress rather than letting a reader assume the
health check covers it.

The example is a tagged region in CoreApp, following the convention
already used for the close modes: it compiles, so it cannot silently
go stale, and it declares the variable as the `ParallelConsumer`
interface - which is the whole point of the feature and would stop
compiling if that stopped being true.

CONCEPTS.md gains run state, health verdict and failure cause, using
the control-loop / broker-poller vocabulary already defined there.

README.adoc is generated - regenerated via `./mvnw process-sources`.
…ng changes

The health-check API answers #126 but only the interface half of
#157 - the sharper "is it stuck?" question is not answered, and
#157 stays open as its home.

Records why, because the reasoning is the expensive part to rediscover:
`lastCommitTime` is not a progress marker (commits are only attempted
when the work manager is dirty, and only success sets dirty, so an
all-failing or idle workload freezes it on a healthy consumer); every
stall documented in this repo happens at `state == RUNNING`; and our
own ProgressProbe still has open RED calibration. Names #222's
offset-gap as the candidate mechanism and PCHealth as the extension
point it would land on.

Also records the residual exposure plainly: the verdict reads healthy
throughout the 120-second zero-poll incident in docs/solutions.

docs/refactoring.md gains the two release-gated follow-ups, a new
subsection for the two breaking changes already taken, and drops the
"rename the enum" bullet - that landed long ago, and leaving it would
have had major-release prep budget for finished work against the very
type this change relocates.
The plan doc for this branch, including the doc-review corrections that
caught three build-breaking assumptions before implementation started.
The snapshot read the failure cause first, on the stated reasoning that
it could then never report a healthy verdict for an instance that had
already failed. Reviewing the actual write order shows that is backwards.

Both failure paths write `failureReason` *before* transitioning the
state - `closeOnException` sets it then closes, and the control loop's
error handler sets it then calls `doClose`. So reading the cause first
admits this interleaving: read cause just before the failure lands (it
is still null), then read state just after the transition (CLOSED). The
result is CLOSED with no failure cause - which is precisely the shape
this API defines as a clean shutdown, reported for a crash.

Reading the state first closes that window. If the read observes a
state the failure produced, the happens-before edge on that volatile
read guarantees the cause written before it is visible too.

The window is narrow and neither order can be exercised
deterministically from a test, so this is argued from the write order
rather than reproduced. Found by the pre-review simplification pass,
which flagged the original javadoc's causal claim as unsupported - it
was worse than unsupported.
The hand-written `getRunState()` is what `@Getter(AccessLevel.PACKAGE)`
generates, and the field two lines below already uses plain `@Getter`.
Its explanation moves onto the field, which is where it belongs.

Also restores the import block ordering disturbed by the State package
move, and documents on `State#isRunningOrPaused()` that its unmapped-state
throw would surface out of a health check - so a new constant has to be
classified in the same change that adds it.
Three independent reviewers converged on this, and it is the defect
that mattered: `getHealth()` read only `state` and `failureReason`,
dropping the control-thread-liveness term `isClosedOrFailed()` carries.

The control task's handler is `catch (Exception e)`, so a Throwable
that is not an Exception - OutOfMemoryError, StackOverflowError, a
LinkageError from lazy classloading - terminates the thread without
writing either field. State stays RUNNING, no cause is recorded, and
`isHealthy()` returned true forever for a consumer that will never
process, commit or close again. The new API was therefore strictly
weaker than the boolean it was built to replace, on exactly the
failure a liveness probe exists to catch: a subsystem dead inside a
JVM that is still up. A Kubernetes probe wired to it would have kept
that pod in rotation.

Reconciled against `areMyThreadsDone()` - the same term
`isClosedOrFailed()` uses - so the verdict can never contradict it.
`controlThreadFuture` becomes volatile, since the health path now
reads it from a caller thread.

Two tests, both of which failed before the fix: one kills the control
loop with an Error, one asserts across the lifecycle that
`isClosedOrFailed()` implies not-healthy.

Also from the review:

- `PCHealth.isStateObserved()` marks the coarse interface fallback.
  Without it, a crashed third-party implementation reported CLOSED
  with no cause - byte-identical to the clean shutdown this API
  defines - and a caller holding only the snapshot had no way to tell.
  The caveat now travels on the value, not just in supertype javadoc.
- The poller state is documented as a lifecycle flag, not a liveness
  signal: it reads RUNNING both before the poll thread starts and
  after it dies.
- The concrete `getFailureCause()` is deprecated toward the snapshot's
  Optional one. They share a name and not a null contract, so
  `health.getFailureCause() != null` is always true, and silently so.
- `toString()` now carries the verdict, which is what an operator
  actually reads in a log line.
- The setState guard rejects `protected` too, since a public subclass
  in another package would inherit it onto the user-facing type.
- The poller state is now asserted after a close; every other
  assertion expected its own initialiser, so wiring the accessor to a
  constant would have passed the suite.
- The third-party stub carries a warning that implementing a new
  method there to fix a red build deletes the guarantee it guards.
…uals

The plan's U4 step 3 specified reading the failure cause before the run
state - the reverse of what shipped, and the order that reintroduces
the crash-reported-as-clean-shutdown defect. A future reader
reconciling the code to the plan would have put the bug back. Corrected,
with the reasoning, plus the control-thread reconciliation step the
review added.

Review residuals that were judged real but not actioned go in the
inflight ledger rather than a new file, per the one-place rule.
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

Dependency Review

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

Scanned Files

None

@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

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


Claude's review of #226

Todo list

  • Gather context (PR description, changed files list)
  • Read ParallelConsumer.java, PCHealth.java, State.java, and the AbstractParallelEoSStreamProcessor/BrokerPollSystem diffs
  • Trace the write-order (control loop) vs. read-order (getHealth()) memory-visibility argument by hand
  • Read the new/changed tests (PCHealthTest, ParallelConsumerHealthTest, StateTest, ControllerStateEncapsulationTest)
  • Compile and run the 34 new tests plus PCMetricsTest (verifies the State package move didn't break metrics wiring)
  • Check docs (CONCEPTS.md, README_TEMPLATE.adoc/README.adoc) for accuracy against the code
  • Post review

Summary

This is a well-scoped, carefully reasoned change. No bugs found; comments below are minor/optional.

What I verified directly:

  • ./mvnw -Pci -pl parallel-consumer-core -am -Dtest=PCHealthTest,ParallelConsumerHealthTest,StateTest,ControllerStateEncapsulationTest test → 34/34 pass.
  • PCMetricsTest also passes, confirming internal.State → parallelconsumer.State didn't silently break the metrics tagging in PCMetricsDef.
  • Traced the volatile read/write ordering by hand: writes are failureReason then state = CLOSED (both closeOnException and the control loop's catch (Exception e) handler at AbstractParallelEoSStreamProcessor.java:929-930), and getHealth() reads state before failureReason (AbstractParallelEoSStreamProcessor.java:282-284). Since both fields are volatile, this ordering is genuinely load-bearing and correct — reading state first means observing a post-failure state value guarantees the paired failureReason write is visible too, via the volatile happens-before edge. The Javadoc's reasoning holds up.
  • Confirmed doClose()'s state = CLOSED (line 741) is set inside the control task's Callable, before the task/future itself completes — so the areMyThreadsDone() reconciliation in getHealth() (line 287) only ever kicks in for the genuine "died without recording anything" case (an Error escaping the catch (Exception e)), not as a false-positive race against a normal close.
  • Confirmed the State.java package move is complete and consistent — no leftover references to internal.State, bin/check-copyright-headers.sh updated for the file rename, docs/refactoring.md updated to reflect the enum rename already having landed.

One thing I could not verify: the claim "two tests failed before the fix" (for ff15b14e). I attempted to check out the pre-fix versions of the three touched source files against current tests to confirm they'd go red, but the sandbox declined to approve that git checkout <rev> -- <paths> operation. Given how directly the test bodies exercise the exact gap described (aControlThreadKilledByAnErrorIsNotHealthy throws a StackOverflowError from the loop-end callback and asserts isHealthy() is false; aHealthyVerdictNeverContradictsIsClosedOrFailed asserts across the whole lifecycle), the claim reads as credible from inspection, just not independently re-executed.

Minor / optional notes

  1. docs/plans/2026-08-07-001-feat-health-check-api-plan.md (373 lines) and docs/inflight/parked-health-stall-signal.md (118 lines) are process artifacts rather than user-facing docs. Worth double-checking these are meant to be merged to master rather than kept branch-local or squashed out — not a defect, just confirm intent.
  2. AbstractParallelEoSStreamProcessor.getFailureCause() is now @Deprecated but not annotated @Deprecated(forRemoval = ...) or given a since — minor, since the Javadoc already explains it can't change before a major version, but consider adding since = "0.6.0.0" for tooling that reads it.
  3. The CONCEPTS.md/README addition references <<mertics,Micrometer meters>> — that's a pre-existing typo'd anchor name already on master ([[mertics]]), not something this PR introduced, and the new cross-reference does resolve correctly against it. Flagging only in case a future doc pass wants to fix the anchor name itself.
  4. The breaking-change call-outs (moving State out of internal, de-publicizing setState) are clearly justified and gated to land before 0.6.0.0 ships, consistent with docs/refactoring.md's existing convention for tracking such items.

The defect-review section in the PR description (dead-control-thread liveness gap, and the read-order/write-order ordering bug) both check out against the current diff — i.e., both are actually fixed in what's on this branch now, not just described as fixed.

@github-actions

github-actions Bot commented Aug 7, 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 28 28 ➖ 0
Duplicated lines 850 850 ➖ 0
Duplication 2.41% 2.41% ➖ 0
Rule Limit Status
Max duplication 5% ✅ Pass (2.41%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 75 75 ➖ 0
Duplicated lines 1087 1087 ➖ 0
Duplication 3.12% 3.20% 🙂 -0.08%
Rule Limit Status
Max duplication 5% ✅ Pass (3.12%)
Max increase vs base +0.1% ✅ Pass (-0.08%)

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

📌 Duplicate code detection tool report

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

🆕 New file similarities introduced

File A File B Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java 43.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java 34.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.6
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/PCHealthTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java 33.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.1

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java 33.3 35.4 +2.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.9 51.3 +0.5
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 61.1 61.5 +0.4
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.5 32.9 +0.4
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 54.8 55.2 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.7 32.1 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.1 37.5 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.8 33.1 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 34.0 34.3 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.4 40.7 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.9 37.1 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.5 45.8 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 35.5 35.8 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.5 31.8 +0.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.3 30.5 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.1 31.4 +0.2
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.3 32.6 +0.2
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 54.9 55.1 +0.2
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 39.5 39.7 +0.2
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 70.2 70.4 +0.2

...and 42 more

Full similarity report
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java

📄 parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java 35.49
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 33.46
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java

📄 parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 39.74
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 35.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 54.04 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 39.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 36.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 36.13
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 34.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 61.55 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 55.16 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.45
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.07
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.76
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.14
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 61.55 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 51.34 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.14
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.06
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.53
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.22
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java 43.59
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.65
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java 33.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 36.13
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 32.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java 43.59
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java 34.75
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 54.04 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 52.77 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 44.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.41
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.66
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 30.76
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.36
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.36
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 32.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 55.16 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 51.34 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 34.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.9
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 45.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 37.45
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 37.14
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 35.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.99
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 34.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 33.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 32.06
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 31.99
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 35.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/State.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java 34.75
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java 33.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java 35.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 31.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java 30.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 35.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 39.62
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 60.19 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 52.77 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 51.78 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 48.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 39.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 39.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 36.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 32.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 39.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.38
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.76
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java 32.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.22
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.14
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java 32.46
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 51.33 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.17
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.17
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 36.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 34.41
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 32.97
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 60.19 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 51.33 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 49.04
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 46.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.32
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 44.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 36.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 31.38
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 48.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.32
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 46.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 51.78 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 49.04
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 33.66
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.97
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 62.95 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.17
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.36
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 62.95 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.26
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.17
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.36
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java 30.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java 39.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java 36.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java 36.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java 39.79
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java 30.29
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java 31.02
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java 34.17
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 55.38 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 47.01
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 38.66
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 44.15
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 41.21
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 38.66
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java 36.39
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 36.39
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 60.72 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 47.01
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 41.21
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.28
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 60.72 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 55.38 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 44.15
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 39.0
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 48.61
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 35.51
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 48.61
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 37.75
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 49.06
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java 49.06
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 35.51
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 37.75
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java 30.29
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java

📄 parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java 39.74
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 33.46
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java 34.17
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 30.67
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 44.69
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 43.92
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.58
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 32.58
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 52.11 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 50.81 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 44.92
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.67
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 70.37 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 56.63 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 49.44
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.58
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 70.37 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 55.11 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 52.98 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 52.98 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 49.44
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 46.8
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 56.63 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 55.11 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 46.8
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.58
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/PCHealthTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/PCHealthTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java 33.29
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelConsumerHealthTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumer.java 33.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCHealth.java 33.65
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/PCHealthTest.java 33.29
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java 34.86
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java 34.86
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java 44.69
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 33.08
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java 43.92
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 33.08
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 90.31 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 89.64 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 89.64 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java 31.02
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 32.24
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 30.42
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 30.28
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 31.37
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java 39.9
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java 39.9
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java 36.51
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java 36.51
parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java

📄 parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java

File Similarity (%)
parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java 52.17 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 78.96 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 50.81 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 48.97
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java 71.18 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java 32.61
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java 32.04
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 90.99 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 90.32 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.64 ⚠️
parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java

📄 parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java

File Similarity (%)
parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java 52.17 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 78.96 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 52.11 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 50.21 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java 71.18 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java 32.61
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java 32.04
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 90.99 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 90.32 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.64 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.71
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 40.03
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 35.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 32.9
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.03
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 39.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 32.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.76
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.53
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 41.65
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java 39.62
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.65
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.37
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.46
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

📄 parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 39.0
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java

📄 parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 90.99 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 90.99 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 90.31 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java

📄 parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 50.21 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 48.97
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 44.92

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

✅ SpotBugs Report

No bugs found (new bugs only — baseline from base branch excluded).

`crashedControlLoopIsNotHealthyAndReportsTheRecordedFailure` errored in
CI while passing locally, three retries in a row.

The test body was fine; teardown threw. The test awaited
`getFailureCause() != null`, but the cause is written *before* the close
transition - the same ordering this PR's `getHealth()` read order
depends on - so the await returns with the close still in flight. The
test base deliberately skips closing an already-errored PC, and a
half-closed one fails that guard, so `@AfterEach` calls `close()` and
`waitForClose` rethrows the recorded failure out of teardown.

Awaiting `isClosedOrFailed()` is both the stronger assertion and the
condition the base's guard actually tests, so it is deterministic
rather than timing-dependent. Local runs happened to finish closing
first, which is why only CI saw it.
@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

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


Claude's review of #226

Todo list

  • Gather context (PR description, changed files list, prior review comment)
  • Diff against origin/master to see the full current state of the branch
  • Identify what changed since the last review (commit 01afff5a)
  • Verify the fix's reasoning against the actual write-order/teardown-guard code
  • Compile and run ParallelConsumerHealthTest
  • Post review

Summary

Only one commit landed since my last review of this PR: 01afff5a — fix(test) #126: await the terminal state, not just the recorded cause. Everything else (diff against origin/master, all other files) is unchanged from what I already reviewed and approved of. This update is a small, well-targeted fix to a flaky test, and it checks out.

What changed: ParallelConsumerHealthTest.crashedControlLoopIsNotHealthyAndReportsTheRecordedFailure previously awaited parallelConsumer.getFailureCause() != null before asserting on pc.getHealth(). The commit switches that await to parallelConsumer.isClosedOrFailed().

Why this is the correct fix, verified by reading the code directly:

  • In the control loop's exception handler (AbstractParallelEoSStreamProcessor.java:927-930), failureReason is set before doClose(shutdownTimeout) is called and before the exception is rethrown to complete the control Future — so getFailureCause() != null can become observably true while the instance is still mid-close (state not yet CLOSED, future not yet done).
  • The test base's @AfterEach (AbstractParallelEoSStreamProcessorTestBase.java:157) guards on exactly !isClosedOrFailed() — not on the failure cause — to decide whether to skip calling close() on an already-errored PC. A test that raced past the cause-only await but not yet past isClosedOrFailed() would fail that guard, causing @AfterEach to call close() on a half-closed instance, whose waitForClose/future.get() (AbstractParallelEoSStreamProcessor.java:687-692) rethrows the recorded failure — exactly the CI-only flake described in the commit message.
  • Awaiting isClosedOrFailed() instead makes the test's precondition match the teardown guard's precondition exactly, and since failureReason is always written before the state transition that makes isClosedOrFailed() true, the subsequent assertions on health.getFailureCause() remain safe.

Verified by running the tests directly (not just inspection): ./mvnw -Pci -pl parallel-consumer-core -am -Dtest=ParallelConsumerHealthTest test → 8/8 pass, including the fixed test, with clean teardown logs for every test in the class (no more races visible).

No issues found. This is a solid, minimal fix with a commit message that accurately explains the root cause. My prior "no bugs found" assessment for the rest of the PR still stands — this commit doesn't touch any of the production code or other tests I reviewed previously.

@astubbs

astubbs commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

Thanks — the independent re-derivation of the read/write ordering and the check that areMyThreadsDone() can't false-positive against a normal close are exactly the two things worth a second pair of eyes here. Here's how each note was handled.

1. docs/plans/ and docs/inflight/ as merged artifacts — intended, not accidental.
Confirming the intent you asked about: in this repo those are the sanctioned homes, per AGENTS.md's Where things live table — docs/inflight/ for in-flight work and docs/refactoring.md for deferred work, explicitly versioned rather than kept in an issue tracker. The parked- prefix on the inflight file is that directory's own convention for a deliberately deferred idea. Keeping the deferral reasoning in-repo is the point: the three findings that killed the stall signal (the dirty-flag asymmetry, stalls happening at RUNNING, ProgressProbe's open RED calibration) are expensive to rediscover, and #157 is a long way from being picked up.

2. @Deprecated(since = "0.6.0.0") — can't compile here, so recorded in Javadoc instead.
Good suggestion that this project can't take: since() was added to java.lang.Deprecated in Java 9, and core targets Java 8 bytecode via Jabel with --release 8. I tried it rather than assuming:

AbstractParallelEoSStreamProcessor.java:[242,17] cannot find symbol
  symbol:   method since()

--release 8 enforces the Java 8 API surface, so the annotation member genuinely isn't there. Applied the intent within that constraint — the Javadoc tag now reads @deprecated since 0.6.0.0 - prefer …, which is what the Javadoc tool surfaces anyway.

3. [[mertics]] anchor typo — agreed, out of scope.
Pre-existing on master; the new cross-reference resolves against it correctly. Left alone deliberately rather than mixing an unrelated anchor rename into a change that already carries two breaking changes.

4. Breaking-change gating — no action needed. Agreed.

On the one thing you couldn't verify (that the two tests failed before ff15b14e) — reasonable thing to flag rather than take on trust. They did, and the sandbox was right to stop you re-running it that way, since checking out only the source files would have mixed pre-fix production code with post-fix tests. For the record, the first failure was:

[a dead control thread is not healthy, even though nothing was recorded on it]
ParallelConsumerHealthTest.aControlThreadKilledByAnErrorIsNotHealthy:121

That gap is also why the reconciliation exists at all: three independent reviewers converged on getHealth() being strictly weaker than the isClosedOrFailed() it supersedes, because a Throwable that isn't an Exception leaves both fields unwritten. A liveness probe would have kept a dead pod in rotation — the precise failure the API was built to catch.

One thing worth naming that no reviewer caught, since it bit CI and not local: bin/check-issue-refs.sh scans the diff, but the CI gate also scans the PR body (added in #221). A bare #157 in the description passed locally and failed in CI. Not a defect in this PR, but the local script and the gate disagree on scope.

Review suggested `@Deprecated(since = "0.6.0.0")`. That cannot compile
here - `since()` was added to `java.lang.Deprecated` in Java 9 and core
targets Java 8 bytecode via Jabel with `--release 8`, so javac rejects
the member outright. Recorded in the `@deprecated` Javadoc tag instead,
which is what the Javadoc tool surfaces anyway.
@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

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


Claude's review of #226

Todo list

  • Gather context (PR description, changed files, prior review comments)
  • Diff against origin/master to find what changed since my last review (commit 01afff5a)
  • Read the new commit's diff and verify it compiles
  • Post review

Summary

Only one commit landed since my last review: 7c6dd796 — docs(api) #126: record the deprecation version in Javadoc. Everything else is unchanged from what I already reviewed and approved.

What changed: AbstractParallelEoSStreamProcessor.getFailureCause()'s @deprecated Javadoc tag now reads @deprecated since 0.6.0.0 - prefer … instead of @deprecated prefer … (AbstractParallelEoSStreamProcessor.java:237).

Context: this directly answers my prior minor note suggesting @Deprecated(since = "0.6.0.0"). The author tried that first and it doesn't compile — Deprecated.since() was added in Java 9, and this module targets Java 8 bytecode via Jabel with --release 8, so javac rejects the annotation member. Recording the version in the @deprecated Javadoc tag instead is the correct fallback (that's what the Javadoc tool renders regardless of the annotation member), and it's a purely additive, non-functional change.

Verified directly:

  • ./mvnw -o -pl parallel-consumer-core -am compile → clean compile, no errors or warnings introduced.
  • Read the surrounding Javadoc block (AbstractParallelEoSStreamProcessor.java:235-245) — well-formed, consistent with standard @deprecated <version> - <reason> convention, no broken {@link} refs.

No issues found. This is a trivial, correctly-reasoned fix to a documentation-only gap from my previous review pass. My prior "no bugs found" assessment for the rest of the PR still stands — this commit doesn't touch any production logic, tests, or other files.

…hanges)

Directory move only, so every path is 100% similar and git's exact-rename detection
cannot fail on it. The content edits follow in the next commit.

Generated by bin/rename-packages.sh.
Text edits only. No file moves in this commit, so it cannot dilute the rename
detection in its parent.

Generated by bin/rename-packages.sh.
astubbs added a commit that referenced this pull request Aug 19, 2026
…ttering drafts

The first cut of the ladder let three kinds of overstatement through, all named in review:

- 'implemented' now means the implementation intended to ship. A draft that will be replaced is at
  most a poc, and a draft that is not even the surviving direction does not advance the stage at
  all - so virtual-threads (#51 carries the upstream draft, not the fork's) drops to idea,
  and the health-check surface (#226, a working draft not yet accepted as the shipping
  surface) is a poc.
- 'limited-poc' joins the ladder below poc: a slice runs but the central claim is not proven
  end-to-end. The Streams and Connect previews move there - 'poc' alone read as 'we proved we can
  do it', which neither spike claims. Java-and-Kafka drops to idea: compiling at 17 is
  exploration; the Java 11 + Kafka 4 work has not started.
- 'planned' now means an implementation plan - the how. The self-tuning plan from #308
  decides the what, so it is requirements-drafted.

One promotion the review surfaced: the docs site has a drafted design on #316 (explicitly
design only - no site is built there), so it moves from idea to planned.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Aug 19, 2026
…f the GitHub flag

The previous commit defined stage_delivery as mirroring the carrying PR's GitHub draft state. That
was wrong twice over: the flag has not been used consistently here, so mirroring it records noise -
and if it were consistent, the field would violate 'never write down what a command can answer'.
The field earns its place precisely because it records what no command knows: whether the author
believes the artifact is ready to land.

Reassigned on that judgment: the proxy sidecar (#293) and the docs-site design
(#316) are pending-merge; Streams (#271), Connect (#269), the web GUI
(#268, blocked on #267), the health surface (#226) and the DLQ requirements
(#313) are drafts still being worked. The note records the direction of travel: PRs the
data calls drafts ought to become actual GitHub drafts over time, so the flag regains meaning.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@astubbs
astubbs marked this pull request as draft August 19, 2026 03:06
astubbs added a commit that referenced this pull request Aug 19, 2026
…st move its entry

The stages block says the PR advancing a track updates its entry's stage in the same change.
Until now nothing caught a miss, which is the exact failure mode docs/agent-harness.md warns
about: a rule that is merely available rots the field it protects.

Three layers, mirroring the issue-ref gate's shape:

- roadmap-stage-gate.js (+ 10 unit tests, run first in CI): reads the BASE branch's roadmap, finds
  entries whose pull_request names this PR, and requires the PR to touch docs/data/roadmap.yaml or
  opt out with 'roadmap-stage: N/A - <reason>' in its body. Base, not head, deliberately - master
  is the authority on which entries claim a PR. Dependency-free narrow parse, pinned by a test
  against the real file so a roadmap rewrite fails the test rather than silently blinding the gate.
- A merge-checklist line, so the rule also arrives in every merge-prep prompt via the existing
  injection hook - covering entries the gate cannot reach (tracking issue only, no pull_request).
- pull_request fields added to the three carrying entries that lacked one (health-check-surface ->
  #226, dead-letter-queue -> #313, docs-site -> #316), so the gate reaches
  all seven carriers.

actionlint was not runnable locally (not in mise); the workflow YAML parses, and CI's own lint
covers the rest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@astubbs

astubbs commented Aug 19, 2026

Copy link
Copy Markdown
Owner Author

Process note: this PR is the carrier of the roadmap entry health-check-surface in docs/data/roadmap.yaml (the stage ladder arrives with #314). Merging this PR changes how real that entry is, so the merge must move the entry's stage/stage_delivery in the same change — the stages block in that file owns the rule. Once #314 lands, the PR Checklist gate enforces this mechanically; the opt-out for a genuinely stage-neutral change is roadmap-stage: N/A - <reason> on its own line in this PR's body.

astubbs added a commit that referenced this pull request Aug 31, 2026
…anscript excerpts dropped

The owner supplied the agent-written handoff document from the strategy weekend as a
cross-reference against the note set. Preserved verbatim under docs/ideation/ with a provenance
header (self-dated 29 August - it predates the 30th's exchanges, which is why it says "W2" where
the later transcript says "Voice" and carries none of the Dune codenames). Where it and a note
disagree, the header says flag it, never silently reconcile.

The diff surfaced two whole chapters the pasted excerpts never carried, each now a note pointing
at the preserved document for detail. core-partition-virtualization.md: attack partition rigidity
from both sides - the intervention hierarchy (internal shards -> move -> extract the pathological
shard via an elastic shadow route -> merge -> evolve the topic generation -> only then scale,
"do not scale machines because Kafka happened to hash badly"), the partition-placement ceiling as
the one ceiling the runtime can remove itself, epoch-anchored routing state riding the frontier
protocol, topic generations making partition count reversible, count optimization from real key
distributions, virtual records with the full virtualization stack, and the boundaries (vanilla
apps keep vanilla semantics; internal Streams topics are the safest first target).
core-runtime-services-and-compat.md: distributed Interactive Queries as a first-class service,
semantic health (which directly extends #226 and candidates an answer to #157's
stall question via the admission states), embedded compatibility facades (Schema Registry with
Karapace/Apicurio named as prior art, Consul, Envoy/xDS - "compatibility is a distribution
strategy"), CDC to served read models with the replicas-vs-read-models language precision, and
backfill/replay as ordinary eligibility.

Smaller catches landed on their owners: the W2/Voice naming discrepancy flagged in the glossary
for the owner to settle, plus the trademark-clearance backlog item; the 13-stage tutorial
curriculum and the canonical-example-must-compose law wired into the executable-progression note;
the OSS/enterprise commercial-shape hypothesis and the Observe -> Recommend -> Shadow -> Enforce
authority ladder onto the thesis briefing; the architectural-stubs rule and the section-24 seam
inventory onto shared-execution-resources; broker-as-resource-graph-node onto the fleet note; and
the birthday-card story seed with its explanation rule onto the content series.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PFA3CXkGc2m32cBJMAWTK
@astubbs astubbs added the 0.6.0.0 Targeted at the 0.6.0.0 release label Sep 1, 2026
@astubbs astubbs added this to the 0.6.0.0 milestone Sep 1, 2026
astubbs added a commit that referenced this pull request Sep 8, 2026
… with its premise corrected

Owner ruling, 2026-09-08, on the sweep's proposal 19. The note goes to
`deferred - after v6` and keeps the audit as the record. Its central
premise was corrected on the way rather than left for the next reader to
trip on: `state` is volatile on master today, so the visibility half of
the rows that named it is closed; the check-then-set race in
pauseIfRunning/resumeIfPaused and the absent per-method contract are what
the blocker rests on. #226 no longer carries the volatility change
(it is the health-check surface PR) and #51 is closed, so the two
bullets that described them as live work are rewritten.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W511R2TZFAqEiqgS5yogTv
@astubbs astubbs removed the 0.6.0.0 Targeted at the 0.6.0.0 release label Sep 17, 2026
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.

confluentinc#71: Health-checks

1 participant