HTTPS Client Runtime v1

September 13, 2026 ยท View on GitHub

Status: implemented native-host Rust runtime, source operation and Project-v13 native-C11 client; HOSTED GREEN under the v0.4.0 release baseline. Broader generated-target adapters remain open.

Audience: compiler embedders, runtime contributors, and reviewers.

semaprax::https_client::HttpsClient is an explicitly constructed reusable client for bounded HTTPS GET requests. It accepts only https URLs, disables ambient system-proxy discovery, authenticates TLS through Reqwest's Rustls backend, negotiates HTTP/1.1 or HTTP/2, follows at most ten redirects, retains at most eight idle connections per origin, and publishes a response only when the complete body fits the caller's positive bound of at most 1 MiB.

The response carries the status, negotiated protocol, final URL, headers sorted deterministically by lowercase name (stable, retaining receipt order and duplicate occurrences for the same name โ€“ e.g., ordered Content-Encoding codings and repeated Set-Cookie values remain separate and in received order), and body bytes. Construction and execution use one closed error vocabulary; transport error text and platform errors do not cross the API. Reusing the client reuses the underlying keep-alive pool. There is no global client and no compiler path constructs one implicitly.

The native socket provider separately accepts server-side TLS when an explicit host constructs TcpNetworkProvider::with_tls_configs with both client and server Rustls policies, then calls accept_tls. Accepted TLS streams use the same send, receive, close, and settlement paths as client streams. A provider without server policy fails before TLS acceptance with AuthorityDenied.

Focused evidence covers redirect resolution, keep-alive reuse, declared and streamed body overflow, insecure URL rejection, authenticated client and server TLS over loopback, and settlement:

cargo test --locked -p semaprax --lib https_client::tests::
cargo test --locked -p semaprax --lib network_provider::tcp::tests::

The ignored public_https_endpoint_negotiates_and_returns_a_bounded_response case is an opt-in live public-PKI smoke. It is intentionally outside the deterministic default gate because DNS, routing, and the remote service are not repository-owned inputs. The hosted-green baseline applies to the admitted release corpus; it does not silently select this external-service smoke or relabel a historical loopback observation as public-internet execution.

The additive HTTPS Client I/O v1 profile exposes this runtime as the source-level https_get operation and returns a canonical byte projection accepted by the existing std.http parsers. Its separate native-C11 adapter uses libcurl with compiler-owned Mozilla roots and the same bounded canonical response contract. HTTP/3, server request parsing, live browser Fetch authority, structured async integration, observability, cross-platform libcurl provisioning, and broad target conformance remain open.

HTTPS Client I/O v2 adds bounded POST with explicit destination authorization and fixture v4; it does not change the GET contract or promote its local evidence to hosted support.