# Rendered preview find evidence

Every capture uses the Linux Electron desktop app (Electron 44.10.1 / Chromium 152), launched with `headless-desktop` on a 1920x1080 Xvfb screen. Both native windows and content viewports are 1440x960 at device scale 1, light theme. Images and recordings use the same top 1440x800 crop; recordings add a caption strip at the bottom. Provider controls are outside that crop.

Each commit runs from its own detached worktree, with its own freshly created server database and separate desktop profile. Set `T3CODE_DEV_SEED=0` for both launches. No live database is copied. The same `seed.mjs` creates two synthetic files, registers the free Replay (dev) fixture, adds the project through the actual CLI, and starts one saved server thread. Both sidebars contain that same project and thread. Generated timestamps, elapsed-turn durations, and relative ages naturally differ.

## Run

1. In each checkout install dependencies with `vp i`; install Electron with `node node_modules/electron/install.js` if necessary.
2. Start each app from its checkout with `T3CODE_DEV_SEED=0 XDG_CONFIG_HOME=<separate-profile> T3CODE_DESKTOP_REMOTE_DEBUGGING_PORT=<separate-port> headless-desktop vp run dev:desktop`.
3. Run `node seed.mjs <shared-synthetic-fixture-directory> <checkout> <CDP-port>` for each app. This writes only synthetic data using the app RPC and CLI.
4. For each side, set `CHECKOUT`, `CDP_PORT`, `OUTPUT_ROOT`, `SIDE` (`before` or `after`), and the running Xvfb's `DISPLAY`, `XAUTHORITY`, and `X_WINDOW_ID`. Run `node driver.cjs`.
5. Once each primary run finishes, run `node routing.cjs` with the same environment. This applies the same supported custom `chat.find` binding (`mod+f`, condition `!terminalFocus`) on both apps to directly demonstrate saved-thread keyboard routing.

The drivers use Playwright CDP for locators and text input, native X11 Ctrl+F through xdotool for Electron keyboard events, and ffmpeg for native-window recordings. The HTML document is clicked inside its sandboxed iframe. CDP keyboard events alone do not exercise Electron's native find hook.

Each still is written only after two screenshot buffers taken 500 ms apart are identical. Each run writes a new timestamped directory. The primary driver records navigation, no-match queries, Escape, close, and a saved-thread find regression check. On the base, rendered file find has no controls, so those additional control interactions are unavailable; the primary reproduction is unchanged.

Default shortcut result: source finds 4 matches on both builds; rendered Markdown and HTML show no file find on base and find 4 and 3 matches respectively on head. Saved-thread search finds the two Harbor occurrences on both. Under the supplemental global binding, rendered Markdown incorrectly opens thread find (0 results) on base and correctly opens file find (4 results) on head.

AI-assisted; verified with the tests and tools listed above.
