Found while fixing #10466 (PR #10667) and explicitly scoped out of it: res.pipe() has a codegen gap that exists
in BOTH auto-optimize and PERRY_NO_AUTO_OPTIMIZE=1 modes. It is neither caused nor fixed by that PR.
#10466 was about client dynamic-dispatch fallbacks being compiled out of the prebuilt archive under
PERRY_NO_AUTO_OPTIMIZE=1. This is different: a genuine codegen defect in res.pipe() itself, mode-independent.
Worth knowing about #10466's repro while you are here
The agent that fixed #10466 found its literal reproduction now passes on current main in both modes —
unrelated static-typing work landed since the issue was filed. The still-live gap only appears with
dynamically-dispatched (any-typed) access, which is exactly what an npm package looks like after TypeScript
type stripping, and therefore the shape that actually matters for perry.compilePackages.
That is a general lesson for this campaign's issue backlog: an issue's hand-written repro can go stale while the
underlying defect remains live in the dynamically-typed shape real packages produce. When an issue "no longer
reproduces", re-check it with any-typed access before closing it.
Context
This came out of work toward deleting Perry's hand-written Rust reimplementations of npm packages in favour of
compiling the real ones. res.pipe() is on the path for HTTP client packages that stream responses.
Found while fixing #10466 (PR #10667) and explicitly scoped out of it:
res.pipe()has a codegen gap that existsin BOTH auto-optimize and
PERRY_NO_AUTO_OPTIMIZE=1modes. It is neither caused nor fixed by that PR.#10466 was about client dynamic-dispatch fallbacks being compiled out of the prebuilt archive under
PERRY_NO_AUTO_OPTIMIZE=1. This is different: a genuine codegen defect inres.pipe()itself, mode-independent.Worth knowing about #10466's repro while you are here
The agent that fixed #10466 found its literal reproduction now passes on current
mainin both modes —unrelated static-typing work landed since the issue was filed. The still-live gap only appears with
dynamically-dispatched (
any-typed) access, which is exactly what an npm package looks like after TypeScripttype stripping, and therefore the shape that actually matters for
perry.compilePackages.That is a general lesson for this campaign's issue backlog: an issue's hand-written repro can go stale while the
underlying defect remains live in the dynamically-typed shape real packages produce. When an issue "no longer
reproduces", re-check it with
any-typed access before closing it.Context
This came out of work toward deleting Perry's hand-written Rust reimplementations of npm packages in favour of
compiling the real ones.
res.pipe()is on the path for HTTP client packages that stream responses.