# Review acknowledgement proof driver

This drives the real web client, server, watch reactor, event persistence, and replay agent. Only the upstream GitHub API is synthetic. No live pull request is written to and no real CodeRabbit job is requested.

Use a checkout containing the scenario runner. Place `coderabbit-ack.e2e.ts` under `scripts/scenarios/`. Put `forge.cjs` in an empty evidence directory and start it with Node. It listens on a Unix socket in that directory and on loopback port 18991 for scenario controls.

Create a separate GitHub CLI config directory containing `config.yml` with `http_unix_socket: <absolute path to the evidence directory>/forge.sock`. Forward `GH_CONFIG_DIR`, `GH_TOKEN`, and `T3CODE_DEV_SEED` through each app command's `inheritEnv` in `scripts/e2e.config.ts` (the attached config patch does this). Use `GH_TOKEN=synthetic-scenario` and `T3CODE_DEV_SEED=0`; the token is fake and the socket receives the API requests.

Run `vp run scenarios:prove scripts/scenarios/coderabbit-ack.e2e.ts --base b3fdf2b10fb92e5dbc71a83381c602a8a464bbca --head 769d3470ca997b588c969d786620ffba1f34ccb3 --upload-command "ghdrop upload"` with those environment variables.

The scenario creates one project and a replay thread through the app CLI, opens the thread, enables its pull-request watch through the normal WebSocket command, and waits for the normal two-minute watch sweep. A startup check-success wake is allowed to finish before the reproduction begins on both commits. Then the fixture exposes CodeRabbit's acknowledgement, edits the same comment to a finished outcome, and leaves it unchanged for another sweep. The scenario captures all stages before checking wake and delivery counts. The synthetic timestamps make the acknowledgement and edit distinct from the initial watch watermark.

The app, watch timing, evaluator, and orchestration code are unchanged. `observed-<commit>.json` contains a public-safe extract of the real server projections: watermarks, comment wake counts, wake text read from the isolated database in read-only mode, run count, and whether all runs ended. The scenario writes these below its isolated T3 home parent.

Live CodeRabbit request/response behavior and the rate-limited outcome variant are outside this recording.

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