{
  "schema": "sync-audio-session-recovery-v1",
  "reportId": "research-2026-09-19-audio-session-recovery",
  "timestamp": "2026-09-19T14:30:00Z",
  "faultScenarios": [
    {
      "id": "unplug_during_stream",
      "name": "Dynamic Device Hot Unplug",
      "injectedCondition": "Interface disconnected mid-session via gate file removal",
      "daemonResponse": "Worker throws runtime_error; owner.audio_capture destroyed; active counter drops to 0",
      "clientSignal": "SyncUnavailableError (audio_unavailable)",
      "leakObserved": false,
      "recoveryMethod": "Device replugged; refreshSyncAudioDevices() restores inventory; openAudioSource succeeds",
      "status": "PASS"
    },
    {
      "id": "exclusive_contention",
      "name": "Hardware Device Contention",
      "injectedCondition": "Device busy in exclusive mode (audio_busy fixture throws on open)",
      "daemonResponse": "Catches exception in OpenAudioSource; resets capture and slot state; sends audio_unavailable",
      "clientSignal": "SyncUnavailableError (audio_unavailable)",
      "leakObserved": false,
      "recoveryMethod": "Alternative device selected or contention resolved; slot re-open succeeds",
      "status": "PASS"
    },
    {
      "id": "permission_denied",
      "name": "OS Permission / TCC Consent Denial",
      "injectedCondition": "Microphone permission denied (audio_permission_denied fixture throws on open)",
      "daemonResponse": "Returns audio_unavailable; clears connection slot state",
      "clientSignal": "SyncUnavailableError (audio_unavailable); Noisedeck maps to state: 'denied'",
      "leakObserved": false,
      "recoveryMethod": "Permission prompt resolution; non-fatal UI state transition",
      "status": "PASS"
    },
    {
      "id": "transient_read_failure",
      "name": "Hardware Sample-Rate Shift / Read Failure",
      "injectedCondition": "Stream fails on read 3 (audio_fail_after_2 fixture)",
      "daemonResponse": "Worker catches exception; immediately resets capture; active counter drops from 1 to 0",
      "clientSignal": "SyncUnavailableError (audio_unavailable); connected: false; captureState: 'error'",
      "leakObserved": false,
      "recoveryMethod": "CloseAudioSource cleans slot; selection of healthy device seamlessly resumes active capture",
      "status": "PASS"
    }
  ],
  "verificationSuites": {
    "syncCtest": {
      "passed": 22,
      "failed": 0,
      "durationMs": 420
    },
    "syncUnit": {
      "passed": 251,
      "failed": 0,
      "durationMs": 5354
    },
    "syncPackaging": {
      "passed": 15,
      "failed": 0,
      "skipped": 8,
      "durationMs": 9603
    },
    "syncIntegration": {
      "passed": 36,
      "failed": 0,
      "durationMs": 20453
    },
    "syncSoak": {
      "passed": 4,
      "failed": 0,
      "durationMs": 65000
    },
    "noisedeckUnit": {
      "passed": 10,
      "failed": 0,
      "durationMs": 66
    },
    "noisedeckPlaywright": {
      "passed": 8,
      "failed": 0,
      "durationMs": 12400
    },
    "noisemakerJS": {
      "passed": 846,
      "failed": 0,
      "durationMs": 4308
    }
  },
  "memoryProfile": {
    "initialRssKiB": 12416,
    "postFailureRssKiB": 12416,
    "leakRateKiBPerMin": 0.0,
    "activeCapturesAfterFailure": 0,
    "activeCapturesAfterRecovery": 1
  }
}
