Child of #427 and tracked by #66.
The exact public session-state blockers are fixed locally in 893f3a17222124b2642adf852f76ad948980e084, but the broader HTTP/2 lifecycle still needs one dedicated parity tranche.
Scope:
- Tear active streams down before session
closecallbacks on destroy/error paths. - Preserve close-listener registration order;
stream.close(callback)must register the callback rather than invoke it manually. - Keep
close()anddestroy()public flags distinct across modeled client, modeled server, raw client/server, and handshake sessions. - Let graceful close drain active streams, including servers without a stream handler, instead of canceling them.
- Make repeated close/destroy calls no-ops with immutable first reset code and once-only
_destroy, error, end, and close events. - Queue the initial and pre-connect SETTINGS submissions FIFO. Apply
localSettingsonly on the corresponding ACK, deliver peerremoteSettingsfirst, and keeppendingSettingsAcktrue until the queue is empty. - Preserve maxOutstandingSettings fail-closed behavior and exactly-once peer/local errors.
Regression gate:
- Focused stream/session ordering, raw/modelled parity, graceful drain, destroy identity, and SETTINGS FIFO tests.
- Existing Home
bootstrap HTTP2cumulative suite remains green. - The six-way exact cases in
test/js/node/http2/node-http2.test.jspass for these behaviors.
This issue alone does not remove the #427 FAIL marker; that still requires the maintained full file at exactly 287 passed / 0 failed / 0 todo / 0 unsupported.