Skip to content

Runbook Testing Sequence & Sign-Off Order

Last Updated: 2026-06-17 Status: 13 of 84 assets signed off — D1 ✅, R1 ✅, C4 ✅, D3 ✅, V2 ✅, V3 ✅, D5 ✅, K1 ✅, D4 ✅, I1 ✅, I2 ✅, X1 ✅, X2 ✅ · S1 🟨 (offline only)


Overview

This document defines the canonical order for executing all SnowOps runbooks — test sign-off runbooks (Part 1) and operational playbooks (Part 2). The test sequence respects dependency flows: offline-first, sandbox setup before cloud tests, foundational modules before consumers.

Each test runbook takes ~5–45 min to complete. Total time to full sign-off: ~30–40 hours over multiple sessions.


Part 1: Manual Test Runbook Sequence

84 tracked assets · 84 runbook files · all assets have runbook files

Phase 0: Pre-Flight Setup ⭐ START HERE (one-time, ~30 min)

Complete once before any other runbook.

Runbook Description
client-onboarding/01-azure-cloud-setup.md Configure Azure credentials, install Terratest harness, validate sandbox access

Checklist: - [ ] Azure subscription ID & tenant ID obtained - [ ] Auth configured (Service Principal or az login) - [ ] Go 1.22+, Terraform 1.6+, Azure CLI 2.50+, kubectl, helm installed locally - [ ] go test -v -timeout 5m ./... passes (schema-only tests) - [ ] SNOWOPS_SANDBOX_SUBSCRIPTION_ID and SNOWOPS_SANDBOX_TENANT_ID exported

All phases below require Phase 0 to be complete.


Phase 1: Offline Quality Gates (~67 min)

Fully offline — no cloud credentials required. Complete these first.

# Asset Name Link Dependencies Time Status
1 D1 Pre-Commit Quality Gates test/D1.md None 15m ✅ 2026-05-26
2 R1 PR Template Enforcement test/R1.md None 10m ✅ 2026-05-26
3 C4 GitOps Branching Standard + Repo Template test/C4.md None 10m ✅ 2026-05-26
4 D3 OPA / Conftest Policy Bundle test/D3.md None 10m ✅ 2026-06-14
5 D5 Policy Waiver Engine test/D5.md D3 (bundle loaded) 10m ✅ 2026-06-14
6 D2 PR-Blocking Quality Gates test/D2.md D1 (hooks installed) 10m ⬜
7 K1 IR Runbook Library test/K1.md None (offline doc) 2m ✅ 2026-06-14

Rationale: All offline — no Azure credentials needed. D1/R1/C4 are the local dev contract; D3/D5 extend it to OPA policies; D2 extends it to the GitHub PR gate. K1 validates the five IR playbooks are structurally complete — fast enough (~2 min) to run here alongside the other doc-quality checks.


Phase 2: Kyverno Policy Bundle (~20 min, offline)

# Asset Name Link Dependencies Time Status
7 D4 Kyverno Policy Bundle (D4 + X4) test/D4.md None (offline) 20m ✅ 2026-06-16

Rationale: Offline — requires only a local kind cluster for Part C. Tests the SnowOps Kyverno bundle and the X4 kyverno-install chart (both covered by this single runbook).


Phase 3: Security Scanning (~20 min, offline/CI)

# Asset Name Link Dependencies Time Status
8 I1 Container Image Scanning test/I1.md None 5m ✅ 2026-06-16
9 I2 Dependency Scanning test/I2.md None 5m ✅ 2026-06-16
10 I3 CodeQL SAST test/I3.md None 10m ⬜

Rationale: Offline YAML-lint parts require only Python. Parts B/C require GitHub Actions (no Azure credentials). Validate the security-scanning pipeline early — it gates every future PR.


Phase 4: Visualization & Evidence (~35 min, offline)

