Staging that behaves like production.
Both run from the same workspace, the same images and the same review — only the environment’s settings differ. A Developer can deploy to staging and ask for production; an Operator can run production. Every deploy says who did it and which commit it ran.
- The commit a deploy ran is written on it — what runs and what was pushed are the same thing.
- Deploying to production is a separate permission from deploying to staging.
- A failed deploy or a crash tells the people who can fix it.
- Pull crm-api:2026.09.25-8c1e2f4
- Start crm-api.next beside the running one
- Health check — GET /health
- crm-api.next takes the name · the old one goes
Strategy: start beside, then switch — nothing here keeps data or holds a port.



