Codex/cloud mcp parity 20260804 - #1613
Conversation
Activate the audited Figma, Frontend Checklist, Railway, read-only Supabase, and Sentry MCP endpoints in connected Cloud profiles while preserving offline defaults and host-managed OAuth. Verified with the focused Cloud setup suite and static Cloud contract check.
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in:32 minutes Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. 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: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (15)
📝 WalkthroughWalkthroughThe change adds Frontend Checklist, Figma, and Sentry hosted MCP support to Codex Cloud. It updates setup scripts, safety checks, tests, and documentation to handle proxy export, credential scrubbing, opt-in server enablement, and approval-mode rules. ChangesCodex Cloud MCP integration
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Comment |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
BigSimmo
commented
Aug 4, 2026
@cursoragent Unblock the current open PR. Confirm the PR number and GitHub head first from context. If more than one open PR could apply, stop and say which one you would use and why. Fetch and start from the remote tip that matches that GitHub head. If the named branch ref is missing or stale, use the PR head ref. Preserve unrelated local WIP; do not discard dirty work; do not treat a local-ahead commit as the reviewed tip. Do not merge the PR, force-push, rebase, or arm auto-merge. No provider-backed gates without approval. If you cannot push or resolve threads, diagnose and comment only; if inline replies fail, resolve when possible and put blocker dispositions in the summary comment. If auto-merge is already armed, push only for a real blocker and avoid cancelling in-flight required CI unless the push clears that blocker. If the PR is already merged or closed: confirm outcome, post one summary, and stop. Primary job: clear mergeability and required-CI blockers on this tip. Do a full product review only if needed to explain or fix a blocker. Stay light otherwise—no broad verification suites or Playwright unless needed to prove one concrete unblock fix. Snapshot the GitHub head: tip, behind/ahead, mergeable state, merge-tree versus origin/main (real conflict versus behind-but-clean), required checks on that tip including Production UI when selected, and unresolved threads that block merge or required CI. Missing checks while dirty are not green. Tip moved → re-snapshot. Ledger-lookup against that GitHub head under an unblock/fix scope for this PR. If already handled at this head for unblock work, merge-tree clean, required checks green, and no blocking threads: summarize, comment, stop. Unblock once: real conflict → merge origin/main with the smallest correct resolution (prefer main’s shared queues; keep this PR’s notes); behind-but-clean → one sync, late if required CI is in flight; clean → leave. skip-branch-sync and similar labels do not block a manual sync needed to clear a real blocker. No sync thrash. After any sync or push, re-snapshot tip, merge-tree, and required checks before declaring done. Dedupe the ledger if a merge touched it. Fix only what blocks required checks or mergeability on this tip. Ignore advisory red unless it reveals a real required failure. Prefer the smallest safe fix; if a bot/autofix commit caused the break, prefer revert. Prove with the smallest targeted check only. Format and commit before push. Push only blocker-fix commits. Append ledger for the final GitHub head under the unblock scope. Never push a ledger-only tip. One PR comment: tip, sync/merge-tree, what blocked and what you fixed or dispositioned, required CI status, residual risks; merge left to me. Stop when merge-tree is clean on the current GitHub tip, no blocking threads remain for merge/required CI, and required checks are green or clearly in progress. |
PR #1613 unblocked on tip Snapshot: merge-tree clean vs Blockers fixed (pushed
Proof: Notes: Inline thread replies were FORBIDDEN (dispositions in the PR summary comment). Ledger recorded locally only — not pushed (avoids ledger-only tip). Merge left to you. |
Connected setup now enables only Railway and constrained Supabase by default. Figma, Frontend Checklist, and Sentry require explicit CODEX_CLOUD_ENABLE_*=1 opt-ins and use prompt approval when enabled. Scrub SENTRY_AUTH_TOKEN and SENTRY_DSN from the agent shell inventory, and align AGENTS.md plus Cloud docs with the narrowed contract. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Unblock summary — PR #1613Tip: What blocked
What was fixed ( |
| Thread | Disposition |
|---|---|
| Devin AGENTS.md drift | fixed-head:0e4035fe — rulebook updated |
Devin Figma/Sentry writes reads | fixed-head:0e4035fe — opt-in + prompt |
| Codex P1 optional MCP gate | fixed-head:0e4035fe — provider-specific opt-ins + tests |
| CodeRabbit Sentry scrub | fixed-head:0e4035fe — inventory/scrub/assertions |
Required CI
Re-queued on the new tip (Change scope in progress; PR policy / mergeability / GitGuardian already green). Prior in-flight CI was superseded by this blocker-fix push.
Proof
npx vitest run tests/codex-cloud-setup.test.ts→ 21 passednpm run check:codex-cloud→ PASS: static Cloud contracts match.
Residual risks
- Host OAuth still required before optional MCP tools are callable in a connected task.
- Ledger row recorded locally for this head under scope
PR #1613 unblock(not pushed — ledger-only tip avoided).
Merge left to you.
BigSimmo
commented
Aug 5, 2026
@codex Run a fresh read-only connected Codex Cloud acceptance for PR #1613 at exact head Safety and scope:
Acceptance:
|
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
BigSimmo
commented
Aug 5, 2026
@codex Run a fresh read-only connected Codex Cloud acceptance for PR #1613 at exact head Safety and scope:
Acceptance:
|
Acceptance ResultBlocked — this host is not the requested connected Codex Cloud profile. The exact host-environment blocker is: I also ran the required raw-shell probe before any npm/Node command. It failed because a provider variable name is inherited by the top-level task environment: Per the repository Cloud contract, the raw probe must be run before sourcing profiles or invoking Node/npm, and a failure is a launcher/environment defect that requires starting another fresh task after removing the inherited variable from host settings. docs/codex-cloud.mdL250-L259 The connected acceptance also requires Exact HeadConfirmed the checkout HEAD is exactly the requested PR head: Scope Followed
The repo instructions say connected setup enables Railway and constrained Supabase by default, while optional Figma, Frontend Checklist, and Sentry remain off unless their task-specific Commands RunTesting / Checks
Checks Not Run
Blocker SummaryFresh connected Codex Cloud acceptance for PR #1613 at
|
CI triageCI failed on this PR. Automated classification of the 2 failed job(s):
Compared with main CI run #8028 (cancelled). Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger. |
BigSimmo
commented
Aug 5, 2026
@cursoragent Work the current open PR end-to-end. Confirm the PR number and GitHub head first from context. If more than one open PR could apply, stop and say which one you would use and why. Fetch and start from the remote tip that matches that GitHub head. If the named branch ref is missing or stale, use the PR head ref. Preserve unrelated local WIP, including any local-only ledger commits; do not discard dirty work, and do not treat a local-ahead commit as the reviewed tip. Do not merge the PR, force-push, rebase, or arm auto-merge unless I explicitly ask. No provider-backed gates without separate approval. If you cannot push or resolve threads, diagnose and comment only; if inline replies fail, resolve when possible and put dispositions in the summary comment. If auto-merge is already armed, push only for a real blocker, and avoid pushes that would cancel in-flight required CI unless the push itself clears that blocker. If the PR is already merged or closed: confirm the head and merge commit, note required-CI outcome, post one summary, and stop. Goal: deep review plus Bugbot, fix actionable issues with the smallest correct changes, clear merge / required-CI / thread blockers, run strong local offline verification, push fixes, append the review ledger, and post one PR summary. Prefer thoroughness over speed. Regenerate large assets only when a fix requires it; then run the asset check and keep compatibility aliases byte-identical where the repo uses them. Snapshot the GitHub head SHA: tip, base, behind/ahead, mergeable state, merge-tree versus origin/main (real conflict versus behind-but-clean), required checks on that tip including Production UI when selected, advisory separately, unresolved actionable threads. Missing checks while dirty are not green. If the tip moves mid-work, re-snapshot and continue from the new head. Ledger-lookup against that GitHub head under the heavy review-and-fix scope for this PR. Already reviewed at this head with clean merge-tree, green required checks, and no new actionable threads → summarize, comment, stop unless I asked for a fresh superseding pass. Follow the repo review protocol. Unblock once: real conflict → merge origin/main (prefer main’s shared queues; keep this PR’s notes); behind-but-clean → one sync, late if required CI is in flight; clean → leave. Labels like skip-branch-sync do not block a manual sync needed to clear a real blocker. No sync thrash. After any sync or push, re-snapshot tip, merge-tree, and required checks before declaring done. Dedupe the ledger if a merge touched it. Review high-confidence delta risks only. Separate PR-introduced defects from pre-existing re-emitted debt. For generated assets, review contracts, aliases, cache, and manifests—not every generated line. If protected RAG or ranking surfaces are touched, say so before editing; fix PR-body policy text only when wrong or missing. Ignore bot noise. No nit spam or broad rewrites. Escalate verification by touched risk: clinical / RAG / privacy / migrations / auth → domain check plus production-readiness when warranted; UI / phone-chrome / routing / styling → ensure plus phone-chrome or UI gates when warranted; generated assets or docs inventory/links → asset or docs checks when warranted. Fix P0/P1 always; clear scoped P2 when locally provable; else disposition and resolve. Required-check failures on this tip only; ignore advisory. Prefer reverting a bad autofix commit. After fixes: format and commit before push; smallest targeted proof; repo cheap gate; repo PR-local gate. No release, lighthouse, live eval, or live provider gates without approval. Push only this PR’s fix commits. Append ledger for the final GitHub head under the heavy scope. Never push a ledger-only tip—include ledger in a real fix push, or leave a no-change ledger append local and unpushed. One PR comment: tip, sync/merge-tree, fixed versus dispositioned, threads, required CI, decisive local gate lines, residual risks; merge left to me. Inline only for remaining human-needed P0/P1. Stop when merge-tree is clean on the current GitHub tip, actionable threads are clear, required checks are green or clearly in progress, heavy gates for scope passed, summary posted, merge left to me. REMEMBER TO GROUND YOUR RESPONSES AGAINST THE CURRENT REPO AND ENSURE THAT THE EDITS DO NOT CAUSE REGRESSION AND ADDITIONALLY, the edits make sense and take the entire repo and branch into account. |
PR #1613 worked end-to-end at tip Blockers cleared
Review
Gates
CI now: Change scope / PR policy / mergeability green; Unit coverage + Static PR in progress; Production UI skipped. Auto-merge off. Ledger local-only (not pushed). Merge left to you. |
Keep SENTRY_AUTH_TOKEN/SENTRY_DSN in the shared credential inventory, but delete SENTRY_DSN in offline wrappers instead of faking a URL that keeps app gates enabled. Leave SENTRY_ENABLE_LOGS/SENTRY_SEND_TEST_LOG as offline control flags outside providerCredentialVariables so Cloud setup inventory checks stay aligned. Assert unset logging with an explicit empty flag rather than undefined (which reads process.env defaults). Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Review-and-fix summary — PR #1613Tip: Fixed
Dispositioned / no further code change
ThreadsAll review threads resolved (none blocking). Inline replies were previously FORBIDDEN for this token; dispositions are in this summary. Required CIRe-queued on Local gates (decisive lines)
Residual risks
Merge left to you. |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…1613) Blank SENTRY_DSN in offline wrappers so Next cannot reload a live DSN from .env.local, while optionalUrlEnv coerces empty strings to unset for Zod. Exercise isSentryLoggingEnabled's default-parameter path via stubEnv. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
…P setup Pin blank SENTRY_DSN in offline wrappers so Next cannot reload a live DSN, treat empty optional URLs as unset in env parsing, resolve connected MCP URLs from the audited config template, and harden related docs/tests. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
BigSimmo
commented
Aug 5, 2026
Review feedback resolved — tip |
Keep overlapping offline Sentry scrub/test coverage from the remote tip and retain connected MCP URL resolution, proxy profile export, and docs/test hardening from the local review-fix commit. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Declare blank-tolerant Sentry DSN fields with inline z.preprocess so check-env-parity still collects them, and cover the parser contract in repo-hygiene tests. Record the PR #1613 babysit review ledger row. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Match Figma/Sentry project template approval to connected prompt gating, scrub NEXT_PUBLIC_SENTRY_DSN offline like the server DSN, and clarify that CODEX_CLOUD_ENABLE_* flags are environment/setup-time only. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
BigSimmo
commented
Aug 5, 2026
Review findings disposition ( |
| Finding | Disposition |
|---|---|
Template Figma/Sentry writes vs connected prompt | fixed — project template + gate now use prompt (Railway stays writes) |
| Opt-in flags read only at setup time | fixed — AGENTS.md / docs/codex-cloud.md now say environment/setup-time + re-provision |
SENTRY_DSN in credential inventory | acknowledged — intentional Cloud contract; raw-env/setup fail closed when present |
z.preprocess env-parity regex | already guarded — comment + tests/repo-hygiene.test.ts live schema assertion |
| Sed MCP URL extraction | already correct — all five sections resolve from tracked template |
NEXT_PUBLIC_SENTRY_DSN not scrubbed | fixed — blanked offline + scrubbed from Cloud profile/raw-env |
| Forced offline Sentry control flags | kept — belt-and-braces; overrides still win |
Connected Figma/Sentry writes auto-approves reads | already fixed earlier — connected opt-ins use prompt |
Offline SENTRY_DSN delete vs blank | already fixed earlier — blanked to \"\" |
| Supabase approval test anchoring | already fixed + added Figma/Sentry prompt coverage |
Ambient CODEX_CLOUD_ENABLE_*=1 in tests | already fixed earlier — baseline sets \"0\" |
Docs frontendchecklist name | already correct — table uses frontendchecklist_cloud |
| Template header comment drift | fixed — header matches prompt/writes split |
NODE_USE_ENV_PROXY setup-only | kept — intentional for CLI postinstall; not agent profile |
| Connected block hardcoded URLs | already fixed earlier — resolve_codex_mcp_url for all five |
Proof:npm run check:codex-cloud → PASS; npx vitest run tests/codex-cloud-setup.test.ts tests/test-runner-safety.test.ts → 50 passed.
BigSimmo
commented
Aug 5, 2026
Closing as part of the open-PR review sweep, after rescuing the part worth keeping. The Sentry scrub is preserved as #1622. That fix was real and independent of everything contested here: One deliberate change on the way over: #1622 does not take this branch's Why the rest is closing.#1617 supersedes it on the same six files, and the two hard-conflict ( That is the measurement this PR's own merge gate asks for and leaves unchecked ("Fresh connected Codex Cloud acceptance at the exact current head"), alongside its own statement that "Repository CI proves the static and simulated setup contracts. It does not prove that the connected host exposed and constrained each hosted MCP at runtime." The two positions are not symmetric: one is untested by its author's own admission, the other was tested and came back negative. There is also a concrete cost — this branch installs Caveat, stated plainly:#1617's acceptance is a self-report, and I could not independently launch a Codex Cloud task to re-run it. If that result is ever contradicted, this PR should be reopened — the branch Generated by Claude Code |
…ment (#1622) offlineTestEnvironment() scrubs OpenAI, Supabase, Postgres and E2E names but never covered Sentry, so an allegedly offline run inherited them. Demonstrated against main with sentinel values: SENTRY_DSN came through as "https://REAL@o1.ingest.sentry.io/9" and SENTRY_AUTH_TOKEN as "sntrys_REAL_TOKEN", straight into the child processes spawned by run-vitest.mjs and the Playwright wrappers. That is enough to initialise Sentry during a local "offline" check and to carry a source-map upload token into it. SENTRY_DSN is deleted rather than blanked or faked, and the distinction cuts both ways: a blank string fails the runtime schema's .url(), while an inert loopback URL is truthy and would leave the app's Sentry gates ENABLED for the whole run — the opposite of the intent. SENTRY_ENABLE_LOGS and SENTRY_SEND_TEST_LOG are forced off as feature flags instead of joining the credential inventory, since they never carry a secret. Adding the two credentials to providerEnvironmentKeys also enrols them in providerCredentialVariables, which check-codex-cloud-setup.mjs cross-checks against Cloud setup and the raw-env probe. That coupling is deliberate — one inventory, enforced in three places — so setup-codex-cloud.sh and check-codex-cloud-raw-env.sh gain the same two names. The full unit suite is what surfaced this; the narrower suites passed without it. tests/sentry-logging.test.ts needed adjusting because offline Vitest now forces SENTRY_ENABLE_LOGS=false, which is what isSentryLoggingEnabled's default parameter reads. It stubs the flag empty and keeps passing undefined, so the case still exercises the default-parameter path its title describes; passing "" positionally would silently have tested the explicit-empty path instead. Ported from the Codex Cloud MCP work in PR #1613, which bundles it with a contested change to hosted MCP registration. The scrub is independent of that dispute and should not wait on it. Claude-Session: https://claude.ai/code/session_01T97Kqdj9Xh1Cubv5ms3KVy Co-authored-by: Claude <noreply@anthropic.com>


Summary
CODEX_CLOUD_ENABLE_*=1, with prompt-gated tool approval.SENTRY_DSNin the shared offline-test scrub so Next/Vite cannot reload a live DSN from.env.local; coerce blank optional Sentry URLs to unset viaz.preprocesswhile keeping env-parity name collection..codex/config.tomltemplate instead of hardcoding them in setup.AGENTS.md,docs/codex-cloud.md, setup diagnostics, and focused setup contracts with the implemented boundary.Verification
npm run verify:pr-localon prior head79c4672e— PASS (5098 tests, build)c35f61400078ded68bf34e96a882e8a3711061c8c35f61400078ded68bf34e96a882e8a3711061c8Risk and rollout
promptapproval. Offline wrappers pin blankSENTRY_DSNso Next cannot reload a live DSN. Provider variables, including Sentry DSN/auth values, are excluded from inherited offline shells.Clinical Governance Preflight
Clinical KB Database(sjrfecxgysukkwxsowpy) andread_only=trueMerge gate
Do not merge until fresh exact-head CI is green and a fresh Codex Cloud task confirms
CODEX_CLOUD_ACCESS_PROFILE=connected, checks the raw shell before sourcing profiles or invoking npm/Node, and proves the expected read-only/provider boundary atc35f61400078ded68bf34e96a882e8a3711061c8.