# Asset Name Link Dependencies Time Status
11 V2 Architecture Diagrams Generator test/V2.md None (offline) 10m ✅ 2026-06-03
12 V3 Runbook Generator test/V3.md None (offline) 5m ✅ 2026-06-03
13 E0 Lightweight Compliance Snapshot test/E0.md V2, V3 outputs 10m ⬜
13a E4 Resource Graph Query Library test/E4.md E0 (query substrate) 10m ⬜

Rationale: V2 and V3 are 100% offline golden-file tests. E0 snapshots compliance evidence from TF outputs; offline Part A/B can run here, live Part C runs after Phase 5. E4 extends E0's query substrate with the full Azure Resource Graph library — offline-capable and tested alongside E0 before any cloud work starts.


Phase 5: Sandbox Subscription Setup (~40 min)

Stand up the sandbox and validate the Terratest harness before any cloud tests.

# Asset Name Link Dependencies Time Status
14 X1 SnowOps Sandbox Subscription test/X1.md Phase 0 (Azure creds) 20m ✅ 2026-06-16
15 X2 Terratest Harness test/X2.md X1 (sandbox live) 15m ✅ 2026-06-16
16 B6 Client Self-Service Bootstrap test/B6.md None (read-only) 5m ⬜

Rationale: X1 provisions the sandbox subscription (budget alerts, tag policy, Defender, Activity Log). X2 proves the Go Terratest harness can reach the sandbox. B6 validates the client-facing prerequisite checker offline.


Phase 6: Reliability & DR Modules (~25 min offline + optional cloud)

# Asset Name Link Dependencies Time Status
17 L1 Azure Backup Policy Module test/L1.md X1 (sandbox for Part C) 8m ⬜
18 L2 Cross-Region Replication Module test/L2.md L1 (backup foundation) 8m ⬜
19 L4 Automated Restore Drill test/L4.md L1, L2 (backups in place) 10m ⬜

Rationale: L1 defines the backup baseline; L2 adds geo-redundancy; L4 validates the full restore chain end-to-end. Parts A/B of each are offline.


Phase 7: Bootstrap & State Modules (~65 min)

# Asset Name Link Dependencies Time Status
20 F1 Baseline Module test/F1.md X1, X2 (sandbox) 20m ⬜
21 F6 State-Backend Module test/F6.md X1, X2 (sandbox) 20m ⬜
22 B3 Subscription Baseline (F1 + Group RBAC + MCSB) test/B3.md F1 (baseline module) 15m ⬜
23 B4 Client State Backend (F6 + Blob RBAC) test/B4.md F6 (state-backend module) 15m ⬜
24 B2 Client-Bootstrap (AAD App Reg + Federated OIDC) test/B2.md F1, F6 (baseline + state) 25m ⬜
25a F11 Module Versioning + Private Registry test/F11.md None (git + metadata only) 6m ⬜
25 F7 Terragrunt Live-Infra Reference test/F7.md F1, F6 (modules in place) 20m ⬜

Rationale: F1 and F6 are the baseline and state foundation for all subsequent modules. B3/B4 validate end-to-end provisioning using those modules. B2 bootstraps client OIDC. F7 validates the terragrunt live/ directory structure.


Phase 8: Azure Policy Suite (~85 min)

Subscription-scoped Azure Policy modules — all follow offline-validate → sandbox-apply pattern.

# Asset Name Link Dependencies Time Status
26 U1 Subscription Budget + Alerts test/U1.md X1 (sandbox sub) 10m ⬜
27 U2 Require Mandatory Tags (Azure Policy) test/U2.md X1 (sandbox sub) 10m ⬜
28 M1 Deny Unencrypted Resources (Azure Policy) test/M1.md X1 (sandbox sub) 10m ⬜
29 M2 Customer-Managed Keys (HSM-backed, auto-rotation) test/M2.md X1, F5 (KV for Part D) 15m ⬜
30 M3 Enforce TLS 1.2+ / HTTPS-only (Azure Policy) test/M3.md X1 (sandbox sub) 10m ⬜
31 M6 Data Residency — Allowed Regions Only (Azure Policy) test/M6.md X1 (sandbox sub) 10m ⬜
32 N5 Deny Public Network Access on PaaS (Azure Policy) test/N5.md X1 (sandbox sub) 10m ⬜

