Skip to content

ci(hooks): warn when either disk this project fills is running low - #339

Merged
astubbs merged 16 commits into
masterfrom
ci/warn-low-disk-hook
Aug 26, 2026
Merged

astubbs merged 16 commits into
masterfrom
ci/warn-low-disk-hook

Conversation

@astubbs

@astubbs astubbs commented Aug 24, 2026 •

Copy link
Copy Markdown
Owner

Independent of any feature work: a dev-machine guard. It serves no single issue, so it cites none.

Description

A fan-out of eleven per-language demo agents took the host volume from ample to 8.8 GiB free of 926 GiB in about an hour, and took the Docker VM's virtual disk with it. One agent's build died outright; two others pruned under each other. Nothing warned, because the session had started with plenty of room - and a SessionStart check would have reported all clear for exactly that reason.

The only instant that can see what the last command left behind is just before the next one. So this is a PreToolUse hook on Bash, and it never blocks.

Why no if filter

Same reasoning as the squash guard: Bash(docker *) would miss cd demo && docker compose up and every wrapper script, which is most of how containers actually get built here. It earns the right to run on every call by costing two stat-class syscalls - measured at 7ms, no docker CLI on the fast path - and by saying nothing unless a threshold trips, then at most once per ten minutes unless the band worsens.

Two properties that are load-bearing

It must never exit non-zero. A disk warner that blocked Bash on a full disk would remove the very commands needed to clear the disk. The worst case is asserted directly: even at the critical band it still allows the call.

Docker Desktop's disk image is a high-water mark - a sparse file that grows and never shrinks, so pruning 17 GB does not shrink it by a byte. A cheap always-on trigger is confirmed against a cached docker system df before anything is said, and that correction applies only to the sparse-image reading, never to Linux's live filesystem one.

The self-test is the interesting part

This hook has the failure mode every warn-only hook shares: its correct behaviour on a healthy machine is to print nothing, which is byte-identical to being broken, unregistered, or absent. So almost every case forces it to speak, and the one case asserting silence is paired with forced cases proving the same call path can be made to talk.

Every case pins all four thresholds rather than inheriting them. An earlier version left the host thresholds at their defaults and three cases flipped to failing mid-session when the machine dropped below the 25 GiB default warn line - a self-test for a disk warner must not be a function of the disk.

The df-unreadable cases exist for the same reason: a hook that fails to measure and therefore says nothing is indistinguishable from one reporting a healthy disk, so the guard is the absence of a reading rather than a default of "fine". Three cases shadow df on PATH; a fourth uses the same stub with a plausible answer, to prove the stub did not simply break the invocation.

What review found, and why it is folded in rather than stacked

Review hardened this substantially, and those fixes are folded into the feature commit so that no point in the history carries the vulnerable version for a bisect to land on:

  • Arbitrary command execution. The throttle stamp lives in shared /tmp and was read back into $((now - last_at)). Bash arithmetic resolves a non-numeric operand as a variable name, recursively, so a crafted stamp ran a command as the user. Demonstrated, not theorised. The value is now shape-checked before it reaches the evaluator.
  • "It must never exit non-zero" was false. Any non-numeric first token - garbage, a torn write - aborted under set -u with exit 1, taking the Bash call away. Likeliest exactly when the disk is full, which is the one moment this must not block.
  • mkdir -p succeeds against a directory another user owns, so the state dir was never really checked; a symlinked last-warning gave arbitrary file truncation. Now umask 077 plus an ownership test, both builtins.
  • A device name containing a space - macOS autofs map auto_home - shifted df's columns so $4 was Used, reported as free: 94 GiB "free" on a disk with 1. Now anchored on the POSIX capacity column.
  • A fully pruned Docker could never clear its own alarm: the correction fired only when the total was above zero, conflating "holds nothing" with "could not read".
  • A torn docker system df cache read undercounts, producing exactly the false "fine" this hook exists to prevent. Now a temp file and an atomic rename.
  • A future-dated stamp - an NTP step, a resumed VM - made the age negative and silenced the warner until the clock caught up.

Each is paired with the mutant that kills it: twelve mutants injected, the hook restored byte-identical each time, every fix killed by exactly the case that should kill it.

One of the new cases was itself decorative and had to be repaired: the injection case used a payload containing a space, and read splits on whitespace, so it could never have executed - it passed with every guard deleted. A test asserting a security property has to be run against the unguarded code before it is believed.

Verification, with a control

The hook self-test goes from 173 passing cases to 208 on this branch, and both numbers are green: 0 failures, measured serially on this branch and on a detached master worktree. (The figures were 154 and 189 before master's own new cases arrived; the branch's contribution is the same 35 either way.)

An earlier version of this description claimed the suite reports 14 failures "byte-identical to the set a pristine master worktree reports". That was wrong, and the way it was wrong is worth stating: pristine master is green when run serially, and the 14 appeared only because both sides were measured while other work ran concurrently on the same box. Two contaminated runs were being compared to each other.

The concurrency failures are real, and one of them is fixed here in its own commit: the push-reminder section cleaned up throttle stamps in a machine-global ${TMPDIR:-/tmp} location that the hook also wrote to, so two copies of the suite deleted each other's stamps mid-run. Four concurrent runs: 4/4 failed before, 0/4 after.

Re-measured after the master merge, against a detached origin/master worktree as the control. Master: 4/4 red, five push-reminder assertions among the failures. This branch: 3/4 red, zero push-reminder failures - so the fix survived the merge and still works. Every remaining failure is one arm, check-merge-outstanding-work.sh's note fixture, which writes docs/inflight/pr-90001-selftest.md into the real working tree at a fixed path so concurrent copies race between one run's write and another's cleanup. It is pre-existing on master, untouched here, and already fixed on #350 - deliberately left alone rather than have two branches edit the same lines.

What the new macOS lane found

Master added a shell: macos job that runs every bin/test-*.sh on macos-latest under BSD userland and a bash pinned to the system 3.2. Merging master therefore parsed this suite with bash 3.2 for the first time, and it went red - on this branch's own code, not on the lane.

The registration meta-test ran python from a heredoc inside a command substitution, $(python3 - <<REGCHECK ... ). Bash 3.2 scans a substitution for its closing paren treating the heredoc body as shell text, and does not recognise # comments while doing it - so an ordinary apostrophe in a python comment was the fifth and unbalancing single quote in that body, and 3.2 read to the end of the file looking for the close. Bash 5 parses the same text correctly, which is why every local run and every ubuntu lane was green.

The way it presented is worth as much as the defect: the suite exited 2 after some sixty cases had already passed, and both bin/check-all.sh and the macOS job classify exit 2 as CANNOT RUN. A gate that could not measure, wearing the message of a missing tool.

Fixed by writing the heredoc to a file at top level and running the file, so the body is never scanned as shell at all - a narrower fix that merely balanced the quotes would leave the next author one apostrophe away from the same red. The python is byte-for-byte unchanged. Three python heredocs inside $( ... ) survive on master; their bodies happen to balance when read as shell, which is luck rather than a contract, so a bin/check-shell-hazards.sh row for the class is queued in the inflight note rather than added here.

This also moves the "never verified against BSD userland" item: the lane now exercises the real stat -f arm and the df -Pk column read on a genuine BSD box. It still does not reach the Docker Desktop sparse-image path, since a hosted macOS runner has no Docker.raw.

What changed after the review passes

Two review passes signed off at 8a50303 and aa1635e7. Everything below landed after them, and was
reviewed at 57c333cbf.

The per-UID throttle was the finding those passes left open, and it is now settled. Two reviewers
independently flagged that one stamp per Unix user means the first agent to notice silences every
other concurrent session for the window - in this PR's own motivating incident, ten of the eleven
agents could not have been told, while they were the ten still filling the disk. It stayed open
because the obvious fix trades one failure for another: warn everybody and eleven agents may each
start pruning, which the same incident shows is a real cost rather than a hypothetical - two of them
pruned under each other.

