ReviewOS

home-lang/home

Activate HTTP/2 fetch client, adversarial, and lifetime corpus

#183
Closed chris opened this 10 days ago ·
10 days ago

Umbrella: #66

Activate and fully port the byte-identical upstream HTTP/2 fetch cluster without narrowing its protocol, concurrency, malformed-frame, or lifetime coverage.

Primary sources:

  • js/web/fetch/fetch-http2-client.test.ts: 1,961 lines, SHA-256 0e38b8aa88291dac7e6fbb6c0defaec7ef16c47d04faff5237212439d3482b48
  • js/web/fetch/fetch-http2-adversarial.test.ts: 521 lines, SHA-256 caac24d45dc5543f42145d42b3abfcc3714a9fa1eb4cb3a4a8aeba9f5e1fab5b
  • js/web/fetch/fetch-http2-leak.test.ts: 55 lines, SHA-256 feb8db224773c700210c0c598f0f19e4f28876740cc9cc3cac77c36ba00e50e6
  • lifetime fixture: SHA-256 5e1cc55289df8188a0e2cab9927ad0f2dedf486ff51aac5293b012a74776711a
  • lifetime server: SHA-256 0e71d6893f6e61310f3a6eb812977adceccfd67ec1ed32ebf5abf521c6c4284b

Current exact Home baseline:

  • client: 0 passed, 1 failed, 1 unsupported (unsupported module syntax)
  • adversarial: 0 passed, 1 failed, 1 unsupported (unsupported module syntax)
  • seven-scenario lifetime companion: hangs before reporting a result and must be interrupted

Required coverage includes:

  • TLS ALPN and forced/disabled HTTP/2 protocol selection
  • GET/POST and streaming request/response bodies
  • pooled sessions, cold-start coalescing, keepalive, concurrency limits, and multiplexing
  • flow control, WINDOW_UPDATE, frame sizing, and large bodies
  • HPACK header decoding/encoding, cookies, trailers, and dynamic-table reset behavior
  • RST_STREAM, REFUSED_STREAM retry limits, GOAWAY reconnection, abort isolation, and redirects
  • informational responses, content-length validation, and response-on-headers timing
  • malformed/unknown/padded frames, SETTINGS/PING violations, CONTINUATION floods, and header-token validation
  • gzip and all seven ClientSession/Stream lifetime scenarios

Completion requires untouched upstream sources at their full registered counts with zero Home TODOs, failures, or unsupported cases; durable regression coverage; adjacent HTTP/1 and HTTP/3 checks; and the complete home_test gate.

10 days ago

Landed on main in 83c6536d333d027041c3df2534c9f17b03d19597 (feat: activate HTTP/2 fetch corpus).

Final verification:

  • Upstream sources remain byte-identical to ~/Code/bun:
    • client SHA-256 0e38b8aa88291dac7e6fbb6c0defaec7ef16c47d04faff5237212439d3482b48
    • adversarial SHA-256 caac24d45dc5543f42145d42b3abfcc3714a9fa1eb4cb3a4a8aeba9f5e1fab5b
    • lifetime test SHA-256 feb8db224773c700210c0c598f0f19e4f28876740cc9cc3cac77c36ba00e50e6
    • lifetime fixture SHA-256 5e1cc55289df8188a0e2cab9927ad0f2dedf486ff51aac5293b012a74776711a
    • lifetime server SHA-256 0e71d6893f6e61310f3a6eb812977adceccfd67ec1ed32ebf5abf521c6c4284b
  • fetch-http2-client.test.ts: 60 passed / 0 failed / 0 TODO / 0 unsupported
  • fetch-http2-adversarial.test.ts: 15 passed / 0 failed / 0 TODO / 0 unsupported
  • fetch-http2-leak.test.ts: 7 passed / 0 failed / 0 TODO / 0 unsupported
  • Total activated coverage: 82 passed / 0 failed / 0 TODO / 0 unsupported
  • Adjacent HTTP/3 recheck: client 52/52, adversarial 27/27
  • Complete gate: /usr/bin/time -lp ./pantry/.bin/zig build test -Dfilter=home_test --summary failures exited 0 in 1676.72s, peak RSS 6,187,745,280 bytes

The shared harness now covers module lowering for node:tls/node:https, HTTP/2 fetch dispatch, TLS raw-frame validation and protocol error codes, session pooling/coalescing/GOAWAY/RST behavior, streaming request and response lifecycles, gzip, protocol selection, subprocess pipe timing, and all seven lifetime scenarios. A durable regression test pins the untouched source markers and authoritative 60 + 15 + 7 counts.

10 days ago

Completed by 83c6536d333d027041c3df2534c9f17b03d19597 with the full exact and repository-wide evidence above.

Sign in to comment on this issue.