Skip to content

feat(ui): add OIDC ConfigureSSO wizard skeleton - #9200

Open
NicolasLopes7 wants to merge 11 commits into
mainfrom
nicolas/oidc-self-serve-configure
Open

feat(ui): add OIDC ConfigureSSO wizard skeleton#9200
NicolasLopes7 wants to merge 11 commits into
mainfrom
nicolas/oidc-self-serve-configure

Conversation

@NicolasLopes7

@NicolasLopes7 NicolasLopes7 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds an experimental OIDC provider path to the ConfigureSSO wizard.
  • Provides redirect URI, claims, endpoints, and credentials step skeletons.
  • Handles derived OIDC provider keys safely and adds localization and coverage.

Testing

  • The focused ConfigureSSO domain and hook tests pass.
  • Component-mount tests and UI type-checking are currently blocked by existing cross-package checkout failures, including a missing timeLimit export during Clerk initialization.
CleanShot.2026-07-20.at.17.28.42.mp4

@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Jul 28, 2026 6:38pm
swingset Ready Ready Preview, Comment Jul 28, 2026 6:38pm

Request Review

@changeset-bot

changeset-bot Bot commented Jul 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c52dc1e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 23 packages
Name Type
@clerk/clerk-js Patch
@clerk/localizations Patch
@clerk/shared Patch
@clerk/ui Patch
@clerk/chrome-extension Patch
@clerk/electron Patch
@clerk/expo Patch
@clerk/react Patch
@clerk/astro Patch
@clerk/backend Patch
@clerk/expo-passkeys Patch
@clerk/express Patch
@clerk/fastify Patch
@clerk/headless Patch
@clerk/hono Patch
@clerk/msw Patch
@clerk/nextjs Patch
@clerk/nuxt Patch
@clerk/react-router Patch
@clerk/tanstack-react-start Patch
@clerk/testing Patch
@clerk/vue Patch
@clerk/swingset Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new

pkg-pr-new Bot commented Jul 20, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@9200

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@9200

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@9200

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@9200

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@9200

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@9200

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@9200

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@9200

@clerk/expo-google-signin

npm i https://pkg.pr.new/@clerk/expo-google-signin@9200

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@9200

@clerk/express

npm i https://pkg.pr.new/@clerk/express@9200

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@9200

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@9200

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@9200

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@9200

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@9200

@clerk/react

npm i https://pkg.pr.new/@clerk/react@9200

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@9200

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@9200

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@9200

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@9200

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@9200

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@9200

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@9200

commit: c52dc1e

@NicolasLopes7
NicolasLopes7 marked this pull request as ready for review July 20, 2026 20:29
@NicolasLopes7
NicolasLopes7 requested a review from dstaley July 20, 2026 20:31
@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-07-28T18:39:28.869Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 1
🔴 Breaking changes 0
🟡 Non-breaking changes 2
🟢 Additions 8

🤖 This report was reviewed by claude-sonnet-4-6.


@clerk/shared

Current version: 4.25.8
Recommended bump: MINOR → 4.26.0

Subpath ./types

🟡 Non-breaking Changes (2)

Modified: __internal_LocalizationResource
Diff (before: 1981 lines, after: 2062 lines). Click to expand.
// ... 1310 unchanged lines elided ...
          google: LocalizationValue;
          microsoft: LocalizationValue;
        };
