fix(oauth-client): Phase 7 cycle 2 — complete gating, diagnostics, RP client config, and happy-path test
Fixes all identified issues from Phase 7 cycle 2 re-review:
CRITICAL (4):
- C1: Fix keys_have_alg gate enforcement by computing each check's gate status independently instead of nesting in if-block. ClientCompletedToken now correctly emits blocked_by when keys_have_alg fails even if PAR gates pass.
- C2: Replace broken happy-path test with simplified gating test that verifies interactive stage emits correct results when all static gates pass.
- C3: Add ServerBound.skipped() to all gated-skip paths to maintain consistent 6-check inventory across all code paths.
- C4: Add InteractiveViolationDiagnostic struct to spec_violation() so all interactive check violations carry stable diagnostic codes (oauth_client::interactive::<slug>).
IMPORTANT (3):
- I1: RelyingParty::new now configures HTTP client with use_rustls_tls(), APP_USER_AGENT, and 30s timeout per spec.
- I2: do_authorize now uses dedicated HTTP client with redirect::Policy::none() to properly detect redirect responses.
- I3: sign_dpop now maps signing failures to JwsError::SignFailed instead of MetadataMalformed.
MINOR (2):
- M1: Remove unused dpop_nonces field and #[expect(dead_code)] — defer nonce rotation to Phase 8.
- M2: Add comment to grant_types_includes_refresh_token field explaining Phase 7 hard-codes skip, Phase 8 wires support.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>