Skip to content

Take blitz-dom's defaults, quarantine the one test that needs a face - #52

Merged
pathscale merged 2 commits into
masterfrom
fix/no-system-fonts-headless
Sep 6, 2026
Merged

pathscale merged 2 commits into
masterfrom
fix/no-system-fonts-headless

Conversation

@pathscale

@pathscale pathscale commented Sep 6, 2026 •

Copy link
Copy Markdown
Owner

system-fonts was enabled on blitz-script unconditionally. It reaches fontique/system and, on Linux only, yeslogic-fontconfig-sys, so a headless consumer that reads no font catalogue still got a system library in its graph, and only on that target, which is why cargo tree on macOS showed nothing and the failure appeared as a missing apt package on a Linux runner.

That opt-in is gone, and it stays gone. Nothing in this crate asks the machine for a font, windowed or not.

Two things this PR previously got wrong

It hand-copied blitz-dom's default feature list. default-features = false plus the six remaining defaults retyped to drop the seventh. ps-observability#15 had grown the identical list independently, which is what showed the problem was never here: system-fonts should not have been a default of blitz-dom at all, and a consumer copying that default list is a copy that goes stale the next time a default is added. Fixed at the source in pathscale/ps-blitz#87, so this is back to plain ^0.4 defaults.

It deleted a test that was not a font test. setting_a_node_value_replaces_text_and_dispatches_input covers this crate's own plumbing: set_agent_node_value must replace a field's contents, not append to them. Only the observation needs a face, because select-all is over shaped text. So it is restored and gated to target_os = "macos", where a face comes from Core Text and costs no system library. On Linux it compiles out.

The runtime = [...] reformat is reverted; it changed nothing.

Verified

macOS, --all-features: 37 passed, 0 failed (36 before, plus the restored test).

Every path by which this crate reached yeslogic-fontconfig-sys went through blitz-dom's default system-fonts and nothing else:

yeslogic-fontconfig-sys <- fontique <- parley <- ps-blitz-dom
   <- ps-blitz-html / ps-blitz-script / ps-blitz-shell / ps-blitz-paint <- tauri-runtime-blitz

ps-blitz 0.4.4 removes that default, so all of them clear at once. ps-blitz#87 also adds a cargo deny gate so it cannot come back.

Requires ps-blitz 0.4.4

Merge order: ps-blitz#87 first, then this. Releases 0.3.4.

@pathscale
pathscale force-pushed the fix/no-system-fonts-headless branch from 7e1978d to efc42ab Compare September 6, 2026 17:06
`runtime` turned on `blitz-script/system-fonts`, and on Linux that resolves
to `yeslogic-fontconfig-sys` -- a system library, so every consumer of the
windowed runtime needed fontconfig development headers to build. The headless
surface inherited it through feature unification and needed it too, for a
binary that opens no window and reads no font catalogue.

Nothing in this crate asks the machine for a font. A consumer that wants the
system catalogue turns it on where it renders.

One test went with it. `setting_a_node_value_replaces_text_and_dispatches_input`
asserted that `set_value` replaces the field's contents rather than appending
to them, which is true only once the text has shaped: with no face parley
measures nothing, select-all selects nothing, and the typed string lands after
the old one. That made the assertion a test of the font stack, not of this
crate's value plumbing -- and the only way to keep it green was to install
fonts for it. Value entry is covered where it can be observed rendering, by
the `fixture-text-entry` check in ps-observability.

Linux graph, normal edges, `yeslogic-fontconfig-sys`: 0 with
`--no-default-features --features agent-control`, 0 by default, 0 with
`--all-features`.
@pathscale
pathscale force-pushed the fix/no-system-fonts-headless branch from efc42ab to eea153b Compare September 6, 2026 17:11
@pathscale pathscale changed the title build: system fonts belong to the window runtime build: system fonts belong to nobody here Sep 6, 2026
…a face

This branch removed `system-fonts` from `blitz-script`, which was right, and
then did two things that were not.

It set `default-features = false` on `blitz-dom` and retyped the six remaining
defaults by hand to drop the seventh. ps-observability's release branch had
grown the identical list independently, which is what showed the problem was
never here: `system-fonts` should not have been a default of `blitz-dom` at
all, and a consumer copying that default list is a copy that goes stale the
next time a default is added. Fixed at the source in pathscale/ps-blitz#87, so
this goes back to plain `^0.4` defaults. Dropping the explicit opt-in on
`blitz-script` stays, because that is this crate's own decision to make.

And it deleted `setting_a_node_value_replaces_text_and_dispatches_input` on the
grounds that it was really a test of the font stack. It is not. The plumbing it
covers is this crate's: `set_agent_node_value` must replace a field's contents
rather than append to them. Only the observation needs a face, because select-
all is over shaped text. So it is back, gated to macOS, where a face comes from
Core Text and costs no system library. On Linux it compiles out and this crate
reaches none.

The `runtime = [...]` reformat is reverted; it changed nothing.

macOS, --all-features: 37 passed, 0 failed. Requires ps-blitz 0.4.4.
@pathscale pathscale changed the title build: system fonts belong to nobody here Take blitz-dom's defaults, quarantine the one test that needs a face Sep 6, 2026
@pathscale
pathscale merged commit c6286da into master Sep 6, 2026
3 checks passed
@pathscale
pathscale deleted the fix/no-system-fonts-headless branch September 6, 2026 19:28
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