Public: anyone can read this; the crew can change it.

Platform app move gap: Rehearsal mode: a preview seeded from a copy of production data #11714

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

This change is documentation only, in the two files the issue names. I did not run `bun test`, `tsc` or the gate, because no code changed.

shipped production is serving it deploy eb2664b

opened this

This change is documentation only, in the two files the issue names. I did not run bun test, tsc or the gate, because no code changed.

What I found. Most of rehearsal mode is already built.

  • Data copy: a preview's data is a copy of production's, taken when the preview is created (docs/APPS.md, rule 3).
  • Sandbox keys: a variable set for scope preview wins over the same name in all or production (core/app_env.ts). So a sandbox key can sit beside the live one and the live one never reaches a preview.

What changed

  • docs/features/platform-app-move.md, step 4: replaced the one-line description with the procedure.

- Set each payment name twice: live for production, sandbox for preview. - Never leave one in scope all, because all reaches previews. - Check the preview shows sandbox before anyone places an order. - The copy is disposable and gone with the pull.

  • docs/features/platform-app-move.md, "What the forge lacks": the #11702 line now says what exists and what is still missing.
  • docs/APPS.md: added a "Rehearsal" paragraph under rule 3, pointing to the procedure.

What I chose not to do. Nothing refuses a payment key left in scope all, or a live one set under preview. The forge can't tell which names are payment keys, so a guard would mean a new settings concept (declaring a name as a payment key). That is outside the two files the issue names, so I wrote it as an open gap rather than guess. It needs its own issue if you want it built. Webhooks reaching a preview's changing address stay with #11703.

How to look. Read step 4 in docs/features/platform-app-move.md.

🤖 Generated with Claude Code

Closes #11702

commented

This change is documentation only, in the two files the issue names. I did not run bun test, tsc or the gate, because no code changed.

What I found. Most of rehearsal mode is already built.

  • Data copy: a preview's data is a copy of production's, taken when the preview is created (docs/APPS.md, rule 3).
  • Sandbox keys: a variable set for scope preview wins over the same name in all or production (core/app_env.ts). So a sandbox key can sit beside the live one and the live one never reaches a preview.

What changed

  • docs/features/platform-app-move.md, step 4: replaced the one-line description with the procedure.

- Set each payment name twice: live for production, sandbox for preview. - Never leave one in scope all, because all reaches previews. - Check the preview shows sandbox before anyone places an order. - The copy is disposable and gone with the pull.

  • docs/features/platform-app-move.md, "What the forge lacks": the #11702 line now says what exists and what is still missing.
  • docs/APPS.md: added a "Rehearsal" paragraph under rule 3, pointing to the procedure.

What I chose not to do. Nothing refuses a payment key left in scope all, or a live one set under preview. The forge can't tell which names are payment keys, so a guard would mean a new settings concept (declaring a name as a payment key). That is outside the two files the issue names, so I wrote it as an open gap rather than guess. It needs its own issue if you want it built. Webhooks reaching a preview's changing address stay with #11703.

How to look. Read step 4 in docs/features/platform-app-move.md.

🤖 Generated with Claude Code

Approved

Docs-only, accurate against src/core/app_env.ts (narrower scope wins, so preview beats all/production), no README growth, no code or dependency added, and the open gap is stated honestly rather than papered over. Two things next: (1) build the guard the docs say is missing: let an owner mark a name as a payment key and refuse it in scope all (and warn on a live-looking value under preview), then update step 4 and the #11702 line. (2) Step 3 of the procedure tells people to read the app's payment-mode indicator, which the forge does not provide; say it is the app's own, or have the forge show the preview's resolved env names (not values) so the check is visible without trusting the app.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs