Skip to content

ci(issue-refs): in-file opt-outs at line, block and file scope; honour the PR-body opt-out locally; repeat guidance after the hits - #307

Merged
astubbs merged 6 commits into
masterfrom
ci/issue-ref-gate-tail-trailer
Aug 18, 2026
Merged

astubbs merged 6 commits into
masterfrom
ci/issue-ref-gate-tail-trailer

Conversation

@astubbs

@astubbs astubbs commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Description

Four defects in the issue-reference gate's opt-out mechanism, found when an agent hit the gate with 25 bare refs in a generated document and never learned an opt-out existed:

  1. Guidance was invisible in practice. The failure message printed opt-out instructions ABOVE the hits list, but a failing tool is read from its tail - often literally, through | tail. formatFailure now repeats a fix/opt-out reminder AFTER the hits, with a unit test pinning its position.

  2. No in-file opt-out existed - the only escape hatch was the whole-PR hammer in the PR body. New, narrowest first, written in the file's own comment syntax (invisible when rendered in markdown/HTML):

    • issue-refs: exempt - that line only
    • issue-refs: exempt-begin / issue-refs: exempt-end - a pasted block too dense to mark per line
    • issue-refs: exempt-file - a whole file (generated docs, imported archives); judged against file content (local: disk; CI: contents API, fetched only for files with hits), so it holds however small a later diff

    Line/block markers govern added patch lines by necessity (a patch-based gate cannot see markers outside the patch); an unclosed exempt-begin swallows the rest of the file's added lines, mirroring the unclosed-fence rule. A backslash escape (\#NNN) was rejected: it edits the text it is meant to preserve, renders visibly outside markdown, and is an illegal escape in a Java string literal.

  3. The PR-body opt-out was one-sided. bin/check-issue-refs.sh never read bodies, so an opt-out CI accepted left every local run red on the same file forever. The script now resolves the branch's PR via gh pr view, honours the opt-out exactly as the workflow does, and scans the body as a synthetic file too. Fetch failure (no PR yet, no gh, offline) degrades to the old body-less behaviour, and the message says so.

  4. Nothing tested the local script's plumbing. New bin/test-check-issue-refs.sh stubs gh on PATH with eight end-to-end cases, runs in pr-checklist.yml beside the gate module's unit tests, and dogfoods the line marker on its own fixtures.

Also carries the process learning this branch's own development produced: docs/solutions/workflow-issues/red-proof-old-code-new-tests-2026-08-18.md (red-proofing without destroying uncommitted work - stash pop unstages, amend then captures only the message, checkout-pathspec clobbers silently), plus a "Red-proof" entry in CONCEPTS.md's Test reliability cluster.

Defect-class check (same-defect search): the class is "guidance printed only where truncated reads never look". Checked the sibling gate: changelog-ref-gate.js's failure message is short (no long hits list between guidance and tail), so it does not exhibit the failure at meaningful scale - left alone. The other checkers' guidance (bin/check-*.sh) print short failures; none found with a long-list-then-silence shape.

Verification: gate module 59 unit assertions green (trailer position, line/block/file opt-out scope, case-insensitivity, body-adapter cases); harness 8/8 green; red-proof done properly - master's code against the new tests: 7 of 8 harness cases fail, unit run aborts; sigpipe guard green; actionlint green; bin/check-issue-refs.sh green on this branch's own diff; solution-doc claims validated mechanically and semantically.

docs/issue-references.md rewritten where this change falsified it ("purely textual, no API calls"; "the PR body ... does not exist when you run the script") and now documents all four opt-out scopes, narrowest first.

Checklist

  • Docs updated
  • User-facing feature documentation data added under docs/features/ - N/A - developer tooling, not a product feature
  • Tests added/updated
  • Title & body reflect the final content of this PR

🤖 Generated with Claude Code

https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn

astubbs and others added 2 commits August 18, 2026 00:13
…r the PR-body opt-out locally; repeat guidance after the hits

Four defects in one opt-out mechanism, found when an agent hit the gate with
25 refs in a generated document:

1. The guidance was invisible. The failure message printed the opt-out
   instructions ABOVE the hits list, and a failing tool is read from its tail
   - often literally, through `| tail`. On 2026-08-17 an agent hand-qualified
   25 refs, some inside quotations, never learning any opt-out existed; the
   header had said so all along, 23 hits earlier. formatFailure now repeats a
   fix/opt-out reminder AFTER the hits, with a unit test pinning the position.

2. There was no in-file opt-out at all - the only escape hatch was the
   whole-PR hammer, and it lived in the PR body. New, narrowest first, all
   written in the file's own comment syntax (invisible when rendered in
   markdown/HTML):
     issue-refs: exempt         that line only
     issue-refs: exempt-begin/  a pasted block - for quoted material too
       issue-refs: exempt-end   dense to mark per line without being a mess
     issue-refs: exempt-file    a whole file (a generated doc, an imported
                                archive) - the in-file equivalent of an
                                EXEMPT_PATHS entry, without editing the gate
   These travel with the file: they hold for future PRs and for local runs
   with no PR body. Line/block markers govern added patch lines (same-line/
   same-patch by necessity - a marker outside the patch is invisible to a
   patch-based gate); the file marker is judged against file CONTENT by both
   callers (local: disk; CI: contents API, fetched only for files with hits),
   so it holds however small the diff. An unclosed exempt-begin swallows the
   rest of the file's added lines, mirroring the unclosed-fence rule. A
   backslash escape (\confluentinc#857) was rejected: it edits the text it is meant to
   preserve, renders visibly outside markdown, and is an illegal escape in a
   Java string literal.

3. The PR-body opt-out was one-sided. bin/check-issue-refs.sh never read
   bodies, so an opt-out CI accepted left every local run red on the same
   file forever - a "local mirror of CI" permanently disagreeing with CI. The
   script now resolves the current branch's PR via `gh pr view` (repo derived
   from origin), honours the opt-out exactly as pr-checklist.yml does, and
   scans the body as a synthetic file too, pre-empting the CI round-trip for
   body refs. Fetch failure (no PR yet, no gh, offline) degrades to the old
   body-less behaviour, and the message now says "could not read the PR body
   (no PR yet, or gh unavailable)" instead of implying it never does.

4. Nothing tested the local script's plumbing. New bin/test-check-issue-refs.sh
   stubs gh on PATH with eight end-to-end cases (no-PR fallback both ways,
   line and file opt-outs from disk, PR-body opt-out honoured, body ref
   flagged, clean pass naming the body, the reminder surviving `| tail -3`),
   runs in pr-checklist.yml beside the gate module's unit tests, and dogfoods
   the line marker on its own fixtures.