Settled by warning every session, with the message carrying the safety: each agent is told to
report the situation and suggest a reclaim rather than run one, so the operator is the gate
against duplicate effort instead of the throttle. An operator can tell duplicate cleanups apart,
which a ten-minute timer cannot. The keying is best-effort by design - session_id is read past
every fast-path exit so a healthy disk still forks nothing extra, with no python3 on that path, and
an absent or unparseable payload falls back to the shared stamp, which is precisely the old
behaviour. The failure this file refuses is "warned" becoming "silent", and a coarser throttle is not
that. The value reaches a file path, so it is filtered with tr -cd rather than escaped, and capped.

The stamp is now written after the message rather than before it, so a kill between the two
cannot swallow a warning for the whole window - likeliest exactly when the disk is full, which is
this hook's entire subject.

The registration assertion caught a hook that was registered and never self-tested, and it was
right: remind-master-drift-on-push.sh, 205 lines from #357, had no coverage of its own.
Fixed here rather than exempted - the same trade #338 took, widen the check and fix what it
finds - because a gate with a recorded hole is a gate nobody trusts. Twelve cases, each
mutation-checked: dropping the SHA throttle, reporting base-only files as overlap, reading HEAD
instead of the working tree, and dropping the behind-count guard each fail exactly the case that
names it.

That new section then caused a CI-only failure, which is worth recording rather than just fixing.
It ended by returning to the repo root, and the section after it reaches the push fixture's scratch
repo by inheriting the cwd - its enriched-refusal cases need a findable PR, which needs a named
branch. A local checkout is on a branch, so it passed; every runner's checkout is detached, so it
failed. It now restores whatever cwd it found, which is correct whatever the following sections need
rather than correct only for today's arrangement. It also explains a dangling reference in master's
own suite - "see the note at the top of the drift section", pointing at a section #357 never
added.

The count check now pins both numbers. Master reworded the docs/agent-harness.md sentence to
distinguish hook scripts from registrations while this branch's check still pinned the older
single count, so merging the two went red on the doc rather than on either change - the check
working, not failing. It now verifies eleven scripts and twelve registrations independently, each
confirmed by making it wrong in turn.

Where it came from

Extracted from the language-proxy stack, where it was written. Nothing in it is feature-specific: .claude/ binds Claude Code sessions only, so it can never run in CI, and CI runners are reaped anyway. Included on its own because the problem it catches is not specific to that work.

Checklist

  • Docs updated - docs/agent-harness.md gains the hook's entry, the no-if reasoning, and the paragraph on self-testing a warn-only hook
  • User-facing feature documentation data added under docs/features/ - N/A - a local development guard for Claude Code sessions; it changes nothing a user of the library can observe and never runs in CI.
  • Tests added/updated - 47 new cases in bin/test-check-agent-hooks.sh (35 for this hook, plus 12 covering remind-master-drift-on-push.sh, which the new registration assertion found registered and untested), including the never-block assertion, the four df-unreadable cases with their positive control, both halves of the high-water-mark correction, the throttle escalation, a case per security fix paired with the mutant it kills, and a registration assertion (every registered hook is self-tested and vice versa)
  • Title & body reflect the final content of this PR
  • Ran ce-simplify and ce-code-review locally - both; that pass is what produced the P0 security fixes folded into the feature commit, the twelve-mutant verification, and the still-open findings note

Known open, tracked in docs/inflight/ci-low-disk-warner-open-items.md

  • The Docker Desktop sparse-image path still has not run against BSD userland. The stat -f arm and the df -Pk column read now do, on master's shell: macos lane, but a hosted macOS runner has no Docker.raw, so the sparse-file branch itself remains unexercised.
  • df on the fast path has no timeout, so a hung NFS mount would freeze the session; portable bounding is awkward, since timeout is GNU coreutils.
  • Linux docker_root is hardcoded to /var/lib/docker, ignoring daemon.json's data-root.
  • Silencing is only possible through the PC_DISK_* variables, whose own comment frames them as test-only.

Commits are atomic units rather than a development log: the hook and its self-test, the pre-existing push-reminder flake fix, the per-session keying decision, the drift-hook coverage, the cwd repair, and two master merges whose conflict resolutions are explained in the merge commits themselves.

@github-actions

Copy link
Copy Markdown

Dependency Review

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

Scanned Files

None

@github-actions

github-actions Bot commented Aug 24, 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 31 31 ➖ 0
Duplicated lines 971 971 ➖ 0
Duplication 0.13% 0.13% ➖ 0
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.13%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

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

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Aug 24, 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:

✅ No new or increased file similarities introduced by this PR.

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

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

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

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

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

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

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 58.58 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 43.25
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 38.04
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 52.58 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.55
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 34.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 33.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.91
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 31.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 63.93 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 57.85 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 42.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 35.32
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 33.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.72
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 30.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 63.93 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 53.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 39.95
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 34.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 34.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 34.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 32.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 52.58 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 51.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 42.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 31.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 31.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 57.85 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 53.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 48.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 36.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 34.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.55
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 48.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 39.95
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 35.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 36.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 35.32
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 34.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 33.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 30.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java 44.54
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 33.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 32.78
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCommitRetryBudgetTest.java 30.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java

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

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

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

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 39.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 57.93 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 51.86 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 49.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 47.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 40.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.55
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 32.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.33
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 40.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 31.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 30.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 32.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 32.55
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleTestEnv.java 31.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosisTest.java 33.71
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java 33.16
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 38.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 33.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 49.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.35
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 34.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 32.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 30.54
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 57.93 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 49.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 46.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 44.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 44.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 42.27
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 33.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 30.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 47.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 44.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 44.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 49.41
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 46.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 44.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 31.84
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 31.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.54
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 61.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 46.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 35.75
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.35
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 31.91
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 61.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 44.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 34.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 31.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 30.33
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 40.14
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 32.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 34.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 40.14
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java 33.16
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AmbientProbeExtensionTest.java 31.32
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 57.09 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 43.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 35.87
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 39.83
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 39.21
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 35.87
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 54.2 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 43.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 39.21
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 31.15
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 57.09 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 54.2 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 39.83
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 35.53
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 40.4
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 40.3
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.47
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 36.81
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 33.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java 30.03
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 46.71
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 38.47
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 32.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 54.1 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 46.71
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 40.3
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 36.23
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 33.52
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java 32.45
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java 43.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 33.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java 30.57
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 36.23
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 32.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java

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

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

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 36.81
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 33.52
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/utils/ManagedPCInstance.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/KafkaTestUtils.java 32.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AmbientProbeExtensionTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java 31.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java 39.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java 34.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 32.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 51.78 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 50.19 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 44.7
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java 30.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java

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

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

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

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

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

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

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 46.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 31.48
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 87.21 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.27 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.27 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.33 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCommitRetryBudgetTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 30.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleTestEnv.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 31.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosisTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java 33.71
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 34.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java 38.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 31.35
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/KafkaTestUtils.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java 32.16
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 32.66
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 34.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckHarness.java 32.66
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 32.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 31.27
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 43.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 32.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueTest.java 30.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 30.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueTest.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 43.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 34.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 31.27
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 30.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java

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

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

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 82.33 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.08 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.49 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 82.33 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 82.08 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.49 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.83 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 80.34 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 79.04 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.19 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 48.48
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java

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

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

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorUnitTestBase.java 31.98
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.27 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.0 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.07 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java

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

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

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

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 79.04 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 51.78 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 50.01 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java

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

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

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

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyUnitTestBase.java 31.98
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.27 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.0 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.07 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.67 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.19 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 42.49
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.63
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.45
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 37.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 34.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 32.23
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

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

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 41.75
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 35.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 32.29
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 43.74
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.63
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 39.96
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 87.21 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.0 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.0 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.58 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.08 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.08 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

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

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

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

⚠️ SpotBugs Report

291 bug(s) found (rule-level exclusions only - see docs/inflight/static-spotbugs-rule-registry.md). See the annotations on the Files Changed tab for details.

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
PCMetricsTest.metricsRegisterBinding 🟡🎲 passed (flapper) ⚠️ unowned proves nothing - passes most runs by nature
ProducerManagerTest.producedRecordsCantBeInTransactionWithoutItsOffsetDirect 🟡🎲 passed (flapper) #262 proves nothing - passes most runs by nature

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

@astubbs
astubbs marked this pull request as draft August 24, 2026 05:35

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

lgtm

