Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

feat(mail): serve OpenAI's domain-verification challenge token

merged#2844CedarCopilot

CedarCopilot wants to merge 0 commits into staging from feat/openai-domain-verification

Live on prod, 0 of 1 surfaces working, 2 days leftTimeline and evidence
  1. Opened
    Sep 20, 2026, 12:46 PM
  2. Merged
    Sep 20, 2026, 12:55 PM
  3. Live on prod
    Sep 20, 2026, 12:55 PM
  4. Observed 0 hours, 1 surface, 0 requests
    Sep 20, 2026, 12:55 PM
  5. Watching

    Live on prod, 0 of 1 surfaces working, 2 days left

    Sep 20, 2026, 12:55 PM
  6. Pipelines steady after this deploy
    Sep 20, 2026, 12:55 PM

Behaviors Libra is checking

GET /.well-known/openai-apps-challenge serves OpenAI's fixed domain-verification challenge token as plain text from the API origin.Not checked
prod

Libra found 1 production surface on prod but could not judge any of them yet. 1 surface had no requests at all. Libra checks hourly for 3 days after each deploy.

Summary

OpenAI's ChatGPT app submission requires a verification token at https://<host>/.well-known/openai-apps-challenge on the MCP hostname or a parent hostname of it.

The MCP hostname (mcp.cedarcopilot.com) is Manufact's proxy (CNAME to deploy.mcp-use.com) , Cedar doesn't control arbitrary routes there, and it's unclear whether an unrecognized path even forwards to Cedar's origin.

cedarcopilot.com, the apex/parent hostname, is a valid alternative per OpenAI's own instructions ("a parent hostname... paths are ignored") and is served directly by this same app , confirmed /pricing returns 200 on both cedarcopilot.com and mail.cedarcopilot.com (same deployment, same static /public directory).

Change

Dropped the token as a static file (apps/mail/public/.well-known/openai-apps-challenge) rather than a routes.ts entry , it needs no logic, just static content at a fixed path, exactly like every other file already in apps/mail/public/.

Verification

react-router build places the exact token, byte-for-byte (43 bytes, no added newline), at build/client/.well-known/openai-apps-challenge.

Action needed outside this PR

In OpenAI's submission form, set the Challenge Base URL override to https://cedarcopilot.com instead of leaving it blank (blank defaults to the MCP hostname, mcp.cedarcopilot.com, which this fix doesn't touch).

🤖 Generated with Claude Code

RetriggerConfidence Score: 4/5

This PR is not safe to merge as-is because the deployed challenge URL bypasses the newly added static file.

Findings

  1. P1 Challenge file is unreachable ▶
Fix with agent prompt
### Issue 1
apps/mail/public/.well-known/openai-apps-challenge:1
CloudFront routes every `/.well-known/*` request to the API origin instead of the frontend bucket containing this file. The API only handles `/.well-known/security.txt` and has no handler for `openai-apps-challenge`, so `https://cedarcopilot.com/.well-known/openai-apps-challenge` will not return this token and OpenAI's domain verification will fail. Serve the token from the API or change the CloudFront behavior so this asset is reachable.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

Adds OpenAI's domain-verification token as a static file under the mail application's public directory.

  • The build can copy the token into the frontend output.
  • The deployed /.well-known/* CloudFront behavior bypasses that output and routes requests to an API that does not serve this challenge, preventing verification.

Diagram

rendering diagram…

Reviews (1) · Last reviewed commit: "feat(mail): serve OpenAI's domain-verifi..."

Show production surfaces and changed-file mapping

Production surfaces

SurfaceRequestsErrorsp95UsersVerdict
/.well-known/openai-apps-challenge0 → 00 → 0 (0%)not measured0No traffic
No requests recorded since this deploy.

Changed files → surfaces

  • apps/server/src/http/app.tsno production surface mapped