This is a partial platform proof: Linux desktop capability fixtures, not Windows/WSL.

Build each checkout separately with `vp i`, `vp run --filter=t3 build:bundle`, and `vp run --filter=@t3tools/desktop build:bundle`. Install its Electron runtime if needed.

Run `headless-desktop node launch.mjs CHECKOUT RUN_DIRECTORY OFFSET`. Use offset 100 for head, 200 for base. Wait for READY. Then run `node capture.mjs CHECKOUT DEBUG_PORT OUTPUT_DIRECTORY`, using debug port 29430 for head or 29530 for base. The capture driver connects to the real Electron renderer; it does not mock UI state or call the planner directly.

The launcher creates fresh databases, pairs actual servers using the CLI and OAuth, and saves those connections using Electron's real bridge. It temporarily sets the server package version while starting each server, then restores it. Stable host and Nightly host run in desktop mode without desktop control descriptors. Service host runs with an IPC launcher context to expose the sidebar's aggregate-update action. Release metadata and desktop update feed are deterministic local fixtures. No update or track-switch confirmation is executed.

The same driver opens sidebar Update all and expands 2 skipped; then cancels, opens Settings, About, Update track, selects Nightly, and expands the skipped section. Every still waits for two byte-identical screenshots 500 ms apart. Capture viewport is 1280 by 900, light theme.

Recordings include the interaction. `redact-video.py TRACK_SWITCH_FRAMES_DIRECTORY` redacts the unrelated local command-path paragraph in pre-dialog frames 7 through 13 and regenerates the video. It does not alter skip reasons. Stills are unmodified. The seed, driver, and redaction script are provided together for review.

Stop each launcher by its PID recorded in RUN_DIRECTORY/launcher.pid. It closes Electron and its child servers.

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