A fan-out of eleven per-language demo agents took the host volume from ample to
8.8 GiB free of 926 GiB in about an hour, and took the Docker VM's virtual disk
with it. One agent's build died outright; two others pruned under each other.
Nothing warned, because the session had started with plenty of room - and a
SessionStart check would have reported all clear for exactly that reason.

The only instant that can see what the last command left behind is just before
the next one. So this is a PreToolUse hook on Bash, and it never blocks: a disk
warner that blocked Bash on a full disk would remove the very commands needed to
clear the disk. The worst case is asserted directly.

No `if` filter, for the same reason as the squash guard - `Bash(docker *)` would
miss `cd demo && docker compose up` and every wrapper script, which is most of
how containers actually get built here. It earns always-on by costing seven forks
at 8-10ms with no docker CLI on the fast path, and by saying nothing unless a
threshold trips, then at most once per ten minutes unless the band worsens.

Docker Desktop's disk image is a high-water mark: a sparse file that grows and
never shrinks, so pruning 17 GB does not shrink it by a byte. A cheap always-on
trigger is confirmed against a cached `docker system df` before anything is said,
and that correction applies only to the sparse-image reading, never to Linux's
live filesystem one.

Review hardened it substantially. Those fixes are folded in here rather than left
as later commits, so no point in the history carries the vulnerable version:

  - The throttle stamp lives in shared /tmp and was read back into
    $((now - last_at)). Bash arithmetic resolves a non-numeric operand as a
    variable name, recursively, so a crafted stamp ran a command as the user.
  - "Never exits non-zero" was false: any non-numeric first token aborted under
    set -u with exit 1, taking the Bash call away - likeliest exactly when the
    disk is full.
  - mkdir -p succeeds against a directory another user owns, so the state dir was
    never really checked, and a symlinked last-warning gave arbitrary file
    truncation. Now umask 077 plus an ownership test, both builtins.
  - A device name containing a space - macOS autofs `map auto_home` - shifted
    df's columns so $4 was Used, reported as free: 94 GiB "free" on a disk with
    1. Now anchored on the POSIX capacity column.
  - A fully pruned Docker could never clear its own alarm: the correction fired
    only when the total was above zero, conflating "holds nothing" with "could
    not read".
  - A torn docker-df cache read undercounts, producing exactly the false "fine"
    this hook exists to prevent. Now a temp file and an atomic rename.
  - A future-dated stamp - an NTP step, a resumed VM - made the age negative and
    silenced the warner until the clock caught up.

The self-test is the interesting part, because this hook has the failure mode
every warn-only hook shares: its correct behaviour on a healthy machine is to
print nothing, which is byte-identical to being broken, unregistered, or absent.
So almost every case forces it to speak, and the one case asserting silence is
paired with forced cases proving the same call path can be made to talk. Every
case pins all four thresholds rather than inheriting them - an earlier version
left the host thresholds at their defaults and three cases flipped to failing
mid-session when the machine dropped below the 25 GiB warn line. A self-test for
a disk warner must not be a function of the disk.

Each fix above is paired with the mutant that kills it: twelve mutants injected,
the hook restored byte-identical each time, every fix killed by exactly the case
that should kill it.

docs/agent-harness.md now asserts the registered-hook count rather than stating
it. It said six against eight registered, having drifted twice.
Pre-existing, and nothing to do with the disk warner: the push-reminder section
cleaned up throttle stamps with `rm -f "${TMPDIR:-/tmp}"/pc-push-reminder-*` and
let the hook write them to that same shared location. Two copies of the suite
running at once therefore deleted each other's stamps mid-run.

Measured on a pristine master worktree: run serially it is green - 154 ok, 0
failures, five runs out of five. Run four at a time in one directory and all four
fail. That is why the flake stayed invisible, and it is why this PR's own
description claims 14 failures "byte-identical to the set a pristine master
worktree reports": two contaminated runs were being compared to each other. The
description needs correcting before merge.

The hook already honours TMPDIR, so this is a test-only change - the section gets
its own directory and stops competing for a machine-global name. Four concurrent
runs: 4/4 failed before, 0/4 after.

A second concurrency cause remains, in the merge-outstanding section, which
writes a note into the real working tree. That one is fixed on
#350 and is deliberately left alone here rather than
have two branches edit the same lines.
The review found and fixed a P0 - a throttle stamp in shared /tmp read
back into bash arithmetic, which resolves a non-numeric operand as a
variable name recursively, so a crafted stamp ran a command as the user.
What is left needs decisions rather than fixes.

The one that matters: the throttle is keyed per-UID and therefore shared
across sessions, so in this PR's own motivating incident only the first
of eleven agents would have been warned. A disk warner that goes quiet
for everyone else is the failure it was written to prevent.

Also records that the body's 14-failure verification claim is false -
pristine master is green when measured serially - and that the BSD paths
have still never run on BSD.
@astubbs
astubbs force-pushed the ci/warn-low-disk-hook branch from f029bf7 to 8a50303 Compare August 24, 2026 23:35
@astubbs

astubbs commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

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


Review

  • Gather context (PR body, changed files, CLAUDE.md/AGENTS.md conventions)
  • Read .claude/hooks/warn-low-disk.sh in full (via git show HEAD:... — see note below on why)
  • Read bin/test-check-agent-hooks.sh additions
  • Read .claude/settings.json diff and docs/agent-harness.md diff
  • Read docs/inflight/pr-339-review-findings.md
  • Cross-check the security fixes described in the PR body against the actual code
  • Post review feedback

Environment note (not a PR defect)

My checkout has .claude/hooks/warn-low-disk.sh deleted and the new hook block reverted out of
.claude/settings.json (confirmed with git diff HEAD -- .claude/settings.json / git status).
This is the harness protecting my own session: this PR registers a new unfiltered PreToolUse:Bash
hook, and a grant a PR adds isn't in effect for the agent reviewing it, so it gets stripped before I
start rather than auto-executing on every Bash call I make. I read the hook via git show HEAD:.claude/hooks/warn-low-disk.sh instead. Separately, my Bash tool required interactive approval
to run bin/test-check-agent-hooks.sh (and even the allowlisted bin/check-copyright-headers.sh)
in this session, so I could not execute the self-test myself — the 154→189/0-failures claim is
evidence from the PR body and the docs/inflight/pr-339-review-findings.md note (which independently
re-ran it and corrected an earlier wrong claim about the 14-failures comparison), not something I
reproduced.

Findings

Read the hook, the diff against origin/master, and the new test cases closely — nothing to add
beyond what the PR body and docs/inflight/pr-339-review-findings.md already disclose. Specifically
verified, by reading rather than assuming:

  • fs_probe locates the Capacity column by scanning for the first NF field matching
    /^[0-9]+%$/ rather than counting from the left, and rebuilds the device name from every field
    before it — so a spaced device (map auto_home) reconstructs correctly and Available (not Used)
    is what gets read. Matches the PR's autofs claim, and test-check-agent-hooks.sh's "a df device
    name containing a space does not shift the free-space column" case exercises exactly this path.
  • Never-block invariant: every value that reaches $(( )) — the throttle last_at and
    PC_DISK_VM_ALLOC_GIB — is shape-checked against *[!0-9]* before arithmetic, closing the bash
    "non-numeric operand resolves as a variable name" hole the PR describes. The state-dir ownership
    guard ([ -O "$state_dir" ], after umask 077, before mkdir -p) closes the mkdir -p-succeeds-
    on-a-directory-you-don't-own gap the same way. Both read as advertised.
  • High-water-mark correction: gated on vm_is_high_water, so it never touches the Linux live
    df reading (only set on the Docker Desktop sparse-image branch) — confirmed the Linux branch
    never sets it. The "fully pruned Docker" case is handled by counting recognised rows
    (df_rows == df_known) rather than testing total > 0, so an empty daemon clears the alarm and an
    unparseable row doesn't get treated as "empty" — matches the PR's stated fix for the
    conflated-zero bug.
  • docs/agent-harness.md and .claude/settings.json agree: the PR also documents two
    pre-existing undocumented hooks (remind-inflight-on-push.sh, check-history-rewrite.sh) while
    it's touching this section, and the new self-test "registration" case cross-checks the doc's hook
    count against settings.json mechanically — a stale count can't drift silently again.
  • docs/inflight/pr-339-review-findings.md is consistent with the PR body (both state the
    original "14 failures, byte-identical to master" claim was wrong and why), correctly tagged
    (bug / blind-spot), and the open items (per-UID throttle sharing, BSD never exercised, no df
    timeout, hardcoded docker_root) match what the PR body's own "Known open" section says — nothing
    duplicated, nothing new to file.

