Summary
The largest single bucket in the node:http/https runtime-fail tail (#2132): 89 tests where Perry exits non-zero with no stderr output while Node passes. These need per-test triage — they don't share one captured error, but the test shapes cluster strongly around server lifecycle / response framing / keep-alive / outgoing-message, which suggests a common failure mode: the server hangs or the connection never frames a complete response, the client times out, and the process exits non-zero silently.
Hypothesis to check first: much of this may cascade from #4903 (server.address() undefined → listen(0) never yields a real port → client connects nowhere → hang → non-zero exit). Re-run this bucket after #4903 lands before triaging individually.
Sub-themes by test name:
- outgoing-message framing/state (
test-http-outgoing-*: buffer, end-cork, finish, writableFinished, properties, first-chunk-encoding)
- keep-alive lifecycle (
test-http-keep-alive-*, test-http-server-keep-alive-*)
- client timeout / abort (
test-http-client-timeout-*, test-http-abort-*, test-http-client-race*)
- server client-error / malformed-request handling (
test-http-server-client-error.js, test-http-malformed-request.js, *-smuggling*)
- https timeout/keepalive (
test-https-timeout-server*.js, test-https-keep-alive-drop-requests.js, test-https-server-*)
Failing tests (89)
test-http-1.0.js test-http-outgoing-buffer.js
test-http-abort-client.js test-http-outgoing-end-cork.js
test-http-abort-queued.js test-http-outgoing-end-multiple.js
test-http-agent-remove.js test-http-outgoing-finish-writable.js
test-http-agent-reuse-drained-socket-only.js test-http-outgoing-finish.js
test-http-agent-timeout.js test-http-outgoing-finished.js
test-http-allow-content-length-304.js test-http-outgoing-first-chunk-singlebyte-encoding.js
test-http-automatic-headers.js test-http-outgoing-properties.js
test-http-blank-header.js test-http-outgoing-writableFinished.js
test-http-buffer-sanity.js test-http-pipeline-assertionerror-finish.js
test-http-chunk-extensions-limit.js test-http-request-dont-override-options.js
test-http-chunked-304.js test-http-request-smuggling-content-length.js
test-http-chunked-smuggling.js test-http-res-write-end-dont-take-array.js
test-http-client-agent-end-close-event.js test-http-response-setheaders.js
test-http-client-error-rawbytes.js test-http-server-client-error.js
test-http-client-input-function.js test-http-server-consumed-timeout.js
test-http-client-race-2.js test-http-server-delete-parser.js
test-http-client-race.js test-http-server-keep-alive-defaults.js
test-http-client-reject-chunked-with-content-length.js test-http-server-keep-alive-max-requests-null.js
test-http-client-response-timeout.js test-http-server-keep-alive-timeout.js
test-http-client-timeout-event.js test-http-server-multiple-client-error.js
test-http-client-timeout-with-data.js test-http-server-options-incoming-message.js
test-http-connect.js test-http-server-options-server-response.js
test-http-createConnection.js test-http-server-stale-close.js
test-http-date-header.js test-http-server-unconsume.js
test-http-destroyed-socket-write2.js test-http-server-write-after-end.js
test-http-dummy-characters-smuggling.js test-http-set-timeout-server.js
test-http-dump-req-when-res-ends.js test-http-socket-error-listeners.js
test-http-early-hints.js test-http-status-message.js
test-http-eof-on-connect.js test-http-timeout-client-warning.js
test-http-expect-continue.js test-http-upgrade-server2.js
test-http-flush-headers.js test-http-wget.js
test-http-flush-response-headers.js test-http-write-callbacks.js
test-http-full-response.js test-http.js
test-http-headers-distinct-proto.js test-https-agent-abort-controller.js
test-http-highwatermark.js test-https-agent-unref-socket.js
test-http-information-processing.js test-https-drain.js
test-http-invalid-te.js test-https-keep-alive-drop-requests.js
test-http-keep-alive-drop-requests.js test-https-max-header-size-per-stream.js
test-http-keep-alive-max-requests.js test-https-selfsigned-no-keycertsign-no-crash.js
test-http-keep-alive-pipeline-max-requests.js test-https-server-close-all.js
test-http-malformed-request.js test-https-server-options-incoming-message.js
test-http-max-header-size.js test-https-server-options-server-response.js
test-https-set-timeout-server.js
test-https-timeout-server-2.js
test-https-timeout-server.js
Acceptance
Triage after #4903/#4905/#4906 land (many should clear). For the remainder, capture the actual non-zero exit cause (add stderr) and split into framing/keep-alive/timeout sub-tickets.
Part of #2132. Measured via scripts/node_core_subset.py --api http https vs pinned Node v22 corpus.
Summary
The largest single bucket in the node:http/https runtime-fail tail (#2132): 89 tests where Perry exits non-zero with no stderr output while Node passes. These need per-test triage — they don't share one captured error, but the test shapes cluster strongly around server lifecycle / response framing / keep-alive / outgoing-message, which suggests a common failure mode: the server hangs or the connection never frames a complete response, the client times out, and the process exits non-zero silently.
Hypothesis to check first: much of this may cascade from #4903 (
server.address()undefined →listen(0)never yields a real port → client connects nowhere → hang → non-zero exit). Re-run this bucket after #4903 lands before triaging individually.Sub-themes by test name:
test-http-outgoing-*: buffer, end-cork, finish, writableFinished, properties, first-chunk-encoding)test-http-keep-alive-*,test-http-server-keep-alive-*)test-http-client-timeout-*,test-http-abort-*,test-http-client-race*)test-http-server-client-error.js,test-http-malformed-request.js,*-smuggling*)test-https-timeout-server*.js,test-https-keep-alive-drop-requests.js,test-https-server-*)Failing tests (89)
Acceptance
Triage after #4903/#4905/#4906 land (many should clear). For the remainder, capture the actual non-zero exit cause (add stderr) and split into framing/keep-alive/timeout sub-tickets.
Part of #2132. Measured via
scripts/node_core_subset.py --api http httpsvs pinned Node v22 corpus.