Real desktop reproduction, independently built from each commit.

Base: [fc2b5de20c](https://github.com/pingdotgg/t3code/commit/fc2b5de20cb572d2333e03284466e3c804d25c84)
Head: [b3cc6d1327](https://github.com/pingdotgg/t3code/commit/b3cc6d1327876a6a49695c2efd8af6ee05e56501)

1. Install dependencies with `vp i`; build with `vp run build:desktop`. Install Electron with `node node_modules/electron/install.js` from apps/desktop. The Linux build needs libsecret-1-dev.
2. In an isolated scratch home, start foreign B using `T3CODE_DEV_SEED=0 node apps/server/src/bin.ts serve --base-dir <scratch>/foreign --port 39771 --tailscale-serve --tailscale-serve-port 8443`. Its Serve setup reports permission-denied.
3. Run `sudo tailscale serve --bg --https=8443 http://127.0.0.1:39771`. Check the real HTTPS descriptor against B's loopback descriptor.
4. For each side, seed a fresh desktop home using desktop-seed.py. Set T3CODE_HOME to it, XDG_CONFIG_HOME and XDG_DATA_HOME to fresh scratch directories, T3CODE_DEV_SEED=0, T3CODE_PORT=39772, T3CODE_DISABLE_AUTO_UPDATE=1, and unset ELECTRON_RUN_AS_NODE. Start `headless-desktop <checkout>/apps/desktop/node_modules/electron/dist/electron <checkout>/apps/desktop/dist-electron/main.cjs --no-sandbox --disable-gpu --remote-debugging-port=9223`.
5. Run proof-driver.cjs from the checkout with output directory and side arguments. It skips all history imports, opens Settings > Sharing & access, captures the Tailscale switch, creates a pairing link, then captures its generated URL. It reads the real Electron IPC endpoint list and records the status. Before each still it requires two identical screenshots 500ms apart.
6. Run route-check.py to verify the HTTPS descriptor still belongs to B and differs from this desktop. Stop the desktop before launching the other side on the same port.
7. record.cjs records the same create-link interaction on both sides after the still captures (the base video retains an earlier pairing link; the newly created link is expanded). Videos contain privacy masks; still captures retain readable URL schemes and switch state. Hostnames, pairing tokens and QR contents are redacted before upload. Only synthetic data was used.

Observed: base accepts B as available/compatible, checks the HTTPS switch, and creates a hosted-app pairing link targeting B's HTTPS URL. Head returns unavailable/requires-configuration, leaves the switch off, and generates a t3code://app/pair code link with no foreign HTTPS host.

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