fix(relay): address final review — comment hygiene, dpop alg, test coverage
Before-merge fixes:
- Strip F#/AC# traceability prefixes from production source comments
- Replace AC-labeled test section headers with descriptive names
- dpop_alg_from_str: restrict to ES256 only (removes ES384 inconsistency
with server metadata which advertises ES256 as sole supported algorithm)
- into_response: return server_error when nonce cannot be set as header
(instead of silently omitting the nonce, which leaves client with no
retry path per RFC 9449 §7.1)
- code_challenge_method mismatch: invalid_request not invalid_grant
(RFC 7636 §4.6)
- HeaderValue::from_static for the application/json content-type literal
Test gap coverage (high priority):
- C-1/C-2: auth code and refresh token are NOT consumed on client_id mismatch
- F3: refresh token with NULL jkt returns invalid_grant
- F1: ES256 AT+JWT round-trip accepted at resource endpoint (AuthenticatedUser)
- F1: forged ES256 token signed by wrong key returns 401
Test gap coverage (medium/low priority):
- C-5: multiple DPoP headers at token endpoint returns invalid_dpop_proof
- F2: code_challenge_method=plain returns invalid_request
- F7: code_verifier < 43 chars returns invalid_grant
- F5: Cache-Control: no-store present on authorization_code success response