Release Report — {version} → {env}
- Date: {YYYY-MM-DD HH:MM} {timezone}
- Operator: {user}
- Strategy: {all-at-once | blue-green | canary | manual}
- Verdict: {Released | Released-with-override | Rolled-Back | Aborted}
- Verdict reason: {one-line summary}
Pre-Release Gate (Phase 1)
Acceptance Criteria
| AC ID |
Status |
Evidence |
| AC-001 |
Met / Unmet |
path:section, test report, etc. |
Test Status
| Suite |
Pass |
Fail |
Skip |
Source |
| Functional |
N |
N |
N |
_docs/03_implementation/{batch}.md |
| Performance |
N |
N |
N |
docs/06_metrics/perf*.md |
Change Summary
| Component |
Tickets |
Type |
| {component} |
TKT-001, TKT-002 |
feature / fix / breaking / security |
Rollback Plan
- Previous version:
{previous-version} (registry digest: {sha})
- Rollback script:
scripts/deploy.sh --rollback
- Rollback target verified pullable: yes / no
- Rollback target verified bootable in target env: yes / no
Restrictions / Approvals
- Change-window restrictions: {none | description}
- Manual approvals required: {none | reference to approval file}
Tracker State at Gate
- Tickets in scope: {N}
- Tickets blocking release: {0 — list any}
Strategy Select (Phase 2)
- Recommended: {strategy} — reasoning
- Chosen: {strategy} — reasoning (if differs from recommended)
Execute (Phase 3)
- Start: {timestamp}
- End: {timestamp}
- Exit code: {0 / non-zero}
Smoke Test (Phase 4)
- Mode: {/test-run --prod-smoke | manual smoke set}
- Start: {timestamp}
- End: {timestamp}
| Test |
Result |
Notes |
| {name} |
Pass / Fail |
response time, status, etc. |
Watch Window (Phase 5)
- Duration: {minutes}
- Cadence: {minutes per poll}
- Backend: {observability source — Prometheus, CloudWatch, Datadog, etc.}
| T+min |
error_rate |
rps |
p99_latency |
saturation |
health |
notes |
| 0 |
… |
… |
… |
… |
OK |
… |
| 1 |
… |
… |
… |
… |
OK |
… |
| … |
… |
… |
… |
… |
… |
… |
Threshold breaches
- {None | "p99 latency 1.7× baseline at T+8 — soft breach, user accepted continuation"}
Commit or Rollback (Phase 6)
If Released
- Tracker tickets moved: {list}
- Git tag pushed: {tag} → {sha}
- Retrospective scheduled: yes — {/retrospective --cycle-end output path}
If Rolled-Back
- Trigger: {auto / user-elected}
- Reason: {phase + one-line cause}
- Rollback start: {timestamp}
- Rollback end: {timestamp}
- Post-rollback smoke: pass / fail
- Tracker tickets moved back: {list}
- Incident retrospective scheduled: yes — {/retrospective --incident output path}
If Aborted
- Phase that aborted: {1 / 2 / 3 / 4 / 5}
- Reason: {one-line cause}
- No live-system changes attempted: yes / no (if live changes, document under Phase 3 above and treat as Rolled-Back instead)
Lessons (one-liners; full incident retro if Rolled-Back / Released-with-override)
- {Optional: short one-liner observations the operator wants the next /retrospective to consider}