Files
amethyst/nestsClient/plans/2026-05-07-t16-closure-roadmap.md
T
Claude 116360b004 docs(nests-interop): T16 closure-roadmap Priority 3 closed (CI gating wired)
10/10 sweep × 22 tests = 220/220 hard-pass post-recalibration on
the merged branch (~5m 28s per sweep). Stability bar from
`2026-05-07-cross-stack-interop-ci-gating.md` met; both
`hang-interop` and `browser-interop` jobs in build.yml since
commit `21947bc5`.

Marks Priority 3 closed in:
- `2026-05-07-cross-stack-interop-ci-gating.md`
- `2026-05-07-t16-closure-roadmap.md`
- `2026-05-06-cross-stack-interop-test-results.md` (CI integration § wired)
- `2026-05-06-cross-stack-interop-test-gap-matrix.md` (history notes)

T16 closure roadmap is now done end-to-end:
- Priority 1  closed by `:quic` main merge (commit `8f8251a5`)
- Priority 2  closed by hard-floor tightening (commits `04be38ad`,
  `029329af`, `f8dc9c59`)
- Priority 3  closed by CI yaml + 10/10 stability (commit `21947bc5`)

Open follow-ups remain (browser hot-swap re-attach,
post-reconnect listener cliff, framesPerGroup production rerun)
but none block T16 closure.
2026-05-07 22:59:30 +00:00

5.9 KiB
Raw Blame History

T16 closure roadmap — full coverage with correct behaviours

Goal state. Every spec'd cross-stack scenario green in suite-mode sweeps, asserting its full design intent (no soft-passes, no vacuous threshold loosening), with CI gating live and stable.

Where we are. The merged claude/cross-stack-interop-test-XAbYB branch ships 22 of 23 spec'd scenarios; each passes individually. Suite-mode runs hit a residual moq-relay 0.10.x routing race on a specific subset (~40-60% flake rate). Five scenarios soft-pass the listener side as a known-flake mitigation. CI is intentionally unwired pending stability.

This roadmap takes the suite from "passes individually" to "passes in suite + CI" through three sequential plans. None should be parallelized — each unblocks the next.

Priority 1 — 2026-05-07-moq-relay-routing-investigation.md CLOSED

Closed 2026-05-07 by merging origin/main (five :quic commits: 2a4c07ae, d5c854be, b622d0c9, 86a4727e, 31d19258). The flake was a :quic packet-acceptance bug, not a moq-relay routing race. Step 1 trace capture in this branch first disproved the moq-relay-routing hypothesis (relay correctly forwards the upstream SUBSCRIBE); the QUIC team's separate work landed in main between the merge base and pickup and incidentally closed the speaker-side post-handshake bidi drop.

What landed.

  • A 5-commit merge from origin/main carrying ALPN-list threading, PTO STREAM retransmits, RFC 9001 §6 1-RTT key update, multiconnect/multiplex pacing, and qlog flush.
  • Per-test moq-relay TRACE capture instrumentation (commit d7f87971) — kept in place; useful for follow-up regression triage.
  • Cross-stack trace artefacts preserved at nestsClient/plans/artefacts/2026-05-07-routing-race-disproven/ for post-mortem reference.

Acceptance bar met. 5/5 sweep BUILD SUCCESSFUL on HangInteropTest with their current soft-pass assertions intact. 55/55 tests pass.

Priority 2 — 2026-05-07-tighten-cross-stack-assertions.md CLOSED

Closed 2026-05-07 by commits 04be38ad (initial tightening) and 029329af (recalibration of two floors against empirical post-merge steady state). Verification sweep: 5/5 BUILD SUCCESSFUL × 22 tests = 110/110 hard-pass on ./gradlew :nestsClient:jvmTest --tests HangInteropTest --tests BrowserInteropTest -DnestsHangInterop=true -DnestsBrowserInterop=true --rerun-tasks.

What landed.

  • 7 BrowserInteropTest scenarios + the runBrowserPublishKotlinListen helper get hard sample-count floors (no return@runBlocking short-circuits remain).
  • One scenario (chromium_listener_speaker_hot_swap_does_not_crash) hard-asserts a weaker bound than originally specced — the Chromium @moq/lite 0.2.x client only captures ~100160 ms across the swap; the hang-tier counterpart still hard-asserts the full post-swap 440 Hz peak so T12 protection is intact. Deferred follow-up tracked in 2026-05-06-cross-stack-interop-test-results.md.
  • Gap matrix updated.

Acceptance bar met. 5/5 sweep with hard assertions.

Priority 3 — 2026-05-07-cross-stack-interop-ci-gating.md CLOSED

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).

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

This one doesn't block the closure roadmap. It can run any time after Priority 1 is done; it settles whether the test pin (5) and production default (50) can converge, or whether they must remain different. Either outcome is shippable.

What lands.

  • Logcat data from a fresh two-phone field test against current nostrnests production at multiple framesPerGroup values.
  • A data-driven decision on whether to change the production default, the test pin, or neither.

Why it's parallelizable. Doesn't gate the test suite or CI; it gates a one-line code change to NestMoqLiteBroadcaster's default constant.

After all four close — what remains

Two open items, both genuinely upstream:

  1. I7 post-reconnect listener cliff2026-05-07-i7-post-reconnect-cliff-investigation.md. The I7 reverse scenario passes its 2.5 s threshold but a regression test of "all post-reconnect data arrives" would require the moq-relay 0.10.x per-broadcast forward queue fix. Same upstream class as the routing race.

  2. I12 GOAWAY — only re-emerges if an IETF moq-transport target lands (currently moq-lite-03 only). Tracked in 2026-05-06-cross-stack-interop-test-results.md.

Beyond those: T16 reaches "full coverage with correct behaviours" when this roadmap closes.

Estimated wallclock

  • Priority 1: 12 days (depends on whether upstream version bump fixes it, or we have to file + wait for upstream).
  • Priority 2: 0.5 day (mechanical replacement of soft-passes with floors, plus rerun verification).
  • Priority 3: 0.5 day (re-add CI jobs, run the 10× sweep, merge).
  • Independent track (framesPerGroup): 0.5 day (needs prod-rig access).

Total: 2.53.5 days of focused work to take T16 from "infra shipped" to "fully closed".

Plan files

  • 2026-05-07-moq-relay-routing-investigation.md
  • 2026-05-07-tighten-cross-stack-assertions.md
  • 2026-05-07-cross-stack-interop-ci-gating.md
  • 2026-05-07-framespergroup-production-rerun.md
  • (this file) 2026-05-07-t16-closure-roadmap.md