Every test that needs a DOM now runs in Rstest browser mode, once in each
engine the release WebViews use: Chromium (Windows, Android, HarmonyOS) and
WebKit (iOS, macOS, Linux). happy-dom has no layout, scrolling or default
actions, and several tests patched it to assert facts it lacked. happy-dom,
fake-dom, the node:module loader hooks, the vm-based frontend runtime and
the manual acceptance pages are removed; pure Node logic stays on node:test.
Tests load code the way the product does. Bundled code (first-party UI,
app-use, the editor bundle) is bundled by Rstest. Host JavaScript, which the
WebView loads by URL, is imported natively from a test server without
bundling or mocks, and code that needs the whole application runs in an
application frame. Layout tests use component styles and real sizes.
test:ui and test:browser become test:dom, which builds once and runs both
engines. CI installs both browsers on all three platforms, and the
performance baseline imports playwright and shares the test server's files.
Validation: types, lint, guardrails, contracts, Rust tests and clippy; all 345 DOM tests pass in Chromium and in four full WebKit runs with a clean console
Derive platform and shell kind in Rust and inject them before WebView scripts.
Replace frontend UA guesses and pass host facts and IPC budgets to adapters.
Keep chat width in the frontend, preserve iOS policy initialization, and
restore the mobile third-party resource limit. Align docs and test fixtures.
Keep source capture asynchronous and lifecycle changes synchronous. Refresh
sources when renderers replace or navigate frames, and admit only restorable
candidates while retaining accurate accounting for pages that cannot be evicted.
Tie owned Blob URLs to source lifetime, share parking operations, and replace
scheduler sequence tracking with native animation-frame cancellation.
Consolidate behavioral tests, add a browser smoke test for document and form
preservation, and streamline the embedded runtime maintenance guide.
Validation: pnpm run check (410 contract tests, 140 UI tests, Rust and Clippy);
26 focused tests; Chrome cold-recovery and failed-admission smoke tests.