Files
amethyst/nestsClient/plans/2026-05-07-t16-closure-roadmap.md
T
Claude 32065901c8 docs(nests): T16 closure roadmap + 4 follow-up plans
Plans the path from 'infra shipped' to 'full coverage with
correct behaviours'. Five new plan docs in nestsClient/plans/:

1. 2026-05-07-t16-closure-roadmap.md — index + priority order.
   Three sequential steps + one independent track.

2. 2026-05-07-moq-relay-routing-investigation.md (Priority 1)
   — root-cause the moq-relay 0.10.x per-broadcast subscribe-
   routing race. Step-by-step: capture relay-side trace, write
   minimum reproducer, file upstream OR bump moq-relay version.
   Smoking gun + hypotheses already in place from the
   late-join-flake investigation; this plan turns that into
   actionable next steps.

3. 2026-05-07-tighten-cross-stack-assertions.md (Priority 2)
   — once the routing race is closed, replace the five soft-
   pass scenarios in BrowserInteropTest with hard floors.
   Lists each scenario, its current soft-pass behavior, and
   the proposed hard threshold.

4. 2026-05-07-cross-stack-interop-ci-gating.md (Priority 3)
   — re-add the hang-interop + browser-interop GitHub Actions
   jobs that were dropped in 6829ab727 / b94737de7. Includes
   the exact YAML to restore and a 10/10 sweep stability bar
   before merge.

5. 2026-05-07-framespergroup-production-rerun.md (independent
   track) — re-run the HCgOY two-phone field tests against
   current nostrnests production at multiple framesPerGroup
   values to settle whether the test pin (5) and production
   default (50) can converge.

Estimated total: 2.5-3.5 days of focused work to fully close
T16. After these four: I7 post-reconnect cliff and I12 GOAWAY
remain open as genuinely upstream-territory items, tracked in
their existing investigation docs.
2026-05-07 14:36:21 +00:00

4.8 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

Why first. The race is the root cause of every soft-pass and the reason CI isn't wired. Without resolving it, downstream plans mask flake rather than catch regressions.

What lands.

  • Either an upstream moq-relay version bump that closes the bug, OR a documented relay configuration tweak that does.
  • Or, if neither: a filed kixelated/moq issue with reproducer + trace pair, plus a documented decision to keep CI unwired until upstream resolves.

Acceptance bar. 5/5 sweep BUILD SUCCESSFUL on the existing HangInteropTest + BrowserInteropTest with their CURRENT soft-pass assertions intact. (The next step tightens those.)

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

Why second. Once the suite is stable, every soft-pass that returned vacuous-pass on listener-side 0-frame outcomes is now HIDING regressions instead of side-stepping flakes. Replace each with a hard floor.

What lands.

  • Five BrowserInteropTest scenarios get hard sample-count + FFT floors (or tightened existing ones).
  • Gap matrix updated to reflect hard-pass coverage.

Acceptance bar. 5/5 sweep AGAIN, this time with hard assertions. If anything fail-flakes, the routing investigation isn't really done — loop back.

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

Why third. Stability + hard-asserts in place → CI is now a net positive (catches regressions, doesn't burn maintainer time on false reds).

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.

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