# PR watcher evidence driver

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

Run the same procedure in separate checkouts of base and head, installing dependencies with `vp i` first. Use a fresh, checkout-local T3 home each time. Never copy a live database.

1. Copy `start-app.ts` and `shell.ts` together into `scripts/scenarios/` in the checkout. Copy `mcp-driver.ts` into `apps/server/.proof-pr-watch.ts`.
2. Start the real dev app with `T3CODE_DEV_SEED=0 node scripts/scenarios/start-app.ts web "$proof_home" 127.0.0.1 "$web_port"`. This launcher uses the checkout's dev runner, fresh state, disabled paid providers, and the free replay provider.
3. Run `bash seed.sh "$checkout" "$proof_home"`. This adds the checkout as a project and starts one completed replay turn in a thread titled “Watch six pull requests”.
4. Pair a browser using the private `pairing-path` file in the proof home. Do not record or upload that credential. Read `node apps/server/.proof-pr-watch.ts "$proof_home" read`; the returned hosted link provides the environment and thread route. Open its path on the local web origin.
5. Use a 1440×1000 CSS viewport, dark theme, Comfortable chat width, and close the thread details panel. Start recording.
6. Run `node apps/server/.proof-pr-watch.ts "$proof_home" watch`. It mints a short-lived MCP client session using the same auth service as `t3 thread`, calls the real `watch_pull_request` tool for six open PRs, and revokes the session. It does not write to GitHub.
7. Wait for the watcher pass and its replay responses to finish. Read the thread through the same MCP driver (`read`, activity view). Also inspect the locally created database read-only for the actual persisted wake bodies, using the query below.
8. Run the driver with `unwatch` to stop all six watches. Stop the recording. Select Full chat width through Settings → Appearance for the comparison stills; keep the same viewport and theme. Wait until two screenshots taken 500 ms apart are pixel-identical, then retain the still.
9. Stop the processes started for this run.

```sql
SELECT message_id, created_at,
       json_extract(payload_json, '$.text') AS text, run_id
FROM orchestration_v2_projection_messages
WHERE message_id LIKE 'message:pr-watch:%'
ORDER BY created_at;
```

Watched pull requests: [#29027](https://github.com/pingdotgg/t3code/pull/29027), [#24468](https://github.com/pingdotgg/t3code/pull/24468), [#24425](https://github.com/pingdotgg/t3code/pull/24425), [#34977](https://github.com/pingdotgg/t3code/pull/34977), [#28975](https://github.com/pingdotgg/t3code/pull/28975), [#29861](https://github.com/pingdotgg/t3code/pull/29861).

The short videos are real-time excerpts around the watcher pass; the full videos retain registration, waiting, wake execution, and unwatching. Stills use Full chat width so the combined summary is readable. No browser DOM or application behavior was modified for the captures.