No correctness issues found in the parts I could statically verify. The design is unusually
well-defended for a warn-only hook (fails open on every path, silent-by-absence rather than
silent-by-default), and the self-test suite's registration check and "positive control" pairing for
every silence-assertion (the pattern the PR calls out as the interesting part) both hold up under
reading. Agrees with @astubbs's "lgtm".

…merge

`bin/check-branch-self-reference.sh`, added to master in da91f3f after this
branch was cut, failed the `inflight: tags` lane on two self-references in
`docs/inflight/pr-339-review-findings.md`. The gate's contract is not "do not
cite your own PR" - PRs are permanent - but "write the mention as it will read
AFTER this lands", then attest to that judgement with a marker.

Rewriting for that turned up a section that was already stale, which is the
gate earning its keep rather than a formality:

- "The PR body's verification claim is false ... Correct the body before merge"
  was an instruction to the author that had already been carried out. It is now
  a durable caveat about the measurement instead: the suite's failure count is
  only meaningful measured serially, and an earlier 14-failures comparison was
  wrong because both of its runs were contaminated by concurrent builds.
- "on this branch" / "fixed here" become #339 in the past tense, so the
  sentences survive the branch being deleted.
- The BSD section pointed at a session scratchpad for the staged macOS
  commands. That scratchpad no longer exists, so the note now says a macOS run
  starts from scratch rather than implying the work is half-done somewhere.

Four `post-merge: checked` markers, verified load-bearing by a red control:
stripped, the gate reports 4 unconfirmed self-references and exits 1; restored,
it exits 0. `bin/check-inflight-tags.sh` (90 notes valid),
`bin/check-issue-refs.sh` and `bin/test-check-agent-hooks.sh` (189 ok, 0 failed,
run serially) all stay green.

The note keeps its `pr-` prefix and its #339 title, matching
`pr-323-docs-outstanding.md` and `pr-324-tooling-outstanding.md`, which sit on
master with their PRs merged.
@astubbs

astubbs commented Aug 25, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Head is now aa1635e76. The previous review pass ran against 8a5030331; since then one commit landed — docs(inflight): make the astubbs#339 findings note read correctly after the merge — which fixes the inflight: tags lane.

Worth steering at, since the last pass could not execute anything in its sandbox:

  • docs/inflight/pr-339-review-findings.md is the only file that changed. bin/check-branch-self-reference.sh (new on master in da91f3f61, after this branch was cut) was failing it on two self-references. Please check the rewritten sentences actually read correctly after this merges — that is the judgement the four post-merge: checked markers attest to, and no grep can verify it.
  • The section formerly titled "The PR body's verification claim is false" carried an instruction ("Correct the body before merge") that had already been carried out. It is now a durable caveat about measuring the suite serially. Please confirm nothing else in the note is similarly already-stale.
  • The remaining red check, Chaos Pain Suite, is not this PR: it was the sole failing job on five other unrelated branches in the same window on the shared self-hosted runner, passed on two branches in quieter slots, and this PR touches no .java, no pom.xml and no workflow. See docs/inflight/test-chaos-class2-red-was-runner-contention.md. It is not a required check.
  • Unchanged and deliberate, per earlier review rounds: the PreToolUse hook has no if filter (a Bash(docker *) matcher misses cd demo && docker compose up), it must never exit non-zero, every self-test case pins all four thresholds rather than inheriting them, and the four df-unreadable cases plus their positive control all stay.

@claude

claude Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 2m 29s —— View job


Review

  • Gather context (trigger comment steering points, git log since last review pass 8a50303)
  • Read the diff of the one new commit (aa1635e) against 8a50303
  • Check the four rewritten sentences in docs/inflight/pr-339-review-findings.md for post-merge readability
  • Confirm nothing else in the note is stale
  • Check docs/inflight/test-chaos-class2-red-was-runner-contention.md and the Chaos Pain Suite claim
  • Confirm the no-if-filter / never-exit-nonzero / pinned-thresholds properties are unchanged since last pass
  • Post final review

Findings

Head aa1635e7 — confirmed the only change since the prior review pass (8a5030331) is the single commit aa1635e, touching exactly docs/inflight/pr-339-review-findings.md (git diff --stat 8a50303 aa1635e). .claude/hooks/warn-low-disk.sh, .claude/settings.json, bin/test-check-agent-hooks.sh and docs/agent-harness.md are byte-identical to what the last pass reviewed, so the previously-verified properties — no if filter, never exits non-zero, every self-test case pins all four thresholds, the four df-unreadable cases plus their positive control — stand without re-checking.

1. The four rewritten self-references — checked against bin/check-branch-self-reference.sh's actual rule, not just its pass/fail. Grepping the note for 339 (the gate's own detection pattern) finds exactly four mentions: the title (line 2, covered by the standalone `` on line 1, which the gate treats as covering the line below it), and three paragraph blocks (7–11, 26–32, 34–39). Read each post-merge:

No unmarked self-reference slipped through either: a grep for generic phrasing (this PR, this branch) the gate can't detect by pattern returns nothing — the rewrite consistently names astubbs#339 rather than using a deictic that would go stale silently.

2. Nothing else stale. The only instruction-shaped sentence in the old note was "Correct the body before merge" under the false-verification-claim section; the PR body's own "Verification, with a control" section already carries that correction (the "An earlier version of this description claimed... That was wrong" paragraph), so the instruction was satisfied before this commit turned it into a durable caveat. The "Never verified against BSD userland" section changed too (scratchpad no longer exists) but never named the branch/PR, so it wasn't gated — and it reads as a standing fact either way. The remaining sections ("Smaller, still open", "Worth keeping") are findings, not instructions, and needed no rewrite.

3. Chaos Pain Suite. Confirmed mechanically: this PR's diff (git diff origin/master...HEAD --stat) touches only .claude/hooks/warn-low-disk.sh, .claude/settings.json, bin/test-check-agent-hooks.sh, docs/agent-harness.md, docs/inflight/pr-339-review-findings.md — no .java, no pom.xml, no workflow file, so it cannot be the cause of a chaos-suite regression through code it changed. chaos-pain.yml's own header states the per-PR-commit chaos job ("highcpu / Chaos Pain Suite") is explicitly non-gating ("NEVER PR-gating... Failures are investigation food"), consistent with the linked note's account of shared self-hosted-runner contention producing spurious Class-2-shaped reds. Current get_ci_status on this commit shows highcpu still queued and everything else green — no failure to explain on this push at all. I could not independently confirm the "five other unrelated branches in the same window" detail (gh pr checks/gh run list calls were declined in this sandbox), so that specific cross-branch correlation is evidence I read from the cited note rather than reproduced myself — but the mechanism it describes and the PR's code footprint are both consistent with the steer's conclusion.

No new issues. Agrees with the prior pass's "lgtm" and with the steer's own conclusions on all four points — this is a confirmation pass, not a correction.
· branch ci/warn-low-disk-hook

@astubbs

astubbs commented Aug 25, 2026

Copy link
Copy Markdown
Owner Author

Babysit pass on aa1635e76. Three things worth the record: a correction to the review above, verification it could not run, and the defect-class sweep merge prep asks for.

One correction to the review above

chaos-pain.yml's own header states the per-PR chaos job ("highcpu / Chaos Pain Suite") is explicitly non-gating ("NEVER PR-gating... Failures are investigation food")

That quote is the header of chaos-pain.yml, which owns the on-demand workflow_dispatch hunt. The per-PR job was deliberately moved out of it into .github/workflows/pr-highcpu-fast-feedback.yml, whose comment on the matrix entry says the opposite:

