GameDay Is Here: From Individual Tests to Compliance Programmes

Part 14 of the Tumult series. ← Part 13: Load During Chaos
Running a single chaos experiment proves a single point of resilience. Your database recovers from a connection kill. Good. But an auditor asking about DORA Article 24 compliance doesn’t want to see one test — they want to see a testing programme: multiple scenarios, measured outcomes, recovery validation, and evidence that you do this regularly.
That’s what GameDay delivers.
What Is a GameDay?
A GameDay is a coordinated campaign of experiments:
GameDay: Q2 PostgreSQL Resilience Programme
├── Experiment 1: Connection kill under load
├── Experiment 2: Container pause (5s total outage)
├── Experiment 3: CPU stress injection
├── Experiment 4: Memory stress injection
└── Shared load: k6 running throughout
All experiments run in sequence under a shared load generator. They share a single OTel parent trace (resilience.gameday). Their results aggregate into a resilience score that maps directly to compliance articles.
Creating a GameDay
tumult gameday create q2-postgres-resilience \
--load k6 --load-script examples/k6/smoke-test.js \
--experiments gamedays/pg-connection-kill.toon,gamedays/pg-container-pause.toon,gamedays/pg-cpu-stress.toon,gamedays/pg-mem-stress.toon \
--framework dora
This scaffolds a .gameday.toon file:
title: Q2 PostgreSQL Resilience Programme
regulatory:
frameworks[2]: DORA, NIS2
requirements[3]:
- id: DORA-Art24
description: ICT resilience testing programme
evidence: Quarterly GameDay with 4 fault scenarios under shared load
- id: DORA-Art25
description: Scenario-based testing of ICT tools and systems
- id: DORA-Art11
description: Response and recovery
load:
tool: k6
script: examples/k6/smoke-test.js
vus: 5
duration_s: 60.0
experiments[4]:
- path: gamedays/pg-connection-kill.toon
compliance_maps[1]: DORA-Art25
- path: gamedays/pg-container-pause.toon
compliance_maps[2]: DORA-Art25, DORA-Art11
- path: gamedays/pg-cpu-stress.toon
compliance_maps[1]: DORA-Art25
- path: gamedays/pg-mem-stress.toon
compliance_maps[1]: DORA-Art25
scoring:
pass_threshold: 0.75
mttr_target_s: 30.0
recovery_required: true
Each experiment is mapped to specific compliance articles. The scoring config sets thresholds for what constitutes compliance.
Running the GameDay
tumult gameday run q2-postgres-resilience.gameday.toon
The runner:
- Starts k6 as shared background load
- Runs each experiment in sequence
- Stops load, collects metrics
- Computes resilience score
- Writes a GameDay journal
The Resilience Score
The score is a weighted aggregate of four components:
| Component | Weight | What it measures |
|---|---|---|
| Pass rate | 30% | Fraction of experiments that completed |
| Recovery compliance | 25% | MTTR within target, full recovery achieved |
| Load impact tolerance | 25% | Error rate during load (lower = better) |
| Compliance coverage | 20% | Mapped articles with passing experiments |
Score interpretation:
- 0.90+ → COMPLIANT
- 0.75-0.89 → PARTIAL
- < 0.75 → NON-COMPLIANT
This isn’t an arbitrary number. Each component maps to something an auditor can verify:
- “Did your tests pass?” → pass rate
- “Did the system recover within your declared RTO?” → recovery compliance
- “Did your users experience degradation?” → load impact tolerance
- “Which regulatory articles have you tested?” → compliance coverage
Why This Matters for DORA
The Digital Operational Resilience Act (EU 2022/2554) entered into force on 17 January 2025. It requires financial entities to:
- Article 24: Establish an ICT resilience testing programme
- Article 25: Execute scenario-based tests including performance and end-to-end testing
- Article 26: Carry out threat-led penetration testing (TLPT) for systemically important entities
- Article 11: Test response and recovery procedures with measured recovery times
A GameDay maps directly to these requirements:
| DORA Article | GameDay Evidence |
|---|---|
| Art. 24 — Testing programme | The GameDay itself — structured, repeatable, documented |
| Art. 25 — Scenario testing | Each experiment is a fault scenario with measured outcome |
| Art. 11 — Response & recovery | MTTR measured per experiment, aggregate recovery score |
The journal is the audit artifact. The resilience score is the compliance metric. The OTel trace is the forensic evidence.
NIS2 Coverage
The same GameDay also covers NIS2 (EU 2022/2555):
| NIS2 Article | GameDay Evidence |
|---|---|
| Art. 21(2)(c) — Business continuity | Recovery validated after each fault |
| Art. 21(2)(f) — Effectiveness assessment | Baseline vs chaos comparison via load metrics |
One GameDay, two regulations, documented in a single journal.
Real Results
The Q2 PostgreSQL Resilience Programme ran against live Docker infrastructure via the MCP HTTP/SSE transport — the same way an external agent or CI pipeline would run it:
GameDay: Q2 PostgreSQL Resilience Programme
Status: COMPLIANT
Duration: 29.2s
Resilience Score: 1.00
#1 [PASS] PostgreSQL connection kill under load (2197ms)
#2 [PASS] PostgreSQL container pause — total unavailability (7402ms)
#3 [PASS] PostgreSQL CPU stress — resource pressure (9331ms)
#4 [PASS] PostgreSQL memory stress — resource pressure (9305ms)
Score breakdown:
Pass rate: 1.00
Recovery: 1.00
Load impact: 1.00
Compliance: 1.00
Four fault scenarios. 29 seconds. Full compliance evidence. The analytics store accumulates all results across runs — 67 experiments, 244 activities queryable via SQL.
Pipeline
The demo exercises the full agent-to-compliance pipeline:
Agent (HTTP client)
│ POST http://localhost:3100/mcp
▼
tumult-mcp (14 MCP tools, session management)
│
▼
tumult-core (5-phase lifecycle, GameDay orchestrator)
│
├── tumult-db-postgres plugin → docker exec → PostgreSQL
├── tumult-containers plugin → docker pause/unpause
├── tumult-stress plugin → stress-ng CPU/memory
└── tumult-analytics → DuckDB → resilience score → compliance map
Try It
One command runs the entire demo — starts infrastructure, connects via MCP, runs the GameDay, analyzes results, shows compliance mapping:
./scripts/gameday-demo.sh
Or step by step:
# Install
curl -sSL https://raw.githubusercontent.com/mwigge/tumult/main/install.sh | sh
# Start targets
./start.sh infra
# Run GameDay
tumult gameday run gamedays/q2-postgres-resilience.gameday.toon
# Analyze
tumult gameday analyze gamedays/q2-postgres-resilience.gameday.toon
# SQL analytics
tumult analyze --all --query "SELECT title, status, duration_ms FROM experiments"
Or use the pre-built Docker images (no Rust needed):
docker pull ghcr.io/mwigge/tumult:latest
docker pull ghcr.io/mwigge/tumult-mcp:latest
The resilience score tells the story. The journal is the evidence. The compliance mapping is the bridge between engineering and regulation.
Try Tumult at tumult.rs
Next in the series: Part 15 — The Road Ahead →