Owner: Security. Review cadence: annual or on material change. Tabletop cadence: quarterly.
This plan describes how MeterBox responds to security and availability incidents. It is the runbook on-call follows and the document an auditor reads to satisfy SOC 2 CC7.3 (incident evaluation) and CC7.4 (incident response). It pairs with vulnerability-disclosure-policy.md (how reports come in from outside) and audit-trail-architecture.md (forensic evidence).
Pick the tier on observed impact, not suspected cause. Escalate, never de-escalate, until containment is confirmed.
| Sev | Definition | Examples | Customer comms | Time to first ack | Time to resolution target |
|---|---|---|---|---|---|
| Sev0 | Active customer-data compromise OR control plane down OR data-plane down for all tenants | Confirmed unauthorized read of another tenant's data; /cp/* 5xx for all; mass billing failure |
Status page + email per tenant within 60m | 15m | 4h |
| Sev1 | Single-tenant data plane down OR availability SLO breach OR active attack (no confirmed data exposure) | One tenant's /v1/* 5xx; rate of failed logins > 100/m; auth bypass under investigation |
Affected tenants only, within 2h | 30m | 8h |
| Sev2 | Material bug with no data/availability impact OR security finding requiring patch within 7d | Webhook signature mismatch on a low-volume tenant; medium-CVSS dep flagged by Trivy | Bundled into the next release note | 4h business hours | 7d |
| Sev3 | Tracking-only — no customer impact | Internal lint failure, expired dev cert | None | next business day | next sprint |
One person fills each role. The same person may fill multiple roles on a small incident, but the assignment is explicit.
On Sev0/Sev1, IC and CL are different people.
┌─ alert fires / report received
│
▼
1. Triage (≤15m for Sev0/1, ≤4h Sev2)
• Reproduce / confirm impact
• Pick severity (see table above)
• Open #inc-<yyyymmdd-short-name> channel
• Page IC, CL, SME per severity
│
▼
2. Contain
• Stop the bleeding (revoke key, scale down, block IP,
roll back deploy). Containment > root cause.
• Confirm no further damage via the audit log + metrics.
│
▼
3. Eradicate + recover
• Apply the real fix (patch, config change, rotation).
• Verify by reproducing the failure path.
• Re-enable any disabled surface.
│
▼
4. Communicate
• Status page update for Sev0/1 (every 60m until resolved).
• Customer email for Sev0; affected tenants for Sev1.
• Internal channel + leadership update.
│
▼
5. Close
• Mark incident resolved with the resolution criterion that was met.
• Schedule the post-mortem (within 5 business days for Sev0/1).
Subject: [MeterBox] Incident — <one-line summary>
What happened: <one paragraph, plain English>
When: <UTC window>
Customer impact: <what the customer saw / couldn't do>
What we've done: <containment + recovery so far>
What we're doing next: <next concrete step, with ETA>
Where to follow updates: <status page URL>
Questions: contact@meterbox.ai
We will follow up with a post-mortem within 5 business days.
#inc-<yyyymmdd-name>
SEV: <0|1|2|3> · IC: @<handle> · CL: @<handle> · SME: @<handle>
Status: <triage | contain | eradicate | recover | resolved>
Last update: <UTC timestamp>
Status page: <URL or "N/A">
# Post-mortem — <incident name>
- **Severity:** <Sev0|1|2|3>
- **Detected at:** <UTC> **Resolved at:** <UTC> **Duration:** <h:mm>
- **Detection source:** <alert | customer report | internal observation>
- **Customer impact:** <tenants affected, customer-visible behavior, dollar/SLA impact>
## Timeline (UTC)
<bulleted; one line per state change>
## What went well
<bullets — keep this section, it's where the next IC learns>
## What went poorly
<bullets — process, tooling, knowledge gaps. NOT individuals.>
## Root cause
<one paragraph: the proximate cause AND the systemic cause that allowed it>
## Action items
| # | Action | Owner | Due | Linear/issue |
| - | ------ | ----- | --- | ------------ |
Action items must be tracked to closure. The IC reviews open action items at the start of each weekly engineering sync.
We run a tabletop exercise quarterly to keep the muscle warm. The log is the SOC 2 evidence that the cadence is met.
# Tabletop — <YYYY-Qn>
- **Date:** <YYYY-MM-DD> **Facilitator:** @<handle>
- **Scenario:** <one paragraph — e.g. "Tenant reports their `/v1/customers` list contains a different tenant's customers">
- **Participants:** @<handle>, @<handle>, …
## Observations
<bullets — where did the plan hold up, where did it bend>
## Action items
| # | Action | Owner | Due |
| - | ------ | ----- | --- |
Logs live in docs/compliance/tabletops/. The most recent four (one year) are the SOC 2 evidence.
/cp/* audit log + GET /cp/audit/verify.