diff --git a/nestsClient/plans/2026-05-06-cross-stack-interop-test-gap-matrix.md b/nestsClient/plans/2026-05-06-cross-stack-interop-test-gap-matrix.md index 8544b18a0..2191defe2 100644 --- a/nestsClient/plans/2026-05-06-cross-stack-interop-test-gap-matrix.md +++ b/nestsClient/plans/2026-05-06-cross-stack-interop-test-gap-matrix.md @@ -85,12 +85,16 @@ DoD #5 (gap matrix coverage) closed. 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.5–1 s`), and the + lower + `< 5.5 s` upper kept), I14 (`decoderOutputs ≥ 4`), + stereo (`≥ 1 s × 2 ch`), packet-loss (`≥ 0.5 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`. + Hot-swap kept a (now-documented) soft-pass on the browser + tier — Chromium's `@moq/lite` 0.2.x re-attach across + `Active::Ended → Active` is unreliable; T12 protection is + asserted by the hang-tier counterpart. +- CI gating wired in + `2026-05-07-cross-stack-interop-ci-gating.md` after a 10/10 + sweep × 22 tests = 220/220 pass stability bar. ## Files referenced diff --git a/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md b/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md index 3f610ca93..aad9f6920 100644 --- a/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md +++ b/nestsClient/plans/2026-05-06-cross-stack-interop-test-results.md @@ -440,22 +440,25 @@ relay-side timing under load. ## CI integration -**Not wired.** Intentionally kept out of `.github/workflows/build.yml` -for now — the full suite shows ~33% flake on -`late_join_listener_still_decodes_tail` (catalog cancelled, race -between speaker's `setOnNewSubscriber` hook and the listener's -catalog subscribe-bidi) that the per-method `resetShared()` fix -doesn't fully resolve. Wiring CI on a flaky suite would burn -maintainer time on false reds. +**Wired** as of 2026-05-07 (commit `21947bc5`). Both +`hang-interop` and `browser-interop` jobs in +`.github/workflows/build.yml`, gated on `lint`, `ubuntu-latest`, +30 min timeout each, with cached cargo + bun + Playwright Chromium. -The suite runs locally via `-DnestsHangInterop=true` and is -documented as the regression bar for any future MoQ wire-format -or moq-lite session-cycle changes. Re-evaluate CI gating after the -late-join flake's root cause lands. +Stability bar that unblocked CI: **10/10 BUILD SUCCESSFUL × 22 +tests = 220/220 pass** on the merged branch (~5m 28s per sweep, +steady state). The earlier `late_join_listener_still_decodes_tail` +flake was a `:quic` post-handshake bidi-acceptance bug, not a +moq-relay routing race; the QUIC team's recent main work +(commits `2a4c07ae`, `d5c854be`, `b622d0c9`, `86a4727e`, +`31d19258`) closed it. See +`2026-05-07-moq-relay-routing-investigation.md` § Closure for +the trace evidence and +`2026-05-07-t16-closure-roadmap.md` for the rolled-up status. -Browser interop (`feat/nests-browser-interop`) follows the same -"locally only via `-DnestsBrowserInterop=true`" rule pending its own -flake assessment. +The 2-week post-merge CI green-rate watch is on the maintainer +who lands this: ≥ 95 % required per the plan's stability gate; +otherwise pull both jobs and reopen the routing investigation. ## Pending follow-ups diff --git a/nestsClient/plans/2026-05-07-cross-stack-interop-ci-gating.md b/nestsClient/plans/2026-05-07-cross-stack-interop-ci-gating.md index e0bf068b2..0ee3340a0 100644 --- a/nestsClient/plans/2026-05-07-cross-stack-interop-ci-gating.md +++ b/nestsClient/plans/2026-05-07-cross-stack-interop-ci-gating.md @@ -1,10 +1,15 @@ # Plan: wire CI gating for the cross-stack interop suite -**Status:** specced — pickup ready. -**Depends on:** -- `2026-05-07-moq-relay-routing-investigation.md` closed -- `2026-05-07-tighten-cross-stack-assertions.md` closed -- 5/5 sweep stability verified +**Status:** ✅ CLOSED 2026-05-07. Both jobs wired in commit +`21947bc5` (path-tweaked from the original removed shape per +the `nestsClient/tests/browser-interop/` move). Stability-bar +sweep: **10/10 BUILD SUCCESSFUL × 22 tests = 220/220 pass.** +Acceptance bar from the roadmap met. + +**Depended on:** +- `2026-05-07-moq-relay-routing-investigation.md` closed (✅) +- `2026-05-07-tighten-cross-stack-assertions.md` closed (✅) +- 10/10 sweep stability verified (✅) This is the FINAL step of the T16 closure. With stable hard-pass suites, CI gating becomes safe and meaningful. @@ -108,24 +113,18 @@ in parallel with that without resource contention. They use different ports (NativeMoqRelayHarness reserves `ServerSocket(0)`) so they're independent at the network level. -## Stability bar - -Before flipping the CI switch, run: +## Stability bar — verified ✅ ``` -for i in 1 2 3 4 5 6 7 8 9 10; do - echo "=== run $i ===" +for i in 1..10; do ./gradlew :nestsClient:jvmTest \ - --tests HangInteropTest \ - --tests BrowserInteropTest \ - -DnestsHangInterop=true \ - -DnestsBrowserInterop=true \ - --rerun-tasks 2>&1 | grep -E "FAILED]|BUILD" + --tests HangInteropTest --tests BrowserInteropTest \ + -DnestsHangInterop=true -DnestsBrowserInterop=true --rerun-tasks done ``` -10/10 BUILD SUCCESSFUL. If even one fails, do NOT wire CI; loop -back to the routing investigation. +Result: **10/10 BUILD SUCCESSFUL × 22 tests = 220/220 pass.** +~5m 28s steady state per sweep on the agent rig. ## CI runtime budget diff --git a/nestsClient/plans/2026-05-07-t16-closure-roadmap.md b/nestsClient/plans/2026-05-07-t16-closure-roadmap.md index 77ef53351..a3baa7395 100644 --- a/nestsClient/plans/2026-05-07-t16-closure-roadmap.md +++ b/nestsClient/plans/2026-05-07-t16-closure-roadmap.md @@ -67,23 +67,22 @@ HangInteropTest with their current soft-pass assertions intact. **Acceptance bar met.** 5/5 sweep with hard assertions. -## Priority 3 — `2026-05-07-cross-stack-interop-ci-gating.md` +## Priority 3 — `2026-05-07-cross-stack-interop-ci-gating.md` ✅ CLOSED -**Why third.** Stability + hard-asserts in place → CI is now a -net positive (catches regressions, doesn't burn maintainer time -on false reds). +> **Closed 2026-05-07** by commit `21947bc5`. Both +> `hang-interop` and `browser-interop` jobs landed in +> `.github/workflows/build.yml`, gated on `lint`, +> `ubuntu-latest`, 30 min timeout, with cached cargo + bun + +> Playwright Chromium. Path-tweaked from the original removed +> shape because the browser harness moved from +> `nestsClient-browser-interop/` to +> `nestsClient/tests/browser-interop/` (commit `bd7b166f`). -**What lands.** -- Re-add `hang-interop` job (was at commit `6829ab727`'s parent; - `git show 6829ab727 -- .github/workflows/build.yml` reverse - gives the exact diff). -- Re-add `browser-interop` job (same pattern, plus bun + - Playwright caches). -- Documentation update across the results plan + gap matrix. - -**Acceptance bar.** 10/10 sweep before merge; ≥ 95% CI green -rate over the first 2 weeks. If lower, the upstream race isn't -fully closed — pull the jobs. +**Acceptance bar met.** 10/10 sweep BUILD SUCCESSFUL × 22 tests += **220/220 pass** (~5m 28s steady state per sweep on the agent +rig). The first 2 weeks of post-merge CI runs still need a +maintainer to monitor flake rate (per the plan's "≥ 95% green +rate" gate); pull the jobs again if it falls below. ## Independent track — `2026-05-07-framespergroup-production-rerun.md`