Rationale: Foundational guardrails applied at subscription scope. U1/U2 cover cost and tagging hygiene. M1/M3/M6 cover encryption, TLS, and data-residency policies. N5 enforces private networking. These are prerequisites for all subsequent module deployments to be compliant.


Phase 9: Monitoring, Logging & On-Call (~60 min)

# Asset Name Link Dependencies Time Status
33 J1 Log Analytics Workspace test/J1.md X1, F1 (sandbox + baseline) 15m ⬜
34 J2 Enforce Diagnostic Settings (Azure Policy) test/J2.md J1 (LAW for DINE) 15m ⬜
35 J4 Detection Alert Rule Pack test/J4.md J1 (LAW ARM ID) 15m ⬜
36 X8 Synthetic Monitoring test/X8.md J1 (LAW for alerts) 15m ⬜
36a K2 On-Call Integration test/K2.md J1 (LAW), J4 (Sentinel alerts) 10m ⬜

Rationale: J1 is the log-collection backbone; everything else in this phase feeds into it. J2 automatically wires new resources to J1 via DINE policy. J4 adds curated Defender alerts. X8 adds Application Insights web tests. K2 connects Sentinel/Defender to the paging system (PagerDuty/Opsgenie/Slack) and must come after J4 so the alert rules it consumes are live.


Phase 10: Identity & Azure AD (~90 min, requires tenant sandbox)

Note: This phase requires a separate Azure AD tenant sandbox (snowops-sandbox-tenant-01), distinct from the subscription sandbox used in previous phases.

# Asset Name Link Dependencies Time Status
37 H1 Azure AD Tenant Baseline test/H1.md Tenant sandbox access 25m ⬜
38 H2 Conditional Access Bundle test/H2.md H1 (AAD baseline) 30m ⬜
39 H3 PIM Eligible Role Templates test/H3.md H1 (AAD baseline) 30m ⬜
40 H7 Break-Glass Accounts + Sign-In Alert test/H7.md H1 (AAD baseline) 30m ⬜
41 H5 Service Principal Inventory + Rotation test/H5.md H1 (tenant read access) 20m ⬜
42 B5 PIM for Azure Resources test/B5.md H3 (PIM templates) 25m ⬜

Rationale: H1 establishes the AAD tenant baseline (auth policies, security defaults). H2 adds Conditional Access. H3 defines PIM role eligibility templates. H7 creates emergency break-glass accounts. H5 inventories and rotates service principal credentials. B5 activates PIM eligibility for Azure resource roles.


Phase 11: Core Network & Compute Modules (~130 min)

# Asset Name Link Dependencies Time Status
43 F2 Network Hub test/F2.md X1, F1, F6 (sandbox + state) 45m ⬜
44 N6 NSG Baseline + Flow Logs test/N6.md F2 (hub network) 15m ⬜
44a N3 WAF Policy Module test/N3.md F2 (hub network) 5m ⬜
44b N4 DDoS Network Protection test/N4.md F2 (hub network) 5m ⬜
45 F3 AKS Secure test/F3.md F2, N6 (hub + NSG) 30m ⬜
46 F4 Azure Container Registry test/F4.md F2 (hub network) 30m ⬜
47 F5 Azure Key Vault test/F5.md F2 (hub network) 30m ⬜
48 J6 WORM Audit-Log Archive test/J6.md J1 (LAW), F5 (KV) 15m ⬜
49a F8 K8s Reference Manifests Bundle (ArgoCD app-of-apps) test/F8.md F3 (AKS), F5 (KV), D4 (Kyverno) 40m ⬜
49 X7 Sandbox Cleanup Workflow test/X7.md X1 (sandbox live) 10m ⬜