Verified red against master's code with the new tests kept in place: 7 of 8
harness cases fail and the unit-test run (59 assertions on the new code)
aborts on the first missing feature. All checks green on the new code:
unit tests, harness, sigpipe guard, actionlint, and the gate itself run
against this branch. docs/issue-references.md rewritten where this change
falsified it ("purely textual, no API calls"; "the PR body ... does not
exist when you run the script") and now documents all four opt-out scopes,
narrowest first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
…d/checkout silent-loss lesson

Captures the process failure from this branch's own development as a durable
learning: three git commands (stash pop, commit --amend against an emptied
index, checkout <ref> -- <paths>) each reported success while doing something
other than intended, costing the same uncommitted work twice and voiding one
red-proof entirely. The doc records the correct red-proof shape (old CODE +
new TESTS; throwaway worktree as the safest form) and the prove-the-capture
habit (status clean + grep the new symbol in git show HEAD:<file>).

Also adds "Red-proof" to CONCEPTS.md's Test reliability cluster - the
practice bin/AGENTS.md mandates now has a name and a definition.

Grounding: mechanical claims validator clean (4 paths, 3 links); semantic
validator verified 10 claims including the git-stash man-page semantics, and
its one finding (the quoted bin/AGENTS.md phrase line-wraps, so a literal
grep fails) is fixed in the doc's wording.

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

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@github-actions

Copy link
Copy Markdown

Dependency Review

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

Scanned Files

None

@github-actions

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 24 24 ➖ 0
Duplicated lines 721 721 ➖ 0
Duplication 1.94% 1.94% ➖ 0
Rule Limit Status
Max duplication 5% ✅ Pass (1.94%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 66 66 ➖ 0
Duplicated lines 933 933 ➖ 0
Duplication 2.54% 2.54% ➖ 0
Rule Limit Status
Max duplication 5% ✅ Pass (2.54%)
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 17, 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
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 53.51 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 38.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 35.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 35.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 33.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.81
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 61.97 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 55.67 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 38.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 33.44
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.42
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 61.97 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 51.77 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 37.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 32.46
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.91
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.82
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 35.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 32.72
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 53.51 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 51.67 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 42.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 33.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 31.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 30.75
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 32.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 55.67 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 51.77 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 46.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 34.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 33.11
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.13
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 30.06
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 46.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 38.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 37.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 33.69
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 39.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 31.07
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 34.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.44
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 32.71
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 32.46
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 31.07
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 39.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 32.71
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/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 33.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 32.49
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 32.49
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.51
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 59.33 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 51.67 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 50.43 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 39.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 38.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.64
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 32.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 32.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.76
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 39.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 31.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 30.75
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/test/java/bz/stub/parallelconsumer/internal/PCModuleTestEnv.java 32.08
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 30.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 30.13
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 32.86
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 30.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 34.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 32.47
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.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 34.67
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 50.35 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 36.78
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 35.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 35.64
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 33.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 33.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 31.69
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 59.33 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 50.35 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 47.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 45.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 42.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 35.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 31.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 48.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 45.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 45.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 36.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 35.81
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 50.43 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 47.72
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.29
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 31.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.64
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 63.08 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 46.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 36.78
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 36.73
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 33.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 32.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 30.64
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 63.08 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 45.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 35.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 33.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.76
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.64
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 38.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 32.64
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 35.84
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 35.84
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 38.53
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java 34.68
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.01 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 43.51
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 35.49
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.54
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 38.98
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 35.49
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 36.17
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 36.17
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 53.93 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 43.51
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 38.98
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 31.36
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 31.05
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.01 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 53.93 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 39.54
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 35.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 49.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 35.14
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/AbstractRevokeUnderWorkScenario.java 49.09
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 37.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosConductorRestartRefusalIT.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/utils/ManagedPCInstanceLifecycleIT.java 30.4
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 47.74
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 47.74
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 35.14
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 37.92
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/utils/ManagedPCInstanceLifecycleIT.java 33.96
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/utils/ManagedPCInstanceLifecycleIT.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/utils/ManagedPCInstance.java 33.96
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosConductorRestartRefusalIT.java 30.4
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.95
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.28
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 49.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 47.62
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.73 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 50.43 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 44.54
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java 30.28
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 43.76
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 43.76
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 33.25
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 33.25
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 49.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 33.02
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 47.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 33.02
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 90.0 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 89.32 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 89.32 ⚠️
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 32.08
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 31.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 30.14
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 31.59
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 34.5
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 34.5
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.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 32.47
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.95
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java 34.68
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.88
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.88
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.14
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.14
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.65 ⚠️
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 78.79 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.43 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 48.59
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 71.0 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyTest.java

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorTest.java 33.05
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.86
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 90.8 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 90.11 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 89.32 ⚠️
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.65 ⚠️
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 78.79 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 51.73 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.83
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 71.0 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorTest.java

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

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyTest.java 33.05
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.86
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

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

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 90.8 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 90.11 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 89.32 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 40.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.72
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 40.18
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 35.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 33.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 30.06
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/JStreamVertxParallelEoSStreamProcessor.java 40.18
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 40.17
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 33.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 30.91
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 42.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.93
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 39.51
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 42.84
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 40.17
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.89
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.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 31.36
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-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 90.8 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 90.8 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 90.0 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 49.83
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 48.59
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 44.54

@github-actions

Copy link
Copy Markdown

✅ SpotBugs Report

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

@github-actions

Copy link
Copy Markdown

🧪🔒 Quarantine Lane Report

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

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

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

doesnt look dry

astubbs and others added 2 commits August 18, 2026 13:02
…the gate module, and fix PR resolution under -R

ce-simplify pass over the branch, three reviewers. Applied:

- The file-opt-out drop loop existed twice - bin/check-issue-refs.sh's node
  block and pr-checklist.yml's workflow step - identical control flow
  (dedupe, PR-body skip, fail-open-keeps-hit) differing only in the reader.
  That is the exact NO-SECOND-COPY violation the module's own doctrine names.
  Now one exported gate.dropFileOptedOutHits(hits, readFile, {onDrop,
  onError}); each caller supplies its reader (fs vs contents API) and its
  logging. Unit-tested (dedupe, body skip, fail-open, callbacks) - 61
  assertions total.
- Dropped the dead exports LINE_OPT_OUT / FILE_OPT_OUT - nothing imported
  them; hasFileOptOut is the intended surface, matching the unexported
  BLOCK_BEGIN/BLOCK_END.
- gh pr view gained timeout: 3000 - this script runs in the pre-commit hook,
  whose documented budget is ~1.5s, and execFileSync otherwise blocks forever
  on a hung network. Measured: ~0.7s total with a live PR, ~0.2s without.
- FIXED A REAL BUG the timing run exposed: `gh pr view -R <repo>` refuses to
  infer the branch ("argument required when using the --repo flag"), so the
  body fetch silently failed on every run - the stubbed-gh harness could not
  catch a real gh CLI contract. The branch is now passed explicitly
  (detached HEAD skips), verified live: the success line names the PR body.
- Deleted two dead fixture lines in the harness (written state overwritten
  before any check observed it).
- docs/issue-references.md's backslash-rejection rationale trimmed to a
  pointer at the LINE_OPT_OUT design comment, which owns it (never state a
  fact twice).

Skipped, deliberately: formatFailure's header/trailer repetition (the
truncation-resilience feature itself, position-pinned by test); the harness's
hand-rolled check() helper (bin/AGENTS.md documents copying, not sharing, as
the convention); two pre-existing rationale duplications in
docs/issue-references.md dating from before this branch (out of scope).

Verified: 61 unit assertions, 8/8 harness cases, sigpipe guard, actionlint,
the gate on this branch's own diff (now confirming "and PR 307's body").

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
… activates it, and a body fence closes an open block

Applies all six findings from this branch's code review (validated 6/6 by
independent repro). The two P1s were unintended false-pass paths that broke
the PR's own contract:

