Skip to content

Fix remaining audit issues: async credential issuance, complete Javadoc, 80% coverage gate#114

Merged
nficano merged 7 commits into
mainfrom
fix/remaining-issues-2026-06-12
Jun 12, 2026
Merged

Fix remaining audit issues: async credential issuance, complete Javadoc, 80% coverage gate#114
nficano merged 7 commits into
mainfrom
fix/remaining-issues-2026-06-12

Conversation

@nficano

@nficano nficano commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes the four remaining open issues.

#109 — credential issuance blocked the session dispatch thread (fix)

acceptJob ran the provisioner future to completion with join() inside onNext, so a slow upstream key-minting call starved every inbound message on the session — pings went unanswered and a stall > 2× heartbeat_interval_sec had the session reaped as HEARTBEAT_LOST mid-submit. Acceptance is now split: the prologue (resolve, register) stays on the dispatch thread; the epilogue (attach credentials, job.accepted, worker start, watchdogs) runs when issuance completes, chained through a per-session acceptSequence so job.accepted preserves submit order — the FIFO correlation clients rely on, which is why this was deferred in #112. Idempotent replays join the same chain (and so always observe the #79 captured budget); a session torn down mid-issuance revokes freshly minted credentials; the lease-expiry watchdog measures from the current clock so issuance latency cannot postpone an absolute expires_at. AsyncAcceptanceTest covers both acceptance criteria.

#81 — spec citations (docs)

§5.1§5, §4.1/§4.2§4 in ArcpMapper, Envelope, StdioTransport, WebSocketJsonTransport, and the TCK label; every other §N.N citation in src/main audited against draft-arcp-1.1.md (all exist; the §1.9 in ReplayingPublisher cites Reactive Streams, left as-is).

#34 — complete Javadoc + doclint enforcement (docs)

123 src/main files across all ten published modules documented (~575 doclint findings). maven-javadoc-plugin now runs doclint all (including missing) with failOnWarnings (overridable via -Darcp.javadoc.failOnWarnings=false), so the CI javadoc job fails on undocumented exported API.

#33 — coverage ≥80% line+branch, enforced (testing)

The issue's numbers were stale (Gradle-era). Fresh baseline on main was 80.8% line / 62.0% branch. Added ~290 deterministic tests (no sleeps; latches, manual scheduler, mutable clock, hand-rolled fakes — Mockito can't instrument on JDK 25):

module line branch (was)
arcp-core 99.6% 99.0% (75.0)
arcp-client 98.6% 96.8% (59.3)
arcp-runtime 96.8% 93.5% (62.6)
arcp-otel 95.9% 91.7% (66.7)
middlewares ×4 100% 100% (20–30)
arcp-tck 87.4% 87.5% (—)
total 97.4% 94.7% (62.0)

jacoco:check now enforces a 0.80 line+branch BUNDLE minimum at verify time in every library module (examples/recipes and the sourceless arcp umbrella exempt via arcp.skip.coverage.check; check self-skips for -DskipTests jobs). Verified: full mvn verify green, and a 0.99 negative test fails the build as expected.

Drive-by: #113 filed for a latent WebSocketTransport.connect timeout hang found while writing coverage tests (not fixed here to keep this PR's runtime changes scoped to #109).

Closes #109
Closes #81
Closes #34
Closes #33

Test plan

  • mvn verify (JDK 25, spotless skipped) — all modules, coverage gate active
  • mvn spotless:check (JDK 21)
  • CI javadoc command (JDK 21) — BUILD SUCCESS, 0 warnings
  • Negative test: raising the jacoco minimum to 0.99 fails the build
  • CI on both JDK matrices

🤖 Generated with Claude Code

