Read time: 8 minutes.
Maintenance stops being reactive. A deterministic script (no model) watches metrics you choose against
control bands. At 1σ it logs; at 2σ Claude diagnoses read-only; at 3σ Claude may act, but only by opening a
pull request into the normal review gate or by triggering a runbook approved in advance (e.g. rollback). Every
finding arrives as an incident intent.md, which re-enters the loop like any change. You triage; you no
longer have to notice, start, or write up.
/sdlc:status incidents section: metric, tier, triage decision
/sdlc:incident <metric | ticket | thread> diagnose from a human report; writes the incident intent
/sdlc:eval-add <incident id> after the fix ships: make the incident a permanent eval
/sdlc:rollback <env> --reason "..." if you also hold release-manager rights
/sdlc:rollback is enforced, not just advisory: the role-gate hook only allows it if your email is also
listed under roles.releaseManagers in sdlc.config.json. Holding only serviceOwners blocks it.
sdlc-control-band runs every 30 minutes (monitoring/bands.yaml). On 2σ/3σ
a PR **Incident: /sdlc:incident YT-812 or /sdlc:incident <RingCentral thread link>. Claude reads
sdlc/lessons.md first (repeat incidents are common), investigates with Sentry/Grafana/CI logs, and writes
the same intent.# Intent (incident): CI test failure rate breached 3σ
## Anomaly and evidence
ci_test_failure_rate latest=0.31 mean=0.08 sigma=0.04 z=5.7 · WE1: point beyond 3 sigma · runs #4411-#4419
## Diagnosis
test_status.py::test_paid_state flaky since #4410 (shared fixture mutates clock). Confidence: high.
## Proposed outcome
Quarantine the test and fix the fixture; PR #520 opened into review.
## Triage decision
(blank — yours)
/sdlc:spec (or straight to /sdlc:plan for a small bounded fix; the
skipped stage is noted). Normal review and code owner approval apply./sdlc:status shows it.bands.yaml tuning PR Claude proposes. Dismissals are how noise falls over time.When the fix ships: /sdlc:eval-add <incident id> so Claude’s configuration can never regress on it, and the
post-mortem paragraph goes into sdlc/lessons.md (Claude drafts it; you approve the PR).
Claude has no production access. It reads metrics and logs, opens PRs, and triggers only pre-approved runbooks.
Detection never involves a model, so bands are predictable and testable (monitoring/test_detect.py).
Triage. Approve band tuning. Decide what “back to baseline” means for your service.
Watch dashboards at 3 a.m., write the incident up from scratch, or remember to add the regression test.