e2e: audio_d2m_enc nightly-red since 08-08 — #25 reaper races the decrypting listener's LiveKit connect under compressed timing #133
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
dark/nether-voicebridge#133
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
audio_d2m_enchas failed 7 of the last 8 nightlies (every run 08-08 → 08-15 except 08-13; runs #306–#320). It is not an audio or E2EE bug: the #25 stale-membership reaper reaps the harness's decrypting listener mid-scenario, because under the compressed profile's 3 sreap_gracethe listener's membership-post → LiveKit-connect latency now loses the race. Same class as thesteal_release_repromotionfix inad53ccd(#127 follow-up / #24), surfacing in a second scenario.Evidence (bridge logs from the artifacts)
Run #320 (08-15):
Run #315 (08-14): identical, margin 82 ms (reaped 08:46:59.148, listener LiveKit connect 08:46:59.230).
Once the anchor leaves Discord, the ghost's publish pump zero-fills — hence the oracle signature, a mid-stream hard cutoff, not degradation:
(Tap B is pre-encryption PCM — the exact audio the ghost feeds LiveKit's frame crypto — which is what rules out the E2EE path.)
fresh_store_rekey, which exercises the samed2m_enc_tap_boracle, scored 8/8 perfect in the same failing runs — the D2M-enc pipeline itself is healthy.Why only the encrypted variant, and why since 08-08
audio_d2m_unencpasses: its plain listener connects fast.MatrixListener::join_decryptingbootstraps Olm before connecting — precisely the extra seconds that lose the 3 s race.Not the #124 recovery cluster
The recovery/displacement scenarios have not failed since v0.3.1 shipped — the 08-08→08-12 co-failures were a separate mgmt/link cluster (502-flap shaped) that cleared on its own after 08-12. The nightly's only standing red is this scenario.
Fix
Per-scenario
[timing]override, exactly like the steal fix: start the bridge-under-test foraudio_d2m_encwithreap_grace_ms = 300000(past scenario runtime; every other key stays compressed). The reaper itself remains covered byreap_releaseunder--profile real.Bridge-side observation (not fixed here)
At 08:48:01.755 the listener's LiveKit participant connected 373 ms after its membership was reaped, and the bridge never reconsidered — a live media participant with no membership just rides the teardown cascade. In prod (45 s grace) this needs a >45 s connect straggler, and Element Call's delayed-events refresh would normally re-post the membership, so this is an edge case — noting it for the #41 refactor rather than fixing now.
Fixed on branch
fix/133-d2m-enc-reaper-race— two commits, because the first fix was disproven live and exposed a second harness bug:0e74e26added thereap_grace_ms = 300000per-scenario override (new full-poolstart_with_timing). Verification run #322 still failed identically — and its bridge log showedresolved reap_grace_ms = 3000while the redacted config artifact said 300000.ada97ed— the real bug:start_inner's render match sent the full-pool non-management path throughgenerate_config(cfg), silently droppingextra_timingfrom the real config while the redacted artifact copy always renders it. The steal scenario's #24 fix only ever worked because it takes theSome(pool_size)arm. The render choice is now a purerender_real_configthreading the override for every non-management arm, with a unit test pinning real/redacted agreement.Verification run #324: PASS. Bridge log shows
resolved reap_grace_ms = 300000, zeroreaped phantomevents,d2m_enc_tap_b8/8 (ncc 1.00 flat), decrypted-listener oracle 7/8 pass. Compare #322/#315/#320:[1.00 … 0.00 0.00]mid-stream cutoffs with the reap in the log every time.Merging before tomorrow's 08:30 nightly keeps the signal clean — master still carries the red.
Merged to master as
0e74e26+ada97ed(fast-forward). Live-verified in run #324 (8/8, zero reaps, resolved reap_grace_ms=300000); tomorrow’s 08:30 nightly is the first scheduled run carrying the fix — the nvb-watch guardrail will post 🌙✅ when it goes green.