# Evidence fix-up reproduction

Pinned before 701e13cebb040d8433cd9aefb803ddd0d58c41d6 and after 37441e905194b062345c76d81caacd00d77ef5e5. This pass replaces D1-event and W7/H1/H2/H4 only. Capture-1's D1-startup and accepted other rows remain authoritative. No production source edits, tests substituted for captures, PR changes, real state copies, or provider turns.

## Setup

Use the two pinned checkouts, global `vp install`, fresh scratch-owned homes, and `T3CODE_DEV_SEED=0 T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD=0`. Run `vp run dev --home-dir <side-home>` with the supplied host-fixture.mjs imported through NODE_OPTIONS. Both sides get Development workstation. Read dev ports. This run: before web5865/server13905; head web6742/server14782. Driver paths are fixture coordinates and can be adjusted. Make demo-workspace as a fresh git repository, branch main, one empty synthetic commit (Evidence / evidence@example.test).

Mint each isolated server credential with `node apps/server/src/bin.ts pair --base-dir <side-home>` in its checkout, saving private pair-before.private.log / pair-after2.private.log. Never upload them. Browser `make`, selective routeWebSocket fixture and pairing are initialized as in browser-setup-r3.mjs. Run seed-browser-commands.mjs through the browser-driver-r3.mjs REPL. Its seed expression uses the real project/orchestration command services, creates one project/thread and a deferred user message, then stops it. Both sides were seeded concurrently within minute00:44 UTC. No provider starts. If repeating against existing synthetic state, delete only that fixture's project through projectEnvironment.delete with force:true before reseeding; never seed a second project over the same root. Fresh homes avoid this.

Browser rendered Date constructor is frozen at 2026-11-03T00:00:00Z; Date.now and timers stay native. Server-generated synthetic messages show12:44 AM on both sides. Same dark theme, DPR1, no device emulation, zoom/font scale100%, scroll at top, full1440×900 viewport, Chromium148 headless shell build1223. Browser preferences emulate reduced motion. `still` awaits fonts/network idle and requires byte-identical screenshots500ms apart. Browser snapshots in the shared panel twice returned1280×800 despite configured1440×900; that attempt was abandoned and its images are not proof. The preview was closed before the Playwright capture.

## W7, real web app

Run W7-record.mjs in the browser REPL. It records the same interaction per side: reachable cached stopped thread reload; await live history/connected; select only app /ws for failure; close the established socket4001 and emit raw offline; hold8 real seconds; capture loss; restore transport and emit online; await connected history; capture recovered state. Auth, descriptor, HTTP/static resources, Vite and all other transport stay reachable. This is selective app transport loss, not device-wide OS offline. CDP screencast JPEG frames are encoded with actual frame durations. Named UTC checkpoints and app socket attempts/frames/closures are in web-W7-protocol-r3.jsonl. Both live and recovered pairs have zero changed pixels. Loss differs only in banner text/diagnosis and Reconnect. No performance inference.

## D1-event, real Electron

Build the desktop main/preload per checkout with its own scripts/build-browser-secret.mjs, scripts/build-preview-annotation-css.mjs and global `vp pack`. Build each server with `vp run --filter t3 build`. Fetch Electron if necessary via `node node_modules/electron/install.js` from apps/desktop. Run desktop-driver-r3.mjs under headless-desktop with a TTY for its REPL. `launch` uses each checkout's actual Electron44.10.0 with --no-sandbox --disable-gpu, real desktopBridge/bootstrap/auth and isolated homes; ports19886/19782. Each BrowserWindow is measured1440×900 at0,0, DPR1. Seed both renderers using the same seed-expression.js through the REPL, then navigate to t3code-dev://app/#/<environment>/<thread>. Obtain windowIds through each BrowserWindow.getNativeWindowHandle().readUInt32LE(0).

