review-001 decomposition: 6 remediation tasks from verified findings

Verify every review-001 finding before decomposition:
- S-1 re-confirmed by fresh executable probe (X.509 + raw-key
  impersonation both complete the handshake with the victim's
  fingerprint extracted server-side)
- U-2/U-3 uncovered-line inventory re-derived from cargo llvm-cov
  (--all-features); matches Part C exactly
- rcgen 1975/4096 defaults, rustls cert-type negotiation arm,
  packaging list, doc texts: all verified against sources

Tasks (all verified, none speculative):
- fix-accept-any-cert-verifier-posture (S-1 + N-1 + OQ-TLS-09 + probe)
- handshake-tests (U-3 suites 1-3; suite 4 lives in the S-1 task)
- coverage-cheap-closes (U-2's seven groups)
- acme-event-loop-test (U-1; depends on coverage-cheap-closes for the
  tracing-capture pattern)
- config-validation-and-trivia (C-2 ALPN dedup, C-3 empty-domains,
  N-6 excludes, N-7 https doc line)
- docs-pin-c1-c4-n3-n4 (C-1, C-4, N-3 decision note, N-4 negotiation
  note)

Graph: acme-event-loop-test is generation 2; the rest run in
generation 1. taskgraph validate: 14 tasks, no cycles.

Verification: cargo test (default + --all-features) green before and
after; probe file deleted after its run.
This commit is contained in:
2026-09-10 21:16:13 +00:00
parent bb0d060135
commit d7db6b17a6
6 changed files with 580 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
---
id: acme-event-loop-test
name: ACME event-loop coverage — fake-directory integration test (U-1)
status: pending
depends_on: [coverage-cheap-closes]
scope: moderate
risk: medium
impact: component
level: implementation
tags: [tests, acme, review-001, u1]
---
## Description
The ACME event-loop body (src/server.rs:94-133) is unreachable by
tests: 23 uncovered lines — every `EventOk`/`EventError` arm, the
`debug`/`warn`/`error` mapping, and the "state machine ended" log are
dead code as far as the suite can prove. The `acme_lifecycle` tests
construct the config and assert spawn + ALPN + resolver wiring; the
spawned task runs against a blackhole URL and its events are never
observed. A refactor that drops or mislevels an arm (e.g.
`EventError::Order` warn → error) lands green; the loop's exit
condition (`state.next() == None` → "ACME: state machine ended") is
untested — if upstream changes the stream's termination semantics,
nothing notices.
The acme feature's only runtime surface is this loop; it deserves one
real integration test.
## Work
1. Drive a `DirCache`-backed `AcmeState` against a local fake
directory: a stub HTTP server (tokio, `std::net::TcpListener` on an
ephemeral port — no new deps) that serves a directory JSON with no
usable endpoints, forcing the error path through the *real* event
stream.
2. Assert the log events fire. Two shapes, pick one (or both):
- `tracing` test subscriber capturing the `warn!`/`error!` events
(tracing-subscriber with a test layer — add as dev-dependency
only), or
- extract the event-mapping match into a helper fn taking the
event, returning (level, message-class), and test the helper
directly (no subscriber needed; cheaper, but the loop body
itself stays uncovered — prefer the subscriber shape if the dev
dep is acceptable).
3. Assert termination: with the fake directory erroring out, the
spawned task's `JoinHandle` resolves (the loop ends when the
stream ends) — pins the exit condition.
4. Keep `TlsError` out of it: per ADR-002/ADR-006, ACME runtime errors
are stream events, not error variants — the test asserts events,
never a `TlsError`.
## Verification
- [ ] server.rs 94-133 covered under `cargo llvm-cov --all-features`
- [ ] The test performs no real network I/O (binds localhost only)
- [ ] `cargo test --features acme`, `--all-features` green; default
build unaffected
- [ ] clippy/fmt/doc green
## Acceptance Criteria
- [ ] Every `EventOk`/`EventError` arm is executed by a test
- [ ] The "state machine ended" termination path is asserted
- [ ] The ACME feature's runtime surface is no longer
refactor-fragile
## References
- docs/reviews/001-implementation-review.md §U-1, Part C
- src/server.rs:61-139 (`new_acme` + the spawned loop)
- tests/acme_lifecycle.rs (the existing construction-level tests)
- ADR-006 (acme feature layout), ADR-002 (`TlsError` scope boundary)
## Notes
> Agent fills this during implementation.
## Summary
> Agent fills this on completion.