Skip to content

fix: build a headless binary without the browser chrome, and name the TLS provider - #44

Closed
pathscale wants to merge 2 commits into
masterfrom
fix/headless-build-and-tls
Closed

fix: build a headless binary without the browser chrome, and name the TLS provider#44
pathscale wants to merge 2 commits into
masterfrom
fix/headless-build-and-tls

Conversation

@pathscale

Copy link
Copy Markdown
Owner

Two failures with one cause: dropping the committed lockfile removed assumptions these places relied on. Merging this publishes nothing (the release job is separately broken, repaired in the follow-up PR), which is deliberate: it unblocks the fleet's CI now while chuzz still ships exactly one version later.

A headless build built the browser chrome, and took the fleet's QA red

build_frontend ran unconditionally, so cargo build --bin chuzz-headless --no-default-features shelled out to bun run build for assets that binary never links. frontend.rs is its only consumer and is already behind gui.

Without apps/chuzz/frontend/node_modules the build script panicked instead, which is every runner using the headless-host action (it installs the site under test's dependencies and has no reason to install this crate's):

error: script "layouts:local" exited with code 127
error: script "prebuild" exited with code 127

Verified with node_modules moved aside: the headless build finishes, and --bin chuzz-gui still fails there with the error above. That second half is the proof the gate did it rather than something else.

TLS picked its provider by resolution

rustls selects its crypto provider from crate features and panics at the first handshake when the graph enables neither ring nor aws-lc-rs, or both. Features are additive across a graph, so with no lockfile that is not fixed at any point in time: one dependency picking up ring in a later release turns every https:// and wss:// into a panicked worker on the next runner that resolves it.

It was hit on a fresh resolution during QA work on rustls 0.23.43 and went away on re-resolution to 0.23.44. Today's graph enables aws-lc-rs alone, so it is latent rather than reproducible here, which is the problem: nothing holds it there.

It does not present as a browser failure. The socket never opens, Solid halts reactivity on the escaped error, and the page collapses to unnamed nodes, so a QA run reports a broken site.

Both binaries now install a named provider before anything reaches the network. Verified by capturing an https page end to end.

meh added 2 commits September 9, 2026 18:05
`build_frontend` ran unconditionally, so `cargo build --bin chuzz-headless
--no-default-features` shelled out to `bun run build` in
`apps/chuzz/frontend` for assets that binary never links. `frontend.rs` is
the only consumer of the generated module and is already behind `gui`.

On a machine without `apps/chuzz/frontend/node_modules` the build script
panicked instead:

    error: script "layouts:local" exited with code 127
    error: script "prebuild" exited with code 127

That is every runner using the `headless-host` action, which installs the
site under test's dependencies and has no reason to install this crate's, so
the whole fleet's QA went red in the host build step.

Verified both ways with `node_modules` moved aside: the headless build now
finishes, and `--bin chuzz-gui` still fails there with the error above,
which is the proof the gate did it rather than something else.

The helpers move behind the same feature so an unused import does not become
a denied warning.
`rustls` picks its provider from crate features and panics at the first
handshake when the graph enables neither `ring` nor `aws-lc-rs`, or both.
Features are additive across a graph, so which of those holds is an outcome
of resolution rather than a decision anyone made, and with no lockfile it is
not fixed at any point in time: one dependency picking up `ring` in a later
release is enough to turn every `https://` fetch and every `wss://`
connection into a panicked worker on the next runner that resolves it.

It was hit on a fresh resolution during QA work, on `rustls 0.23.43`, and
went away on re-resolution to 0.23.44. Today's graph enables `aws-lc-rs`
alone, so this is latent rather than reproducible here, which is exactly the
problem: nothing holds it there.

The failure does not look like a browser failure. The socket never opens,
Solid halts reactivity on the escaped error, and the page collapses to
unnamed nodes, so a QA run reports a broken site.

Both binaries now install a named provider before anything can reach the
network. Verified by capturing an https page end to end.
@pathscale

Copy link
Copy Markdown
Owner Author

Folded back into #43. One PR per repo; merge order does the rest.

@pathscale pathscale closed this Sep 9, 2026
@pathscale
pathscale deleted the fix/headless-build-and-tls branch September 9, 2026 11:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant