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

124 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 cliff**
`2026-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`