{
  "schema_version": 1,
  "scenario_version": "1.0",
  "scenarios": [
    {
      "id": "TRN-001",
      "category": "transport",
      "title": "Complete the physical BLE, GATT, MTU, Wi-Fi Aware, and failover matrix",
      "participants": ["android-low", "android-current", "android-aware"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral", "wifi-aware"],
      "evidence": ["matrix-check-count", "mtu-case-count", "failure-injection-count", "shutdown-check-count"]
    },
    {
      "id": "AND-001",
      "category": "android-platform",
      "title": "Complete API-level, manufacturer, permission-revocation, and background gates",
      "participants": ["android-low", "android-current", "android-aware"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral", "wifi-aware"],
      "evidence": ["api-level-count", "manufacturer-count", "permission-revocation-count", "background-case-count"]
    },
    {
      "id": "A2A-001",
      "category": "android-to-android",
      "title": "Discover, connect, announce, disconnect, and reconnect",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["connection-transitions", "packet-correlation-count", "failure-reasons"]
    },
    {
      "id": "A2A-002",
      "category": "android-to-android",
      "title": "Exchange public and private messages in both directions",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["message-counts", "packet-correlation-count"]
    },
    {
      "id": "A2A-003",
      "category": "android-to-android",
      "title": "Advance delivery and read receipts",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["receipt-transitions"]
    },
    {
      "id": "A2A-004",
      "category": "android-to-android",
      "title": "Transfer image, audio, and generic files at multiple sizes",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["fixture-digests", "transfer-progress", "delivery-digests"]
    },
    {
      "id": "A2A-005",
      "category": "android-to-android",
      "title": "Relay across three Android devices",
      "participants": ["android-low", "android-current", "android-relay"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["route-transitions", "ttl-values", "packet-correlation-count"]
    },
    {
      "id": "A2A-006",
      "category": "android-to-android",
      "title": "Partition and recover store-and-forward delivery",
      "participants": ["android-low", "android-current", "android-relay"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["partition-window", "queue-counts", "delivery-counts"]
    },
    {
      "id": "A2A-007",
      "category": "android-to-android",
      "title": "Toggle Bluetooth during active transfers",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["radio-transitions", "transfer-terminal-state"]
    },
    {
      "id": "A2A-008",
      "category": "android-to-android",
      "title": "Lock screens and background both apps during mesh operation",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["lifecycle-transitions", "service-state", "delivery-counts"]
    },
    {
      "id": "A2A-009",
      "category": "android-to-android",
      "title": "Kill and recreate one process",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["process-generation", "restored-state", "reconnect-count"]
    },
    {
      "id": "A2A-010",
      "category": "android-to-android",
      "title": "Resolve simultaneous and duplicate links",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["candidate-links", "canonical-link-count"]
    },
    {
      "id": "A2A-011",
      "category": "android-to-android",
      "title": "Fail over through Wi-Fi Aware",
      "participants": ["android-current", "android-aware"],
      "required": true,
      "capabilities": ["wifi-aware"],
      "evidence": ["transport-selection", "failover-window", "delivery-counts"]
    },
    {
      "id": "XCL-001",
      "category": "cross-client",
      "title": "Current Android interoperates with current iOS",
      "participants": ["android-current", "ios-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["client-versions", "payload-counts"]
    },
    {
      "id": "XCL-002",
      "category": "cross-client",
      "title": "Current rewrite contracts interoperate with the last supported Android",
      "participants": ["android-current", "android-legacy"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["client-versions", "payload-counts"]
    },
    {
      "id": "XCL-003",
      "category": "cross-client",
      "title": "Legacy announcements without capabilities remain compatible",
      "participants": ["android-current", "android-legacy"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["announcement-version", "peer-state"]
    },
    {
      "id": "XCL-004",
      "category": "cross-client",
      "title": "Older clients safely ignore current capability announcements",
      "participants": ["android-current", "android-legacy"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["announcement-version", "peer-state"]
    },
    {
      "id": "XCL-005",
      "category": "cross-client",
      "title": "Canonical private media and prerelease decode-only alias interoperate",
      "participants": ["android-current", "ios-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["wire-type", "delivery-digests", "downgrade-decision"]
    },
    {
      "id": "XCL-006",
      "category": "cross-client",
      "title": "Golden vectors match across implementations",
      "participants": ["android-current", "ios-current", "android-legacy"],
      "required": true,
      "capabilities": [],
      "evidence": ["vector-manifest-digest", "comparison-counts"]
    },
    {
      "id": "XCL-007",
      "category": "cross-client",
      "title": "Malformed and unauthenticated inputs are rejected consistently",
      "participants": ["android-current", "ios-current", "android-legacy"],
      "required": true,
      "capabilities": [],
      "evidence": ["corpus-digest", "rejection-counts", "crash-count"]
    },
    {
      "id": "XCL-008",
      "category": "cross-client",
      "title": "Nostr fallback messages and receipts interoperate",
      "participants": ["android-current", "ios-current"],
      "required": true,
      "capabilities": ["local-relay", "tor"],
      "evidence": ["relay-fixture", "event-id-count", "receipt-counts"]
    },
    {
      "id": "END-001",
      "category": "endurance",
      "title": "Multi-hour discovery, connect, and disconnect soak",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "minimum_duration_minutes": 240,
      "evidence": ["duration-minutes", "connection-counts", "failure-counts"]
    },
    {
      "id": "END-002",
      "category": "endurance",
      "title": "Repeated large-transfer and cancellation cycles",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "minimum_cycles": 50,
      "evidence": ["cycle-count", "delivery-counts", "cancellation-counts"]
    },
    {
      "id": "END-003",
      "category": "endurance",
      "title": "Resource growth remains bounded",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["memory-samples", "thread-samples", "fd-samples", "wakelock-samples", "battery-samples"]
    },
    {
      "id": "END-004",
      "category": "endurance",
      "title": "Foreground service survives with screens off",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["service-state", "screen-state", "delivery-counts"]
    },
    {
      "id": "END-005",
      "category": "endurance",
      "title": "Nostr survives network and Tor availability changes",
      "participants": ["android-current"],
      "required": true,
      "capabilities": ["local-relay", "tor"],
      "evidence": ["network-transitions", "tor-transitions", "receipt-counts"]
    },
    {
      "id": "END-006",
      "category": "endurance",
      "title": "Shutdown releases radios, sockets, jobs, and wake locks",
      "participants": ["android-low", "android-current"],
      "required": true,
      "capabilities": ["ble-central", "ble-peripheral"],
      "evidence": ["resource-terminal-state", "late-callback-count"]
    }
  ]
}
