Skip to content

docs(runbook): diagnose Google OAuth 403 org_internal and document protected remediation - #1064

Closed
groupthinking wants to merge 1 commit into
mainfrom
execution-verify-google-oauth-in-vercel-production-pr-grv-88-95ec
Closed

docs(runbook): diagnose Google OAuth 403 org_internal and document protected remediation#1064
groupthinking wants to merge 1 commit into
mainfrom
execution-verify-google-oauth-in-vercel-production-pr-grv-88-95ec

Conversation

@groupthinking

@groupthinking groupthinking commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Canonical issue

Progresses #900 (does not close it — protected human steps remain). Canonical implementation PR for env-var precedence remains #903; this PR does not compete with it.

Outcome

Operators get a runbook diagnosis of the active production blocker — Google sign-in failing with Error 403: org_internal — plus the exact human-owned remediation (Google Cloud Console consent screen: switch Audience/User type from Internal to External, then publish or add test users), the externally verified state of the production authorize flow, and the OAuth error fingerprints to watch.

Scope

Risk

  • Risk level: low (documentation only)
  • Failure mode: none at runtime
  • Rollback: revert the commit

Verification

  • Live probe of https://uvai.io/login (2026-07-28, no credentials): the Google button redirects to Google's authorize endpoint with redirect_uri=https://uvai.io/api/auth/callback/google (exact canonical URI), scope=openid email profile, PKCE S256, and state — no redirect_uri_mismatch/invalid_client at this step.
  • Focused tests — n/a (docs only)
  • Required CI on this head
  • Review threads resolved — none yet

Production evidence

org_internal is emitted by Google's authorization server based on the OAuth client's consent-screen audience; it cannot be fixed or fully verified from repository code, and Google blocks non-interactive browsers before password entry. A real sign-in/callback after the console change remains a protected human step (documented in the runbook section).

Agent handoff

  • One canonical issue is linked
  • No competing PR implements the same issue
  • Acceptance criteria are satisfied (production OAuth verification remains human-owned)
  • Required checks pass on the current head
  • Human decision is requested only for product, security, irreversible infrastructure, or production approval

Agent provenance

…ument protected remediation

Google sign-in at uvai.io fails with Error 403: org_internal for consumer
accounts because the OAuth client's consent screen User type is Internal in
Google Cloud Console. Document the root cause, the human-owned remediation
(switch Audience to External and publish or add test users), the externally
verified state of the production authorize flow (canonical redirect_uri,
PKCE, state all correct), and the OAuth error fingerprints to watch.

Generated with [Linear](https://linear.app/myxstack/issue/GRV-88/execution-verify-google-oauth-in-vercel-production-pr-903#agent-session-05438499)

Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@linear-code

linear-code Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

GRV-88

@vercel

vercel Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
v0-uvai Canceled Canceled Open in v0 Jul 28, 2026 1:44pm

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • [‘architecture-gap’, ‘bug’, ‘ci-cd’, ‘ci/cd’, ‘copilot-rabbit’, ‘documentation’, ‘duplicate’, ‘enhancement’, ‘frontend’, ‘github_actions’, ‘good first issue’, ‘help wanted’, ‘high-priority’, ‘invalid’, ‘javascript’, ‘ml-model’, ‘needs-triage’, ‘pipeline-critical’, ‘placeholder-code’, ‘priority:high’, ‘python’, ‘python:uv’, ‘question’, ‘styling’, ‘tests’, ‘v0’]

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository YAML (base), Repository UI (inherited), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: bf814f87-dbbf-4663-b57d-d991dcad1450

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch execution-verify-google-oauth-in-vercel-production-pr-grv-88-95ec
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch execution-verify-google-oauth-in-vercel-production-pr-grv-88-95ec

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

@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA cade31d.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

Scanned Files

None

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Jul 28, 2026
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown

Agent Completion Truth Gate: BLOCKED

Reasons: evidence_collection_failed, missing_declared_files, missing_agent_result, missing_copilot_current_head_review, missing_copilot_rabbit_label, required_checks_failed, draft_pr

Machine-readable verdict
{
  "details": {
    "collection_errors": [
      "incomplete_linked_issue_contract",
      "missing_closing_issue_reference",
      "missing_intent_snapshot",
      "agent_run_id_mismatch",
      "agent_login_mismatch"
    ],
    "identity_projection": {
      "agent_login": "google-labs-jules[bot]",
      "issue_number": 900,
      "run_id": "15243187445261469621"
    },
    "missing_declared_files": [
      ".env.example",
      "apps/web/.env.example",
      "apps/web/src/app/login/GoogleSignInButton.tsx",
      "apps/web/src/app/login/page.tsx",
      "apps/web/src/lib/__tests__/auth-config-source.test.ts",
      "apps/web/src/lib/auth.ts"
    ]
  },
  "reasons": [
    "evidence_collection_failed",
    "missing_declared_files",
    "missing_agent_result",
    "missing_copilot_current_head_review",
    "missing_copilot_rabbit_label",
    "required_checks_failed",
    "draft_pr"
  ],
  "verdict": "blocked"
}

Workflow evidence

@groupthinking groupthinking added the duplicate This issue or pull request already exists label Jul 28, 2026 — with ChatGPT Codex Connector

Copy link
Copy Markdown
Owner Author

Execution-controller reconciliation — 2026-07-28T14:05Z

This PR is retained as draft evidence only and receives no active-execution or #898 delivery credit.

The newly proven protected action remains: a Google Cloud owner must change the production OAuth consent-screen audience from Internal to External, then publish the app or add intended test users and complete a real sign-in/callback.

Execution receipt:

Copy link
Copy Markdown
Owner Author

Closing — branch orphaned by the secret-purge force-push

No common ancestor with current main, so this branch is not rebaseable.

This is documentation — the Google OAuth 403 org_internal diagnosis and remediation runbook. Worth re-cutting alongside #903, which carries the actual OAuth configuration fix. Tracked in #1378.

Branch retained for archive-tagging.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation duplicate This issue or pull request already exists

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant