Skip to content

fix: validate auth provider conformance - #1072

Merged
kang-heewon merged 1 commit into
trunkfrom
fix/942-auth-conformance
Jun 22, 2026
Merged

fix: validate auth provider conformance#1072
kang-heewon merged 1 commit into
trunkfrom
fix/942-auth-conformance

Conversation

@kang-heewon

@kang-heewon kang-heewon commented Jun 21, 2026

Copy link
Copy Markdown
Member

Fixes #942.

Summary

  • Adds a shared auth provider conformance suite covering valid auth mapping, missing and invalid credentials, malformed provider payloads, upstream auth failures, webhook failure contracts, readiness diagnostics, tenant/org mapping evidence, secret redaction, and optional env-gated live smoke.
  • Makes Better Auth and Clerk adapters pass the shared suite with stable Problem/diagnostic behavior for invalid credentials, malformed sessions/tokens, upstream failures, webhook signatures/payloads, and readiness checks.
  • Preserves alpha/WIP maturity while adding documented conformance/readiness/live-smoke evidence, generated API docs, package catalog updates, Problem registry entries, public API snapshots, and a patch changeset.

Verification

  • pnpm format - passed.
  • pnpm --filter @croco/testing test - passed, 61 tests.
  • pnpm --filter @croco/auth-better-auth test - passed, 6 files / 101 tests.
  • pnpm --filter @croco/auth-clerk test - passed, 8 files / 90 tests; existing package export-condition warning remains.
  • pnpm typecheck --filter=@croco/testing --filter=@croco/auth-better-auth --filter=@croco/auth-clerk - passed, 54 Turbo tasks.
  • pnpm check - passed.
  • pnpm --filter @croco/docs docs:build - passed, 1821 pages; existing TypeDoc unknown-tag warnings and sitemap site warning remain.
  • pnpm changeset-required:check -- --base origin/trunk --head HEAD - passed.
  • git diff --check - passed before commit.
  • Pre-commit hook passed: staged oxlint and oxfmt.
  • Pre-push hook passed: existing changeset, full Turbo test 223/223 tasks, and full Turbo typecheck 222/222 tasks.

Self-review gates

  • Correctness/regression: PASS. The shared conformance suite exercises both providers for valid auth, missing credentials, invalid credentials, malformed payloads, upstream failures, webhook failures, readiness reports, tenant/org evidence, and skipped live smoke unless required env is explicitly present.
  • API/security/compatibility/release: PASS. Auth-core is unchanged, new Problem contracts are additive and in the generated registry, diagnostics redact configured secret values in messages/details/failures, and release metadata includes a patch changeset plus refreshed generated docs and public API snapshots.
  • Maintainability/minimality: PASS. The shared suite lives in @croco/testing, provider-specific behavior stays in the provider packages, maturity remains alpha/WIP, and no new provider or credential requirement is introduced.

Independent review

A read-only adversarial review found three blockers before final verification: Better Auth masked retryable 408/429 upstream auth failures as null, Clerk accepted missing token subjects as invalid AuthUser ids, and readiness diagnostics could leak raw configured secrets in generic fields. The final patch classifies those upstream failures as Problems, rejects missing Clerk sub with ClerkMalformedClaimProblem, exact-redacts configured secrets, and adds regression coverage for each case.

Risk

Low-medium. The shared conformance contract is additive, but Better Auth and Clerk now fail closed for malformed payloads and retryable upstream failures instead of treating them as unauthenticated sessions.

Summary by CodeRabbit

릴리스 노트

  • New Features

    • Better Auth 및 Clerk 어댑터에 진단 기능 추가 - 시스템 준비 상태를 확인하고 보고
    • 인증 제공자 적합성 테스트 스위트 추가 - 인증 및 웹훅 계약 검증
    • 웹훅 HMAC 검증 및 조직-테넌트 매핑 검증 강화
    • 새로운 문제 코드 추가: auth-better-auth/authentication-failed, auth-clerk/token-verification-upstream-failed
  • Documentation

    • Better Auth 및 Clerk API 참조 문서 생성

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kang-heewon, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 53 minutes and 11 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

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, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2ce3e0e8-5c80-4a45-a7ce-851424ebe8a9

📥 Commits

Reviewing files that changed from the base of the PR and between e4bcc34 and 934436f.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (135)
  • .changeset/auth-provider-conformance.md
  • .github/workflows/ci.yml
  • README.md
  • docs/package-catalog.json
  • docs/package-docs-baseline.json
  • docs/package-docs-report.md
  • docs/problem-code-registry.json
  • packages/auth-better-auth/README.md
  • packages/auth-better-auth/package.json
  • packages/auth-better-auth/src/index.ts
  • packages/auth-better-auth/src/libs/BetterAuthDiagnosticsProvider.ts
  • packages/auth-better-auth/src/libs/BetterAuthProvider.ts
  • packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts
  • packages/auth-better-auth/src/libs/redaction.ts
  • packages/auth-better-auth/src/tests/AuthConformance.spec.ts
  • packages/auth-better-auth/src/tests/BetterAuthProvider.spec.ts
  • packages/auth-better-auth/src/tests/Problems.spec.ts
  • packages/auth-better-auth/vitest.config.ts
  • packages/auth-clerk/README.md
  • packages/auth-clerk/package.json
  • packages/auth-clerk/src/index.ts
  • packages/auth-clerk/src/libs/ClerkAuthDiagnosticsProvider.ts
  • packages/auth-clerk/src/libs/ClerkAuthProvider.ts
  • packages/auth-clerk/src/libs/problems/ClerkProblems.ts
  • packages/auth-clerk/src/tests/AuthConformance.spec.ts
  • packages/auth-clerk/src/tests/ClerkAuthProvider.spec.ts
  • packages/auth-clerk/src/tests/ClerkProblems.spec.ts
  • packages/auth-clerk/vitest.config.ts
  • packages/create-croco-app/src/tests/PublishedCli.spec.ts
  • packages/docs/astro.config.mjs
  • packages/docs/package.json
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthAuthenticationProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthDiagnosticsProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthFactory.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthInvalidSessionProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthNotInitializedProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionLookupProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionManager.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionNotFoundProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthUserNotFoundProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthWebhookProcessor.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/InvalidWebhookPayloadProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/InvalidWebhookSignatureProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/functions/isRetryableBetterAuthError.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/interfaces/BetterAuthConfig.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/interfaces/BetterAuthSessionProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthDiagnosticsConfig.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthDiagnosticsOptions.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthReadinessCheckContext.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthReadinessCheckResult.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthSession.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthUser.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookEvent.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookHandler.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookOptions.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/DRIZZLE_TOKEN.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/account.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/session.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/user.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/verification.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkAuthDiagnosticsProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkAuthProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkExternalServiceProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkMalformedClaimProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkOrganizationService.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkPublicUserDataMissingProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkSessionProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTenantMapper.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationUpstreamProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkUserService.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkWebhookHandler.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/DuplicateTenantMappingProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/InvalidWebhookPayloadProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/WebhookVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/functions/createClerkTokenVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/interfaces/TenantMappingStore.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/AuthorizationHeaderCarrier.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthDiagnosticsConfig.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthDiagnosticsOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthReadinessCheckContext.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthReadinessCheckResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkMembershipEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrgEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganization.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganizationInvitation.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganizationMembership.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkTenantRequest.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkTokenVerificationOperation.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkUser.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkUserEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateClerkUserInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateInvitationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateMembershipInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateOrganizationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/OrganizationListOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/OrganizationListResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UpdateClerkUserInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UpdateOrganizationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UserListOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UserListResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookEventHandler.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookEventType.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookHandlerOptions.md
  • packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md
  • packages/docs/src/content/docs/api/protocols-core/src/interfaces/ParamIR.md
  • packages/docs/src/content/docs/api/protocols-rest/src/classes/RequestValidationProblem.md
  • packages/docs/src/content/docs/api/protocols-rest/src/functions/validateRequest.md
  • packages/docs/src/content/docs/api/protocols-rest/src/interfaces/ArgumentMetadata.md
  • packages/docs/src/content/docs/api/testing/src/functions/createAuthProviderConformanceSuite.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderAuthConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceCase.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceSuite.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderCredentialFailureExpectation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderLiveSmokeGate.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderProblemExpectation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderReadinessConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderTenantMappingConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderTenantMappingEvidence.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderWebhookConformance.md
  • packages/docs/src/content/docs/en/reference/extension-matrix.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/docs/tsconfig.typedoc.json
  • packages/protocols-rest/src/libs/interfaces/PipeTransform.ts
  • packages/testing/README.md
  • packages/testing/package.json
  • packages/testing/src/index.ts
  • packages/testing/src/libs/auth-provider-conformance.ts
  • packages/testing/src/tests/testing.spec.ts
  • packages/testing/tsconfig.json
  • packages/testing/vitest.config.ts
  • public-api-surface.snapshot.json
📝 Walkthrough

Walkthrough

@croco/testingcreateAuthProviderConformanceSuite 공유 테스트 헬퍼를 추가하고, Better Auth와 Clerk 어댑터에 각각 DiagnosticsProvider 구현체와 시크릿 리댁션 로직을 추가했습니다. 두 어댑터의 오류 매핑을 안정적인 Problem 계약으로 개선하고, 2개의 신규 문제 코드를 등록하며, 두 패키지의 전체 API 문서를 생성했습니다.

Changes

Auth Provider Conformance Suite & Diagnostics

Layer / File(s) Summary
@croco/testing: conformance 타입 계약 및 suite 팩토리
packages/testing/src/libs/auth-provider-conformance.ts, packages/testing/src/index.ts, packages/testing/package.json, packages/testing/tsconfig.json, packages/testing/vitest.config.ts
AuthProviderConformanceOptions, AuthProviderConformanceSuite 등 conformance 관련 타입 전체와 createAuthProviderConformanceSuite()를 추가. Problem 검증, 자격증명 실패 분기, 시크릿 유출 감지, live smoke 게이팅 assertion 헬퍼를 구현.
@croco/testing: conformance suite 자체 테스트
packages/testing/src/tests/testing.spec.ts
createAuthProviderConformanceSuite의 케이스 열거, 유효 웹훅 처리, live smoke env 게이팅, secret sample 누출 시 단언 실패 동작을 내부적으로 검증.
BetterAuthAuthenticationProblem 및 BetterAuthProvider 오류 매핑
packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts, packages/auth-better-auth/src/libs/BetterAuthProvider.ts, packages/auth-better-auth/src/index.ts, packages/auth-better-auth/package.json, packages/auth-better-auth/src/tests/BetterAuthProvider.spec.ts, packages/auth-better-auth/src/tests/Problems.spec.ts
BetterAuthAuthenticationProblem 클래스를 신규 추가(재시도 가능성 판정·업스트림 상태 추출·민감값 리댁션 포함). BetterAuthProvider.authenticatetry/catch로 감싸 401-류 오류는 null, 그 외는 BetterAuthAuthenticationProblem으로 분기. extractString 유틸로 다중 키 orgId/tenantId 추출.
BetterAuthDiagnosticsProvider: 헬스 체크 및 시크릿 리댁션
packages/auth-better-auth/src/libs/BetterAuthDiagnosticsProvider.ts, packages/auth-better-auth/vitest.config.ts
필수 env 누락(unhealthy), readiness 체크 미설정(healthy/not_configured), readiness 체크 성공(healthy), readiness 체크 예외(degraded) 4가지 분기를 구현. 재귀적 sanitize/redact 유틸과 안전한 설정 스냅샷 헬퍼 포함.
Better Auth: conformance 테스트 및 diagnostics 리댁션 검증
packages/auth-better-auth/src/tests/AuthConformance.spec.ts
createAuthProviderConformanceSuite로 Better Auth의 auth/webhook/readiness/tenantMapping/liveSmoke 케이스를 구성. BetterAuthDiagnosticsProvider가 readiness 메시지 및 details에서 시크릿 값을 마스킹하는지 성공/실패 경로 각각 검증.
ClerkTokenVerificationUpstreamProblem, createClerkTokenVerificationProblem 및 ClerkAuthProvider 수정
packages/auth-clerk/src/libs/problems/ClerkProblems.ts, packages/auth-clerk/src/libs/ClerkAuthProvider.ts, packages/auth-clerk/src/index.ts, packages/auth-clerk/package.json, packages/auth-clerk/src/tests/ClerkAuthProvider.spec.ts, packages/auth-clerk/src/tests/ClerkProblems.spec.ts
ClerkTokenVerificationUpstreamProblem 생성자를 error+operation 기반으로 재작성(업스트림 상태·메시지 추출·리댁션). isRetryableClerkAuthErrorcreateClerkTokenVerificationProblem 팩토리 추가. ClerkAuthProvider에서 verified 페이로드를 Record로 검증 후 sub 추출, catch에서 팩토리 함수 사용.
ClerkAuthDiagnosticsProvider: 헬스 체크 및 시크릿 리댁션
packages/auth-clerk/src/libs/ClerkAuthDiagnosticsProvider.ts, packages/auth-clerk/vitest.config.ts
Better Auth와 동일한 unhealthy/healthy/degraded 분기 패턴을 구현. SENSITIVE_DIAGNOSTIC_KEY 정규식 기반 리댁션, 재귀적 sanitizeDiagnosticValue, 알려진 시크릿 값 기반 redactKnownValues 포함.
Clerk: conformance 테스트 및 diagnostics 리댁션 검증
packages/auth-clerk/src/tests/AuthConformance.spec.ts
Vitest mock으로 verifyToken/verifyWebhook을 제어하며 createAuthProviderConformanceSuite로 Clerk auth/webhook/readiness/tenantMapping/liveSmoke 케이스 구성. ClerkAuthDiagnosticsProvider 시크릿 리댁션을 성공·실패 경로 각각 검증.
신규 문제 코드 등록, CI 경로 필터, API 스냅샷
docs/problem-code-registry.json, docs/problem-code-registry.json, .github/workflows/ci.yml, .changeset/auth-provider-conformance.md, public-api-surface.snapshot.json
auth-better-auth/authentication-failedauth-clerk/token-verification-upstream-failed를 문제 코드 레지스트리에 등록. CI paths-filter에 auth 패키지 소스 경로 추가. 전체 신규 export를 API 스냅샷에 반영.
API 문서 생성, 패키지 카탈로그 및 README 업데이트
packages/docs/astro.config.mjs, packages/docs/package.json, packages/docs/tsconfig.typedoc.json, packages/docs/src/content/docs/api/auth-better-auth/**, packages/docs/src/content/docs/api/auth-clerk/**, packages/docs/src/content/docs/api/testing/**, docs/package-catalog.json, docs/package-docs-baseline.json, docs/package-docs-report.md, README.md, packages/auth-better-auth/README.md, packages/auth-clerk/README.md, packages/docs/src/content/docs/en/reference/*, packages/create-croco-app/src/tests/PublishedCli.spec.ts, packages/migration-runner/src/tests/PublishedCli.spec.ts
TypeDoc 진입점에 auth 패키지 추가. 두 패키지의 전체 클래스/타입/함수 API 문서 마크다운 생성. package-docs-baseline.json에서 두 패키지 allowedMissing 항목 제거. README 및 extension-matrix에 conformance/diagnostics/optional live smoke 기능 추가 표기.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • #942 ([auth] Promote Better Auth and Clerk providers with auth conformance evidence): 이 PR은 해당 이슈의 수용 기준을 직접 충족합니다. 공유 conformance suite 추가, 안정적인 Problem 매핑, 테넌트/org 매핑 테스트, env-게이팅 live smoke, API 문서 생성 및 README 업데이트가 모두 이 PR에 포함됩니다.

Possibly related PRs

  • croco-dev/framework#760: docs/package-catalog.json@croco/auth-better-auth@croco/auth-clerk 행을 수정하는 점에서 이 PR과 직접적인 데이터 레벨 연관이 있습니다.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목 'fix: validate auth provider conformance'은 변경 사항의 핵심 목적인 인증 프로바이더 준수 검증을 명확하게 요약합니다.
Linked Issues check ✅ Passed PR이 issue #942의 모든 수용 기준을 충족합니다: Better Auth와 Clerk가 공유 적합성 스위트 통과, 안정적인 Problem 매핑, 테넌트 매핑 테스트, 환경 게이트 라이브 스모크, README/문서/테스트 증거 제공.
Out of Scope Changes check ✅ Passed 모든 변경은 issue #942 범위 내입니다: @croco/auth-core 미변경, 기본 CI에 실제 자격증명 미요구, 새 프로바이더 추가 없음, 문서/진단/테스트/API 스냅샷만 변경.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/942-auth-conformance

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@kang-heewon
kang-heewon force-pushed the fix/942-auth-conformance branch from 8b420ac to 87760dc Compare June 21, 2026 14:48
@github-actions

github-actions Bot commented Jun 21, 2026

Copy link
Copy Markdown

📊 Benchmark Results

❌ Some benchmarks failed

Gate failures

  • CrocoApp constructor: p75 7.2μs exceeds baseline 3.4μs by more than 20%
  • CrocoApp lambdaHandler (10 controllers): p75 333.2μs exceeds baseline 33.3μs by more than 20%
  • Lambda cold-start simulation: p75 429.2μs exceeds baseline 70.2μs by more than 20%
  • Lambda cold-start with headers: p75 382.1μs exceeds baseline 66.7μs by more than 20%
  • Lambda cold-start with binary body: p75 368.3μs exceeds baseline 63.2μs by more than 20%
  • Lambda cold-start with query params: p75 316.7μs exceeds baseline 63.9μs by more than 20%
  • Lambda cold-start with authorizer context: p75 308.0μs exceeds baseline 59.8μs by more than 20%
  • Lambda cold-start realistic scenario: p75 307.8μs exceeds baseline 60.2μs by more than 20%
  • EventBusConfig.start (10 handlers): p75 1.5μs exceeds baseline 0.9μs by more than 20%
  • EventPublisher.publishNow single event: p75 1.7μs exceeds baseline 1.1μs by more than 20%
  • DefaultHandlerResolver.resolve × 10: p75 0.1μs exceeds baseline 0.0μs by more than 20%
  • Container.get singleton (cold): p75 75.3μs exceeds baseline 0.6μs by more than 20%
  • Container.register × 50 components: p75 2.9ms exceeds baseline 12.1μs by more than 20%
  • Container.validate (50 components): p75 3.6ms exceeds baseline 29.7μs by more than 20%
  • Container.get singleton (warm): p75 1.6μs exceeds baseline 0.3μs by more than 20%
  • lambdaPreset config creation: p75 1.5μs exceeds baseline 1.0μs by more than 20%
Benchmark p75 Threshold Baseline vs Baseline Status Notes
CrocoApp constructor 7.2μs 30.0ms 3.4μs +112.3% -
CrocoApp lambdaHandler (10 controllers) 333.2μs 50.0ms 33.3μs +900.9% -
Lambda cold-start simulation 429.2μs 80.0ms 70.2μs +511.6% -
Lambda cold-start with headers 382.1μs 80.0ms 66.7μs +472.4% -
Lambda cold-start with binary body 368.3μs 80.0ms 63.2μs +483.1% -
Lambda cold-start with query params 316.7μs 80.0ms 63.9μs +395.9% -
Lambda cold-start with authorizer context 308.0μs 80.0ms 59.8μs +415.1% -
Lambda cold-start realistic scenario 307.8μs 80.0ms 60.2μs +411.6% -
EventBusConfig.start (10 handlers) 1.5μs 10.0ms 0.9μs +68.3% -
EventPublisher.publishNow single event 1.7μs 2.0ms 1.1μs +52.6% -
DefaultHandlerResolver.resolve × 10 0.1μs 5.0ms 0.0μs +90.5% -
Container.get singleton (cold) 75.3μs 5.0ms 0.6μs +11951.5% -
Container.register × 50 components 2.9ms 10.0ms 12.1μs +23499.1% -
Container.validate (50 components) 3.6ms 20.0ms 29.7μs +12144.1% -
Container.get singleton (warm) 1.6μs 500.0μs 0.3μs +459.2% -
TelemetryRuntime.init (lambda preset) 1.1ms 200.0ms 69.3ms -98.3% -
lambdaPreset config creation 1.5μs 2.0ms 1.0μs +48.2% -

Updated: 2026-06-21T18:49:19.850Z · Commit: f6710c2

@kang-heewon
kang-heewon force-pushed the fix/942-auth-conformance branch 6 times, most recently from dffbe68 to e4bcc34 Compare June 21, 2026 17:17

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 18

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/auth-better-auth/src/libs/BetterAuthDiagnosticsProvider.ts`:
- Around line 149-150: The SENSITIVE_DIAGNOSTIC_KEY regex pattern used for
redacting object keys is missing several patterns that are being redacted in the
text-based redaction logic at line 186. Update the SENSITIVE_DIAGNOSTIC_KEY
regex pattern to include the missing patterns: cookie, credential,
private[-_]?key, and better[-_]?auth[-_]?url. This ensures that object keys
containing these patterns are redacted consistently with the text-based
redaction logic, preventing sensitive information from being exposed when these
patterns appear in diagnostic object keys.

In
`@packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts`:
- Around line 90-95: The redactSensitiveValue function and its regex pattern are
duplicated across multiple files including BetterAuthAuthenticationProblem.ts
and BetterAuthDiagnosticsProvider.ts. Extract the SENSITIVE_VALUE_PATTERN regex
constant and the redactSensitiveValue function into a shared utility module
(e.g., shared/redaction.ts or utils/sanitize.ts), then update both files to
import and use this shared function instead of maintaining duplicate
implementations. This will eliminate code duplication and make future updates to
the redaction logic easier to maintain in a single location.

In `@packages/auth-better-auth/vitest.config.ts`:
- Line 14: The `@croco/testing` alias in the vitest.config.ts file is currently
pointing to an internal file path
(../testing/src/libs/auth-provider-conformance.ts) instead of the public entry
point, which is inconsistent with other `@croco/*` package aliases. Change the
alias resolution path for `@croco/testing` to point to the public index file
(../testing/src/index.ts) instead of the internal libs file, since the exported
functions like createAuthProviderConformanceSuite are re-exported from the
package's public index entry point.

In `@packages/auth-clerk/src/libs/ClerkAuthDiagnosticsProvider.ts`:
- Around line 179-180: The isNonEmptyString function in
ClerkAuthDiagnosticsProvider.ts only validates that a string has length greater
than zero, which means whitespace-only strings like "   " would incorrectly pass
validation and be treated as valid configuration values. This causes false
positives in readiness checks when required settings like secretKey are actually
missing or contain only spaces. Update the isNonEmptyString type guard to also
check that the trimmed string has non-zero length, ensuring whitespace-only
values are properly rejected as invalid configuration.

In `@packages/auth-clerk/src/tests/AuthConformance.spec.ts`:
- Around line 212-213: The live smoke guard check is throwing a generic Error
instance instead of a Problem subclass, which violates the coding guideline that
requires throwing only Problem subclasses. In the Clerk live smoke validation
block where it checks for secret key and session token presence, replace the
generic Error with an appropriate Problem subclass constructor to maintain
consistency with the project's error handling standards.

In `@packages/auth-clerk/vitest.config.ts`:
- Line 15: The `@croco/testing` alias in the vitest config is pointing directly to
an internal implementation file at
../testing/src/libs/auth-provider-conformance.ts instead of the public barrel
entry. This bypasses the public API contract validation. Change the alias path
to point to the root entry file at ../testing/src/index.ts so that the test
validates the actual public API export path that users would consume.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkExternalServiceProblem.md`:
- Line 8: The JSDoc comment at line 87 in packages/auth-clerk/src/index.ts is a
shared block comment that applies to all exported classes in that section, but
the comment "Clerk 조직이 이미 다른 tenant에 매핑되어 있을 때 발생하는 Problem입니다." only describes
DuplicateTenantMappingProblem, causing incorrect documentation for
ClerkExternalServiceProblem and other classes. Remove or replace the block-level
JSDoc comment and instead add individual JSDoc comments above each class export
(DuplicateTenantMappingProblem, ClerkExternalServiceProblem, and any others in
that block), with each comment accurately describing only that specific class.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkMalformedClaimProblem.md`:
- Line 8: The JSDoc comment for the ClerkMalformedClaimProblem class in
packages/auth-clerk/src/libs/problems/ClerkProblems.ts contains an incorrect
description that does not match the actual implementation. Update the JSDoc
documentation to accurately describe that this problem occurs when a Clerk token
contains a malformed claim (matching the actual error message pattern of "Clerk
token contained a malformed '${claimName}' claim"), instead of the current
description about organization-to-tenant mapping. This will ensure the
auto-generated documentation reflects the correct purpose of the
ClerkMalformedClaimProblem class.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkPublicUserDataMissingProblem.md`:
- Line 8: The JSDoc comment for the ClerkPublicUserDataMissingProblem class
contains an incorrect description that is confused with
DuplicateTenantMappingProblem. Update the JSDoc comment for
ClerkPublicUserDataMissingProblem to accurately describe that this Problem
occurs when publicUserData is missing from the organization membership response,
which aligns with the actual problem code auth-clerk/public-user-data-missing.
Remove the incorrect reference to tenant mapping and replace it with the correct
description of the missing public user data scenario.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationProblem.md`:
- Line 8: The JSDoc comment for the ClerkTokenVerificationProblem class in
packages/auth-clerk/src/libs/problems/ClerkProblems.ts contains an incorrect
description about tenant mapping, which is a copy-paste error. Update the JSDoc
comment for the ClerkTokenVerificationProblem class to accurately describe its
actual purpose: indicating a Clerk JWT token verification failure (associated
with error code auth-clerk/token-verification-failed), rather than describing
tenant mapping issues. Ensure the description clearly communicates that this
problem represents a failed token verification attempt.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationUpstreamProblem.md`:
- Line 8: The description for the ClerkTokenVerificationUpstreamProblem class in
the documentation file has been incorrectly copied from the
DuplicateTenantMappingProblem class. The current description "Clerk 조직이 이미 다른
tenant에 매핑되어 있을 때 발생하는 Problem입니다." does not match what
ClerkTokenVerificationUpstreamProblem represents. Replace this description with
the correct one that accurately describes upstream token verification failures,
such as "Clerk 토큰 검증 중 업스트림 서비스 오류가 발생했을 때의 문제입니다." or similar content that
reflects the purpose of the ClerkTokenVerificationUpstreamProblem class.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/InvalidWebhookPayloadProblem.md`:
- Around line 36-42: The category property documentation for
InvalidWebhookPayloadProblem only references the generic ProblemCategory
enumeration link without specifying the actual concrete category value assigned
to this class. Update the category property documentation in
InvalidWebhookPayloadProblem.md to explicitly show the specific category value
(such as BadRequest or InternalServerError) that this problem uses, following
the same documentation pattern used in other Problem class documentation like
DuplicateTenantMappingProblem.md to provide clarity on the actual assigned
value.
- Line 8: The description in the InvalidWebhookPayloadProblem.md file at line 8
is incorrect and has been copied from the DuplicateTenantMappingProblem class.
Replace the current description "Clerk 조직이 이미 다른 tenant에 매핑되어 있을 때 발생하는
Problem입니다." with an accurate description for InvalidWebhookPayloadProblem that
explains it occurs when a Clerk webhook payload is invalid or does not have the
expected structure, such as "Clerk 웹훅 페이로드가 유효하지 않거나 예상되는 구조를 가지지 않을 때 발생합니다."
or similar wording that correctly describes invalid webhook payload scenarios.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/classes/WebhookVerificationProblem.md`:
- Line 8: The description text for the WebhookVerificationProblem class at line
8 is incorrect and appears to be copied from DuplicateTenantMappingProblem
documentation. Update this description to accurately reflect what
WebhookVerificationProblem represents, which is a problem that occurs when
webhook verification fails (as indicated by the error code
auth-clerk/webhook-verification-failed). The description should be based on the
WebhookVerificationProblem class JSDoc comments in the source TypeScript file to
ensure accuracy and consistency.

In
`@packages/docs/src/content/docs/api/auth-clerk/src/functions/createClerkTokenVerificationProblem.md`:
- Line 10: The description text on line 10 for the
createClerkTokenVerificationProblem function is incorrect and appears to be
copied from a different problem type (DuplicateTenantMappingProblem). The
current description about tenant mapping is unrelated to token verification and
does not match the function name and return type (ClerkTokenVerificationProblem
| ClerkTokenVerificationUpstreamProblem). Locate the JSDoc comment for the
createClerkTokenVerificationProblem function in the source TypeScript file and
update it with an accurate description explaining what problem occurs during
Clerk token verification, then regenerate the documentation from that updated
JSDoc comment.

In
`@packages/docs/src/content/docs/api/protocols-rest/src/interfaces/ArgumentMetadata.md`:
- Line 24: The type property definition in ArgumentMetadata.md has the union
types in a different order than the source code definition in PipeTransform.ts.
Update line 24 in ArgumentMetadata.md to reorder the type union from the current
sequence of body, query, header, custom, param to match the source code order of
param, query, body, header, custom. This ensures documentation consistency with
the actual implementation.

In `@packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md`:
- Around line 773-789: The markdown file contains inaccurate source line number
references for multiple problem classes. Update all source line references in
the problem-recovery-cookbook.md file: change the reference for
BetterAuthAuthenticationProblem from line 7:3 to 6, ClerkMalformedClaimProblem
from 65 to 64, DuplicateTenantMappingProblem from 73 to 72,
ClerkPublicUserDataMissingProblem from 85 to 84, and ClerkExternalServiceProblem
from 94 to 92. Verify the actual line numbers in the corresponding source files
(BetterAuthAuthenticationProblem.ts and ClerkProblems.ts) to ensure all
references match the current definitions.

In `@packages/testing/src/tests/testing.spec.ts`:
- Around line 917-923: The code uses optional chaining on upstreamCase and then
passes the result directly to await and expect, which obscures the actual
failure cause if the case is not found. Add an explicit assertion immediately
after the find operation to verify that upstreamCase exists before attempting to
call the run() method. This separation ensures that if the "upstream auth
failures" test case is not found in suite.cases, the test will fail with a clear
error about the missing case rather than a confusing Promise-related error.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6f3eb999-d2cf-4bc8-8f5f-1c7732e07f7c

📥 Commits

Reviewing files that changed from the base of the PR and between fff8f32 and e4bcc34.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (133)
  • .changeset/auth-provider-conformance.md
  • .github/workflows/ci.yml
  • README.md
  • docs/package-catalog.json
  • docs/package-docs-baseline.json
  • docs/package-docs-report.md
  • docs/problem-code-registry.json
  • packages/auth-better-auth/README.md
  • packages/auth-better-auth/package.json
  • packages/auth-better-auth/src/index.ts
  • packages/auth-better-auth/src/libs/BetterAuthDiagnosticsProvider.ts
  • packages/auth-better-auth/src/libs/BetterAuthProvider.ts
  • packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts
  • packages/auth-better-auth/src/tests/AuthConformance.spec.ts
  • packages/auth-better-auth/src/tests/BetterAuthProvider.spec.ts
  • packages/auth-better-auth/src/tests/Problems.spec.ts
  • packages/auth-better-auth/vitest.config.ts
  • packages/auth-clerk/README.md
  • packages/auth-clerk/package.json
  • packages/auth-clerk/src/index.ts
  • packages/auth-clerk/src/libs/ClerkAuthDiagnosticsProvider.ts
  • packages/auth-clerk/src/libs/ClerkAuthProvider.ts
  • packages/auth-clerk/src/libs/problems/ClerkProblems.ts
  • packages/auth-clerk/src/tests/AuthConformance.spec.ts
  • packages/auth-clerk/src/tests/ClerkAuthProvider.spec.ts
  • packages/auth-clerk/src/tests/ClerkProblems.spec.ts
  • packages/auth-clerk/vitest.config.ts
  • packages/create-croco-app/src/tests/PublishedCli.spec.ts
  • packages/docs/astro.config.mjs
  • packages/docs/package.json
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthAuthenticationProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthDiagnosticsProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthFactory.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthInvalidSessionProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthNotInitializedProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionLookupProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionManager.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthSessionNotFoundProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthUserNotFoundProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/BetterAuthWebhookProcessor.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/InvalidWebhookPayloadProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/classes/InvalidWebhookSignatureProblem.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/functions/isRetryableBetterAuthError.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/interfaces/BetterAuthConfig.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/interfaces/BetterAuthSessionProvider.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthDiagnosticsConfig.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthDiagnosticsOptions.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthReadinessCheckContext.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthReadinessCheckResult.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthSession.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthUser.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookEvent.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookHandler.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/type-aliases/BetterAuthWebhookOptions.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/DRIZZLE_TOKEN.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/account.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/session.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/user.md
  • packages/docs/src/content/docs/api/auth-better-auth/src/variables/verification.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkAuthDiagnosticsProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkAuthProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkExternalServiceProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkMalformedClaimProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkOrganizationService.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkPublicUserDataMissingProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkSessionProvider.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTenantMapper.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkTokenVerificationUpstreamProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkUserService.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/ClerkWebhookHandler.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/DuplicateTenantMappingProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/InvalidWebhookPayloadProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/classes/WebhookVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/functions/createClerkTokenVerificationProblem.md
  • packages/docs/src/content/docs/api/auth-clerk/src/interfaces/TenantMappingStore.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/AuthorizationHeaderCarrier.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthDiagnosticsConfig.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthDiagnosticsOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthReadinessCheckContext.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkAuthReadinessCheckResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkMembershipEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrgEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganization.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganizationInvitation.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkOrganizationMembership.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkTenantRequest.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkTokenVerificationOperation.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkUser.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/ClerkUserEvent.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateClerkUserInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateInvitationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateMembershipInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/CreateOrganizationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/OrganizationListOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/OrganizationListResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UpdateClerkUserInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UpdateOrganizationInput.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UserListOptions.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/UserListResult.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookEventHandler.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookEventType.md
  • packages/docs/src/content/docs/api/auth-clerk/src/type-aliases/WebhookHandlerOptions.md
  • packages/docs/src/content/docs/api/protocols-core/src/interfaces/ParamIR.md
  • packages/docs/src/content/docs/api/protocols-rest/src/classes/RequestValidationProblem.md
  • packages/docs/src/content/docs/api/protocols-rest/src/functions/validateRequest.md
  • packages/docs/src/content/docs/api/protocols-rest/src/interfaces/ArgumentMetadata.md
  • packages/docs/src/content/docs/api/testing/src/functions/createAuthProviderConformanceSuite.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderAuthConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceCase.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceOptions.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderConformanceSuite.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderCredentialFailureExpectation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderLiveSmokeGate.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderProblemExpectation.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderReadinessConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderTenantMappingConformance.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderTenantMappingEvidence.md
  • packages/docs/src/content/docs/api/testing/src/type-aliases/AuthProviderWebhookConformance.md
  • packages/docs/src/content/docs/en/reference/extension-matrix.md
  • packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md
  • packages/docs/tsconfig.typedoc.json
  • packages/migration-runner/src/tests/PublishedCli.spec.ts
  • packages/testing/README.md
  • packages/testing/package.json
  • packages/testing/src/index.ts
  • packages/testing/src/libs/auth-provider-conformance.ts
  • packages/testing/src/tests/testing.spec.ts
  • packages/testing/tsconfig.json
  • packages/testing/vitest.config.ts
  • public-api-surface.snapshot.json
💤 Files with no reviewable changes (2)
  • docs/package-docs-baseline.json
  • packages/migration-runner/src/tests/PublishedCli.spec.ts

Comment thread packages/auth-better-auth/src/libs/BetterAuthDiagnosticsProvider.ts Outdated
Comment thread packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts Outdated
Comment thread packages/auth-better-auth/vitest.config.ts Outdated
Comment thread packages/auth-clerk/src/libs/ClerkAuthDiagnosticsProvider.ts Outdated
Comment thread packages/auth-clerk/src/tests/AuthConformance.spec.ts Outdated
Comment thread packages/testing/src/tests/testing.spec.ts
@kang-heewon
kang-heewon force-pushed the fix/942-auth-conformance branch 2 times, most recently from 86c8d25 to 510ba79 Compare June 21, 2026 18:38
@kang-heewon
kang-heewon force-pushed the fix/942-auth-conformance branch from 510ba79 to 934436f Compare June 21, 2026 18:43
@kang-heewon
kang-heewon merged commit ca4c15a into trunk Jun 22, 2026
7 of 8 checks passed
@kang-heewon
kang-heewon deleted the fix/942-auth-conformance branch June 22, 2026 02:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[auth] Promote Better Auth and Clerk providers with auth conformance evidence

1 participant