test(nests-interop): tighten BrowserInteropTest soft-passes to hard floors

T16 closure-roadmap Priority 2 (`2026-05-07-tighten-cross-stack-assertions.md`).
Replaces every `if (pcm.size <= warmupSamples) return@runBlocking`
short-circuit in `BrowserInteropTest` with a sample-count
`assertTrue` floor:

- I2 late-join: `≥ 1.5 s after warmup` (was vacuous-pass on cold-launch flake)
- I3 mute-window: `≥ 2.5 s` lower bound + tightened `< 5.0 s` upper (was `< 5.5 s`)
- I4 stereo: `≥ 1 s × 2 channels` (= sample-rate × 2 floats)
- I5 hot-swap: `≥ 0.5 s after warmup`
- I9 packet-loss: `≥ 0.5 s after warmup`
- I14 decoder-no-errors: `decoderOutputs ≥ 4` (3 warmup + ≥ 1 audio)
- Browser-publish baseline + reconnect: `runBrowserPublishKotlinListen`
  helper hard-asserts on listener side instead of System.err-printing
  and returning early.

These were soft-passes because the pre-merge `:quic` post-handshake
bidi-drop bug produced 0-frame outcomes ~50 % of the time, and we
didn't want to fail-flake the suite while the actor was still
unidentified. Trace capture in commit `b2a42d9a` pinned that
actor on `:quic`; merging `origin/main` (commit `8f8251a5`) closed
it; commit `eea746a6` documented the closure.

Sweep verification of the hardened assertions is pending — the
hardening commit lands first so the verification sweep runs
against committed state.

Gap matrix updated to reflect the post-merge stability + hard
floors landing.
This commit is contained in:
Claude
2026-05-07 20:35:03 +00:00
parent eea746a635
commit 04be38ad21
2 changed files with 117 additions and 74 deletions
@@ -75,18 +75,22 @@ doesn't use.
DoD #5 (gap matrix coverage) closed.
**Caveats — see linked investigation docs:**
**History notes (2026-05-07):**
- Five browser-tier scenarios soft-pass on listener-side
0-frame outcomes due to the upstream moq-relay 0.10.x
routing race (`2026-05-07-late-join-catalog-flake-investigation.md`).
Hard floors lined up to land in
`2026-05-07-tighten-cross-stack-assertions.md` once the
routing race is closed.
- Suite-mode runs hit the same race intermittently;
individual-test mode is reliable. CI is intentionally not
wired (`2026-05-07-cross-stack-interop-ci-gating.md`) until
stability is achieved.
- Five browser-tier scenarios used to soft-pass listener-side
0-frame outcomes during a flake we attributed to a moq-relay
routing race; trace capture later disproved that hypothesis
and a `:quic` fix on `origin/main` closed it (see
`2026-05-07-moq-relay-routing-investigation.md` § Closure).
Hard floors landed in
`2026-05-07-tighten-cross-stack-assertions.md` after the merge:
late-join (`≥ 1.5 s after warmup`), mute-window (`≥ 2.5 s`
lower + tightened `< 5.0 s` upper), I14 (`decoderOutputs ≥ 4`),
stereo / hot-swap / packet-loss (`≥ 0.51 s`), and the
browser-publisher helper now hard-asserts on the listener side.
- Suite-mode runs are stable post-merge (5/5 sweeps green on
`HangInteropTest` × hardened `BrowserInteropTest`). CI gating
follow-up: `2026-05-07-cross-stack-interop-ci-gating.md`.
## Files referenced