## /stage --live — personal cloud dev stage

Project admins can deploy the **current branch** to their project's dev runtime without an IP
restriction. The CLI dispatches legacy gate cleanup, then the dev deploy through the Hub backend.
Cleanup removes only that project's old stage rules and creates no Cloudflare rules, so rule-slot
quotas do not block staging. It still reads Cloudflare to detect old gates; cleanup failures stay visible.
The stage is accessible from any IP after both workflows succeed. The app's own sign-in still applies.
No SSH from your machine; project authorization remains enforced by the Hub.

**Deploy-model preflight (#5466 / #5467).** `/stage --live` is **not** generally available. Read
`deployModel` first (`mmi-cli oracle org project get {owner}/{repo}` → `deployModel`, or the dry
`mmi-cli stage --live --json` refusal). It applies only to **`tenant-container`** repos (the same
model the Hub tenant-deploy + tenant-control gates require). **`registry-publish` is not applicable**
for live stages — nor are hub-serverless, solo-container, static-cdn, vercel (its preview URL is on the
plain `/stage` receipt), content, or none. For an
unsupported model the dry plan refuses **before** offering `--apply` / `--down`; do not invent a
tenant deploy.

```bash
mmi-cli stage --live           # dry-run plan (refuses when deployModel is not tenant-container)
mmi-cli stage --live --apply   # clear legacy gates + deploy without an IP restriction
```

Tear it down when done — **only when `--apply` actually created a runtime**. This stops the runtime
without Cloudflare work:

```bash
mmi-cli stage --live --down --apply
```

If apply never landed (unsupported model, failed dispatch, or you never ran `--apply`), `--down` is a
**safe no-op** — do not promise teardown of a stage that was never created. Personal dev stages only —
rc/live environments still move exclusively through the promotion train.

