feat(identity): advertise my.parachute.computer everywhere user-facing (A3 URL coherence) - #167
Merged
Conversation
…g (A3 URL coherence) Every PRINTED/COPIED/LINKED vault URL (console connect cards, the Claude/ ChatGPT walkthrough, the account descriptor + /account/vaults* responses, the day-0 welcome email) now advertises https://my.parachute.computer/ vault/<name> instead of u.parachute.computer, via a new VAULT_PUBLIC_ORIGIN var + vaultAdvertisedUrl() helper. u. stays a permanently recognized alias: the OAuth token services catalog, internal vault-worker dispatch, and the scheduled health check all keep resolving through the unchanged VAULT_ORIGIN, since my. only routes /vault/* + the two RFC 9728 discovery paths, not /health. Staging has no VAULT_PUBLIC_ORIGIN set, so it falls back to its own workers.dev VAULT_ORIGIN unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XLZtmuSs1RirWGMGyCB1QB
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Every vault URL the identity worker PRINTS, COPIES, or LINKS now advertises
https://my.parachute.computer/vault/<name>in production instead ofu.parachute.computer— the one-origin door ratified in Phase A1 (#163).u.stays a permanently recognized alias for anything that already targets it; this PR only changes what we advertise going forward.Sites flipped (all read off the same
cardFor/vaultAdvertisedUrlseam, so one fix propagates everywhere):notesUrl/writeUrl/importUrl/mcpUrl/connectCmd(console.ts cardFor)vault_url_template(pre-creation preview) and/account/vaults+POST /account/vaults'surlfield — what the app renders, no app PR neededdrip.ts notesUrlFor) — turned out to be the day-0 email, not day-3 connect-nudge (the nudge only links<app>/connect, no vault URL embedded — see "Deliberately left" below)Mechanism: a new
VAULT_PUBLIC_ORIGINenv var +vaultAdvertisedUrl(name, deps)helper inoauth-shared.ts, parallel to the existingvaultOrigin/vaultInstanceUrl. Prod'swrangler.tomlsetsVAULT_PUBLIC_ORIGIN = "https://my.parachute.computer"; staging leaves it unset sovaultAdvertisedUrlfalls back toVAULT_ORIGIN(its own workers.dev origin, unchanged — nomy.there).Deliberately left on
u./VAULT_ORIGIN(machine-reachability, not advertised copy):servicescatalog (buildServicesCatalog→vaultInstanceUrl) — real clients (Notes' OAuthCallback, surface-client) use this to bootstrap further REST/MCP calls, not a human-facing string; not in the brief's site list, and conformance pins it byte-for-byte against the hub.vault-call.ts's internal dispatch target,ops.ts's health check (GET <VAULT_ORIGIN>/health— only exists at u.'s root,my.doesn't route it),scripts/backfill-plans.ts's operator tool — all machine callers.smoke-staging.ts/smoke-prod.ts— audited; neither asserts on console/account-descriptor/drip advertised copy, only VAULT_ORIGIN machine-reachability (health, RFC 9728 discovery, REST). Nothing to change.iss/aud/JWKS/OAuth discoveryissuer/resource-metadata/audience.ts— untouched, as directed.CLAUDE.md/TRYIT-2026-07-02.md/workers/vault/README.md— internal dev docs, not user-facing advertised copy;CLAUDE.md's architecture blurb is already stale post-Phase-A1 (still describes u. as THE branded vault domain) but that wasn't touched by feat(cloud): my.parachute.computer one-origin — Custom Domain + vault zone route + congruence pins (Phase A1) #163 either — flagging as a heads-up, out of scope here.package.json.Test plan
bun run typecheck(root) — cleanbun run test(root,bun test src test-bun) — 153 pass, 0 fail, 484 expect() calls, 16 filescd workers/identity && bun run typecheck— cleancd workers/identity && bun x vitest run— 766 tests passed, 31 files (grown from the 430 documented in CLAUDE.md — the count has moved since that doc was last updated)cd workers/vault && bun run typecheck— clean (sanity-checked; this worker isn't touched by the PR)u.advertised form:console.test.ts,first-run.test.ts,plans.test.ts,drip.test.tsconformance.test.ts(services catalog, PRM resource),csp.test.ts(illustrative connect-src example),bound-origins.test.ts/console.test.ts'sresolveResourceVault/congruence describes (audience.ts recognition)Not self-reviewed — a separate reviewer will be dispatched per workspace governance.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01XLZtmuSs1RirWGMGyCB1QB