Rationale: F2 is the hub network — all other network-connected modules depend on it. N6 adds NSG baseline and flow logs. N3 (WAF Policy) and N4 (DDoS Protection) attach network security controls at the hub level; N4 Part C carries a cost warning (~$2,944/mo) — destroy immediately after. F3 deploys the AKS private cluster. F4 (ACR) and F5 (KV) attach via private endpoints. J6 adds WORM audit log archiving. F8 installs the ArgoCD app-of-apps GitOps bundle onto the AKS cluster. X7 runs nightly to clean up sandbox resource groups.


Phase 12: Drift, Compliance & Evidence Adapters (~55 min)

# Asset Name Link Dependencies Time Status
50 S1 Scheduled Terraform Drift Detection test/S1.md X1, F1, F6 (state backend) 10m 🟨 offline only (2026-06-03)
51a S2 Azure Policy Compliance Dashboard test/S2.md E0 (snapshots), L4 (optional DR panel) 6m ⬜
51 E2 Vanta Adapter test/E2.md E0 (evidence snapshots) 10m ⬜
51b E3 Drata Adapter Stub test/E3.md E0 (evidence snapshots) 10m ⬜
51c E5 Evidence Sync test/E5.md E0, E2, E3 (adapters ready) 10m ⬜
51d E6 Access Review Automation test/E6.md H1, H3 (AAD/PIM identity) 10m ⬜

Rationale: S1 detects drift via scheduled terraform plan (Part C needs live state backend). S2 aggregates E0 snapshot history into a compliance dashboard (fully offline). E2 and E3 are parallel GRC-platform adapters (Vanta and Drata respectively) — both consume E0 snapshots. E5 syncs evidence across all configured adapters; run after E2/E3 are validated. E6 automates PIM/AAD access reviews and requires the identity foundation from Phase 10 (H1/H3).


Phase 13: Ticketing & Reporting (~30 min)

# Asset Name Link Dependencies Time Status
52 E7 TicketPlatform Adapters test/E7.md None (offline Parts A/B) 10m ⬜
53 R2 Production Change Log test/R2.md E7 (ticket adapter) 10m ⬜
54 I5 Defender → Ticket (via E7) test/I5.md E7 (ticket adapter) 10m ⬜

Rationale: E7 is the ticket-platform CLI abstraction; R2 and I5 both depend on it. E7 Parts A/B are offline (unit tests + dry-run). Parts A/B of R2 and I5 are also offline, making this phase largely offline-first.


Phase 14: CI/CD Pipelines (~110 min)

# Asset Name Link Dependencies Time Status
55 C1 terraform-plan-apply Reusable Workflow test/C1.md X1, F1, F6 (sandbox + state) 30m ⬜
56 C2 container-build-sign Reusable Workflow test/C2.md F4 (ACR), F5 (KV) 40m ⬜
57 C3 aks-deploy Reusable Workflow test/C3.md F3 (AKS), F8 (ArgoCD) 75m ⬜
58 X5 Pipeline Integration Tests test/X5.md C1, C2, C3 (all pipelines) 20m ⬜
59 B1 snowops-onboarder GitHub App test/B1.md B2 (App Reg), C4 (template) 60m ⬜

Rationale: C1 (terraform CI) needs a live state backend. C2 (container build + sign) needs ACR (F4) and Key Vault (F5). C3 (AKS deploy) needs a running AKS cluster (F3) and ArgoCD (F8). X5 exercises the integration contracts between all three. B1 (the onboarder) consumes B2 and C4 to provision client repos.


Phase 15: Module Contracts & Brownfield (~35 min)

# Asset Name Link Dependencies Time Status
60 F0 Cloud-Agnostic Module Contracts test/F0.md All F-modules (offline validation) 15m ⬜
61 F12 Brownfield Import Library import/F12.md X1, X2 (sandbox for Part C) 20m ⬜

Rationale: F0 validates the cloud-agnostic output contracts across all F-modules; it only needs the module definitions (offline). Run it after all F-modules are implemented. F12 tests the import-block library for adopting pre-existing Azure resources.


Phase 16: Discovery & CRM Pipeline (~90 min)

