docs(quic-interop): record overnight agent roadmap + post-fix predictions

Three agents in flight in worktrees:
  A — versionnegotiation testcase + configurable initial-version writer
  B — qlog observer infrastructure (QlogObserver interface in :quic,
      JSON-NDJSON writer in :quic-interop, hooks at packet/key/recovery
      sites, reads $QLOGDIR the runner already sets)
  C — multiplexing channel-saturation fix (consume server's peer uni
      streams in Http3GetClient — RFC 9114 §6.2 says clients MUST
      process incoming control + QPACK streams)

Plan doc now also captures the latest test matrix (pre-acfe815e1
multi-ALPN-offer fix) and the predictions for the next run.

https://claude.ai/code/session_01HcvfQq1ttPV9PkRoJb4nyT
This commit is contained in:
Claude
2026-05-07 00:13:04 +00:00
parent acfe815e1f
commit 70355898b3
@@ -114,13 +114,37 @@ Inspect `./logs/<run>/client_qlog/*.qlog` in qvis when something breaks.
RFC 9000 §17.2.5 + RFC 9001 §5.8 implementation. `ipv6` should "just work"
via JDK's `DatagramChannel` v6 support; runner-validated when run.
## Validated against (as of 2026-05-07)
## Validated against (as of 2026-05-07 evening)
| Peer | handshake | chacha20 | transfer | http3 | multiplexing | transferloss | handshakeloss |
|---|---|---|---|---|---|---|---|
| aioquic | ✓ | ✓ | ✓ | ✓ | (was ✕, fixed in this push) | ✓ | server-not-supported |
| picoquic | ✓ | ✓ | ✓ | ✓ | (untested in last run) | (untested) | (untested) |
| quic-go | (was ✕, fixed in this push) | (was ✕) | (was ✕) | (was ✕, multi-stream-bug) | (was ✕) | (untested) | (untested) |
Latest run results before pushing the multi-ALPN fix `acfe815e1`:
| Peer | handshake | chacha20 | transfer | http3 | multiplexing |
|---|---|---|---|---|---|
| aioquic | ✓ | ✓ | ✓ | ✓ | ✕ (channel-saturation, agent C investigating) |
| picoquic | ✕ (alpn=hq-interop unsupported, fixed in `acfe815e1`) | ✕ | ✕ | ✓ | ✕ |
| quic-go | (untested post-fix) | | | | |
After `acfe815e1`'s multi-ALPN offer, predictions:
- picoquic returns to 4/4 (server picks `h3`, we run Http3GetClient).
- quic-go: handshake / chacha20 / transfer / http3 should green (server picks `hq-interop` for non-h3 tests).
- aioquic: still 4/5; multiplexing held back by channel-saturation bug.
## Overnight agents in flight (2026-05-07)
- **Agent A — `versionnegotiation`**: configurable initial QUIC version on
`QuicConnectionWriter` + VN-packet parser dispatch + retry-with-V1
state machine on `QuicConnection`. Adds the testcase to dispatch.
- **Agent B — qlog observer infrastructure**: `QlogObserver` interface in
`:quic`, NoOp default, JSON-NDJSON `QlogWriter` in `:quic-interop`, hooks
at packet-sent/received/dropped, key-updated, conn-started/closed,
loss-detected, PTO-fired, transport-params, ALPN, version. Reads
`$QLOGDIR` env var the runner already sets.
- **Agent C — multiplexing channel-saturation**: most likely root cause is
that `Http3GetClient` doesn't consume the server's incoming uni
streams (control + QPACK encoder + QPACK decoder); their per-stream
channels fill, parser tears down with INTERNAL_ERROR. Agent verifies
hypothesis, implements the spec-correct fix (consume + drain peer uni
streams), adds regression test.
## Explicitly unsupported testcases (return 127, runner skips)