Launch Cutover Runbook — Stella Ops
Audience: DevOps Guild, module guild reps, and the cutover team running a full-platform launch. Purpose: Drive a staged staging-to-production cutover of the Stella Ops release control plane, with rehearsal, smoke tests, rollback, and approvals.
Document owner: DevOps Guild (2025-10-26). Scope: full-platform launch from staging to production for release 2025.09.2.
Historical record. This runbook captures the original launch cutover. The procedure and command samples below reflect the platform’s state at that time and have not been re-run against the current stack. Two material changes have landed since:
- Storage and data engines changed. MongoDB was fully removed (Sprint 4400) in favour of PostgreSQL; MinIO references are now RustFS; Redis references are now Valkey. The
mongodump/mc mirror/runtime_eventssteps below are kept only as historical context.- Kubernetes and Helm are unsupported (product decision, 2026-05-01). Active cutovers must use Docker Compose, the Offline Kit, and signed release manifests for non-Kubernetes container estates.
For an active cutover, follow the current Deployment & Upgrade runbook and the up-to-date deployment profiles under
deploy/.
1. Roles and Communication
| Role | Primary | Backup | Contact |
|---|---|---|---|
| Cutover lead | DevOps Guild (on-call engineer) | Platform Ops lead | #launch-bridge (Mattermost) |
| Authority stack | Authority Core guild rep | Security guild rep | #authority |
| Scanner / Queue | Scanner WebService guild rep | Runtime guild rep | #scanner |
| Storage | Database/object-store operators | Backup DB admin | Pager escalation |
| Observability | Telemetry guild rep | SRE on-call | #telemetry |
| Approvals | Product owner + CTO | DevOps lead | Approval recorded in change ticket |
Set up a bridge call 30 minutes before start and keep #launch-bridge updated every 10 minutes.
2. Timeline Overview (UTC)
| Time | Activity | Owner |
|---|---|---|
| T-24h | Change ticket approved, prod secrets verified, offline kit build status checked (DEVOPS-OFFLINE-18-005). | DevOps lead |
| T-12h | Run deploy/tools/validate-profiles.sh; capture logs in ticket. | DevOps engineer |
| T-6h | Freeze non-launch deployments; notify guild leads. | Product owner |
| T-2h | Execute rehearsal in staging (Section 3) using the Compose stage profile and signed release manifest. | DevOps + module reps |
| T-30m | Final go/no-go with guild leads; confirm monitoring dashboards green. | Cutover lead |
| T0 | Execute production cutover steps (Section 4). | Cutover team |
| T+45m | Smoke tests complete (Section 5); announce success or trigger rollback. | Cutover lead |
| T+4h | Post-cutover metrics review, notify stakeholders, close ticket. | DevOps + product owner |
3. Rehearsal (Staging) Checklist
docker network create stellaops_frontdoor || true(if not present on staging jump host).- Run
deploy/tools/validate-profiles.shand archive output. - Apply staging secrets to the Compose environment file/host secret store; do not create Kubernetes secrets.
- Deploy the staging Compose profile and verify containers with
docker compose ps. - Verify health endpoints:
curl https://authority.stage.../healthz,curl https://scanner.stage.../healthz. - Execute smoke CLI:
stellaops-cli scan submit --profile staging --sbom samples/sbom/demo.jsonand confirm report status in UI. - Document total wall time and any deviations in the rehearsal log.
Rehearsal must complete without manual interventions before proceeding to production.
4. Production Cutover Steps
4.1 Pre-flight
- Confirm production secrets in the Compose environment/host secret store contain PostgreSQL, Authority, Signer, Attestor, Concelier, Scanner, Excititor, and Notify connection settings.
- Ensure the external reverse proxy network exists:
docker network create stellaops_frontdoor || trueon each compose host. - Back up current configuration and data (historical commands — see the storage note at the top of this runbook; on the current stack take a PostgreSQL snapshot and an object-store backup instead):
- Mongo snapshot:
mongodump --uri "$MONGO_BACKUP_URI" --out /backups/launch-$(date -Iseconds). - MinIO policy export:
mc mirror --overwrite minio/stellaops minio-backup/stellaops-$(date +%Y%m%d%H%M).
- Mongo snapshot:
4.2 Apply Updates (Compose)
- On each compose node, pull updated images for release
2025.09.2:docker compose --env-file prod.env -f devops/compose/docker-compose.prod.yaml pull - Deploy changes:
docker compose --env-file prod.env -f devops/compose/docker-compose.prod.yaml up -d - Confirm containers healthy via
docker compose psanddocker logs <service> --tail 50.
4.3 Unsupported Kubernetes/Helm Updates
Kubernetes and Helm updates are unsupported. Do not run helm upgrade, kubectl, or Kubernetes rollout commands for Stella Ops.
4.4 Configuration Validation
- Verify Authority issuer metadata:
curl https://authority.prod.../.well-known/openid-configuration. - Validate Signer DSSE endpoint:
stellaops-cli signer verify --base-url https://signer.prod... --bundle samples/dsse/demo.json. - Check Scanner queue connectivity:
docker exec stellaops-scanner-web dotnet StellaOps.Scanner.WebService.dll health queue(returns success). - Ensure Notify (legacy) still accessible while Notifier migration pending.
5. Smoke Tests
| Test | Command / Action | Expected Result |
|---|---|---|
| API health | curl https://scanner.prod.../healthz | HTTP 200 with {"status":"Healthy"} |
| Scan submit | stellaops-cli scan submit --profile prod --sbom samples/sbom/demo.json | Scan completes < 5 minutes; report accessible with signed DSSE |
| Runtime event ingest | Post sample event from the Zastava observer fixture | /runtime/events responds 202 Accepted; record visible in the runtime_events store |
| Signing | stellaops-cli signer sign --bundle demo.json | Returns DSSE with matching SHA256 and signer metadata |
| Attestor verify | stellaops-cli attestor verify --uuid <uuid> | Verification result ok=true |
| Web UI | Manual login, verify dashboards render and latency within budget | UI loads under 2 seconds; policy views consistent |
Log results in the change ticket with timestamps and screenshots where applicable.
6. Rollback Procedure
- Assess failure scope; if systemic, initiate rollback immediately while preserving logs/artifacts.
- For Compose:
docker compose --env-file prod.env -f devops/compose/docker-compose.prod.yaml down docker compose --env-file stage.env -f devops/compose/docker-compose.stage.yaml up -d - Kubernetes/Helm rollback is unsupported; use the Compose rollback profile only.
- Restore Mongo snapshot if data inconsistency detected:
mongorestore --uri "$MONGO_BACKUP_URI" --drop /backups/launch-<timestamp>. - Restore MinIO mirror if required:
mc mirror minio-backup/stellaops-<timestamp> minio/stellaops. - Notify stakeholders of rollback and capture root cause notes in incident ticket.
7. Post-cutover Actions
- Keep heightened monitoring for 4 hours post cutover; track latency, error rates, and queue depth.
- Confirm audit trails: Authority tokens issued, Scanner events recorded, Attestor submissions stored.
- Update the Launch Readiness Record if any new gaps or follow-ups are discovered.
- Schedule retrospective within 48 hours; include DevOps, module guilds, and product owner.
8. Approval Matrix
| Step | Required Approvers | Record Location |
|---|---|---|
| Production deployment plan | CTO + DevOps lead | Change ticket comment |
| Cutover start (T0) | DevOps lead + module reps | #launch-bridge summary |
| Post-smoke success | DevOps lead + product owner | Change ticket closure |
| Rollback (if invoked) | DevOps lead + CTO | Incident ticket |
Retain all approvals and logs for audit. Update this runbook after each execution to record actual timings and lessons learned.
9. Rehearsal Log
| Date (UTC) | What We Exercised | Outcome | Follow-up |
|---|---|---|---|
| 2025-10-26 | Dry-run of Compose validation via deploy/tools/validate-profiles.sh (dev/stage/prod/airgap/mirror). Network creation simulated (docker network create stellaops_frontdoor planned) and stage CLI submission reviewed. | Validation script succeeded; Compose profiles validated cleanly. Stage deployment apply deferred pending staging host access. | Schedule full stage rehearsal once staging cluster credentials are available; reuse this log section to capture timings. |