- MENTION IS NOT USE. Marker tests now run on a span-stripped view
  (stripCodeSpans): a marker quoted in a backtick code span is documentation.
  Before this, five of this branch's own files - including
  docs/issue-references.md, the convention's defining doc - were permanently
  whole-file exempt, and a doc line quoting the block markers opened a real,
  unclosed block. An unquoted prose mention still counts (indistinguishable
  from use); the docs now say to backtick marker names when writing about
  them. A line carrying BOTH block markers is treated as discussion: no
  state change.
- A FENCE CLOSES ANY OPEN BLOCK in the PR body. prBodyEntry blanks fenced
  lines, so an exempt-end inside a fence was invisible and the block never
  closed - everything after silently escaped (fail-open). The fence boundary
  now emits a synthetic end marker, flipping the failure mode to fail-closed.
- bin/test-check-issue-refs.sh joins EXEMPT_PATHS with the same rationale as
  the gate's unit-test file: its fixtures write real markers and bare refs
  deliberately.
- The harness truncation case now uses tail -4 and asserts the trailer's
  LEAD line ("Fix: qualify each ref") as well as the opt-out substring -
  tail -3 was provably cutting the lead while the test passed.
- The unit-test file's async block is captured and awaited before the
  summary line, so the printed count (now 67) is accurate and prints last.
- AGENTS.md's issue-references entry updated: both the local script and CI
  scan the PR body when one is reachable (the old line implied CI-only).

Regression tests: quoted file/line/block markers are inert at every scope;
unquoted both-markers lines change no state; the fence repro flags both the
ref before the block and the ref after the fence; a fence with no open block
is unchanged. 67 unit assertions, 8/8 harness cases, sigpipe + actionlint +
the gate itself all green.

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

astubbs commented Aug 18, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Aug 18, 2026 •

Copy link
Copy Markdown

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


Review

  • Gather context (diff, changed files, AGENTS.md conventions)
  • Look into astubbs's "doesnt look dry" review comment
  • Review issue-ref-gate.js opt-out logic
  • Review bin/check-issue-refs.sh and bin/test-check-issue-refs.sh
  • Review docs/CONCEPTS.md/AGENTS.md updates
  • Post final review

On "doesnt look dry" (2026-08-18T00:43:07Z): already addressed. 3d6aa74 (19 min later) pulled the file-opt-out control flow into gate.dropFileOptedOutHits, and both callers (bin/check-issue-refs.sh, pr-checklist.yml) now supply only their own reader — matches the module's own "NO SECOND COPY OF THE RULE" ethos, and is why the later lgtm review followed it.

Finding: gh pr view timeout contradicts the pre-commit hook's stated budget

bin/check-issue-refs.sh bounds its new gh pr view call with timeout: 3000 and justifies it inline: "this runs inside the pre-commit hook, whose whole budget is ~1.5s, so a hung network call must be bounded." But .githooks/pre-commit states the budget explicitly:

# COST BUDGET: the whole run is ~1.5s. Keep it that way.

...and runs its six gates sequentially in a plain for loop (check-issue-refs.sh is one of six). A timeout of 3000ms lets a single slow-but-not-hung gh call alone consume 2x the entire hook's budget, before the other five gates even start — the opposite of what the comment claims it's protecting. Either the cited 1.5s budget is stale, or the timeout value should be tightened (something well under 1.5s, e.g. ~800–1000ms) to actually fit within it.

This has zero test coverage: bin/test-check-issue-refs.sh's stubbed gh always returns instantly, so the timeout value itself is unexercised and could regress silently.

Fix this →

Minor / optional: a second owner-repo parser

bin/check-issue-refs.sh's new repo-resolution regex (git(["remote","get-url","origin"]).trim().match(/[:/]([^/:]+\/[^/:]+?)(?:\.git)?$/)) duplicates the same "parse owner/repo off the origin remote URL" job bin/check-quarantine-owners.sh:37 already does with sed -E. Not blocking — one's bash+sed, the other's a JS regex embedded in a node heredoc, so sharing an implementation isn't free — but worth a note since the PR's whole theme this round is closing exactly this kind of second copy.

Everything else

  • hasFileOptOut / dropFileOptedOutHits / the line/block/file opt-out scoping in issue-ref-gate.js — logic checks out, well-commented, and the new unit tests (issue-ref-gate.test.js) exercise the real edge cases: block state resets per file, an unclosed exempt-begin swallows the rest of the file, a PR-body fence force-closes an open block (fail-closed, not open), and the "mention is not use" backtick-span stripping.
  • prBodyEntry's synthetic issue-refs: exempt-end on every fence line is a genuinely subtle, correct fix for a real fail-open bug (an end marker pasted inside a fenced quote would otherwise be blanked before suspectRefs ever saw it).
  • docs/issue-references.md, AGENTS.md, CONCEPTS.md updates are accurate against the code and consistent with each other.
  • Async plumbing in bin/check-issue-refs.sh (IIFE wrapper) and issue-ref-gate.test.js (deferred asyncChecks awaited via .then() at the end) is unusual but correct — no real I/O is involved, so ordering stays deterministic.

Note: I could not execute bin/check-issue-refs.sh, bin/test-check-issue-refs.sh, or bin/check-shell-sigpipe.sh in this session — every Bash invocation of them came back "requires approval," consistent with this review running under master's copy of the tool allowlist (this PR's own grants aren't in effect for the agent reviewing it). This review is based on static reading of the diff and the scripts it touches, not a live run.

@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

…s actual budget

The cloud review caught the arithmetic the earlier bound ignored: timeout
3000ms justified itself against .githooks/pre-commit's "~1.5s" budget while
being 2x that budget on its own, for one of SIX sequential gates. Now 1000ms,
with the comment rewritten to carry the real reasoning: a slow gh answer must
lose to the hook staying fast, and a body the pre-commit run missed is still
caught at CI - a deferred check, never a lost one.

Reviewer's optional note (a second owner/repo parser vs
bin/check-quarantine-owners.sh's sed version) deliberately not taken: the two
live in different languages (bash+sed vs a JS regex inside a node heredoc),
so sharing an implementation buys drift risk in glue code instead of removing
it - the reviewer's own assessment.

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

