feat: support compiling and running Portless - #95
Open
jimmyhmiller wants to merge 3 commits into
Open
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
jimmyhmiller
marked this pull request as draft
August 6, 2026 16:45
jimmyhmiller
force-pushed
the
jimmym/portless-support
branch
from
August 6, 2026 16:56
ab4d74c to
33f3439
Compare
jimmyhmiller
force-pushed
the
jimmym/portless-support
branch
from
August 6, 2026 19:20
33f3439 to
d3972e5
Compare
jimmyhmiller
marked this pull request as ready for review
August 6, 2026 19:43
ctate
approved these changes
Aug 10, 2026
What we did: - Add the compiler and runtime support required to build the real Portless CLI as a fully static native binary and run its proxy, alias, framework, parallel-registration, and process-cleanup workflows without Node. - Support Portless's dual HTTP/1.1 and HTTP/2 secure-server graph, including ALPN dispatch, shared request/connect listeners, HTTP/2 CONNECT responses, enableConnectProtocol settings, req.stream access, session errors, and the required ownership and lifecycle handling. - Lower Portless's indexed absence probes, strict indexed comparisons, optional chains, server options, and container patterns. Preserve Node-style self-reexecution and correctly frame forwarded chunked responses. - Add focused corpus and server differentials plus an isolated-copy acceptance harness that builds and exercises the pinned Portless checkout in plain and sanitized modes without modifying the external checkout. - Validate the static binary against Portless's official e2e suite: all 13 files and 16 tests pass. What we decided was out of scope: - Broader HTTP/2 client policy, lifecycle compatibility, protocol validation, listener overloads, and unrelated HTTP/2 completeness. - General runtime-optional soundness beyond the Portless paths. Making that mechanism generally sound requires function-scoped tracking so reused local IDs cannot leak optional state between functions, assignment-aware tracking so writing a definitely present value clears hidden undefined state, and correct preservation across generators, modules, and finally blocks. That larger cross-cutting change remains a dedicated follow-up. - Removing the self-reexecution heuristic's inherent ambiguity. A direct invocation whose first user argument canonically names the executable is currently treated as Node's repeated script slot and collapsed. An explicit native reexec marker can address that in future work.
jimmyhmiller
force-pushed
the
jimmym/portless-support
branch
from
August 11, 2026 18:32
493f8fb to
83ed329
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What we did
enableConnectProtocolsettings,req.streamaccess, session errors, and the required ownership and lifecycle handling.Validation
pnpm --filter @scriptc/compiler buildd42c741in plain and sanitized modeslibSystem, with no Node or JavaScript engine dependencyThe sandbox gate could not start because
SCRIPTC_SANDBOX_IMAGEwas unavailable. The documented full local fallback was attempted, but this machine produced unrelated cache-fixture failures and pinned Node24.15.0oracle mismatches under Node24.18.0.What we decided was out of scope
finallyblocks. That larger cross-cutting change remains a dedicated follow-up.