Overview
Interactive deployment workflow: collect all inputs upfront via intake form, then execute with explicit checkpoints before each destructive operation. Checkpoints apply to all environments (dev, staging, prod) — this workflow is always interactive.
Note: disable-model-invocation is intentionally absent. Unlike the deploy skill (which is programmatic/chained only), this skill is designed to be auto-invoked by natural language triggers like "deploy PR #X". Every destructive operation is gated behind AskUserQuestion, so auto-invocation is safe.
Phase A — Intake Form
Load configuration from /tmp/ops-suite-session/config.json (or config.yaml if not cached).
Extract environments list for question 2.
Extract {service} from config (the primary service name — used in Phase C/D for health checks and logs).
Ask these four questions one at a time using AskUserQuestion:
- "What PR number or commit ref do you want to deploy?"
- "Which environment? Available: {list from config}"
- "Does this PR include DB migrations? (yes / no / auto-detect)"
- "Generate a rollback plan before deploying? (yes / no)"
Store answers as: {ref}, {env_name}, {migrations}, {rollback}.
Phase B — Pre-flight (read-only, no confirmation needed)
Load the CI adapter file at ../deploy/adapters/{deploy.ci_provider}.md and extract:
- The commands to verify and trigger a deployment
- The rollback command (
{ci_rollback_command}) — used if a rollback plan is requested
Then:
- Verify
{ref}is merged and extract the image tag - Get the currently deployed tag in
{env_name}(what will change) - If
{migrations}isauto-detect: check for pending migrations using the db-migrate adapter - If
{rollback}isyes: generate rollback plan usingreferences/rollback-templates.md— select the correct template based on whether migrations are included — fill{ci_rollback_command}with the value extracted from the CI adapter above
Display the deployment plan summary:
Deployment Plan
───────────────────────────────────────────────
Change: {ref} — {pr_title}
Image tag: {image_tag}
Environment: {env_name}
Current tag: {current_tag}
Migrations: {N pending / none}
Rollback: {shown above / not requested}
Checkpoint 1 — Confirm deploy
Ask using AskUserQuestion:
🚀 Ready to deploy to {env_name}.
Change: {ref} — {pr_title}
From: {current_tag} → {image_tag}
Migrations: {N pending / none}
Proceed? (yes / no)
If no → stop. Tell the user: "Deployment cancelled. No changes were made."
Phase C — Deploy
Trigger deployment using the CI adapter (same commands as deploy skill Step 7). Show progress as the CI run proceeds.
On failure:
- Stop immediately
- Show last 20 lines of CI output
- Say: "Deployment failed at the CI step. Run /ops-suite:service-logs {service} {env_name} to investigate."
- If rollback plan was generated, display it now
Checkpoint 2 — Confirm migrations
Show only if migrations exist (detected in Phase B or user answered "yes" in intake).
Ask using AskUserQuestion:
⚠️ {N} pending migration(s) detected.
Run migrations now? (yes / no / show them first)
If "show them first": list migration file names from the db-migrate adapter, then ask again.
If no → warn: "Migrations skipped. Service may be unstable. Run /ops-suite:db-migrate {env_name} when ready."
If yes → use ops-suite:db-migrate with arguments: {env_name}. Use session state from /tmp/ops-suite-session/ — do not re-ask for environment or credentials.
Phase D — Post-deploy verification (automatic, no confirmation)
Run these automatically after deploy (and after migrations if applied). Do not ask.
Use ops-suite:service-status with arguments: {service} {env_name}. Use session state — do not re-ask for environment.
Use ops-suite:service-logs with arguments: {service} {env_name}. Use session state — do not re-ask for environment. Focus on last 5 minutes of logs.
Final Report
── Deployment Summary ──────────────────────────────
PR: {ref} — {pr_title}
Environment: {env_name}
Image tag: {image_tag}
Duration: {duration}
[✓/✗] Deploy: {N/N pods running / failed}
[✓/✗/–] Migrations: {N applied / skipped / none needed}
[✓/✗] Health: {healthy / degraded}
[✓/✗] Logs: {no errors / N errors found}
Overall: SUCCESS / SUCCESS WITH WARNINGS / FAILED at {phase}
────────────────────────────────────────────────────
If errors found in logs, add relevant suggestions:
- DB errors →
→ Run /ops-suite:db-migrate {env_name}if migrations were skipped - Message processing errors →
→ Run /ops-suite:queue-triage {env_name}