# Asset Name Link Dependencies Time Status
62 G0 Discovery Auditor — Reader SP Bootstrap test/G0.md X1 (sandbox, Owner via PIM) 20m ⬜
63 G2 Discovery — YAML Rule Pack + Engine test/G2.md None (offline) 10m ⬜
64 G3 Discovery — Report Renderer test/G3.md None (offline + Pandoc) 10m ⬜
65 G1 Discovery — Collectors test/G1.md G0 (Reader SP), X1 (sandbox) 20m ⬜
66 G4 Discovery Run Workflow test/G4.md G0, G1, G2, G3 20m ⬜
67 G5 HubSpot Deal Attachment test/G5.md G4 (discovery report URL) 10m ⬜
68 G6 Immutable Run Audit Log test/G6.md G0, G4 (run complete) 20m ⬜
69 A1 HubSpot Lead Enrichment test/A1.md HubSpot sandbox, Clearbit token 10m ⬜
70 A5 HubSpot Discovery Trigger test/A5.md G4 (workflow), A1 (HubSpot) 10m ⬜

Rationale: G0 creates the read-only discovery service principal; all collectors (G1) depend on it. G2 and G3 are offline and can be done in parallel with G0/G1. G4 is the end-to-end workflow that ties together all G-components. G5 and G6 depend on G4 completing successfully. A1 and A5 are the CRM integration layer; A5 dispatches the G4 workflow from HubSpot.


Quick Reference: Sign-Off Status

✅ SIGNED OFF (13):  D1 (2026-05-26), R1 (2026-05-26), C4 (2026-05-26),
                     D3 (2026-06-14), V2 (2026-06-03), V3 (2026-06-03),
                     D5 (2026-06-14), K1 (2026-06-14), D4 (2026-06-16),
                     I1 (2026-06-16), I2 (2026-06-16), X1 (2026-06-16), X2 (2026-06-16)
🟨 PARTIAL (1):      S1 — offline parts only (2026-06-03); live Part C pending
⬜ PENDING (70):     All other assets in phases above

Total tracked assets: 84 (all with runbook files)


Execution Tips

Before You Start

🚨 STOP: Complete Phase 0 first! → client-onboarding/01-azure-cloud-setup.md

During Execution

  1. Work offline-first — Phases 1–4 need no cloud credentials. Complete them in any session.
  2. Respect phase order — Phases 5+ have real dependency flows; don't skip ahead.
  3. Fill sign-off blocks — every runbook has a "Sign-off" section with tester/date/result.
  4. Keep a log — use the sample log below; copy it to your local notes.
  5. Link bugs — if a test fails, create an issue and reference it in the runbook's notes.
  6. Tenant vs. subscription sandbox — Phase 10 needs a tenant sandbox (snowops-sandbox-tenant-01); all other cloud phases use the subscription sandbox (snowops-sandbox-01).

Sample Execution Log

## Execution Log — [Date]

| Phase | Asset | Tester | Date       | Result | Notes                                      |
|-------|-------|--------|------------|--------|--------------------------------------------|
| 1     | D1    | Sagar  | 2026-05-26 | PASS   | All hooks fire; gitleaks blocked correctly |
| 1     | R1    | Sagar  | 2026-05-26 | PASS   | PR template check passes                  |
| 4     | V2    | Sagar  | 2026-06-03 | PASS   | Golden-file matches; d2 render skipped     |
| 12    | S1    | Sagar  | 2026-06-03 | PASS*  | Offline only; live Part C pending          |

Dependencies Map

