{
"schema": "openagents.staging-resilience-matrix.v1",
"revision": 2,
"failure_injections": [
{"id": "failure-001", "title": "Provider timeout, malformed event, and premature stream closure recover without a false completion"},
{"id": "failure-002", "title": "PostgreSQL restart and temporary connection exhaustion recover without data loss"},
{"id": "failure-003", "title": "PubSub interruption preserves durable truth and LiveView reconnects"},
{"id": "failure-004", "title": "Turn, voice, work, semantic, builder, and deployer process termination follows each recovery contract"},
{"id": "failure-005", "title": "Computer disconnect during a job preserves committed evidence and permits bounded recovery"},
{"id": "failure-006", "title": "Artifact-store unavailability and corrupt cache fail closed and reconverge"},
{"id": "failure-007", "title": "One unreachable fleet node does not expand authority or produce a partial live deployment"},
{"id": "failure-008", "title": "Node membership change during deployment preserves transaction and readiness invariants"},
{"id": "failure-009", "title": "Build sidecar crash and stale response cannot publish an invalid artifact"},
{"id": "failure-010", "title": "Browser navigation and tab destruction release microphone and voice resources"},
{"id": "failure-011", "title": "Recording upload failure and late final chunk remain generation-fenced and recoverable"}
],
"soak": {
"required_duration_seconds": 900,
"metric_sample_cadence_seconds": 60,
"minimum_metric_samples": 15,
"canaries": [
{"id": "status", "cadence_seconds": 60, "minimum_passes": 15},
{"id": "typed", "cadence_seconds": 300, "minimum_passes": 3},
{"id": "memory", "cadence_seconds": 300, "minimum_passes": 3},
{"id": "tracker", "cadence_seconds": 300, "minimum_passes": 3},
{"id": "git", "cadence_seconds": 300, "minimum_passes": 3},
{"id": "voice", "cadence_seconds": 900, "minimum_passes": 1}
]
}
}