astubbs commented Aug 18, 2026

Copy link
Copy Markdown
Owner Author

Response to the review:

  • Timeout vs hook budget - fixed in a4196c6. You caught the arithmetic the bound ignored: 3000ms justified itself against the ~1.5s budget while being 2x that budget alone. Now timeout: 1000, and the comment carries the real reasoning: a slow gh answer must lose to the hook staying fast, and a body the pre-commit run missed is still caught at CI - a deferred check, never a lost one. Live-measured after the change: full run 1.08s total with a real PR body fetch inside the bound. (The stub's inability to exercise the timeout is acknowledged in the harness header - it is the documented limitation of the stubbed-gh design.)
  • Second owner/repo parser - deliberately not taken, per your own "not blocking" assessment: the two parsers live in different languages (bash+sed in bin/check-quarantine-owners.sh vs a JS regex inside this script's node heredoc), so a shared implementation would add cross-language glue and its own drift risk rather than removing one. Recorded in the commit message so the decision is greppable.

Both test suites green after the fix (67 unit assertions, 8/8 harness cases).

…ail-trailer

# Conflicts:
#	.github/workflows/pr-checklist.yml
@astubbs
astubbs merged commit bdb66a9 into master Aug 18, 2026
33 checks passed
@astubbs
astubbs deleted the ci/issue-ref-gate-tail-trailer branch August 18, 2026 02:09
astubbs added a commit that referenced this pull request Aug 18, 2026
…t-outs

#307 landed the mechanism this branch was working around. It adds in-file opt-out markers at
line, block and file scope, written in the file's own comment syntax, and names quoted source
material as the case they exist for - which is exactly the case here.

So the whole-file `EXEMPT_PATHS` entry this branch added is reverted, along with its test and its
sentence in docs/issue-references.md: those three files now match master exactly. A whole-file
exemption was always coarser than the problem - only three lines needed it, and it would have left
every future bare ref in that document unchecked.

In its place, four `issue-refs: exempt-begin`/`-end` pairs around the indented blocks of quoted
material in mechanical-issue-ref-sweep-falsified-a-verbatim-log-quote.md. Block scope rather than
per-line because those blocks are markdown code blocks: a same-line marker, or the inline code span
this branch tried first, renders literally inside the quotation - which would be a smaller version
of the falsification the document is about. The markers sit outside the quoted lines, so all of them
are now byte-identical to the source; the only other change is the prose ordinals (`run #1` and
friends), which are not in a code block and take inline spans correctly.

Master's own new EXEMPT_PATHS entry, bin/test-check-issue-refs.sh, is kept - the conflict was
purely that both sides appended to the same list.
astubbs added a commit that referenced this pull request Aug 18, 2026
…p, and amend the sweep learning its own extraction refuted

Three corrections, all found at merge prep rather than during the work.

**The two batching items are different kinds of defect and were billed as one.** The arithmetic in
`calculateQuantityToRequest` needs no caller error: `target - modulo` where `batchSize - modulo` was
meant affects every correct batching configuration, continuously. The absent `batchSize` bound in
`validate()` needs somebody to pass a zero. Filing them at equal weight made the weaker one inflate
the stronger. They are now one note each, per this directory's one-item-per-file rule, and remain a
single issue, since the same field and the same one-PR fix cover both.

**The `batchSize = 0` claim was over-broad.** It said the consumer starts cleanly and processes
nothing. That holds on a default configuration, but `PCModule.initDynamicLoadFactor()` divides
`messageBufferSize` by the same zeroed target, so the same misconfiguration throws
`ArithmeticException` at construction whenever a buffer size is set - and NPEs on `null`, the field
being boxed. Silent, fatal, or an NPE depending on unrelated settings is the argument for a bound
rather than for documentation. Found by the merge-prep search for other instances of the class,
which also confirmed the arithmetic half is a single site: `PCModule` is the only other modulo in
main code and its ceiling division is correct.

**The extraction reproduced the failure the extracted learning documents.**
`mechanical-issue-ref-sweep-falsified-a-verbatim-log-quote.md` recommends an inline code span as the
remedy for a quoted artifact that trips the reference gate. Applying it here rendered the backticks
as part of the quotation, because the quote sat in an indented code block - a smaller copy of the
forgery the document exists to record. The remedy is container-dependent, and the document did not
say so. It now carries that as guidance item 8, pointing at #307's block markers as the
general answer: they sit outside the quoted material, so every quoted byte survives, which is the
property the whole document is about. Item 2 gains a forward reference so a reader who stops there
is not misled.

Amending an extracted document rather than copying it verbatim is a deliberate exception: the
correction is the direct result of this branch's own attempt to follow it, and holding it back to a
follow-up would leave the next reader to repeat the failure.
astubbs added a commit that referenced this pull request Aug 18, 2026
…es, and the batching defect the recovery found (#312)

Committed planning documents are project content even when their implementation does not exist yet.
Knowledge left on a branch is invisible to any agent that does not already know the branch exists,
and the branch can vanish: while this sweep was being assembled, docs/proxy-http-ideation was merged
into #293 and deleted, and its note did not travel with it. That note is recovered here from
the commit object alone.

Every remote branch was surveyed against master's current tree rather than merge-base diffs, which
over-report. Most doc paths that exist on a branch and not on master are carried by a branch with an
open PR and land when it does; those were left alone. What remained was triaged by reading each
note, not by bucketing it on its filename prefix - which would have been wrong in both directions.

Brought over: the 2026-08-17 ideation wave, five notes plus the three HTML deliverables they only
point at, since the notes are one-page summaries and the substance is in the HTML; one open design
proposal, recoverable producer fencing (#225); twelve docs/solutions/ learnings, whose home is
master by definition, adding the architecture-patterns, best-practices, runtime-errors and
logic-errors categories; and the chaos pain suite design plan, which master's shipped phase-1 plan
names in its own origin: frontmatter and cannot resolve, and which is the only definition of phases 2
and 3 that docs/inflight/test-chaos-phase2.md tracks as open.

Also brought over, as a deliberate exception to the rule above: six files from #306, which is
not scheduled to merge until after v6. One of them records a project-wide gap that would otherwise
stay invisible through the release it could affect - there is no japicmp or revapi equivalent, so a
source- or binary-breaking public API change rides through CI unflagged.

Left behind as spent rather than stranded: the whole v6 documentation-ideas cluster, whose output
already shipped as docs/data/roadmap.yaml, docs/data/module-maturity.yaml and the docs/features/
catalogue; the package-rename dress rehearsal, since the real rename merged as #294; and a
stale outside-collaborator grant, since the grant is gone and its branch is deleted. Left with their
branches: pr- notes, which the PR that resolves them tracks, and the ks-streams unit plans, which
document code that exists on those branches.

2026-08-14-language-proxy-interaction-model-ideation.html is deliberately not taken. Two sessions
extended it in parallel; #293 has since absorbed the HTTP half and carries none of the
polyglot half, and its copy is still growing. A master copy would fork the document a third time.
The note recording the collision is here instead, and the reconciliation belongs on that PR.

A survey is a photograph, and this one aged inside the hour. The actor-revival pair was triaged as
stranded and then removed again once #310 opened to land it. Every remaining file was
re-checked against the open PRs at push time rather than at survey time.

The batching ideation note carried an unreported defect, confirmed against master and filed as
#311, recorded as two notes because docs/inflight/ is one item per file. The arithmetic one
needs no caller error: calculateQuantityToRequest rounds up with target - modulo where filling the
tail batch needs batchSize - modulo, and the variable is named extraToFillBatch. target is always a
multiple of batchSize, so it fires whenever current is not, and in-flight settles near twice the
configured target. The second-order effect is the one worth keeping: the inflated delta makes
lastWorkRequestWasFulfilled false, which gates the adaptive load factor, so under batching the load
factor stops stepping up precisely when the pool queue is low. The second note covers an absent
bound on batchSize, where zero is silent on a default configuration, throws from
PCModule.initDynamicLoadFactor() when a message buffer size is set, and NPEs when null. Default
configurations are unaffected, batchSize defaults to 1, and there is no data-safety consequence.
Searching the class found PCModule to be the only other modulo in main code, and its ceiling
division is correct, so the arithmetic defect is a single site rather than a pattern.

Extracted docs predate the issue-reference gate, so bare numbers below #1000 were qualified against
the repo they actually mean. One document could not be: the write-up of a sweep that once rewrote a
verbatim log line into a string no program ever emitted. Its remaining bare refs are the gate
matcher's quoted inputs beside its quoted outputs, and qualifying them rewrites the demonstration
into a false one. It carries #307's block opt-out markers around those blocks, which sit
outside the quoted material so every quoted line stays byte-identical.

That document is also the one file amended rather than copied. Its own recommended remedy is an
inline code span, and applying it here reproduced the failure it records, because backticks are
literal inside a code block. It now carries that as guidance item 8, recommending the block markers
as the general answer, with a forward reference on item 2. The correction came out of this branch's
own attempt to follow the document, so deferring it would have left the next reader to repeat it.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Aug 18, 2026
…ions

Master landed #310's ranked revival of the 2022 micro-actor family the
same day this branch wrote up the interrupt-overload finding, and the two were
not pointed at each other.

Forward: this branch's design read as greenfield - "add a nudge variant" - when
a framework already exists, 537 lines in 4 files coupled to PC by one 16-line
marker interface, with six ranked directions for reviving it. Both the solution
write-up and the contract-debts note now say to read next-actor-revival.md
first, and name survivor 5 (skeleton-first strangler) as the shape a
payload-free nudge should land in rather than a rewrite.

Back: survivor 6 is a concurrency mass budget - an ArchUnit ratchet on
primitive counts, conversions graded on locks removed - and this branch has
already taken a reading it can start from. Four meanings on one bit, four
hand-clears, one of which does not clear and only warns that it cannot tell
which meaning it got. That is a mass measurement with a documented failure
behind it, which is more useful to a ratchet than a count taken cold.

Also merges master: #310 and, in the previous merge, #304,
#305, #307, #286 and #312.

Core unit suite: Tests run 372, Failures 0, Errors 0, BUILD SUCCESS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013ahSzHD72EvTGTYkmpTsx6
astubbs added a commit that referenced this pull request Aug 19, 2026
…ponse-timeout

Eight commits, all docs and CI tooling - no product code, and no conflicts. The
two files both sides touched, docs/refactoring.md and the upstream manifest,
auto-merged cleanly.

Checked rather than assumed, because a clean merge proves nothing about content:
this branch's refactoring.md entry and upstream-map entry both survive, the
inflight note this branch deletes stayed deleted, and both halves of the
poller-death handoff are intact.

Worth knowing from what came in: #307 reworks the issue-reference gate -
in-file opt-outs at line, block and file scope, and the local mirror now reads
the PR body the way CI already did. Re-run here against the new gate and clean,
now reporting "77 changed file(s) vs cae88c7 and PR 204's body".

Verified: full unit suite green across all 11 modules, plus copyright,
issue-refs, todo-index, docs-data, quarantine-registry and the new
.claude/hooks self-tests.
astubbs added a commit that referenced this pull request Aug 19, 2026
…ponse-timeout

Eleven commits, one conflict, in docs/inflight/bug-857-family.md.

Master had grown that file from four sightings to nine while this branch carried
one insertion of its own with two entries renumbered around it. Resolved by taking
master's numbering wholesale and placing this branch's sighting chronologically -
2026-08-17, between the 08-14 and 08-18 entries - as the eighth, which shifts
master's two 08-18 entries to ninth and tenth. Checked before renumbering: no prose
in the file cross-references those ordinals, only the second, third and fourth.

Two claims in that entry were softened because master overtook them. It no longer
calls itself the first replayed seed - unverifiable against nine entries - and it
drops the "seeds are perishable" framing, because #307's sibling now carries
the replay seed inside the autopsy block itself.

Also arriving, and the reason this merge is worth reading rather than just taking:
#209 is a 241-line change to AbstractParallelEoSStreamProcessor - the close
and pool-shutdown race - in the same file this branch modifies, and it makes
failureReason volatile and narrows the state-machine setter to package. The close
path it hardens is the same one this branch's commitSync now throws on.

Verified: full unit suite green across 11 modules, core 381 tests (up from 359 -
#209 brought 22 with it), 0 failures. All gates green.
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