┌─────────────────────────────────────────────────────────────────┐
│ PHASE 0: PRE-FLIGHT (one-time)                                  │
│ Azure creds + Terratest harness + schema validation             │
│ 👉 client-onboarding/01-azure-cloud-setup.md                   │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASES 1–4: OFFLINE (no cloud)                                  │
│ P1: D1 → R1 → C4 → D3 → D5 → D2 (quality gates)               │
│ P2: D4 (Kyverno, offline)                                       │
│ P3: I1, I2, I3 (security scanning)                             │
│ P4: V2 → V3 → E0 (visualization + evidence)                    │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASE 5: SANDBOX SETUP                                          │
│ X1 (subscription) → X2 (Terratest harness)                     │
│ B6 (bootstrap checker, offline)                                 │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASES 6–9: SUBSCRIPTION-SCOPED MODULES                         │
│ P6: L1 → L2 → L4 (reliability / DR)                            │
│ P7: F1 → F6 → B3, B4, B2 → F7 (bootstrap + state)             │
│ P8: U1, U2, M1, M2, M3, M6, N5 (policy suite, parallel)       │
│ P9: J1 → J2, J4, X8 (monitoring + logging)                     │
└─────────────────┬─────────────────────┬───────────────────────┘
                  ↓                     ↓
┌─────────────────────────┐  ┌──────────────────────────────────┐
│ PHASE 10: TENANT IDENTITY│  │ PHASE 11: NETWORK + COMPUTE      │
│ H1 → H2, H3, H7         │  │ F2 (hub) → N6 → F3 (AKS)        │
│ H3 → B5                 │  │ F2 → F4 (ACR), F5 (KV)          │
│ H5 (SP rotation)        │  │ J1 + F5 → J6 (WORM archive)     │
└──────────────────────────┘  │ F3+F5+D4 → F8 (ArgoCD bundle)   │
                              │ X7 (sandbox cleanup)             │
                              └──────────────┬───────────────────┘
                                             ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASES 12–13: COMPLIANCE & TICKETING                            │
│ P12: S1, S2[TBD], E0 → E2 (Vanta)                              │
│ P13: E7 → R2, I5 (ticketing + Defender)                        │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASE 14: CI/CD PIPELINES                                       │
│ F1+F6 → C1 (terraform plan-apply)                              │
│ F4+F5 → C2 (container build + sign)                            │
│ F3+F8 → C3 (AKS deploy)                                        │
│ C1+C2+C3 → X5 (pipeline integration tests)                     │
│ B2+C4 → B1 (GitHub onboarder)                                  │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASE 15: CONTRACTS + BROWNFIELD                                │
│ (all F-modules) → F0 (cloud-agnostic contracts)                │
│ X1+X2 → F12 (brownfield import)                                │
└────────────────────────┬────────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────────┐
│ PHASE 16: DISCOVERY + CRM                                       │
│ X1 → G0 → G1                                                   │
│ G0+G1+G2+G3 → G4 → G5, G6                                     │
│ G4 → A5; HubSpot → A1 → A5                                     │
└─────────────────────────────────────────────────────────────────┘

FAQs

Q: Can I skip a runbook? A: No. Every asset must have its sign-off block filled. If N/A, mark result as "N/A" with a note.

Q: What if a runbook fails? A: Create a bug issue, link it in the runbook notes, move to the next asset. Return after the fix.

Q: Can I run runbooks in parallel? A: Within a phase, assets with no inter-dependencies can run in parallel. For example, in Phase 8 all seven policy modules are independent of each other. In Phase 16, G2 and G3 can be done concurrently with G0.

Q: The Phase 10 "tenant sandbox" — is that different from the subscription sandbox? A: Yes. Phase 10 modules (H-series, B5) modify the Azure AD tenant (Conditional Access, PIM, AAD baseline). Use a dedicated sandbox tenant (snowops-sandbox-tenant-01). The subscription sandbox (snowops-sandbox-01) is used by all other phases.

Q: Who approves sign-offs? A: For now, Sagar. Community contributors may propose sign-offs once open; Sagar reviews.

Q: How often do I re-run a signed-off runbook? A: Only when the asset's code changes. The sign-off is a watermark for "works in sandbox as of this date."

Q: What does the suffix "a" mean on order numbers like 25a, 49a, 51a? A: These assets were added after the initial numbering pass. The "a" suffix slots them between their neighbours without renumbering everything. They are full runbooks, not optional extras.


Next Steps

  1. FIRST: Complete Phase 0 → client-onboarding/01-azure-cloud-setup.md
  2. Start Phase 1 (D1 is offline, ~15 min). Phases 1–4 need no cloud at all.
  3. After Phase 5 (X1 + X2 sandbox live), all cloud phases unlock.
  4. Update sign-off as you go — fill the sign-off block in each runbook file.
  5. After each session, update docs/context/06-project-state.md.
  6. When all 73 assets are complete, update CLAUDE.md § Machine State and commit.


Part 2: Operational Runbooks

These are live-operation playbooks — used during real incidents, DR events, change windows, client offboarding, privacy requests, and team exercises. They are not test/sign-off runbooks.


Incident Response

Index: incident/README.md

Five incident classes, each following Identification → Containment → Eradication → Recovery → Post-Incident (PICERL).

Runbook Trigger
incident/compromise.md Suspicious login, PIM alert, MFA fatigue, credential compromise
incident/data-leak.md DLP alert, abnormal egress, exposed SAS URL, GitHub secret scan hit
incident/ddos.md Volumetric (L3/4) or application-layer (L7) DDoS against Azure Front Door / WAF
incident/ransomware.md Defender alert for malware, encrypted VM/share, lateral spread
incident/vendor-breach.md Third-party vendor breach disclosure affecting SnowOps OIDC / API keys

Tabletop simulations for each of the five classes are in Part 2 § Tabletop Exercises.


Disaster Recovery

Index: dr/README.md

DR estate: L1 (Azure Backup), L2 (Cross-Region Replication), L4 (Restore Drill), L3 (templates). RTO/RPO targets by environment are defined in the DR README.

Runbook When to use
dr/dr-plan-template.md Master DR plan template — fill in for each client / workload
dr/scenario-region-failover.md Planned or forced failover to secondary region (SQL failover group + blob + edge routing)
dr/scenario-full-region-loss.md Worst-case: entire primary region unavailable; rebuild from IaC in secondary
dr/scenario-sql-failover.md SQL-specific failover group promotion (planned zero-loss or forced with data-loss path)
dr/scenario-data-restore.md Point-in-time data restore from L1 vaults (VM, Azure Files, AKS, blob)

Change Management

Index: change/README.md

Two approval paths: normal CAB pre-approval and emergency break-glass with retrospective review.

Runbook When to use
change/emergency-change.md Expedited change (R3) bypassing CAB when delay would cause unacceptable harm; retrospective required within 5 business days

Client Offboarding

Index: offboarding/README.md

Eight-phase playbook for winding down a SnowOps engagement: evidence freeze, knowledge transfer, identity teardown, repo hand-back, state/secrets transfer, cost/monitoring reassignment, optional decommission, and final attestation.

Runbook When to use
offboarding/client-offboarding.md Full W4 offboarding playbook — start here when an engagement ends

Privacy & DSAR

Index: privacy/README.md

GDPR (30-day) and CCPA (45-day) data-subject request workflows.

Runbook When to use
privacy/dsar-workflow.md Data-subject access, deletion, or portability request — intake to response
privacy/dsar-record.template.md Blank DSAR record template to fill in per request

Tabletop Exercises

Index: tabletop/README.md

Discussion-based rehearsals, 1:1 with the five K1 incident classes. Run quarterly for prod, twice-yearly for staging. Each session follows the facilitation guide.

Runbook Maps to
tabletop/facilitation-guide.md How to facilitate: prep, ground rules, timeboxing, inject-reveal, rubric scoring
tabletop/scenario-account-compromise.md incident/compromise.md
tabletop/scenario-data-exfiltration.md incident/data-leak.md
tabletop/scenario-ddos.md incident/ddos.md
tabletop/scenario-ransomware.md incident/ransomware.md
tabletop/scenario-vendor-breach.md incident/vendor-breach.md
tabletop/after-action-template.md After-action report template (fill in after each exercise)
tabletop/tabletop-template.md Blank scenario template for creating new tabletop exercises

Document version: 2.0 Sync with: CLAUDE.md (§ 0. Session Handoff), docs/context/06-project-state.md, docs/context/09-testing-dod.md