Skip to content

feat: guard h3 + honest ADR update on the flare reactor driver gap - #38

Merged
johnnyhuy merged 1 commit into
mainfrom
feat/h3-guard
Aug 9, 2026
Merged

feat: guard h3 + honest ADR update on the flare reactor driver gap#38
johnnyhuy merged 1 commit into
mainfrom
feat/h3-guard

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Summary

Investigating HTTP/3 wiring in opengateway (the natural completion of ADR-003 #6 once #35 landed the rustls cdylib build and #36 pulled in bind_with_http3 via the flare pin bump) hit a real gap: at the pinned flare commit (edf3f22), the reactor's main serve() does not call tick_http3_once / pump_http3_handler_once, which the source itself labels "Test-only entry point". Binding via bind_with_http3 accepts the UDP socket but never processes datagrams, so the reactor-integration step is the actual missing piece.

Rather than ship a broken-looking path (bind UDP, accept nothing, look like an h3 server that just isn't getting traffic), this commit:

The honest engineering move: don't ship a half-broken h3 path. The fix is either upstream in flare (the reactor-loop work that consumes recvfromrecv_datagram and emits send_to) or a self-contained UDP-loop driver in opengateway that gets upstreamed. Either way, it's real work and belongs as a follow-up PR, not a quiet bug.

Consequences

Testing

  • uv run pytest — 42 passed
  • make mojo-test — 8 passed
  • ruff + mypy clean

While wiring HTTP/3 into opengateway (PR #36's flare pin bump
pulled in bind_with_http3 + QuicServerConfig), the integration ran
into a real gap: at the pinned flare commit (edf3f22) the reactor's
main ``serve()`` does not call ``tick_http3_once`` /
``pump_http3_handler_once``, which the source itself labels "Test-only
entry point". Binding via ``bind_with_http3`` accepts the UDP socket
but never processes datagrams.

So the work to land a working h3 path is a real reactor-loop
integration (select on the UDP fd, feed into recv_datagram, dispatch
via pump_http3_handler_once, drain egress via send_to). That's
upstream flare work, not opengateway's scope.

Rather than ship a broken-looking path that binds a UDP socket and
accepts nothing, this commit:

- Reverts the bind_with_http3 wiring from main.mojo (it didn't
  drive any packets).
- Adds a clear guard: if ``HTTP3_ENABLED=1`` is set, raise an Error
  explaining the reactor driver isn't integrated and pointing at the
  pinned commit's serve() for the gap.
- Updates ADR-003 #6 and #4 to reflect the actual status: TLS is
  fully shipped via the reactor; h3 is blocked on the missing
  reactor integration (not the rustls build or cert path, both of
  which landed).

Verified: 42 pytest, 8 Mojo router tests, ruff + mypy clean.

Co-authored-by: opencode-agent <noreply@opencode.ai>
@johnnyhuy
johnnyhuy merged commit 5b96b70 into main Aug 9, 2026
11 checks passed
@johnnyhuy
johnnyhuy deleted the feat/h3-guard branch August 9, 2026 04:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant