generation 5: review-impl — spec-conformance gate passed, API frozen

Checklist (all six PASS):
1. API surface == ADR-004 — every accessor signature verified verbatim
2. TlsError == ADR-002 — six variants, #[non_exhaustive], typed sources,
   AcmeConfig holds exactly the two config-mismatch cases
3. Invariants: all five server invariants + client 0-RTT half +
   fail-closed structure, each with a passing behavioral test at unit
   and integration level
4. Deltas vs extraction: all ADR-pinned; two surfaced divergences
   recorded as ADR amendments — zero un-pinned divergences remain
5. Feature hygiene: default = [] lean, tokio subset (no full),
   doc comments on public API, no inline // comments, no panics
6. Docs sync: ADR-002 + ADR-003 amendment notes; overview/server/client
   Draft → Reviewed; README carries the API-freeze lifecycle note

5 findings, all low severity, all resolved forward (table in task Notes)

Verification: cargo test (81), cargo test --all-features (92),
clippy -D warnings, fmt --check, doc --no-deps,
publish --dry-run — all green. API FROZEN for the alknet rewrite.
This commit is contained in:
2026-09-10 15:05:01 +00:00
parent 87b69e19e6
commit 8a15978c41
7 changed files with 172 additions and 23 deletions
@@ -64,9 +64,11 @@ pub enum TlsError {
Rustls(#[from] rustls::Error),
/// `WebPkiServerVerifier::builder(_with_provider)..build()` — the
/// unknown-X.509-remote client path.
/// unknown-X.509-remote client path. Re-exported by rustls at
/// `rustls::client` (the `rustls::webpki` module is private at the
/// pinned 0.23.44; same type, public path).
#[error("building webpki verifier: {0}")]
VerifierBuild(#[from] rustls::webpki::VerifierBuilderError),
VerifierBuild(#[from] rustls::client::VerifierBuilderError),
/// QUIC config wrapping — the one path where `for_noq()` fails
/// (`NoInitialCipherSuite`, not a `rustls::Error`). noq-gated.
@@ -139,6 +141,14 @@ reintroduce the fold this ADR removes.
error churn (accepted — rcgen 0.13 is stable and the coupling is
what ADR-088 chose).
**Amendment (2026-09-10, from the Phase 2 implementation):** the
`VerifierBuild` source's reachable path at the pinned rustls 0.23.44
is `rustls::client::VerifierBuilderError`, not
`rustls::webpki::VerifierBuilderError` — the `rustls::webpki` module
is private at that version and the type is publicly re-exported at
`rustls::client` (same type; the implementation carries it that way,
with the path noted in the variant's doc comment).
## References
- alknet ADR-088 — the recorded target shape and its rationale