Sandbox operator skillGuide from Ember Platform Skills

Onboarding skill

Ember Sandbox Provision

For the sandbox operator. Turns a confirmed sandbox request into running resources and tears them down at expiry.

For the sandbox operator only. Turns an approved sandbox request into a running sandbox, and removes it at expiry. Application developers never run this skill. They file requests with ember-app-onboard and wait for the operator.

When to Use

  • A Sandbox request: <slug> issue is open in ATL-Trip-Planner/ember-platform-skills.
  • A sandbox has reached its expiry date or is no longer needed.
  • Your regular expiry review, every 30 to 60 days.

What to Say

  • "Show open sandbox requests."
  • "Validate and plan sandbox request #12."
  • "Provision sandbox request #12."
  • "Tear down the sandbox for my-app."
  • "Which sandboxes are expiring?"

What Happens

  1. The agent lists open requests and asks which one to work on.
  2. It validates the request against the developer's ember-project.yaml at the requested commit. It also reruns context lint and the secret scan on a fresh checkout. Failures go back to the developer through the issue.
  3. It shows the plan: ten steps, each READY or BLOCKED, with the exact commands and resource names. Commands not yet confirmed against the provider are marked UNVERIFIED.
  4. You confirm the run. A confirmation covers one run only.
  5. It runs the READY steps in order and stops at the first failure. Every resource is recorded as soon as it exists, so a partial run can always be reversed.
  6. Two steps need you:
    • creating the Render Blueprint instance in the dashboard
    • sending the invites, confirming each person's email with them directly
  7. When everything is done, it comments on the issue and closes it. The developer then moves their project to the sandbox tier.

Teardown shows every live resource in reverse order. After you confirm, it removes them and marks the register torn-down.

What Is Blocked Today

Steps 3 to 10 report BLOCKED until these exist:

  • the sandbox Supabase organization
  • the Render workspace and the Vercel team identifiers
  • the atl.com Cloudflare zone agreement and the Zero Trust plan
  • the *.sandbox.tde.atl.com domain
  • the sandbox Entra registration

Record each identifier in your operator config as it becomes available.

Setup

  1. Copy config/sandbox.example.yaml to ~/.ember/sandbox-operator.yaml and fill in identifiers as they exist. Every value starts as MISSING.
  2. Put tokens in environment variables, never in the file. The config names them: RENDER_API_KEY and CLOUDFLARE_API_TOKEN by default.
  3. Sign in to gh, and to the Supabase and Vercel CLIs, as yourself.
  4. Keep a clone of the Ember repository at ~/gitroot/ember. The register is written there.

What It Never Does

  • Touch a production account. Stop if an identifier looks like production.
  • Run a step without your confirmation. apply and teardown refuse without --confirm.
  • Create anything outside the register, so teardown always knows what exists.
  • Print, store, or pass tokens, passwords, connection strings, or emails. Secrets go straight into GitHub secrets over standard input.
  • Grant more than least privilege: sandbox accounts only, Developer roles, and no Vercel team membership.

What It Changes

WhereWhat
Supabase, Render, Vercel, Cloudflaresbx-<slug> resources and the <slug>.sandbox.tde.atl.com hostname
The application repositorySBX_ GitHub secrets
~/gitroot/ember/docs/operations/sandbox-register/<slug>.yamlWhat was created, by whom, and when it expires. Names, IDs, and GitHub logins only
The request issueA result comment, then closed

Run It Without an Agent

node ~/gitroot/ember-platform-skills/skills/ember-sandbox-provision/scripts/provision.mjs requests
node ~/gitroot/ember-platform-skills/skills/ember-sandbox-provision/scripts/provision.mjs plan <issue>
node ~/gitroot/ember-platform-skills/skills/ember-sandbox-provision/scripts/provision.mjs apply <issue> --confirm
node ~/gitroot/ember-platform-skills/skills/ember-sandbox-provision/scripts/provision.mjs teardown <slug>
node ~/gitroot/ember-platform-skills/skills/ember-sandbox-provision/scripts/provision.mjs expiring --days 30

Common Problems

You seeDo this
BLOCKED: ... MISSINGRecord the identifier in ~/.ember/sandbox-operator.yaml once it exists. The plan names who owns it
Refused: ... needs --confirmReview the plan, then rerun with --confirm
ACTION on step 4Create the Blueprint instance in the Render dashboard, then rerun apply
ACTION on step 9Send the invites, then rerun with --invites-done
A run stopped partwayFix the cause and rerun apply. Recorded resources are skipped, or tear down from the register
Validation failsComment on the issue with the failing fields. Do not fix the developer's repository yourself

Copied from skills/ember-sandbox-provision/README.md in ember-platform-skills at commit 0b01dcf on 2026-10-19.