feat(browser): persist profiles and validate native UI - #48
Merged
Merged
Conversation
added 6 commits
September 13, 2026 11:32
3.2 removed transport::framed_json with the tokio flavour of the transport. blitz-control-protocol keeps a shim of the same name that bridges the neutral framing over tokio-util compat, so both call sites here use that and the codec on the wire is unchanged. chuzz-control gains the dependency it was reaching through another crate for. blitz-control-protocol moves to a path dependency. The published 0.5.1 predates 3.2 and still imports the removed framed_json, so it cannot compile against the endpoint-libs this tree resolves. The version requirement stays beside the path, so this goes back to a plain registry dep by deleting one key once 0.5.3 ships. worktable moves from the 1.9 beta line to 1.10, which is what is published.
pathscale
force-pushed
the
fix/prebuilt-headless-host
branch
from
September 22, 2026 23:48
db783ad to
a9ba11d
Compare
added 5 commits
September 23, 2026 07:55
cargo tree -p chuzz-control -i tokio no longer matches any package. The control socket is nagoya's, the same way the blitz one is: Addr::path for the address, a FuturesUnordered of connections rather than spawn_local, a Flag for shutdown because Drop is not async, and Once in place of the oneshot the bridge returned. The permission window is closed here too. The directory is 0700 before anything inside it exists, because a socket is created by bind already listening and a mode applied afterwards is always late. The socket keeps 0600 as well. The listener is bound before start returns rather than on the server thread, so a caller that connects the moment it has the path finds something listening. chuzz-inspect drops its tokio runtime for nagoya::block_on: the client owns a reactor of its own, so the binary only has to drive one future to completion. tauri-runtime-blitz is izumo now, so the dependency, the two features that select it and every call site follow the name.
Both named sibling checkouts by path. CI checks out this repository alone, so cargo could not load the workspace and every Rust job failed before building. ^0.5.3 and ^0.4.1 resolve once ps-observability and izumo publish them.
cargo fmt --check failed the fmt job on four files from the chuzz-control change. Formatting only.
ps-blitz, ps-anyrender, blitz-control-protocol, izumo and nagoya were required at a patch floor. No lockfile is tracked, so the newest release resolves anyway; the floor only had to be chased on every release.
The example redirected git sources, including tauri-runtime-blitz, but chuzz takes ps-blitz and izumo from crates.io, so neither table matched anything. It is a crates.io patch now, and izumo points at the renamed checkout.
pathscale
pushed a commit
to pathscale/ps-blitz
that referenced
this pull request
Sep 23, 2026
tauri-runtime-blitz is izumo now. The manual QA job checked it out into .tauri-runtime-blitz, handed it over as TAURI_RUNTIME_BLITZ, and patched a crate of that name; run.sh defaulted to ../tauri-runtime-blitz. All of it is izumo now, and the pins move together to the first revisions that agree: izumo 0.4.1, the chuzz that takes it (pathscale/chuzz#48), and the ps-observability master that ships blitz-control-protocol 0.5.3. Comments that named the old crate say izumo.
The runtime is published as izumo and its repository is pathscale/izumo. Manifest comments, AGENTS.md, the release workflow and two doc comments named the old crate. The two that name a version only ever published under the old name (0.3.6) keep it with "(now izumo)", and AGENTS.md no longer claims the runtime is ^0.1.0.
pathscale
pushed a commit
to pathscale/ps-blitz
that referenced
this pull request
Sep 23, 2026
tauri-runtime-blitz is izumo now. The manual QA job checked it out into .tauri-runtime-blitz, handed it over as TAURI_RUNTIME_BLITZ, and patched a crate of that name; run.sh defaulted to ../tauri-runtime-blitz. All of it is izumo now, and the pins move together to the first revisions that agree: izumo 0.4.1, the chuzz that takes it (pathscale/chuzz#48), and the ps-observability master that ships blitz-control-protocol 0.5.3. Comments that named the old crate say izumo.
pathscale
pushed a commit
to pathscale/ps-blitz
that referenced
this pull request
Sep 23, 2026
tauri-runtime-blitz is izumo now. The manual QA job checked it out into .tauri-runtime-blitz, handed it over as TAURI_RUNTIME_BLITZ, and patched a crate of that name; run.sh defaulted to ../tauri-runtime-blitz. All of it is izumo now, and the pins move together to the first revisions that agree: izumo 0.4.1, the chuzz that takes it (pathscale/chuzz#48), and the ps-observability master that ships blitz-control-protocol 0.5.3. Comments that named the old crate say izumo.
added 7 commits
September 23, 2026 20:31
a_client_gets_an_answer_and_teardown_removes_both_files built the client reactor as a temporary inside the connect call, so it was dropped at the end of that statement, and dropping a Reactor stops the thread that drives its sockets. The request went out and the answer was never read: the test hung for good, and one run had been stuck for twelve hours.
Nothing in chuzz-control uses tokio since the control server moved to nagoya, and client.rs no longer needs OsStrExt; clippy -D warnings rejected the import.
blitz-control-protocol 0.5.3 bridges a request to a runtime-free Once the dispatch loop fills, and takes render events as a Latest; chuzz-headless still handed back a tokio oneshot and a watch channel and did not compile against it. The two integration tests connect with a nagoya client and the neutral framing, which is what the server speaks, instead of tokio and the removed framed_json. A comment that said to drop a path dependency once 0.5.3 was published goes: it is, and there is no path.
chuzz uses new_multi_thread and block_in_place, and the page server uses tokio sockets, but only macros, rt and sync were declared. In the default build tauri and ps-dioxus-native switched the rest on; the headless build has neither, and it stopped compiling. The features are declared where they are used.
The app publishes under Rust's `std::env::temp_dir()`, which on macOS is `$TMPDIR` when set and otherwise the per-user `DARWIN_USER_TEMP_DIR`, never `/tmp`. The runner starts steps with `TMPDIR` unset, so the app wrote under `/var/folders/.../T` while the script watched `/tmp` and reported no descriptor within 20 seconds. The same job's headless test printed the `/var/folders` path. Resolve the directory once and export it so the app, the script and ps-qa agree.
`Collapsible.Content` keeps its content mounted by default, and a CSS rule flattened it with `display: none`. Unmount it instead: the rows come from the store, so reopening loses nothing, and the dead rule goes.
The 14 ghosts were painted aria-hidden icons, which ps-qa 0.7.5 no longer counts, not hidden sections. BrowserHeader.test.tsx pins the display:none rule this removed, so the change is not needed and broke that test. This reverts commit 5bde97e.
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.
Chuzz now keeps one browser profile across documents and restarts: WorkTable persists one ordered RFC cookie-jar snapshot, session cookies remain process-local, HTTP and
document.cookieshare the same jar, public-suffix and secure-prefix rules are enforced, and orderly exits drain queued writes. Synchronous cookie callbacks replace one pending snapshot instead of retaining and writing every intermediate jar during a mutation burst. Wake identifiers keep stale apply commands from consuming a snapshot queued after a flush or close barrier.The browser defaults to a Chrome-compatible identity, exposes the exact identity in Settings, and applies it consistently to HTTP and
navigator.userAgent.The HTTP exchange uses the consumer cookie-provider hook from pathscale/ps-blitz#98, so the same jar receives intermediate redirect and final error-response cookies before later requests are built. The compatibility surface also adds the DOM and browser APIs needed by current applications, coalesces redraws onto the Tauri main queue to avoid resource-completion deadlocks, and uses Nagoya's portable timers while retaining Tokio only at concrete Tauri/network I/O boundaries. The getter-mutation regression discovered by the event integration test is fixed by pathscale/ps-boa#25.
The existing versioned headless-host fix remains the first commit. A Rust-only fixture plus ps-qa inventory/outcome checks drives the signed native bundle in CI and release jobs. Tests launch children with isolated profiles, and repository policy forbids Python and committed lockfiles.
Validation on the current head:
cargo fmt --all -- --checkcargo clippy --no-default-features --features capture,javascript,vello --all-targets -- -D warningsagainst those exact sources^0.4,^0.1Nagoya and^0.7ps-qa rangesbash -n scripts/qa-visible-app.shpassedBefore ps-blitz-net 0.4.10 is published, a fresh registry resolution of the compatible
^0.4range selects 0.4.9, which lacks the consumer cookie-provider API; app, control and headless CI therefore remain expected red. Registry-only CI also requires WorkTable 1.9.0-beta1 and ps-boa 1.0.6. The visible signed-bundle QA remains the release/CI verification path on the macOS runner.