Files

2.7 KiB
Raw Permalink Blame History

HTTP Client Platform — Release Checklist

A release is complete when each item below is demonstrated by a command, not by review.

Gates

cd src
./gradlew :adapter:outbound:httpclient:test --console=plain
./gradlew :adapter:outbound:httpclient:httpClientStableContractTest --console=plain
./gradlew :adapter:outbound:httpclient:httpClientSecurityTest --console=plain
./gradlew :adapter:outbound:httpclient:httpClientBlockHoundTest --console=plain
./gradlew :adapter:outbound:httpclient:spring62CompatibilityTest --console=plain
./gradlew :adapter:outbound:httpclient:spring70CompatibilityTest --console=plain
./gradlew :adapter:outbound:httpclient:httpClientFailureInjectionTest --console=plain   # needs Docker
./gradlew :adapter:outbound:httpclient:httpClientPerformanceTest \
  -Pperformance.assertions.enabled=true --console=plain
./gradlew verifyCleanArchitectureDependencies --console=plain
./gradlew :app-bootstrap:test --tests '*CleanArchitectureTest' --console=plain
python3 ../scripts/verify-httpclient-docs.py

Completion criteria (design §33)

  • Typed clients are the default entry point; H2 and H3 are separately authorised.
  • H1H4 cannot bypass timeout, host, TLS, auth, size, or observation policy.
  • Apache, JDK, and Reactor produce identical result and exception metadata.
  • Pool, DNS, connect, TLS, and retry backoff all fit inside the effective deadline.
  • Every extra attempt is explained by idempotency, replayability, evidence, deadline, and budget.
  • Non-idempotent SENT_NO_RESPONSE surfaces as HttpAmbiguousExecutionException.
  • Pool and buffers are reclaimed after unread bodies, decode errors, cancels, and size rejections.
  • OAuth2 refresh is single-flight and 401 replay happens at most once.
  • Trust-all and hostname-verification bypass fail at startup.
  • Canonicalisation, DNS/IP validation, redirect revalidation, and egress control all pass.
  • No transparent retry occurs after the first delivered byte.
  • No platform code blocks a Reactor event loop, proven by a BlockHound self-check.
  • The negotiated wire protocol matches what the support matrix claims per transport.
  • Logical calls and attempts are separate metrics with no forbidden label.
  • DNS, pool, TLS, reset, partial response, and HTTP/2 GOAWAY are reproducible.
  • Thread, heap, direct memory, pool, and retry budget bounds hold.
  • The support matrix, configuration reference, security guide, runbook, and migration guide match the code.

Experimental

Jetty HTTP/3 stays Experimental until Http3CapabilityReport reports QUIC and TLS 1.3 and the contract subset it declares passes in a dedicated environment. It is never auto-configured by the Stable starter.