+       oidc: {
+         groupLabel: LocalizationValue;
+         oidcProvider: LocalizationValue;
+       };
        warning: LocalizationValue;
      };
      changeProviderDialog: {
        title: LocalizationValue<'provider'>;
        subtitle: LocalizationValue<'provider' | 'currentProvider'>;
        cancelButton: LocalizationValue;
        confirmButton: LocalizationValue;
      };
      organizationDomainsStep: {
        title: LocalizationValue;
        subtitle: LocalizationValue;
        formFieldLabel__domain: LocalizationValue;
        formFieldInputPlaceholder__domain: LocalizationValue;
        formButtonPrimary__add: LocalizationValue;
        domainSuggestion: {
          messageLabel: LocalizationValue<'domain'>;
          formButtonPrimary__add: LocalizationValue<'domain'>;
        };
        domainCard: {
          badge__verified: LocalizationValue;
          badge__unverified: LocalizationValue;
          badge__expired: LocalizationValue;
          verifiedAtLabel: LocalizationValue<'date'>;
          expiredAtLabel: LocalizationValue<'date'>;
          expiredLabel: LocalizationValue;
          verifyAgainButton: LocalizationValue;
          removeButtonTooltip__lastVerifiedDomain: LocalizationValue;
          removeButtonTooltip__lastVerifiedDomainActive: LocalizationValue;
          txtRecord: {
            instructions: LocalizationValue;
            typeLabel: LocalizationValue;
            hostLabel: LocalizationValue;
            valueLabel: LocalizationValue;
          };
        };
        removeDomainDialog: {
          title: LocalizationValue;
          subtitle__active: LocalizationValue<'domain'>;
          subtitle__inactive: LocalizationValue<'domain'>;
          cancelButton: LocalizationValue;
          removeButton: LocalizationValue;
        };
      };
      testConfigurationStep: {
        title: LocalizationValue;
        subtitle: LocalizationValue;
        error__noSuccessfulTestRun: LocalizationValue;
        testUrl: {
          actionLabel__open: LocalizationValue;
        };
        testResults: {
          title: LocalizationValue;
          actionLabel__refresh: LocalizationValue;
          polling: LocalizationValue;
          status__success: LocalizationValue;
          status__failed: LocalizationValue;
          status__pending: LocalizationValue;
          empty: {
            title: LocalizationValue;
            subtitle: LocalizationValue;
          };
        };
        testRunDetails: {
          title: LocalizationValue;
          runDetails: {
            sectionTitle: LocalizationValue;
            timestamp: LocalizationValue;
            status: LocalizationValue;
            errorCode: LocalizationValue;
            fullMessage: LocalizationValue;
            actionLabel__copy: LocalizationValue;
            actionLabel__copied: LocalizationValue;
          };
          parsedUserInfo: {
            sectionTitle: LocalizationValue;
            email: LocalizationValue;
            firstName: LocalizationValue;
          };
          howToFix: {
            sectionTitle: LocalizationValue;
            actionLabel__viewDocumentation: LocalizationValue;
            saml_user_attribute_missing: {
              intro: LocalizationValue;
              step1: LocalizationValue;
              step2: LocalizationValue;
              step3: LocalizationValue;
            };
            saml_response_relaystate_missing: {
              description: LocalizationValue;
            };
            saml_email_address_domain_mismatch: {
              description: LocalizationValue;
            };
            oauth_access_denied: {
              description: LocalizationValue;
            };
            oauth_token_exchange_error: {
              description: LocalizationValue;
            };
            oauth_fetch_user_error: {
              intro: LocalizationValue;
              step1: LocalizationValue;
              step2: LocalizationValue;
            };
          };
        };
      };
      configureStep: {
        attributeMappingTable: {
          badges: {
            required: LocalizationValue;
            optional: LocalizationValue;
          };
        };
        activeConnectionWarning: {
          title: LocalizationValue;
          dismiss: LocalizationValue;
+       };
+       oidcCustom: {
+         mainHeaderTitle: LocalizationValue;
+         redirectUriStep: {
+           headerSubtitle: LocalizationValue;
+           paragraph: LocalizationValue;
+           claims: {
+             description: LocalizationValue;
+             table: {
+               columns: {
+                 attribute: LocalizationValue;
+                 claim: LocalizationValue;
+               };
+               rows: {
+                 email: {
+                   attribute: LocalizationValue;
+                 };
+                 firstName: {
+                   attribute: LocalizationValue;
+                 };
+                 lastName: {
+                   attribute: LocalizationValue;
+                 };
+                 subject: {
+                   attribute: LocalizationValue;
+                 };
+               };
+             };
+           };
+           redirectUri: {
+             label: LocalizationValue;
+           };
+         };
+         endpointsStep: {
+           headerSubtitle: LocalizationValue;
+           discoveryUrl: {
+             description: LocalizationValue;
+             label: LocalizationValue;
+             placeholder: LocalizationValue;
+           };
+           manual: {
+             authUrl: {
+               label: LocalizationValue;
+               placeholder: LocalizationValue;
+             };
+             description: LocalizationValue;
+             tokenUrl: {
+               label: LocalizationValue;
+               placeholder: LocalizationValue;
+             };
+             userInfoUrl: {
+               label: LocalizationValue;
+               placeholder: LocalizationValue;
+             };
+           };
+           modes: {
+             ariaLabel: LocalizationValue;
+             discoveryUrl: LocalizationValue;
+             manual: LocalizationValue;
+           };
+         };
+         credentialsStep: {
+           headerSubtitle: LocalizationValue;
+           clientId: {
+             label: LocalizationValue;
+             placeholder: LocalizationValue;
+           };
+           clientSecret: {
+             label: LocalizationValue;
+             placeholder: LocalizationValue;
+           };
+           paragraph: LocalizationValue;
+         };
+       };
+       unsupportedProvider: {
+         title: LocalizationValue;
+         description: LocalizationValue;
        };
        samlOkta: {
          mainHeaderTitle: LocalizationValue;
// ... 548 unchanged lines elided ...

Static analyzer: Breaking change in type alias __internal_LocalizationResource: Type changed: {locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…{locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…

🤖 AI review (reclassified as non-breaking) (80%): __internal_LocalizationResource is used as the source for LocalizationResource which extends DeepPartial<DeepLocalizationWithoutObjects<__internal_LocalizationResource>>, making it an output/read type; the change appears to add new localization keys (81 more lines elided), and adding new required properties to an output type is non-breaking since consumers only read the result, not construct it.

Modified: FieldId
- type FieldId = 'firstName' | 'lastName' | 'name' | 'slug' | 'emailAddress' | 'phoneNumber' | 'currentPassword' | 'newPassword' | 'signOutOfOtherSessions' | 'passkeyName' | 'password' | 'confirmPassword' | 'identifier' | 'username' | 'code' | 'role' | 'deleteConfirmation' | 'deleteOrganizationConfirmation' | 'enrollmentMode' | 'affiliationEmailAddress' | 'deleteExistingInvitationsSuggestions' | 'legalAccepted' | 'apiKeyDescription' | 'apiKeyExpirationDate' | 'apiKeyRevokeConfirmation' | 'apiKeySecret' | 'idpCertificate' | 'idpEntityId' | 'idpMetadata' | 'idpMetadataUrl' | 'idpSsoUrl' | 'acsUrl' | 'spEntityId' | 'web3WalletName' | 'domain';
+ type FieldId = 'firstName' | 'lastName' | 'name' | 'slug' | 'emailAddress' | 'phoneNumber' | 'currentPassword' | 'newPassword' | 'signOutOfOtherSessions' | 'passkeyName' | 'password' | 'confirmPassword' | 'identifier' | 'username' | 'code' | 'role' | 'deleteConfirmation' | 'deleteOrganizationConfirmation' | 'enrollmentMode' | 'affiliationEmailAddress' | 'deleteExistingInvitationsSuggestions' | 'legalAccepted' | 'apiKeyDescription' | 'apiKeyExpirationDate' | 'apiKeyRevokeConfirmation' | 'apiKeySecret' | 'idpCertificate' | 'idpEntityId' | 'idpMetadata' | 'idpMetadataUrl' | 'idpSsoUrl' | 'discoveryUrl' | 'authUrl' | 'tokenUrl' | 'userInfoUrl' | 'clientId' | 'clientSecret' | 'redirectUri' | 'acsUrl' | 'spEntityId' | 'web3WalletName' | 'domain';

Static analyzer: Breaking change in type alias FieldId: Type changed: 'acsUrl'|'affiliationEmailAddress'|'apiKeyDescription'|'apiKeyExpirationDate'|'apiKeyRevokeConfirmation'|'apiKeySecret'…'acsUrl'|'affiliationEmailAddress'|'apiKeyDescription'|'apiKeyExpirationDate'|'apiKeyRevokeConfirmation'|'apiKeySecret'…

🤖 AI review (reclassified as non-breaking) (90%): FieldId is a union type and the change only adds new string literal members ('discoveryUrl', 'authUrl', 'tokenUrl', 'userInfoUrl', 'clientId', 'clientSecret', 'redirectUri') without removing any existing members, which is a non-breaking union widening; however since this is a union consumers may switch/narrow against, it is more accurately an addition to the union rather than a break or a removal.

🟢 Additions (8)

Added: EnterpriseOAuthConfigJSON.auth_url
+ auth_url?: string;

Added property EnterpriseOAuthConfigJSON.auth_url

Added: EnterpriseOAuthConfigJSON.redirect_uri
+ redirect_uri?: string;

Added property EnterpriseOAuthConfigJSON.redirect_uri

Added: EnterpriseOAuthConfigJSON.token_url
+ token_url?: string;

Added property EnterpriseOAuthConfigJSON.token_url

Added: EnterpriseOAuthConfigJSON.user_info_url
+ user_info_url?: string;

Added property EnterpriseOAuthConfigJSON.user_info_url

Added: EnterpriseOAuthConfigResource.authUrl
+ authUrl?: string;

Added property EnterpriseOAuthConfigResource.authUrl

Added: EnterpriseOAuthConfigResource.redirectUri
+ redirectUri?: string;

Added property EnterpriseOAuthConfigResource.redirectUri

Added: EnterpriseOAuthConfigResource.tokenUrl
+ tokenUrl?: string;

Added property EnterpriseOAuthConfigResource.tokenUrl

Added: EnterpriseOAuthConfigResource.userInfoUrl
+ userInfoUrl?: string;

Added property EnterpriseOAuthConfigResource.userInfoUrl


Report generated by Break Check

Last ran on c52dc1e.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds experimental custom OIDC enterprise connection support to Organization Profile SSO configuration. The changes introduce OIDC provider types, OAuth endpoint serialization, provider selection and routing, a three-step configuration wizard, validation and error handling, localization keys across supported locales, shared mode controls, expanded tests, and a package changeset.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • clerk/javascript#9156: Updates the related EnterpriseConnection OAuth URL model and serialization fields.

Suggested reviewers: gabrielmeloc22, kalafut, laurabeatris

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adding an experimental OIDC ConfigureSSO wizard skeleton.
Description check ✅ Passed The description is directly related to the PR and accurately summarizes the OIDC wizard, tests, and blocking issues.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts`:
- Line 16: Update isOidcProvider to require the `oidc_` prefix, matching the
OidcProviderType contract and excluding bare or malformed values such as `oidc`
and `oidcfoo`; add a regression test covering these unsupported inputs and
preserving valid OIDC values.

In `@packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx`:
- Around line 90-96: Localize the unsupported-provider fallback in the
ConfigureStep component by adding typed
configureSSO.configureStep.unsupportedProvider resource keys for the title and
description, then render both through localizationKeys. Follow the existing OIDC
localization contract and keep the terminal UI on the same localization path
instead of using English literals.
🪄 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: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c43c83d-8790-40f9-a66e-d611f185371a

📥 Commits

Reviewing files that changed from the base of the PR and between c904fb4 and 09cfbe7.

📒 Files selected for processing (14)
  • .changeset/cool-dragons-march.md
  • .changeset/spotty-items-dream.md
  • packages/localizations/src/en-US.ts
  • packages/shared/src/types/localization.ts
  • packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts
  • packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts
  • packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/__tests__/ConfigureStep.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/OidcCustomConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/index.tsx
  • packages/ui/src/components/ConfigureSSO/steps/SelectProviderStep.tsx
  • packages/ui/src/components/ConfigureSSO/steps/__tests__/SelectProviderStep.test.tsx
  • packages/ui/src/components/ConfigureSSO/types.ts
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)

Comment thread packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx Outdated

@dstaley dstaley left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

lgtm! I think a human-review of all the comments would be a good thing to do. As-is they feel too jargon-y, and my confidence in them is low because they feel too AI written. If they're accurate that's great, but I think we can probably rewrite them to be more clear to others who eventually encounter this code.

Comment thread packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx Outdated
Comment thread packages/ui/src/components/ConfigureSSO/types.ts Outdated
@dstaley

dstaley commented Jul 24, 2026

Copy link
Copy Markdown
Member

@NicolasLopes7 before merging please run pnpm --filter @clerk/localizations generate

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcCredentialsStep.tsx (1)

22-36: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Client secret must be re-entered on every visit, even when already configured.

Unlike SamlCustomConfigureSteps.tsx's certificate step (which tracks existingCertPresent so users aren't forced to re-upload an existing certificate), canSubmit here always requires a fresh clientSecret, with no path to keep a previously-saved secret. This blocks users from re-saving clientId alone or simply continuing through an already-configured connection.

If intentional (secrets always required fresh), consider ignoring; otherwise consider an existingSecretPresent-style flag mirroring the SAML pattern.

🤖 Prompt for 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.

In
`@packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcCredentialsStep.tsx`
around lines 22 - 36, The OIDC credentials flow always requires a newly entered
client secret, preventing reuse of an already-configured connection. Update
OidcCredentialsStep’s initialization and canSubmit logic to track whether an
existing client secret is present, mirroring the existingCertPresent pattern in
the SAML certificate step, and allow submission when the saved secret is
available even if the secret field remains blank.
packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts (1)

96-99: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add direct isOidcProvider boundary tests.
This case only checks that provider is copied through verbatim; it doesn’t exercise the exact oidc_ / oauth_custom_ prefix check. Add focused cases for oidc, oidcfoo, and oauth_custom rejection, plus oidc_x / oauth_custom_x acceptance.

🤖 Prompt for 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.

In
`@packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts`
around lines 96 - 99, Add focused boundary tests for isOidcProvider covering
rejection of exact “oidc”, “oidcfoo”, and “oauth_custom” values, and acceptance
of “oidc_x” and “oauth_custom_x”. Keep the existing provider passthrough test
unchanged and assert the predicate’s result directly rather than only checking
derive().provider.

Source: Learnings

🤖 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 `@AGENTS.md`:
- Around line 20-36: Remove the entire ephemeral claude-mem context block from
AGENTS.md, including its status, live activity URL, and session-specific
instructions. Leave only stable repository-owned guidance in the committed file,
or omit the generated section entirely.

---

Nitpick comments:
In
`@packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts`:
- Around line 96-99: Add focused boundary tests for isOidcProvider covering
rejection of exact “oidc”, “oidcfoo”, and “oauth_custom” values, and acceptance
of “oidc_x” and “oauth_custom_x”. Keep the existing provider passthrough test
unchanged and assert the predicate’s result directly rather than only checking
derive().provider.

In
`@packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcCredentialsStep.tsx`:
- Around line 22-36: The OIDC credentials flow always requires a newly entered
client secret, preventing reuse of an already-configured connection. Update
OidcCredentialsStep’s initialization and canSubmit logic to track whether an
existing client secret is present, mirroring the existingCertPresent pattern in
the SAML certificate step, and allow submission when the saved secret is
available even if the secret field remains blank.
🪄 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: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 775effe0-af57-487e-bc39-2f4f166b3d01

📥 Commits

Reviewing files that changed from the base of the PR and between 3040083 and 1c66c88.

📒 Files selected for processing (72)
  • AGENTS.md
  • packages/clerk-js/src/core/resources/EnterpriseConnection.ts
  • packages/localizations/src/ar-SA.ts
  • packages/localizations/src/be-BY.ts
  • packages/localizations/src/bg-BG.ts
  • packages/localizations/src/bn-IN.ts
  • packages/localizations/src/ca-ES.ts
  • packages/localizations/src/cs-CZ.ts
  • packages/localizations/src/da-DK.ts
  • packages/localizations/src/de-DE.ts
  • packages/localizations/src/el-GR.ts
  • packages/localizations/src/en-GB.ts
  • packages/localizations/src/en-US.ts
  • packages/localizations/src/es-CR.ts
  • packages/localizations/src/es-ES.ts
  • packages/localizations/src/es-MX.ts
  • packages/localizations/src/es-UY.ts
  • packages/localizations/src/fa-IR.ts
  • packages/localizations/src/fi-FI.ts
  • packages/localizations/src/fr-FR.ts
  • packages/localizations/src/he-IL.ts
  • packages/localizations/src/hi-IN.ts
  • packages/localizations/src/hr-HR.ts
  • packages/localizations/src/hu-HU.ts
  • packages/localizations/src/id-ID.ts
  • packages/localizations/src/is-IS.ts
  • packages/localizations/src/it-IT.ts
  • packages/localizations/src/ja-JP.ts
  • packages/localizations/src/kk-KZ.ts
  • packages/localizations/src/ko-KR.ts
  • packages/localizations/src/mn-MN.ts
  • packages/localizations/src/ms-MY.ts
  • packages/localizations/src/nb-NO.ts
  • packages/localizations/src/nl-BE.ts
  • packages/localizations/src/nl-NL.ts
  • packages/localizations/src/pl-PL.ts
  • packages/localizations/src/pt-BR.ts
  • packages/localizations/src/pt-PT.ts
  • packages/localizations/src/ro-RO.ts
  • packages/localizations/src/ru-RU.ts
  • packages/localizations/src/sk-SK.ts
  • packages/localizations/src/sr-RS.ts
  • packages/localizations/src/sv-SE.ts
  • packages/localizations/src/ta-IN.ts
  • packages/localizations/src/te-IN.ts
  • packages/localizations/src/th-TH.ts
  • packages/localizations/src/tr-TR.ts
  • packages/localizations/src/uk-UA.ts
  • packages/localizations/src/vi-VN.ts
  • packages/localizations/src/zh-CN.ts
  • packages/localizations/src/zh-TW.ts
  • packages/shared/src/types/elementIds.ts
  • packages/shared/src/types/enterpriseConnection.ts
  • packages/shared/src/types/localization.ts
  • packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts
  • packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/__tests__/ConfigureStep.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/OidcCustomConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcCredentialsStep.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcEndpointsConfigurationForm.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcEndpointsStep.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/oidc/shared/OidcRedirectUriStep.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/SamlCustomConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/SamlGoogleConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/SamlMicrosoftConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/SamlOktaConfigureSteps.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/shared/IdentityProviderConfigurationForm.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/shared/IdentityProviderConfigurationModes.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/shared/ActiveConnectionAlert.tsx
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/shared/IdentityProviderConfigurationModes.tsx
  • packages/ui/src/components/ConfigureSSO/types.ts
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/cli (auto-detected)
  • clerk/clerk-ios (auto-detected)
  • clerk/clerk-android (auto-detected)
💤 Files with no reviewable changes (1)
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/saml/shared/IdentityProviderConfigurationModes.tsx
🚧 Files skipped from review as they are similar to previous changes (43)
  • packages/localizations/src/fr-FR.ts
  • packages/localizations/src/es-UY.ts
  • packages/localizations/src/ro-RO.ts
  • packages/localizations/src/sk-SK.ts
  • packages/localizations/src/ja-JP.ts
  • packages/localizations/src/sv-SE.ts
  • packages/localizations/src/he-IL.ts
  • packages/localizations/src/da-DK.ts
  • packages/localizations/src/en-GB.ts
  • packages/localizations/src/hr-HR.ts
  • packages/ui/src/components/ConfigureSSO/types.ts
  • packages/localizations/src/pt-BR.ts
  • packages/localizations/src/id-ID.ts
  • packages/localizations/src/it-IT.ts
  • packages/localizations/src/fa-IR.ts
  • packages/localizations/src/ms-MY.ts
  • packages/localizations/src/es-CR.ts
  • packages/localizations/src/nb-NO.ts
  • packages/localizations/src/hi-IN.ts
  • packages/localizations/src/pl-PL.ts
  • packages/localizations/src/bn-IN.ts
  • packages/localizations/src/kk-KZ.ts
  • packages/localizations/src/te-IN.ts
  • packages/localizations/src/nl-BE.ts
  • packages/localizations/src/mn-MN.ts
  • packages/localizations/src/hu-HU.ts
  • packages/localizations/src/ta-IN.ts
  • packages/localizations/src/zh-TW.ts
  • packages/localizations/src/pt-PT.ts
  • packages/localizations/src/uk-UA.ts
  • packages/localizations/src/fi-FI.ts
  • packages/localizations/src/ca-ES.ts
  • packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts
  • packages/localizations/src/es-MX.ts
  • packages/localizations/src/es-ES.ts
  • packages/localizations/src/en-US.ts
  • packages/localizations/src/nl-NL.ts
  • packages/localizations/src/el-GR.ts
  • packages/localizations/src/be-BY.ts
  • packages/localizations/src/th-TH.ts
  • packages/localizations/src/bg-BG.ts
  • packages/localizations/src/cs-CZ.ts
  • packages/ui/src/components/ConfigureSSO/steps/ConfigureStep/index.tsx

Comment thread AGENTS.md Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants