Callaudio in de duurzame opnamepipeline (#2529) #2596

Merged
brenno merged 1 commit from feat/call-recording-pipeline-2529 into main 2026-10-26 21:46:28 +00:00
Owner

Samenvatting

Koppelt de callaudiobron uit #2527 aan de bestaande duurzame opnamepipeline (#2516/#2517). Wat de gebruiker startte was een losse brokkenteller; nu is CallAudioCaptureSource een echte CaptureSource onder RecordingManager — staging, schijfcontrole, crashherstel en de bewaarflow komen gratis mee.

  • CallAudioCaptureSource faalt gesloten als de sessie geen callAudio.wholeCall claimt (probe/start op hetzelfde feit)
  • Tick-mixer (20 ms, callAudioTickBytes): één afspeelbare 16 kHz-monomix + WAV per bron + sources.json-provenance; gemute/starvende bronnen leveren stilte, de tijdlijn loopt door
  • Pacing/starving via package:clock (deterministisch testbaar); snapshot-iteratie tegen concurrente bron-insert
  • Consent via RecordingConsent.participantNoticeAcknowledged — callAudio staat nu in de andermans-stemmen-lijst
  • Upload-hek onveranderd: forwardedChunks is en blijft een poort-teller; echte forwarding is #2530
  • stopAll met eerlijke redenen: userStop/moduleDisabled/sourceLost; de duurzame file wordt altijd netjes afgerond
  • Web: mix + manifest als mem:-assets in WebAssetStore (gebudgetteerd, geen per-bron kopieën)

Bewijs

  • 11 nieuwe unittests voor mixer/staging/provenance (incl. interleaved bronnen, starving, sourceLost-bewaring)
  • 10 widgettests op het opnamepad (consent, upload-hek, module-uit, banner, mislukte claim)
  • make check groen: format, analyse, conventies, 14764 tests, coverage 86.5%, per-file floor, package-tests, 81 goldens

Test plan

  • unittests mixer
  • widgettests opnameflow
  • make check

Generated with Devin

## Samenvatting Koppelt de callaudiobron uit #2527 aan de bestaande duurzame opnamepipeline (#2516/#2517). Wat de gebruiker startte was een losse brokkenteller; nu is `CallAudioCaptureSource` een echte `CaptureSource` onder `RecordingManager` — staging, schijfcontrole, crashherstel en de bewaarflow komen gratis mee. - `CallAudioCaptureSource` faalt gesloten als de sessie geen `callAudio.wholeCall` claimt (`probe`/`start` op hetzelfde feit) - Tick-mixer (20 ms, `callAudioTickBytes`): één afspeelbare 16 kHz-monomix + WAV per bron + `sources.json`-provenance; gemute/starvende bronnen leveren stilte, de tijdlijn loopt door - Pacing/starving via `package:clock` (deterministisch testbaar); snapshot-iteratie tegen concurrente bron-insert - Consent via `RecordingConsent.participantNoticeAcknowledged` — `callAudio` staat nu in de andermans-stemmen-lijst - Upload-hek onveranderd: `forwardedChunks` is en blijft een poort-teller; echte forwarding is #2530 - `stopAll` met eerlijke redenen: `userStop`/`moduleDisabled`/`sourceLost`; de duurzame file wordt altijd netjes afgerond - Web: mix + manifest als `mem:`-assets in `WebAssetStore` (gebudgetteerd, geen per-bron kopieën) ## Bewijs - 11 nieuwe unittests voor mixer/staging/provenance (incl. interleaved bronnen, starving, sourceLost-bewaring) - 10 widgettests op het opnamepad (consent, upload-hek, module-uit, banner, mislukte claim) - `make check` groen: format, analyse, conventies, 14764 tests, coverage 86.5%, per-file floor, package-tests, 81 goldens #### Test plan - [x] unittests mixer - [x] widgettests opnameflow - [x] make check Generated with [Devin](https://devin.ai)
De callaudiobron uit #2527 leverde alleen een brokkenteller — wat de
gebruiker startte was geen opname maar een live-stroom die bij stoppen
verdween. Deze change koppelt hem aan dezelfde begrensde pipeline als de
microfoonopname: CallAudioCaptureSource is een CaptureSource die via
RecordingManager staged, op schijfruimte controleert en na een crash
herstelt.

De sessie schrijft één afspeelbare 16 kHz-monomix plus een WAV per bron
en sources.json als provenance. Een tick-mixer (20 ms) vult gaten van
een gemute of weggevallen bron met stilte zodat de tijdlijn doorloopt;
pacing en starving meten tegen package:clock zodat tests de klok
zetten. Bij bronverlies blijft wat er staat bewaard — sourceLost, niet
een stil afgekapte staart.

De meldingsplicht loopt door het bestaande consent-contract:
participantNoticeAcknowledged is verplicht voor callAudio omdat de
opname per constructie andermans stemmen vastlegt. Upload-toestemming
blijft een aparte beslissing: zonder 'm blijft forwardedChunks op nul.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit d809a5b019 into main 2026-10-26 21:46:28 +00:00
Sign in to join this conversation.
No description provided.