nficano and others added 7 commits June 12, 2026 07:11
…hread (#109)

acceptJob ran the provisioner's CompletableFuture to completion with
join() inside onNext, so a slow upstream key-minting call starved every
inbound message on the session: pings went unanswered, heartbeat.onInbound
never advanced, and a stall beyond 2x heartbeat_interval_sec had the
session reaped as HEARTBEAT_LOST mid-submit. One slow job.submit also
head-of-line-blocked cancels and acks for every other job.

Acceptance is now split: the prologue (resolve, register) stays on the
dispatch thread; the epilogue (attach credentials, job.accepted, worker
start, watchdogs) runs when issuance completes, chained through a
per-session acceptSequence so job.accepted preserves submit order — the
FIFO correlation clients rely on, which is why this was deferred in #112.
Idempotent replays join the same chain so a replayed acceptance cannot
overtake the original and always observes the captured budget (#79).
If the session dies or the job is cancelled while issuance is in flight,
freshly minted credentials are revoked and nothing is announced; the
lease-expiry watchdog measures its delay from the current clock so
issuance latency cannot postpone an absolute expires_at.

AsyncAcceptanceTest covers both acceptance criteria: pongs continue
through a >2x-interval provisioner stall, and a slow first issuance does
not let a later acceptance overtake it.

Closes #109

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Closes #81

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Document every public/protected type, constructor, method, record
component, and enum constant across the ten published modules
(arcp-core, arcp-client, arcp-runtime, arcp, arcp-otel,
arcp-runtime-jetty, arcp-middleware-jakarta,
arcp-middleware-spring-boot, arcp-middleware-vertx, arcp-tck):
~575 doclint findings fixed, including two broken {@link} references.

Enforce it in the root pom: maven-javadoc-plugin now runs with
doclint `all` (including `missing`) and failOnWarnings=true, so the
CI javadoc job fails on any undocumented exported API. The gate is
overridable for local triage via -Darcp.javadoc.failOnWarnings=false.

A few doclint "use of default constructor" warnings required adding
explicit, documented no-arg constructors with semantics identical to
the implicit ones; no other code changed.

Closes #34

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ure branches (#33)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#33)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sport, and core wire paths (#33)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… coverage (#33)

arcp-otel was the last module under the bar (66.7% branch): the new
ArcpOtelBranchTest covers send-failure span recording, optional envelope
attributes, trace-context inject (no-op propagator, merge into existing
extensions, non-object extensions left untouched) and extract (malformed
shapes fall back to Context.current, valid traceparent becomes the
receive span's parent), publisher caching, close ordering, and upstream
completion propagation.

With every library module now >=80% on both counters (line 97.4%,
branch 94.7% overall), jacoco:check enforces a 0.80 line+branch BUNDLE
minimum at verify time. Library modules opt in via
arcp.skip.coverage.check=false; examples/recipes and the sourceless
arcp umbrella stay exempt, and check self-skips when tests were skipped
(no execution data), so -DskipTests CI jobs are unaffected.

Closes #33

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

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 178 files, which is 28 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a2ecb083-9187-4174-a2fb-968e89166d11

📥 Commits

Reviewing files that changed from the base of the PR and between d512fbc and c258b3f.

📒 Files selected for processing (178)
  • arcp-client/pom.xml
  • arcp-client/src/main/java/dev/arcp/client/ArcpClient.java
  • arcp-client/src/main/java/dev/arcp/client/JobHandle.java
  • arcp-client/src/main/java/dev/arcp/client/Page.java
  • arcp-client/src/main/java/dev/arcp/client/ResultStream.java
  • arcp-client/src/main/java/dev/arcp/client/Session.java
  • arcp-client/src/main/java/dev/arcp/client/SubscribeOptions.java
  • arcp-client/src/main/java/dev/arcp/client/WebSocketTransport.java
  • arcp-client/src/test/java/dev/arcp/client/coverage/ClientLifecycleCoverageTest.java
  • arcp-client/src/test/java/dev/arcp/client/coverage/ClientProtocolCoverageTest.java
  • arcp-client/src/test/java/dev/arcp/client/coverage/FakeTransport.java
  • arcp-client/src/test/java/dev/arcp/client/coverage/ReplayingPublisherCoverageTest.java
  • arcp-client/src/test/java/dev/arcp/client/coverage/WebSocketTransportCoverageTest.java
  • arcp-core/pom.xml
  • arcp-core/src/main/java/dev/arcp/core/Version.java
  • arcp-core/src/main/java/dev/arcp/core/agents/AgentRef.java
  • arcp-core/src/main/java/dev/arcp/core/auth/Auth.java
  • arcp-core/src/main/java/dev/arcp/core/auth/BearerVerifier.java
  • arcp-core/src/main/java/dev/arcp/core/auth/Principal.java
  • arcp-core/src/main/java/dev/arcp/core/capabilities/AgentDescriptor.java
  • arcp-core/src/main/java/dev/arcp/core/capabilities/Capabilities.java
  • arcp-core/src/main/java/dev/arcp/core/capabilities/Feature.java
  • arcp-core/src/main/java/dev/arcp/core/credentials/Credential.java
  • arcp-core/src/main/java/dev/arcp/core/credentials/CredentialConstraints.java
  • arcp-core/src/main/java/dev/arcp/core/credentials/CredentialId.java
  • arcp-core/src/main/java/dev/arcp/core/credentials/CredentialScheme.java
  • arcp-core/src/main/java/dev/arcp/core/error/AgentNotAvailableException.java
  • arcp-core/src/main/java/dev/arcp/core/error/AgentVersionNotAvailableException.java
  • arcp-core/src/main/java/dev/arcp/core/error/ArcpException.java
  • arcp-core/src/main/java/dev/arcp/core/error/BudgetExhaustedException.java
  • arcp-core/src/main/java/dev/arcp/core/error/CancelledException.java
  • arcp-core/src/main/java/dev/arcp/core/error/DuplicateKeyException.java
  • arcp-core/src/main/java/dev/arcp/core/error/ErrorCode.java
  • arcp-core/src/main/java/dev/arcp/core/error/ErrorPayload.java
  • arcp-core/src/main/java/dev/arcp/core/error/HeartbeatLostException.java
  • arcp-core/src/main/java/dev/arcp/core/error/InternalErrorException.java
  • arcp-core/src/main/java/dev/arcp/core/error/InvalidRequestException.java
  • arcp-core/src/main/java/dev/arcp/core/error/JobNotFoundException.java
  • arcp-core/src/main/java/dev/arcp/core/error/LeaseExpiredException.java
  • arcp-core/src/main/java/dev/arcp/core/error/LeaseSubsetViolationException.java
  • arcp-core/src/main/java/dev/arcp/core/error/NonRetryableArcpException.java
  • arcp-core/src/main/java/dev/arcp/core/error/PermissionDeniedException.java
  • arcp-core/src/main/java/dev/arcp/core/error/ResumeWindowExpiredException.java
  • arcp-core/src/main/java/dev/arcp/core/error/RetryableArcpException.java
  • arcp-core/src/main/java/dev/arcp/core/error/TimeoutException.java
  • arcp-core/src/main/java/dev/arcp/core/error/UnauthenticatedException.java
  • arcp-core/src/main/java/dev/arcp/core/error/UpstreamBudgetExhaustedException.java
  • arcp-core/src/main/java/dev/arcp/core/events/ArtifactRefEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/CredentialRotatedBody.java
  • arcp-core/src/main/java/dev/arcp/core/events/DelegateEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/EventBody.java
  • arcp-core/src/main/java/dev/arcp/core/events/Events.java
  • arcp-core/src/main/java/dev/arcp/core/events/LogEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/MetricEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/ProgressEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/ResultChunkEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/StatusEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/ThoughtEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/ToolCallEvent.java
  • arcp-core/src/main/java/dev/arcp/core/events/ToolResultEvent.java
  • arcp-core/src/main/java/dev/arcp/core/ids/JobId.java
  • arcp-core/src/main/java/dev/arcp/core/ids/MessageId.java
  • arcp-core/src/main/java/dev/arcp/core/ids/ResultId.java
  • arcp-core/src/main/java/dev/arcp/core/ids/SessionId.java
  • arcp-core/src/main/java/dev/arcp/core/ids/TraceId.java
  • arcp-core/src/main/java/dev/arcp/core/lease/Lease.java
  • arcp-core/src/main/java/dev/arcp/core/lease/LeaseConstraints.java
  • arcp-core/src/main/java/dev/arcp/core/messages/ClientInfo.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobAccepted.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobCancel.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobCancelled.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobError.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobEvent.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobFilter.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobResult.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobSubmit.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobSubscribe.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobSubscribed.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobSummary.java
  • arcp-core/src/main/java/dev/arcp/core/messages/JobUnsubscribe.java
  • arcp-core/src/main/java/dev/arcp/core/messages/Message.java
  • arcp-core/src/main/java/dev/arcp/core/messages/Messages.java
  • arcp-core/src/main/java/dev/arcp/core/messages/RuntimeInfo.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionAck.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionBye.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionClosed.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionHello.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionJobs.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionListJobs.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionPing.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionPong.java
  • arcp-core/src/main/java/dev/arcp/core/messages/SessionWelcome.java
  • arcp-core/src/main/java/dev/arcp/core/transport/MemoryTransport.java
  • arcp-core/src/main/java/dev/arcp/core/transport/StdioTransport.java
  • arcp-core/src/main/java/dev/arcp/core/transport/Transport.java
  • arcp-core/src/main/java/dev/arcp/core/wire/ArcpMapper.java
  • arcp-core/src/main/java/dev/arcp/core/wire/Envelope.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/AgentRefCoverageTest.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/CoreWireCoverageTest.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/EventAndConstraintCoverageTest.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/LeaseCoverageTest.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/LeaseSubsetCoverageTest.java
  • arcp-core/src/test/java/dev/arcp/core/coverage/TransportEdgeCoverageTest.java
  • arcp-middleware-jakarta/pom.xml
  • arcp-middleware-jakarta/src/main/java/dev/arcp/middleware/jakarta/ArcpJakartaAdapter.java
  • arcp-middleware-jakarta/src/main/java/dev/arcp/middleware/jakarta/ArcpJakartaEndpoint.java
  • arcp-middleware-jakarta/src/test/java/dev/arcp/middleware/jakarta/coverage/JakartaEndpointLifecycleTest.java
  • arcp-middleware-jakarta/src/test/java/dev/arcp/middleware/jakarta/coverage/JakartaHostAllowlistConfiguratorTest.java
  • arcp-middleware-jakarta/src/test/java/dev/arcp/middleware/jakarta/coverage/JakartaTestSupport.java
  • arcp-middleware-jakarta/src/test/java/dev/arcp/middleware/jakarta/coverage/JakartaWebSocketTransportCoverageTest.java
  • arcp-middleware-spring-boot/pom.xml
  • arcp-middleware-spring-boot/src/main/java/dev/arcp/middleware/spring/ArcpSpringBootAutoConfiguration.java
  • arcp-middleware-spring-boot/src/main/java/dev/arcp/middleware/spring/ArcpSpringBootProperties.java
  • arcp-middleware-spring-boot/src/main/java/dev/arcp/middleware/spring/ArcpWebSocketHandler.java
  • arcp-middleware-spring-boot/src/test/java/dev/arcp/middleware/spring/coverage/ArcpWebSocketHandlerCoverageTest.java
  • arcp-middleware-spring-boot/src/test/java/dev/arcp/middleware/spring/coverage/HostAllowlistInterceptorCoverageTest.java
  • arcp-middleware-spring-boot/src/test/java/dev/arcp/middleware/spring/coverage/SpringAutoConfigurationCoverageTest.java
  • arcp-middleware-spring-boot/src/test/java/dev/arcp/middleware/spring/coverage/SpringTestSupport.java
  • arcp-middleware-spring-boot/src/test/java/dev/arcp/middleware/spring/coverage/SpringWebSocketTransportCoverageTest.java
  • arcp-middleware-vertx/pom.xml
  • arcp-middleware-vertx/src/main/java/dev/arcp/middleware/vertx/ArcpVertxHandler.java
  • arcp-middleware-vertx/src/test/java/dev/arcp/middleware/vertx/coverage/VertxHandlerCoverageTest.java
  • arcp-middleware-vertx/src/test/java/dev/arcp/middleware/vertx/coverage/VertxTestSupport.java
  • arcp-middleware-vertx/src/test/java/dev/arcp/middleware/vertx/coverage/VertxTransportCoverageTest.java
  • arcp-otel/pom.xml
  • arcp-otel/src/main/java/dev/arcp/otel/ArcpOtel.java
  • arcp-otel/src/test/java/dev/arcp/otel/ArcpOtelBranchTest.java
  • arcp-runtime-jetty/pom.xml
  • arcp-runtime-jetty/src/main/java/dev/arcp/runtime/jetty/ArcpJettyEndpoint.java
  • arcp-runtime-jetty/src/main/java/dev/arcp/runtime/jetty/ArcpJettyServer.java
  • arcp-runtime-jetty/src/main/java/dev/arcp/runtime/jetty/WebSocketJsonTransport.java
  • arcp-runtime-jetty/src/test/java/dev/arcp/runtime/jetty/coverage/HostAllowlistFilterCoverageTest.java
  • arcp-runtime-jetty/src/test/java/dev/arcp/runtime/jetty/coverage/JettyEndpointLifecycleTest.java
  • arcp-runtime-jetty/src/test/java/dev/arcp/runtime/jetty/coverage/JettyServerHostAllowlistTest.java
  • arcp-runtime-jetty/src/test/java/dev/arcp/runtime/jetty/coverage/JettyTestSupport.java
  • arcp-runtime-jetty/src/test/java/dev/arcp/runtime/jetty/coverage/WebSocketJsonTransportCoverageTest.java
  • arcp-runtime/pom.xml
  • arcp-runtime/src/main/java/dev/arcp/runtime/ArcpRuntime.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/agent/Agent.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/agent/AgentRegistry.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/agent/JobContext.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/agent/JobInput.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/agent/JobOutcome.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/CredentialBinding.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/CredentialProvisioner.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/CredentialRevocationStore.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/FileCredentialRevocationStore.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/InMemoryCredentialRevocationStore.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/IssuedCredential.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/credentials/NoopCredentialProvisioner.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/heartbeat/HeartbeatTracker.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/idempotency/IdempotencyFingerprint.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/idempotency/IdempotencyStore.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/lease/BudgetCounters.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/lease/LeaseGuard.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/session/JobListing.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/session/JobRecord.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/session/ResumeBuffer.java
  • arcp-runtime/src/main/java/dev/arcp/runtime/session/SessionLoop.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/AsyncAcceptanceTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/ArcpRuntimeEdgeTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/CredentialBindingEdgeTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/FileRevocationStoreEdgeTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/IdempotencyStoreEdgeTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/JobListingFilterTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/JobRecordTransitionTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/LeaseGuardEdgeTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/ManualScheduler.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/MiscBranchTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/MutableClock.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/SessionHarness.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/SessionLoopBranchTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/SessionLoopCredentialTest.java
  • arcp-runtime/src/test/java/dev/arcp/runtime/coverage/SessionLoopSchedulerTest.java
  • arcp-tck/pom.xml
  • arcp-tck/src/main/java/dev/arcp/tck/ConformanceSuite.java
  • arcp-tck/src/main/java/dev/arcp/tck/TckProvider.java
  • pom.xml

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/remaining-issues-2026-06-12

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Jun 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.20690% with 8 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...ain/java/dev/arcp/runtime/session/SessionLoop.java 84.00% 6 Missing and 2 partials ⚠️

📢 Thoughts on this report? Let us know!

@nficano

nficano commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

Re the code-quality findings: 9 of 10 are in test-support fakes (JDK dynamic-proxy InvocationHandler args arrays — the flagged dereferences sit behind method-name dispatch for methods that always carry arguments; zero-arg paths return before indexing), an unread local kept for sent-frame ordering clarity, and a parseInt in a raw-HTTP test helper where a malformed status line should fail the test loudly anyway. The ignored combiner parameter in SessionLoop is required by thenCombine's arity and can't be _ until the build targets Java 22+ (maven.compiler.release=21; unnamed variables are preview there). Resolving without churn; behavior is pinned by the green suite + coverage gate.

@nficano nficano merged commit e4d40b4 into main Jun 12, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant