test(oauth-client): close AC8.7/AC8.8 coverage gap with enforcer + per-sub-stage snapshots
Final-review critical fixes:
- Removed the broken `full_pipeline_interactive_all_pass` endtoend test
that pinned a 4-SpecViolation rendering as its baseline. The interactive
happy path is already assertion-tested in
`interactive_happy_path_gates_all_pass`; snapshot coverage now lives in
the focused per-sub-stage tests.
- Added `tests/oauth_client_substage_snapshots.rs` with five snapshot
tests that exercise each sub-stage end-to-end: scope_variations all-pass,
scope_variations pkce-violation, dpop_edges all-pass, dpop_edges
jti-reuse, and interactive stage blocked-by. Every Phase 7 + Phase 8
interactive check ID now appears verbatim in at least one snapshot.
- Replaced the vacuous `oauth_client_check_id_coverage.rs` with a real
enforcer: reads every oauth_client_*.snap, iterates CHECK_ALL from all
six stages, and asserts each check's ID or Pass-summary appears. Also
iterates an explicit list of stable diagnostic codes and asserts each
appears verbatim. The test now fails if a check ID or documented code
goes missing from snapshots — closing the AC8.7/AC8.8 drift gap.
- Exposed `CHECK_ALL` consts on `discovery::Check` and `jwks::Check` for
the enforcer's iteration (previously only metadata, interactive, and
the two sub-stages exposed them).
- Fixed the `RpFactory::build` signature in `src/common/CLAUDE.md` to
match the actual trait method shape.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>