Run D1-record-r3.mjs. It writes a NEW timestamped run directory, applies the app's setTheme('dark') and setAppearanceMode('dark'), reloads while reachable, waits for live stopped history, brings each actual window forward, starts ffmpeg x11grab, emits offline with transport healthy, holds3.5s, captures the full native window with ImageMagick import, then restores online. Same injected `caret-color:transparent!important` style on both sides; composer is also blurred before capture. Reduced motion emulated; CSS animations/transitions symmetrically disabled. Fonts/network idle and pixel equality500ms apart precede each still. `compare -metric AE` checks pixels, ignoring PNG metadata. Final selected run is desktop-event-2026-11-03T00-47-19.850Z. Earlier light-theme exploratory stills/recordings are not selected proof.

Protocol logs show server.probe request26 and its Exit after each raw offline signal, same connected generation1, no app socket replacement. New D1-event before/after images are pixel-identical at threshold0. The startup proof from capture-1 remains unchanged.

## H1/H2/H4, labelled supervisor harness recordings

build-harness-r3.py reads each checkout's existing supervisor.test.ts fixture definitions, points relative imports to that checkout, and appends the corresponding original harness-cases group. It adds only the same Deferred-controlled opening-stage hook as round1 and step/timestamp output. The real supervisor module is imported from each pinned checkout. Generated H1/H2/H4.ts files are included; they link their node_modules to the matching client-runtime package. Do not run improve-harness.py again: it is the development helper that produced the final builder.

Run `headless-desktop python3 record-terminal.py`. It starts xterm (DejaVu Sans Mono15pt,117×38 cells, dark terminal) and ffmpeg x11grab10fps at1440×1000. No browser/device emulation, DPR1, OS font scaling100%. terminal-harness.py runs Node against the real generated driver and logs its JSONL. A stdin checkpoint handshake holds execution AFTER each printed state until the terminal presenter acknowledges it; this makes the LIVE output readable rather than replaying a saved transcript. Presentation pacing does not advance Effect TestClock. Each video starts with an explicit harness label and full SHA. States print phase/network/desired, stage/attempt/generation, prepare/session/release counts, probes or cancellations; actions print raw network or logical clock advance. All six runs exited0. Logical TestClock/barrier logic is the original harness; no test retries, wall-clock polling, or altered supervisor code.

H1: suspend preparing/opening/synchronizing, emit offline, inspect interruption/park/replacement. Base needs online before replacement; head replaces under normalized unknown. H2: offline startup, online while first attempt stalls, inspect unchanged attempt, advance15s setup or90s sync timeout, backoff, then2s to replacement. Does not claim immediate restart on online. H4: raw unknown; offline/repeated offline/online; probe counts; desired=false; explicit connect under offline; repeat with bearer as unchanged guard. State publication after healthy probe can retain an earlier network field; raw report and probe counts are separately printed, so no claim that every snapshot's network field instantly reflects the latest raw event.

## Diff, review, publication and cleanup

make-diffs-r3.py copies selected pairs and emits Diff0 and DiffT16. Each changed pixel (>0 or>16 max RGB delta) is amplified magenta against20%-brightness after image. D1-event/live/recovered W7: zero at both thresholds. W7-loss:2629 at0,2220 at16. Every selected still and diff was opened and visually inspected. All ten replacement recordings were inspected through decoded frames; no selected still has a stale banner/overlay/loading state or mismatched viewport. select-review-r3.py provides frame review sheets.

Only explicit public files go through upload-r3.py (`ghdrop upload -m`); verbatim emitted Markdown is retained. Scripts archives use explicit source files only, never homes/profiles/cookies/pair logs/server private output. All new seed/driver/development sources are included, with superseded ones labelled in the index. Assets are synthetic. No PR body edit. Stop tracked browser/Electron via finish, tracked proxy PID, and dev listener PIDs only after verifying /proc/<pid>/cwd. Remove only the extra before checkout. Retain capture-2 scratch for the lead/auditor, and leave the lead-owned head checkout untouched.
