Skip to content

build(qa-inspect-host): take the headless feature set - #14

Merged
pathscale merged 6 commits into
masterfrom
chore/ps-blitz-0.4
Sep 6, 2026
Merged

pathscale merged 6 commits into
masterfrom
chore/ps-blitz-0.4

Conversation

@pathscale

Copy link
Copy Markdown
Owner

The host opens no window. It serves a socket, answers Inspect and activates nodes.

Taking tauri-runtime-blitz with default features compiled the Tauri runtime along with it, which on Linux means GTK development headers for a binary that never creates a window — and in fact meant it could not be built on Linux at all, since that crate does not compile there.

default-features = false with agent-control gets the same nine functions and none of the window stack:

cargo tree -p qa-inspect-host --edges normal
0 tauri / gtk / glib / webkit crates

Depends on pathscale/tauri-runtime-blitz#51 publishing, which is where the feature comes from.

Verified with the host built against that branch, driving pathscale/ps-blitz#86's fixture suite: 6/6 groups pass.

meh added 6 commits September 6, 2026 18:06
The host is what gives ps-qa its renderer, so every check any project runs is
judged by whatever engine is pinned here. On 0.3 that engine dispatches a
checkbox's click before the checkbox takes its new value, never dispatches a
click at a control its label was pressed for, and treats a written
`checked="false"` as checked. A controlled toggle therefore reports the wrong
state from first paint and cannot be driven, which is invisible to a check that
asserts the renderer's own toggle rather than the application's reaction.

Pinned at 0.4.3 rather than 0.4: 0.4.2 is a newer engine without those fixes,
and a host on it would keep passing the checks this is meant to make honest.

Verified against that engine built from source: `@pathscale/ui`'s component gate
is 17/17 across switch, checkbox, radio and connection-settings, and 73/74 over
the whole library, the one failure being a Select paint check that fails
identically on the published host.
0.1.8 is on crates.io and the publish workflow returns early for a version it
finds there, so the engine bump lands and every `cargo install` keeps handing
out the old host and the old renderer. That is worse than not bumping at all:
the checks would look updated and judge nothing new.
Two limits that between them stopped a repository from testing its own renderer
with the harness everybody else uses.

`qa-inspect-host` was not a page loader. It read an rsbuild `dist`, pulled the
one external stylesheet and the one external script out of it, and synthesised a
shell with the `<div id="root">` a component harness mounts into. That is the
right shape for a component library and the only shape it accepted: a page
carrying its own markup failed with "the page has no src asset". So a project
testing the engine, or reducing a bug, had to stand up a JavaScript toolchain
before it could assert that a checkbox toggles -- and wrote its own driver
instead, which is how a renderer ends up with two testing stories and one of
them untested. A page with no external script is now served as written.

And `#id` was documented as a selector but could not reach most of what carries
one. The role gate ran first, so only interactive nodes survived to be matched,
and a `<label>` -- generic, with an id, painted and enabled -- could not be
pressed by any spelling. That is not a niche shape: it is how every switch and
styled checkbox on the web is built, the visible thing a person actually hits.
`#id` and `@slot` now skip the gate, because they already name one exact node,
which is the reason `dom_id` is carried at all. A name or `role:name` still goes
through it: those are descriptions rather than identities.
0.5.11 is on crates.io and the publish workflow skips a version it finds there,
so the id selector reaching non-interactive nodes would land and no installed
harness would gain it. Same reason the host is going out as 0.1.9.
`^0.4.3` is a version bump wearing a caret: it forces every consumer to a
version that does not exist yet, and it is not how anything else here is
pinned. `^0.4` resolves what is available and the lockfile decides the rest.

The reason I reached for the patch floor was that 0.4.2 is published and still
has the bugs this is meant to catch, so a host resolving it would keep passing
the checks. That is a lockfile's job, not a manifest's.
The host opens no window: it serves a socket, answers `Inspect` and activates
nodes. Taking `tauri-runtime-blitz` with default features compiled the Tauri
runtime along with it, which on Linux means GTK development headers for a binary
that never creates a window, and on Linux meant it could not be built at all.

`default-features = false` with `agent-control` gets the same nine functions and
none of the window stack.
@pathscale
pathscale merged commit 008f09a into master Sep 6, 2026
4 checks passed
@pathscale
pathscale deleted the chore/ps-blitz-0.4 branch September 6, 2026 16:20
pathscale pushed a commit that referenced this pull request Sep 6, 2026
The headless feature set landed in #14 without a version bump, and 0.1.9 was
already on crates.io from #13, so the publish workflow skipped it and the change
reached nobody. `cargo install qa-inspect-host` still gets a host that compiles
the Tauri runtime, which is why the consumer that needs it fails on Linux:

    The system library `glib-2.0` required by crate `glib-sys` was not found
    error: failed to compile `qa-inspect-host v0.1.9`

Exactly the hole the review of the engine change described, walked into one
merge later.
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