# Reconstruct and capture

These are scratch evidence tools, not product source. Execute capture-driver.js and setup-driver.js through T3's MCP tools object: `await new Function('tools','tab','options', source)(tools, tabId, {path:'K1',side:'before',width:1440,theme:'light'})`. Read the source text using the shell, then supply the returned source string. Setup accepts path K1 or K3; capture accepts K1/K3, before/after, width 1440/390, theme light/dark. Capture returns raw image paths, recording path and timestamps. Save those result objects as captures-all.json. Run `python process.py` (Pillow, numpy, ffmpeg/ffprobe) to copy media, compare exact stability, generate max-channel >0 and >16 diffs, decode six timestamped frames per recording, and hash artifacts. The recording sample inspection is not full playback.

Use an isolated checkout with dependencies from the checked-in pnpm-lock.yaml (`vp i`), Node 26.12.1, Chrome 154.0.0.0. Start the normal `vp run dev` once, using the checkout-local ignored .t3 home; never use live userdata. Read actual ports from its dev-runner output. In this run the lead already owned web6749/server14789 and no server was launched/stopped by this evidence agent. Source was run directly by the dev watcher, not a production build. Switching exact source revisions restarted the watcher-owned server. `head-provenance.txt` and `base-provenance.txt` record source digests, lockfile digest, Kimi binary digest, PID, clean git state and source SHA observed around each side. This ties observations to source/watch processes, not an independently rebuilt production artifact; final audit2b remains necessary.

Revisions: base 27e0c684c585f955252d65f06206dd11a143bff5; head 14d89dd239d449d01442e55db127a3a2ecc5f889. Use `git switch --detach <base>` then `git switch fix/issue-24302` after the baseline. This run captured head first, base second and restored head. Never switch while another capture agent needs the revision. No source edits, commits, pushes or PR operations occurred.

Open a dedicated T3 preview tab (`preview_open` with reuseExistingTab:false). Pair privately if needed using `node apps/server/src/bin.ts pair --base-dir <checkout>/.t3`; do not publish the resulting URL/token. Navigate to `/settings/providers`. setup-driver.js imports the app's existing registry and serverEnvironment command objects, and uses updateSettings.run with a providerInstanceMutation to remove only the task-owned acpRegistry_kimi_cli before recreating it through Add provider -> Add Kimi CLI -> Continue to sign-in. It uses no direct database writes. The deterministic provider envelope is driver acpRegistry, displayName Kimi CLI, enabled true, config {agentId:'kimi',distribution:'auto',registryIconUrl:'https://cdn.agentclientprotocol.com/registry/v1/latest/kimi.svg'}. The registry selected binary Kimi 1.52.0; SHA256 8f12540fd87d5f88547c4e5b97aeb29abb9dfad34b4c6180f1a43f77d4f1221d. No account is configured. The app-generated instance ID is reused. K3 setup closes the wizard and selects this saved provider. No credential URLs are opened. Every published auth attempt was cancelled; cancelled-attempt device codes remain in raw media as authorized by the lead.

For each revision run K1 four variants, then setup K3 and run its four variants. A clean inactive frame is held before click. A real 36-second wall-clock pause follows click; the page clock is NOT frozen during this observation. Capture's Date override is limited to still acquisition and is restored before cancellation/retry. The two selected raw stills are >=500ms apart and captions are removed. Relative Checked labels are hidden, animations paused, transitions disabled, fonts awaited. The matchMedia shim requests reduced motion so Ghostty's actual cursor implementation stays steady; it does not invent terminal output. It must be installed only once per page, as the driver does. Replacing an existing shim recursively caused the rejected supplemental retake described in the index; reload before recovery.

K1 uses the actual app setting glassOpacity:100 and disables backdrop-filter consistently on both revisions, after rejecting repeated blurred background exports. This changes capture appearance and is explicitly not proof of the default translucent appearance. K3 original head captures used glassOpacity:80 with no modal. Background saved settings consumes the same auth flow, so its terminal/status can also change behind the wizard. Do not call that old terminal output or hide it in image processing. Modal height/recentering, terminal appearance, readiness text and downstream Runtime movement are genuine behavior differences. No pixels are painted over, masked, cropped, aligned or normalized before comparisons.

CSS geometry is 1440x900 or 390x844; DPR2 and visualViewport.scale1. Browser snapshot export is respectively 1280x800 (uniform 8/9 CSS transform, 4/9 of physical pixels) or 780x1688 (2x CSS). Do not call desktop exports a 1280 CSS viewport. Raw recordings use the browser recorder's own export; absolute tool timestamps and nominal media offsets from recording start are in captures-all.json. Export cadence can differ; the six decoded frame times are direct media timestamps. No precise frame/action synchronization beyond those recorded milestones is certified.

Current handoff: source restored clean to head, web6749/server14789 untouched. Browser tab tab_3_71ec2ecf-d6bc-44e4-bc50-56ae818fa879, default profile, paired, /settings/providers, 1440x900 light, Codex selected after reload, Kimi remains saved, no wizard or active terminal, last Kimi auth cancelled; browser reloaded after rejected supplemental retake. Follow-up should own a separate tab unless reusing this exact agent session. T1 is owned by a separate agent/server and is not represented by this package.
