runbook-set: v5-launch-incident-response.v1
Status: Draft for review — fills audit gap V1_V7_PLAN_SET_AUDIT_2026-06-12
§6.2. Format and operational bar match V3/runbooks/incident-response-v3-ga.md
(every runbook drilled before launch, named incident-commander role, audit
event written). Drills are scheduled, not yet executed — the drill window
is 2027-01-11 → 2027-02-12, ahead of the 2027-03-01 launch; this document does
not claim green drills that have not happened.
Owners: Live-Ops SRE Lead (rotation + tooling), V5 Online Services Lead (service runbooks), Trust & Safety Lead (anti-cheat / workshop / economy runbooks), Live-Ops Producer (status page + comms), Postmortem Czar (process).
On-Call Rotation Structure#
Four rotations, each primary + secondary, one-week shifts, handoff Tuesdays 17:00 UTC with a written handoff note:
| Rotation | Scope | Staffed from |
|---|---|---|
| online-services | The 16 NestJS services, EKS, RDS/Redis, Kafka/ClickHouse pipeline | Online services + data platform pods |
| game-servers | GameLift fleets, dedicated/listen session health, netcode envelope, relays | Netcode + infra pods |
| trust-safety-economy | Anti-cheat, workshop moderation surges, marketplace, world-economy ledger | T&S engineering + economy design pods |
| incident-command | IC duty for SEV-1/SEV-2; comms; status page | Senior engineers + producers (trained IC pool, min 8 people) |
Coverage: follow-the-sun across us-east, eu-west, ap-northeast hub offices;
each rotation has at least one responder awake in-region at all times during
launch month, dropping to two-region coverage at steady state. Paging:
PagerDuty-equivalent on the Grafana/Prometheus alert stack
(V5_DEPENDENCIES.md §15). Ack SLA is per-severity (below); a missed ack
auto-escalates to secondary after 5 minutes, then to the pod lead.
Launch month (2027-03): rotations double-staffed for weeks 1–2; the day-of-launch live-service event (features§"Launch Readiness") runs with a named launch commander and a 24-hour war room for the first 72 hours.
Severity Matrix#
| Severity | Definition | Ack SLA | Mitigation target | Comms |
|---|---|---|---|---|
| SEV-1 | Players broadly cannot play online, lose progress, lose money, or a security/integrity breach is active | 2 min | 60 min | Status page within 15 min, updates every 30 min; IC assigned; exec page |
| SEV-2 | A major mode or service degraded for many players; single region down; SLO hard-breach | 5 min | 4 h | Status page within 30 min, hourly updates; IC assigned |
| SEV-3 | Partial degradation with workaround; error-budget fast burn; single-feature outage | 15 min | 1 business day | Status page component note if player-visible |
| SEV-4 | Cosmetic/minor; no player-visible impact | next business day | backlog | None |
Single-player is offline-deterministic by design (features§"V5 Product Promise"), so "the game is unplayable" SEV-1s are online-scope by construction; an incident that breaks the offline path is automatically SEV-1 because it violates the product promise.
Runbooks#
incident: matchmaking-outage#
- Owner: online-services incident commander
- Severity: SEV-2; SEV-1 if all regions or >50% of online CCU affected
- Trigger: ticket error rate >5% for 5 min, or TTM p95 >180 s for 10 min, or match-formed rate drops >60% vs 1-hour baseline.
- First action SLA: acknowledge within 5 minutes; confirm the client retry state (never a hang, features§"Online Services") is rendering within 10 minutes.
- Steps: identify scope (per-cell? per-region? per-provider — PSN/XBL/SDR vs GameLift); fail the affected pool to the healthy provider set; widen rating bands via live config if queue volume is the cause; shed ranked queues before unranked; publish status note.
- Rollback: restore normal pool routing only after TTM p95 <60 s for 15 min.
- Escalation: game-servers on-call (if GameLift placement), then Online Services Lead.
- Audit event:
v5.incident.matchmaking_outage.drilled - Drill: scheduled 2027-01-13 (window 1), evidence id
drill-v5-mm-outage
incident: host-migration-cascade-failure#
- Owner: game-servers incident commander
- Severity: SEV-2; SEV-1 if migrations corrupt saves
- Trigger: listen-server migration success <99% over 15 min, or migration time p95 >2 s (the specced bar, features§"Network Quality, LAN, and Server Browser"), or a spike of migration loops (same session migrating >3 times in 5 min).
- First action SLA: acknowledge within 5 minutes; disable new listen-server session creation within 15 minutes if cascading (co-op falls back to dedicated placement).
- Steps: capture migration telemetry for three failing sessions; check whether a client patch changed host-election; route bounded-roster co-op to dedicated servers via live config; verify triple-redundant saves (arch§"Save Corruption Recovery") rolled back cleanly for affected players; publish status note.
- Rollback: re-enable listen hosting after migration success ≥99.5% on a 500- session canary (load-test scenario LT-4 rerun against staging).
- Escalation: Netcode Lead; Save/persistence owner if any corruption confirmed.
- Audit event:
v5.incident.host_migration_cascade.drilled - Drill: scheduled 2027-01-14 (window 1), evidence id
drill-v5-hostmig
incident: anti-cheat-false-positive-wave#
- Owner: trust-safety-economy incident commander
- Severity: SEV-1 (players wrongly punished = trust-destroying)
- Trigger: flag rate >5x the 7-day baseline within 1 h, or appeal-intake rate
10x baseline, or any flag wave correlating with a client/EAC/ML-model deploy in the prior 24 h.
- First action SLA: acknowledge within 2 minutes; freeze the three-strike pipeline (no new shadow-mutes/bans issue) within 10 minutes — flags keep recording, enforcement pauses.
- Steps: identify the offending signal or model version (the ML classifier routes to human review, never auto-bans, features§"Anti-Cheat" — verify that path held); roll back the signal/model config; bulk-revert enforcement actions issued in the wave window; restore standing and forfeited ranked points (the appeals contract, features§"Cross-Platform Social, Reporting, and Bans"); proactive in-client notice + status note to affected players — do not make them appeal individually.
- Rollback: re-enable enforcement only after 24 h of flag rate within 1.5x baseline on the corrected config.
- Escalation: Anti-Cheat ML owner, Trust & Safety Lead, Comms.
- Audit event:
v5.incident.anticheat_false_positive_wave.drilled - Drill: scheduled 2027-01-20 (window 2), evidence id
drill-v5-ac-fp
incident: economy-dupe-exploit#
- Owner: trust-safety-economy incident commander
- Severity: SEV-1 (persistent-economy integrity)
- Trigger: per-cell currency-conservation reconciliation breach >0.5% daily
drift (the invariant in
V5/docs/planning/economy-sink-faucet-analysis.md§4), or wallet-growth anomaly alarm, or a credible exploit report with reproduction. - First action SLA: acknowledge within 2 minutes; engage circuit breakers within 15 minutes — per-account daily faucet caps tighten to 1x median, and the affected market/board halts (economy doc §5).
- Steps: confirm the dupe vector (save-reconcile race, market round-trip, mission-reward replay); hotfix or disable the vector via live config / live-service-calendar service; quantify minted currency from the ledger; decide remediation tier — targeted clawback for exploiters (ledger-traced), no global rollback unless drift >5% of cell money supply; ban-wave through the standard three-strike review, not auto; publish balance-ledger entry (the public ledger is a launch gate, arch§"Launch Readiness") and status note.
- Rollback: lift circuit breakers after 48 h of clean reconciliation.
- Escalation: Economy Designer, Online Services Lead, Comms for the public ledger note.
- Audit event:
v5.incident.economy_dupe.drilled - Drill: scheduled 2027-01-21 (window 2), evidence id
drill-v5-econ-dupe
incident: workshop-malware-or-infringement-wave#
- Owner: trust-safety-economy incident commander
- Severity: SEV-2; SEV-1 if a sandbox escape is credible (workshop content is data-only by spec — executable content implies a parser/loader exploit)
- Trigger: credible report that a published workshop item executes code, crashes clients at scale, or a coordinated infringing-upload wave defeats the ML pre-screen (features§"Workshop & Mods").
- First action SLA: acknowledge within 5 minutes; unpublish the named item(s) within 15 minutes (subscribers' pinned versions flag rather than crash, per spec — verify).
- Steps: for malware-class reports treat as security incident — capture the
asset, reproduce in an isolated sandbox, identify the loader vulnerability,
hotfix the linter/loader, scan the full catalog for the same asset-hash
family and unpublish matches; for infringement waves, add hashes to the
known-infringing list, batch-unpublish, and process the DMCA queue per
V5/docs/planning/ugc-marketplace-compliance.md§2; notify affected subscribers in-client; publish status note. - Rollback: republish only items individually re-moderated; loader fix ships before workshop re-opens for the affected content type.
- Escalation: Security on-call (malware class), Workshop service owner, Commerce Counsel (infringement at marketplace scale).
- Audit event:
v5.incident.workshop_malware.drilled - Drill: scheduled 2027-01-27 (window 3), evidence id
drill-v5-workshop
incident: cert-revocation#
- Owner: game-servers incident commander
- Severity: SEV-1 (Windows players blocked from online play, or TLS trust broken)
- Trigger: the EAC kernel driver's signing certificate is revoked/expired (Windows blocks driver load → all Windows online play fails, features §"Anti-Cheat"), or a service TLS certificate is revoked/expired, or a platform-store signing issue blocks the client.
- First action SLA: acknowledge within 2 minutes; classify which certificate class within 10 minutes.
- Steps: EAC driver class — engage Epic/EAC support line (vendor SLA in
contract), flip the live-config flag that lets online-but-unranked play
proceed in EAC-degraded mode on server-side signals only (ranked stays
closed — the server-side signal layer keeps running regardless, by design);
ship re-signed driver via launcher hotfix. Service TLS class — rotate
from the standby intermediate (KMS/Secrets Manager,
V5_DEPENDENCIES.md§16), redeploy ingress, verify pinning behavior in client. Publish status note for any player-visible window. - Rollback: restore ranked/EAC-required surfaces after the re-signed driver reaches >95% of the Windows population.
- Escalation: EAC vendor TAM, Platform cert manager, Security on-call.
- Audit event:
v5.incident.cert_revocation.drilled - Drill: scheduled 2027-02-03 (window 4, tabletop + TLS rotation live drill),
evidence id
drill-v5-cert
incident: region-outage#
- Owner: incident-command (multi-rotation)
- Severity: SEV-1
- Trigger: an AWS region (one of us-east, us-west, eu-west, ap-northeast, ap-southeast) loses GameLift placement, EKS health, or RDS availability; health-check failure across ≥2 services in one region for 5 min.
- First action SLA: acknowledge within 2 minutes; declare regional failover within 15 minutes.
- Steps: mark region unhealthy in matchmaking placement (players re-home to the next-best-ping region — expect ping up to but not over the 80 ms ceiling, features§"Online Services"); verify GameLift session protection drained what it could; scale surviving regions per the LT-8 drill envelope (capacity plan §5); confirm single-player offline degradation is clean for players mid-session in the dead region (local saves reconcile on reconnect); status page regional component red.
- Rollback: re-home traffic after the region is green for 60 min; ramp 10% → 50% → 100% over 2 h.
- Escalation: AWS TAM, Capacity Lead, exec on-call.
- Audit event:
v5.incident.region_outage.drilled - Drill: scheduled 2027-02-04 (window 4, executes LT-8 against staging),
evidence id
drill-v5-region
incident: login-auth-outage#
- Owner: online-services incident commander
- Severity: SEV-1
- Trigger: auth error rate >2% for 5 min, JWT issuance p99 >2 s, or a platform-linking provider (PSN/XBL/Steam) failing >10% of link flows.
- First action SLA: acknowledge within 2 minutes; verify offline degradation within 10 minutes (players must drop to offline-deterministic play, never a login wall — features§"Online Services" degradation contract).
- Steps: distinguish our-side (service/RDS/Redis) from provider-side; if provider-side, post status and rely on silent-refresh tokens keeping current sessions alive (15-min refresh gives a grace window); if our-side, roll back last auth deploy, fail over Redis session store; throttle login storm on recovery (queue with honest wait time, 250 RPS ceiling per capacity plan §3).
- Rollback: full traffic after 30 min of error rate <0.1%.
- Escalation: platform first-party contacts, Online Services Lead.
- Audit event:
v5.incident.login_outage.drilled - Drill: scheduled 2027-01-28 (window 3), evidence id
drill-v5-auth
incident: telemetry-pipeline-backlog#
- Owner: online-services incident commander
- Severity: SEV-3; SEV-2 if anti-cheat or economy monitoring is blinded >1 h
- Trigger: Kafka consumer lag >15 min, ClickHouse insert failures, or edge ingestion 5xx >1%.
- First action SLA: acknowledge within 15 minutes.
- Steps: confirm clients are buffering (500 events / 2 KB per batch) and not crashing on buffer overflow; scale edge consumers; if ClickHouse is the bottleneck, shed lowest-tier event classes first (cosmetic UX events) via schema-tier config, never anti-cheat signals or economy ledger events; drain backlog; verify no gap in the anti-cheat signal stream (if gapped, extend the affected matches' post-match re-validation window).
- Rollback: restore full event tiers after lag <1 min for 30 min.
- Escalation: Data platform owner, Anti-Cheat ML owner if signal gap >1 h.
- Audit event:
v5.incident.telemetry_backlog.drilled - Drill: scheduled 2027-01-15 (window 1, executes LT-6), evidence id
drill-v5-telemetry
incident: marketplace-payment-provider-outage#
- Owner: trust-safety-economy incident commander
- Severity: SEV-2; SEV-3 outside peak hours
- Trigger:
/v5/workshop/marketplace/purchaseprovider error rate >5% for 10 min, or entitlement-grant failures after successful charge (money taken, no item — auto-SEV-2 at any volume), or payout-batch failure. - First action SLA: acknowledge within 5 minutes; if charge-without- entitlement, pause purchases within 10 minutes.
- Steps: reconcile charge-vs-entitlement from the purchase ledger; auto-grant
missing entitlements or auto-refund within the 48 h refund window
(
year1_modder_marketplace_manifest.json); for payout failures, freeze the batch, dual-control reconcile against the revenue-share ledger (creator 70% / platform 20% / fund 5% / reserves 5%), re-run; status note on the creator hub if payouts slip past the 30-day cadence. - Rollback: resume purchases after 30 min of provider green + a clean synthetic purchase per region.
- Escalation: payment-provider TAM, Finance operations, Commerce Counsel if payouts slip >5 business days.
- Audit event:
v5.incident.marketplace_payments.drilled - Drill: scheduled 2027-02-10 (window 4), evidence id
drill-v5-payments
Status-Page Policy#
- Public status page with per-component rows: login, matchmaking (per cell group), Bureau HQ hub, workshop, marketplace, leaderboards, replays, companion app, per-region health.
- Posting bar: any SEV-1 within 15 min, SEV-2 within 30 min, player-visible SEV-3 within 2 h. Updates per the severity matrix cadence until resolved; every incident closes with a resolution note.
- Language: plain, no blame, no speculation about cause until confirmed; localized into the 12 voiced launch languages within 2 h for SEV-1 (text templates pre-translated for the top-10 incident classes above).
- The in-client retry/degradation states (spec-mandated: never a hang) deep- link to the status page.
- Owner: Live-Ops Producer; the IC supplies facts, the producer publishes.
Postmortem Process#
- Blameless. Required for every SEV-1 and SEV-2, optional for SEV-3 on the pod lead's call.
- Draft within 5 business days; reviewed at the weekly live-ops review; SEV-1 postmortems get a public player-facing summary (matching the transparency posture of the public balance ledger).
- Required sections: timeline (UTC), player impact (CCU-minutes degraded, money/progress affected), detection gap (alert vs first player report), root cause, action items each with a named owner-role and due date.
- Action-item SLA: P0 items 14 days, P1 items 30 days; the Postmortem Czar reviews aging items monthly and escalates slips to pod leads.
- Each postmortem must answer: "would the relevant drill have caught this?" — if yes, why didn't it; if no, update the drill.