docs(rfc): rfc 0029 specified — §5 acceptance criteria - #420
Conversation
…gn-off 2026-07-07 Seven scenarios: config resolution incl. the unconditional empty-list rule, the fixture-issuer verification matrix (one undifferentiated 401), claim-binding enforcement invariance vs RFC 0026 §5.3-.6, wildcard parity, static+OIDC coexistence, mid-run JWKS rotation, and the real-Dex testcontainers end-to-end with telemetry/audit parity. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 41 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThis PR updates the OIDC bearer-layer RFC document, changing its lifecycle status from "drafted" to "specified" and rewriting the acceptance criteria and testing strategy sections into detailed, scenario-based specifications (RFC0029.1–RFC0029.7). ChangesRFC 0029 Documentation Update
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Moves RFC 0029 (OIDC bearer layer) from drafted to specified by filling in the promised §5 acceptance criteria and aligning §6 testing strategy with those scenarios, formalizing the verification/enforcement expectations for the OIDC-based auth layer that plugs into RFC 0026’s existing (name, tenants) enforcement.
Changes:
- Updates RFC 0029 lifecycle status to
specified. - Replaces the §5 placeholder with concrete, numbered acceptance scenarios RFC0029.1–.7 (fixture issuer + real Dex arm).
- Refines §6 testing strategy to map test tiers to the acceptance scenarios.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…e-issuer tier Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#426) * feat(auth): rfc 0029 green — dex end-to-end acceptance (.7) and status flip The last §5 arm: a real Dex container (testcontainers, CI-gated like the localstack job) mints client-credentials tokens the served binary verifies against Dex's real JWKS. - The static client carries the tenant list via clientCredentialsClaims.groups (tenant_claim: groups) and the name label via its display name (name_claim: name, scope profile) — the OTel Collector oauth2client flow verbatim. - Arms: startup discovery against Dex; in-claim gRPC ingest acks; cross-tenant batch PERMISSION_DENIED; in-claim query 200; MCP 401 bearer-less / success with the Dex bearer; real-TTL expiry (8 s tokens, zero skew) collapses to the undifferentiated 401; SIGTERM flushes the audit sink and the read-back ingest_denied event carries the name_claim value; no JWT material in error bodies or the log surface. - Image: Dex `master` pinned by digest — the client-credentials grant and clientCredentialsClaims are merged upstream (dexidp/dex#4691) but post-v2.45.1; the RFC §6 note + ci.yml comment record the bump path to v2.46. New required `dex oidc (testcontainers)` CI job runs the arm by exact name. - reqwest (rustls + json) joins the server dev-deps for minting and readiness polling — the same stack the verifier itself uses. RFC 0029 status red → green: .1–.6 discharged across #420–#425, .7 lands here and runs in this PR's own required CI job. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(auth): surface dex container logs on readiness timeout Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(auth): dex needs one connector — enablePasswordDB, inert for client-credentials Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(auth): dex arm hardening — ttl headroom, port retry, async sigterm; ci creds + rfc quote 20s tokens with the expiry wait driven by the response's expires_in; container start retries a fresh port on the reserve race; SIGTERM via tokio Command with an asserted status; persist-credentials: false on the dex job checkout; the RFC image note no longer swallows the following paragraph. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Takes RFC 0029 (OIDC bearer layer)
drafted→specifiedon maintainer sign-off (2026-07-07).Writes the §5 acceptance criteria promised at the drafted gate,
RFC0029.1–.7:${env}substitution, requiredaudience, the at-least-one rule, and the unconditionaltokens: []startup error (the coexistence rule settled in docs(rfc): rfc 0029 — oidc bearer layer (issuer-agnostic, dex-validated), drafted #419 review); open-mode warning unchanged.nbf-beyond-skew / wrong-aud/ wrong-iss/ bad-sig /alg:none/ HMAC-downgrade / non-JWT all rejected as one undifferentiated 401 before wire decode, nothing reaching the WAL.(name, tenants)binding: whole-batch ingest rule, 401→400→403 on query + MCP, wildcard parity, static+OIDC coexistence, open-mode parity.kidrefresh mid-run; withdrawn key rejected post-refresh.error.typevalues,ingest_deniedcarrying thename_claimvalue, no JWT material on any surface).§6 updated to name which scenarios each test tier discharges. Docs-only;
mdbook buildclean. Invariant §3.7 (multi-tenancy): the criteria pin the binding derivation's second source to the existing enforcement contracts rather than adding new ones.Next rung:
red(#[ignore]d stubs) on the usual cadence.🤖 Generated with Claude Code
Summary by CodeRabbit