# dev-tools Development harnesses for a wayBetter app. They are not part of the npm package and nothing here ships in an app: they probe a build you start yourself. Each file's header says exactly what it does and what it never does (site pages are only read and reloaded, never clicked; nothing is uploaded; the owner's session is not touched unless the header says a disposable profile is needed). An app calls them with its own values. wayBetter for X keeps thin wrappers (`apps/desktop/scripts/*`, `verification/live-check/*`) that pass X's origin, process name, theme commands, scripts and fixtures. | Tool | Runs against | What it measures or checks | | --- | --- | --- | | `perf-probe.mjs` (`runPerfProbe`) | headless Chromium, the app's injected scripts, the app's fixtures | script evaluation time, fetch/XHR wrapper layers and overhead, Response clones, large JSON parses, observer / rAF / timer work of the scripts, long tasks | | `runtime-start-check.mjs` (`runtimeStartCheck`) | headless Chromium, the built page runtime, static fixtures | the runtime installs at document start; every feature flag on, off, default without a console or page error | | `resize-perf.mjs` | a running release build with a WebView2 CDP port | `theme` (first paint vs. theme applied), `drag` (divider drag: shell frames, `tabs_sync`, native lag), `switch` (click to tab visible), `window` (with `window-resize.ps1`) | | `window-resize.ps1` | the app's window (Windows) | a repeatable ~2 s resize workload; never activates the window | | `close-check.ps1` | the app's release exe (Windows) | the app exits on a plain `taskkill /PID` in every window state and on a simulated sign-out | | `native-tab-stress.mjs` | a running build with a CDP port | opens shell start tabs, measures responsiveness, closes them | | `native-webview-stress.mjs` | a running build with a CDP port, a fresh WebView2 profile | ramps native site tabs (6, 12, 24) and records process memory; stops at a memory limit | | `native-stress-watch.ps1` | the app's process tree (Windows) | independent CPU and memory telemetry while a stress run is going | | `native-stale-shortcut-check.mjs` | an isolated release build with a CDP port | a stale tab id in a shortcut never targets the active tab | Requirements: Node 24+, and for the headless probes `playwright` in the app (the probe takes the app's `chromium`). The CDP tools need the app started with `WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=`.