# NOT optional: a chaos RED is a real finding. — and continue-on-error: ${{ matrix.optional != 'false' }} with optional: "false" for this suite, so it is the one highcpu entry that is not continue-on-error and shows bare rather than "(optional)".

The conclusion still holds, but for a different reason: Chaos Pain Suite is not in master's required-status-checks ruleset (checked directly against /repos/astubbs/parallel-consumer/rulesets/15055005), so it does not mechanically block merge — while still being designed to show red and be investigated. Worth keeping straight, because "chaos is never PR-gating" would license ignoring a genuine red later.

The contention evidence itself is unchanged and reproducible: on the previous head, Chaos Pain Suite was the sole failing job on five other unrelated branches in the same window (research/kafka-streams-foreign-wrappers, test/backpressure-frozen-frontier, tooling/inject-branch-context, fix/scripts-portable-on-bsd, test/jcstress-poc-plain-long-visibility), and passed on two branches whose runs landed in quieter slots.

Verification the review sandbox could not run

The last two passes both noted they could not execute the self-test. Run here, serially:

  • bin/test-check-agent-hooks.sh: 189 ok, 0 failed on this branch, and 154 ok, 0 failed on a pristine da91f3f61 worktree. Both figures in the PR body and in docs/inflight/pr-339-review-findings.md are correct as written.

  • The never-block invariant, exercised rather than read. Driven into the critical band with all four thresholds pinned, the hook returns permissionDecision: allow and exit 0.

  • The last_at shape-check is load-bearing, proved by mutation. Deleting that single case line turns exactly three cases red, and they cover both halves of the vulnerability:

    FAIL: a command substitution in the throttle stamp is not executed (expected 'inert', got 'EXECUTED IT')
    FAIL: a garbled throttle stamp still warns, exiting 0 (expected 'WARNED', got 'BLOCKED:1')
    FAIL: a one-field throttle stamp still warns, exiting 0 (expected 'WARNED', got 'BLOCKED:1')
    

    The hook was restored byte-identical afterwards (cmp-verified).

    One detail worth recording, because it is what makes the case non-decorative and is easy to get wrong twice: the payload must name a variable the script actually defines. band[$(id>FILE)] executes; zz[$(id>FILE)] does not — set -u aborts on the unbound name first, exiting 1 before the command substitution runs. So an injection case built on an arbitrary name would still look green while testing nothing, in a new way, after the space-splitting version was already fixed once.

  • The self-reference gate's red control. With the four post-merge: checked markers stripped, bin/check-branch-self-reference.sh reports 4 unconfirmed references and exits 1; restored, it exits 0.

Same-defect-class sweep

Defect class: untrusted content read from a file reaching bash arithmetic, where a non-numeric operand resolves as a variable name recursively.

  • .claude/hooks/remind-inflight-on-push.sh — [ $(( now - last )) -lt ... ]. Not an instance: last comes from stat -c %Y, an mtime, which cannot carry arbitrary text.
  • .claude/hooks/check-merge-outstanding-work.sh — age=$(( now - mtime )). Not an instance, same reason.
  • warn-low-disk.sh:304 — [ "$((now - ${df_cached_at:-0}))" -gt ... ]. Not an instance: df_cached_at is file_mtime, and the :-0 already covers the empty-output case on an unrecognised platform.

So: none found beyond the one fixed. Reading a file's contents into arithmetic happened only at the last-warning stamp.

Unrelated and pre-existing, not touched here: remind-inflight-on-push.sh uses GNU-only stat -c %Y with no BSD branch, so on macOS it fails open and reminds every time. That belongs with the BSD portability work (#341 / fix/scripts-portable-on-bsd), not this PR.

Left for you

The PR is still a draft, so it cannot be merged as-is — marking it ready is your call, not something I should flip.

astubbs and others added 3 commits August 25, 2026 01:45
The findings note recorded the shared-across-sessions throttle as open but not
who was blocked on what, so it read as unowned work rather than a pending call.
Keying the stamp on `session_id` instead of the UID is a product decision about
how far a per-session warner should isolate itself - Antony's, not a review
pass's. Says so now, so the next reader does not re-litigate it or quietly
implement one answer.

No behaviour change; the note is the only file touched.
Only ONE textual conflict, and three things that merged CLEANLY while becoming
false - which is the part worth reading, because nothing goes red for those.

CONFLICT: `.claude/settings.json`. Both sides appended a `PreToolUse` hook into
the same array slot - this branch's `warn-low-disk.sh` and master's
`check-shallow-history.sh` (3d51667). Resolved by keeping BOTH, as two
separate matcher entries, master's first so its slot is unmoved. Neither carries
an `if` filter, which is deliberate on both sides.

CLEANLY MERGED BUT WRONG, all in `docs/agent-harness.md`, all fixed here:

- It said the file registers "eight hooks". Master's ninth landed in a region
  this branch never touched, so the count merged without a murmur. It is now
  "nine", and `bin/test-check-agent-hooks.sh` was already asserting that number
  against `settings.json` - so this one WOULD have gone red, which is exactly
  why that assertion exists.
- It called `check-history-rewrite.sh` "the one guard here that refuses".
  `check-shallow-history.sh` also refuses, so the sentence became false on
  arrival. Reworded to name both.
- Master registered its hook without adding it to that doc's hook list, leaving
  the list one short of the count it states. Documented, pointing at the hook's
  own header for the reasoning, per the convention the neighbouring entries use.

THE MERGE FOUND A REAL GAP IN THIS BRANCH'S META-TEST. This PR added "every
registered hook is self-tested", which read coverage as "has a `$HOOKS/<name>`
section in `bin/test-check-agent-hooks.sh`". Master's hook is self-tested by a
DEDICATED `bin/test-check-shallow-history.sh`, so a genuinely tested hook was
reported untested. That is the assertion being narrower than the property: since
1078acd, `bin/check-all.sh --with-tests` globs `bin/test-*.sh`, so a standalone
self-test runs in CI with no wiring and is equally real coverage. It now accepts
both shapes - and deliberately NOT a leading-comment mention, because
`# Self-test for .claude/hooks/foo.sh` is prose and accepting it would let a hook
buy coverage with a sentence. Two red controls, both fire: registering a hook
nothing tests reports it untested (and the count arm fires too), and pointing the
standalone self-test at another path re-reds the exact case that started this.
Both fixtures restored byte-identically, verified by sha256.

MASTER'S NEW `check-shell-hazards.sh` GATE CAUGHT THIS BRANCH'S DELIVERABLE.
`.claude/hooks/warn-low-disk.sh` uses `stat -f` and `stat -c` in a platform
`case`, which the gate flags because `stat -f` on GNU exits 1 while PRINTING
filesystem prose to stdout. Both uses are correct - the `case` has already
dispatched on `REAL_UNAME`, which is the un-injectable reading kept separate from
`OS_NAME` for precisely this - so they carry the `hazard-ok:` declaration the gate
prescribes, on the immediately preceding line, which is the only place it reads.

`bin/check-shell-lint.sh` (ShellCheck, 406dc7d) had never run against this
branch. Clean at the gated `error` floor. At `warning` it found one SC2155 in the
new hook, which `docs/inflight/static-shell-lint-severity-tiers.md` ranks #1 on
its work order as the cheapest floor to raise next - so it is split here rather
than added to that pile. The hook is now clean at `warning`.

`docs/inflight/pr-339-review-findings.md` renamed to
`ci-low-disk-warner-open-items.md`. It kept the `pr-` prefix on the stated
grounds that `pr-323-docs-outstanding.md` and `pr-324-tooling-outstanding.md` sat
on master with their PRs merged - and master has since deleted BOTH (65cf9ec),
relocating their survivors to area prefixes for the reason recorded there. The
precedent that decision rested on is gone, and the four sibling PRs all renamed,
so this follows. Title now names the subject rather than the PR number, matching
`test-lincheck-lane-open-items.md`. Nothing cited the old path.

STILL OPEN AND UNCHANGED: the throttle stamp is keyed per-UID, so it is shared
across sessions and only the first of eleven agents would have been warned in
this hook's own motivating incident. Fixing it means keying on `session_id`,
which is Antony's call, and the note still records it as open and blocked.

VERIFICATION. `bin/check-all.sh --with-tests`: 38 ran, 38 passed, 0 failed, 0
could not run (5 PR-scoped gates skipped by design). Hook suite serially: 194 ok,
0 failures.

The private-`TMPDIR` fix survived - master never touched
`bin/test-check-agent-hooks.sh`, so there was no conflict - and it is re-proven
against a pristine-master control worktree at f7e58d7, four concurrent copies
each side. Master: 4/4 runs red, with push-reminder-section failures in three of
them. This branch: ZERO push-reminder failures in 4/4 runs. The residual red on
two of four is `the open item is quoted into the deny reason`, which is the
merge-outstanding section writing its fixture into the real working tree - a
different, pre-existing cause owned by #350, outside
every hunk this branch wrote, and one master fails on too. Re-run serially it is
green, which is how it was confirmed as contention rather than a defect.

NOTE FOR WHOEVER MERGES NEXT: the shared clone re-shallowed itself three times
during this work - the `shallow` file lives in `--git-common-dir`, so one sibling
agent's depth-limited fetch re-shallows every worktree. While shallow,
`git merge-base` returns EMPTY and ahead-counts read in the hundreds. All figures
here were taken with `git rev-parse --is-shallow-repository` asserted false on
both sides of the measurement, and match ground truth: 827 commits reachable from
master, behind 22, ahead 6, merge-base cf0007d. Master's new
`check-shallow-history.sh` is the guard for exactly this.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@astubbs
astubbs marked this pull request as ready for review August 26, 2026 01:25
astubbs and others added 8 commits August 26, 2026 04:57
Eleven commits, merge-base f7e58d7. One textual conflict, plus two things
master brought down that change what this branch can claim.

CONFLICT: docs/agent-harness.md, in the settings.json hook list.

Both sides rewrote the same bullet's tail. Master's #353 corrected a
false claim about check-squash-subject.sh - the file said the hook matches `gh`
in COMMAND POSITION, and running it showed it matches a regex over the raw
command, so an `echo` naming a subject-overriding merge is denied. This branch
had appended its own bullet for warn-low-disk.sh immediately after that tail.
Resolved by taking BOTH: master's corrected paragraph replaces the wrong claim,
and this branch's warn-low-disk.sh bullet follows it unchanged. Taking either
side alone would have dropped the other's whole contribution.

bin/test-check-agent-hooks.sh auto-merged, and the auto-merge is correct: master
added 35 cases to the pre-commit-gate section (keywords, multi-line payloads,
the `function` spelling), this branch added its cases further down, and the
private-TMPDIR fix in the push-reminder section is untouched. Verified by
running it rather than by reading the diff.

The hook-count assertion did not fire. #353 registered no new hook, so
settings.json still holds nine and the prose still says nine.

WHAT MASTER CHANGED ABOUT THIS BRANCH'S CLAIMS

11c6551 added a macOS lane that runs every bin/test-*.sh under BSD userland
and bash 3.2. This branch's deliverable is a shell hook with `stat -f`/`stat -c`
platform branching whose BSD arm the inflight note records as never having run,
so that gap now has a CI answer for the first time. Recorded in the note.

3a98b8d/957d08423 added a shared-git-state hazard row and taught
check-shell-hazards.sh to join backslash continuations and to see wrapper
command words. The two `hazard-ok:` declarations on warn-low-disk.sh's platform
`case` still satisfy it - the gate passes.

VERIFICATION ON THE MERGED TREE

  bin/check-all.sh --with-tests   39 ran, 37 passed, 0 failed, 2 could not run
                                  (check-shell-lint.sh and its self-test:
                                  ShellCheck is not installed here)
  shellcheck                      run through the cached koalaman/shellcheck
                                  image with the lane's own command over all 76
                                  tracked scripts: clean at the `error` floor,
                                  and clean at `warning` for this branch's files
  check-branch-self-reference.sh  green with PR_NUMBER=339 and
                                  GITHUB_HEAD_REF=ci/warn-low-disk-hook, which
                                  is the only way it checks anything
  hook suite, serial              208 ok, 0 failures (master alone: 173 ok, 0
                                  failures - the same 35-case delta as before)

CONCURRENCY, MEASURED AGAINST A PRISTINE-MASTER CONTROL

Four concurrent copies, this branch: 3/4 red, all on one arm. Four concurrent
copies of a detached origin/master worktree: 4/4 red, on that same arm AND on
five push-reminder assertions.

So the private-TMPDIR fix survived the merge and still works - zero
push-reminder failures on this branch against five on master. The arm that
remains red is check-merge-outstanding-work.sh's note fixture, which writes
docs/inflight/pr-90001-selftest.md into the real working tree at a fixed path;
it is pre-existing on master, untouched by this branch, and already fixed on
#350, which this branch's own inflight note and PR body
both name as its owner. Deliberately not fixed here: two branches editing those
lines is the conflict the note exists to prevent.
… of it

Master's `shell: macos` job runs every `bin/test-*.sh` on macos-latest under BSD
userland and a pinned bash 3.2, discovered by glob. That sweeps in the warner's
self-test with no wiring, so `stat -f` and the `df -Pk` column read execute on a
real BSD box for the first time - `REAL_UNAME` is deliberately un-injectable, so
those are the genuine spellings rather than the Linux ones under a
`PC_DISK_UNAME` costume.

Recorded with its limit rather than as a tick: a hosted macOS runner has no
`Docker.raw`, so the sparse-image high-water-mark correction is still
unexercised. An open item whose status changes from "no coverage exists" to
"partial coverage exists" is worth less than nothing if the note lets the next
reader read it as closed.
…ships

Master's new `shell: macos` lane went red on this branch the moment the merge
landed, and the failure is this branch's, not the lane's. It is the first time
this suite has been parsed by bash 3.2.

WHAT BROKE. The registration meta-test ran python from a heredoc inside a
command substitution: `$(python3 - <<REGCHECK ... )`. bash 3.2 scans a
substitution for its closing paren treating the heredoc body as SHELL TEXT and
does not recognise `#` comments while doing it, so an ordinary apostrophe in a
python comment - a possessive, in a sentence about an earlier hook count - was
the fifth and unbalancing single quote in that body. 3.2 then read to the end of
the file looking for the close, and reported an unexpected EOF against the last
line of a 1420-line file.

WHY NOTHING CAUGHT IT. bash 5 parses the same text correctly, so every local run
and every ubuntu lane was green. And the lane could not name the case: the suite
died with exit 2 after some sixty cases had already passed, which
check-all.sh and the macOS job both classify as CANNOT RUN. A gate that could not
measure, wearing the message of a missing tool.

THE FIX. Heredoc at top level into a file, then run the file. The body is never
scanned as shell at all, so no later edit to the python can bring this back - a
narrower fix that merely balanced the quotes would have left the next author one
apostrophe away from the same red. The python itself is byte-for-byte unchanged.

NOT A COUNTER-EXAMPLE: three python heredocs inside `$( ... )` survive on master
in check-cve-exclusions.sh, check-ossindex-audit.sh and check-shell-hazards.sh.
Their bodies happen to balance when read as shell. That is luck, not a contract,
which is why bin/check-shell-hazards.sh is the right long-term home for the class
- silent, version-dependent, invisible to ShellCheck, its own stated admission
test. Not added here: a row would report those three, each in a shared file
another branch may be editing, so it is queued in the inflight note instead.

Verified: 208 ok, 0 failures serially; check-all.sh --with-tests 37 passed, 0
failed; ShellCheck clean at the error floor over all 76 tracked scripts and at
the warning floor over this file, run through the cached image with the lane
command. No heredoc operator remains inside any command substitution in the file.
…all to the operator

The throttle stamp was one file per UID, shared by every concurrent session, so the first agent to
notice a low disk silenced all the others for the full ten-minute window. In the incident this hook
was written for - eleven per-language demo agents taking the host volume from ample to 8.8 GiB free
in about an hour - ten of the eleven could not have been told, while they were the ten still filling
the disk. Two reviewers flagged it independently and it was left open as a product call, because the
obvious fix trades one failure for another: warn everybody and eleven agents may each start pruning.

Settled the other way, and the message is what makes it safe. Every session is warned, and each
agent is told to report the situation and suggest a reclaim rather than run one, so the operator is
the gate against duplicate effort instead of the throttle. That cost is not hypothetical - the same
incident had two agents pruning under each other while only one of them had been warned - and an
operator can tell duplicate cleanups apart, which a ten-minute timer cannot.

Keying is best-effort by design. `session_id` comes from the PreToolUse payload, read past every
fast-path exit so the healthy case still forks nothing extra, and with no python3 on that path: the
header's standing rule is that an interpreter must never become a precondition of the message. An
absent, unparseable or session-less payload leaves the key empty and falls back to the shared stamp,
which is precisely the old behaviour - the failure this file refuses is "warned" becoming "silent",
and a coarser throttle is not that. The value reaches a file path, so `tr -cd` deletes anything
outside `[A-Za-z0-9_-]` rather than escaping it, and the length is capped.

Also fixed, the smaller half of the same finding: the stamp was written BEFORE the message was
emitted, so a kill between the two swallowed that warning for the whole window - likeliest exactly
when the disk is full, which is this hook's entire subject. Speaking first can at worst repeat a
warning. No test can kill the hook mid-flight, so the order is asserted in the source, the way the
suite already asserts structural properties whose behaviour has no observable difference until the
moment it matters.

Every new assertion was run against the unfixed hook first. The keying case reports the defect
numerically - the second session received zero bytes - and both message cases and the ordering case
fail too. The traversal case is NOT a red control and is marked as such: the old hook never read
`session_id`, so nothing could have escaped; it guards only the new path.

Closes the open item in the warner's inflight note, and one more that the rewording answers on its
way past: the critical-band advice used to tell an agent to look for named volumes without saying
what to do on finding one, which is now "tell the operator".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5LgTetnPkQciHFNaQWwSN
Three conflicts, all from #350 landing the branch-context hook into the same three files this
branch touches. Resolutions, and why:

`.claude/settings.json` - both sides appended a PreToolUse entry at the same position. Kept both, so
`warn-low-disk.sh` (matcher `Bash`) and `inject-branch-context.sh` (matcher `*`) are each registered.
Validated as JSON, and the registration self-test confirms all ten scripts are wired and covered.

`bin/test-check-agent-hooks.sh` - both sides had independently given the push-reminder cases a private
TMPDIR for the same reason, under different names. Took master's `PUSH_TMPDIR`, which is what the
surviving declaration outside the conflict uses; this branch's `push_tmp` would have been an undefined
reference under `set -u`. That left master's block and this branch's near-identical explanatory
comment both present - one fact stated twice, which AGENTS.md forbids because the copies drift - so
the duplicate is deleted and the one datum only it carried is grafted into the survivor: the specific
case that failed, "an immediate second push is throttled" reporting `repeated`.

`docs/agent-harness.md` - a genuine cross-branch interaction rather than a textual clash. This branch
added a gate pinning the doc's hook count; master then reworded that same sentence to distinguish
hook SCRIPTS from REGISTRATIONS, which the gate's regex could not match. Kept master's wording, since
it explains why the count is stated at all and the two numbers legitimately differ - one script can
be registered against several events - and widened the gate to parse both and verify both against
`settings.json`. Verified by making each number wrong in turn and watching the gate name it.

The doc now reads ten scripts across eleven registrations, counted from the merged file rather than by
incrementing master's nine and ten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5LgTetnPkQciHFNaQWwSN
#357 landed the push-drift hook and the shared `hook-common.sh`, touching the two files this
branch also changes. Two conflicts, both additive:

`docs/agent-harness.md` - master added bullets for `remind-master-drift-on-push.sh` and the shared
library; this branch had added one for `warn-low-disk.sh`. Kept both sets, and placed master's push
bullets immediately after `remind-inflight-on-push.sh` so its "same self-filtering shape"
back-reference still lands on a push hook, and so the shared-library note follows both push hooks it
describes. The count sentence is now eleven scripts across twelve registrations, recounted from the
merged `settings.json` rather than incremented.

`bin/test-check-agent-hooks.sh` - the header said "the eight hooks"; master dropped the number.
Took master's wording. A count in unchecked prose is exactly what rots, and the counts that remain
are the ones the registration gate verifies.

KNOWN RED, and not from this merge: the registration gate this branch added reports
`remind-master-drift-on-push.sh` as registered but not self-tested, and that is accurate - nothing
under `bin/` references it. #357 tested the shared push detection through
`remind-inflight-on-push.sh`'s fixture, deliberately and with a negative control, but the drift
hook's own contract - fetch before reading, SHA-keyed throttle, subject listing, file-overlap
reporting - has no coverage. Master's own copy of the suite even cites "the drift section" that was
never added. Recorded here rather than worked around; the gate is doing the job it was added for.

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

The registration check this branch added reports every hook `settings.json` registers that nothing
under `bin/` references, and `remind-master-drift-on-push.sh` was the first thing it caught -
205 lines, landed by #357, with no coverage of its own. #357 did test the SHARED push
detection thoroughly, through the sibling reminder's fixture and with a negative control, so what was
missing was this hook's own contract; master's copy of this suite even cites "the drift section" that
was never added. Fixed here rather than exempted, because a gate with a recorded hole is a gate
nobody trusts, and this is the same trade the copyright gate took in #338: widen the check and
fix what it finds.

Twelve cases, covering what the hook promises: it names the SUBJECTS of the commits the base ref
gained (the reason it exists at all - a divergence count is what `rev-list --left-right --count`
already answers), it names the files changed on both sides while not reporting base-only files as
overlap, it throttles on the base SHA so one tip is reported once, it reports again the moment the
base moves, it counts UNCOMMITTED work as this branch's side of the overlap, it takes the other arm
of the report when nothing overlaps, and it stays silent when there is nothing to inherit - level
with the base, pushing the base branch itself, or a command that is not a push.

Offline by construction: the hook only fetches when `MASTER_DRIFT_REF` contains a slash, so a local
branch stands in for `origin/master` and no case touches the network.

Two things this suite caught in its own cases, both worth stating because they are the failure mode
this file exists to prevent. The level-with-base case first PASSED while the fixture sat in a broken
merge state, so it was asserting nothing; the catch-up is now a `reset --hard`, since both sides had
appended to the same file and the merge conflicted. And every silence case now gets a FRESH stamp
directory: by that point the stamp already holds the current base SHA, so the throttle alone would
explain the silence, and a case that passes whether or not the exit it names exists is decorative.

Mutation-checked rather than assumed. Dropping the SHA throttle, reporting base-only files as
overlap, reading `HEAD` instead of the working tree, and dropping the behind-count guard each fail
exactly the case that names it; the hook was restored byte-identical afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5LgTetnPkQciHFNaQWwSN
…ing to the repo root

The new drift section ended with `cd "$REPO_ROOT"`, and the section immediately after it documents
that it runs from the push fixture's scratch repo reached ONLY by inheriting the cwd - its enriched
refusal renders only when a PR lookup finds a named branch, and the CI checkout is detached, so from
the real tree it fails. Jumping to the repo root therefore turned "a PR with nothing outstanding
still states the risk" red on every runner while the suite stayed green locally, where the checkout
is on a branch. Both `repo: hygiene` and `shell: macos` failed on that one case.

Saves `$PWD` at the top of the section and restores it at the bottom, rather than naming the push
fixture's directory, so the coupling survives another section being inserted between the two.

Reproduced before fixing and verified after, since a local run cannot see this: a detached worktree
at the same commit fails with CI's exact message under the old line and passes under the new one.

Left alone deliberately: the inherited-cwd coupling itself. It is a deliberate, documented choice in
the section that depends on it - the fixture is what gives those cases a named branch - so the fix
is to stop breaking it, not to relocate someone else's fixture in this PR.

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

astubbs commented Aug 26, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

The two review passes on this PR were against 8a50303 and aa1635e7. The head is now 57c333cbf
and the substance has changed, so this is a request to review the current head rather than a re-run.
What is new since those passes:

  • The per-UID throttle decision was settled, and implemented. The stamp is now keyed per session,
    so every concurrent agent is warned instead of only the first, and the message tells each agent to
    report and suggest a reclaim rather than run one - the operator is the gate against duplicate
    cleanups. Keying is best-effort: no session_id falls back to the shared stamp, because the
    failure this hook refuses is "warned" becoming "silent". The value reaches a file path, so it is
    filtered with tr -cd rather than escaped.
  • The stamp is now written after the message, not before, so a kill between the two cannot
    swallow a warning for the whole window.
  • remind-master-drift-on-push.sh gained a self-test section. The registration check this PR adds
    reported it as registered but never self-tested, and that was accurate. Twelve cases, each
    mutation-checked.
  • The registration check now verifies both the script count and the registration count in
    docs/agent-harness.md, after master reworded that sentence to distinguish them.
  • Two master merges, including feat(hooks): report what master gained on push, and teach the self-reference gate its own spelling #357, whose conflicts are described in the merge commits.

Worth a close look at two things in particular. First, whether the per-session key is right where it
falls back - a payload with no session_id shares one stamp, which is the old behaviour, and I chose
that over going silent. Second, the drift-hook section's interaction with the cwd: it restores
whatever cwd it found, because ending it at the repo root broke the check-history-rewrite.sh cases
that reach the push fixture by inheriting it - green locally, red on every runner.

Known and deliberately still open, tracked in docs/inflight/ci-low-disk-warner-open-items.md: no
df timeout on the fast path, a hardcoded Linux docker_root, and no supported way for a user to
turn the warner down.

@claude

claude Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

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


Review

  • Gather context (trigger comment, prior review passes at 8a50303/aa1635e7, branch context)
  • Diff aa1635e76..57c333cbf to see exactly what's new
  • Read the per-session throttle keying change in warn-low-disk.sh (the tr -cd filter, fallback-to-shared-stamp behaviour)
  • Read the "stamp written after message" reordering
  • Read the new remind-master-drift-on-push.sh self-test section and its cwd-restore fix
  • Read the registration-check change (script count vs registration count)
  • Check the two master-merge conflict resolutions (esp. feat(hooks): report what master gained on push, and teach the self-reference gate its own spelling #357)
  • Post final review

Environment note (not a PR defect, same as the last two passes)

My checkout again has .claude/hooks/warn-low-disk.sh deleted and the hook block reverted out of
.claude/settings.json — confirmed with git status and git diff HEAD -- .claude/settings.json
(both harness-side stripping, since a grant this PR adds isn't in effect for the agent reviewing it).
I read both via git show HEAD:<path> instead. My Bash tool again required interactive approval to
run bin/test-check-agent-hooks.sh (even plain git log/git diff over a commit range triggered
the repo's own shallow-history guard hook, which itself then needed an env-var override that also
needed approval) — so, as in both prior passes, I could not execute the self-test myself. The
189→0-failures figures are evidence from the PR body and docs/inflight/ci-low-disk-warner-open-items.md,
not something I reproduced.

What's new since aa1635e7 (scoped diff, not the master-merge noise)

Confirmed via git diff aa1635e76 HEAD -- <path> per file, since this branch merged master twice in
between:

1. Per-session throttle keying (.claude/hooks/warn-low-disk.sh) — read closely, matches the PR
description exactly:

  • session_id is read from stdin only past every fast-path exit 0 (the hook still forks nothing
    extra on a healthy disk), extracted with a sed capture, then filtered with tr -cd 'A-Za-z0-9_-'
    and capped at 64 chars before it ever touches a path — so a session_id of "../../pwned" cannot
    escape $state_dir. Verified the self-test actually exercises this rather than just documenting it:
    bin/test-check-agent-hooks.sh pipes exactly that payload and asserts both that the hook still
    speaks and that no stray file lands in the parent directory.
  • The fallback you asked about is sound. When session_id is absent (echo '{}'), session_key
    is empty, stamp="$state_dir/last-warning" — byte-identical to the pre-existing shared-stamp path.
    I checked this isn't just asserted in prose: the wide pre-existing threshold/band/downgrade test
    suite (the block above the new section, disk_band/disk_context/disk_state) all pipe payloads
    with no session_id, so that whole suite continues to exercise the fallback path unchanged, while
    the four new cases (state_sessions/disk_session) are the only ones that exercise the keyed path.
    No regression versus the pre-PR behaviour in the degraded case, which is the property claimed.
  • Only one stdin read exists in the whole file (grepped for it) — no double-consumption hazard with
    anything else reading the payload.

2. Stamp written after the message, not before — confirmed the echo "$now $band" >"$stamp" line
moved from just after the throttle if block to the very last line before exit 0, with no other
logic change. This closes exactly the kill-window the PR describes (a kill between write and
printf swallowing a warning) without altering the throttle semantics — the write still only happens
on the same code path that used to write it early.

3. remind-master-drift-on-push.sh + its self-test (af21e89, ea7df96) — new hook, reports
origin/master's unseen commits and file overlap on push, throttled on master's SHA with a fetch-floor
clock underneath. Shares hook_git_runs/hook_stamp_path/hook_file_mtime with
remind-inflight-on-push.sh via the new .claude/hooks/lib/hook-common.sh, which also fixes a real
regression the PR discloses: the original single-subcommand extraction reported only the first git
invocation in a compound command, so git add -A && git commit -m x && git push silently didn't fire
either push hook. The self-test's chained/unspaced/semicolon-operator cases (git push;echo done,
-A&&git commit) exercise exactly that class. Reads correctly; not central to this PR's own subject
(the disk warner) but genuinely new and non-trivial.

4. Registration-count check tightened — docs/agent-harness.md now says "eleven hook scripts
across twelve registrations"; I counted git show HEAD:.claude/settings.json by hand (the working
tree copy is harness-stripped, so I used the git-object version) and got the same eleven distinct
scripts / twelve registration blocks. The self-test's regex was also updated to check both numbers
independently rather than one combined count — correct fix for the "split the sentence, forgot to
re-pin the check" collision described in the PR body.

5. fix(test): restore the cwd (57c333c, the newest commit) — small, well-targeted: saves
$PWD before the new drift section and restores it at the end instead of hardcoding
cd "$REPO_ROOT", because the section immediately after depends on inheriting the push fixture's cwd
(documented in that section itself). The commit message states it reproduced the CI-only failure
against a detached worktree before fixing and after — consistent with the stated mechanism (CI
checkout is detached, local checkouts are on a branch).

One thing worth fixing before merge (docs, not code)

The PR body's own "Known open" section still lists "The throttle is keyed per-UID, so it is shared
across sessions... Fixing it needs a decision about keying on session_id, so it is not made here"

— that's now stale, since this very set of commits settles and implements exactly that. The inflight
note (docs/inflight/ci-low-disk-warner-open-items.md) has already dropped it correctly and lists
only the three items the trigger comment names (no df timeout, hardcoded docker_root, no user-facing
silencing) — so the note is current, only the PR description text lags behind it.
Fix this →

Verdict

No correctness or security issues found in the diff since the last two review passes. Both points the
trigger comment asked to look closely at — the session-less fallback and the cwd-restore fix — check
out: the fallback degrades to the documented old behaviour without a silent gap, and the cwd fix is
minimal, correctly scoped, and matches its own commit message's reproduction claim. Agrees with the
prior passes' "lgtm."
· branch ci/warn-low-disk-hook

@astubbs

astubbs commented Aug 26, 2026

Copy link
Copy Markdown
Owner Author

The one finding is fixed: the PR description's "Known open" section no longer claims the per-UID keying awaits a decision, since these commits settle and implement it.

Two related staleness items went with it, both found while checking that one. The BSD bullet contradicted the section above it - "has still never run against BSD userland" while the macOS-lane section already recorded that the stat -f arm and the df -Pk column read now do run there; it is narrowed to what is actually still unexercised, the Docker Desktop sparse-image path, which a hosted macOS runner cannot reach because it has no Docker.raw. And the closing sentence still described four re-cut commits, from before the keying change, the drift-hook coverage and the cwd repair existed.

The description also now carries a section for the work that landed after your two earlier passes, so the body no longer describes a PR that stops at aa1635e7.

@astubbs
astubbs merged commit 0df2fd3 into master Aug 26, 2026
33 checks passed
@astubbs
astubbs deleted the ci/warn-low-disk-hook branch August 26, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant