# Delayed required-check watch reproduction

Surface: real T3 Code Node server and Vite web client, Linux x64, Chromium 1280 x 800, default light theme. Each commit runs in its own worktree, with its own fresh database. No production database is used. No application source is changed.

The upstream.mjs preload replaces only outbound api.github.com fetch responses with synthetic GitHub GraphQL data. It does not replace the GitHub adapter, check normalization, watch evaluation, scheduled sweep, persistence, RPC, or client rendering. A and Done are required by classic branch protection in the response. Slow is non-required. Done has no check context in the initial and waiting phases. No live GitHub protection setting or Actions run is verified by this reproduction.

Run installation in each checkout with vp i. Start each with T3CODE_DEV_SEED=0, EVIDENCE_STATE pointing to its own phase file, NODE_OPTIONS importing upstream.mjs, and vp run dev --no-seed. The phase file initially contains initial. Use the real port from dev-runner.

Set EVIDENCE_REPLAY_SCENARIO to the selected free dev replay scenario before seeding (the uploaded driver reads the selection from that variable to avoid publishing runtime identifiers). Driver usage: node driver.mjs CHECKOUT ORIGIN seed; save the returned threadId/projectId. Pair a browser with the isolated server and open the seeded thread. Run node driver.mjs CHECKOUT ORIGIN scenario CONFIG. CONFIG is JSON containing threadId, state (phase-file path), and output (scratch directory). Each scenario creates a timestamped output directory.

The scenario waits for the background sweep to initialize the watch, captures actual RPC results, changes the upstream phase to waiting, waits 135 seconds for a normal two-minute sweep, captures actual RPC results, then changes to done and waits another 135 seconds before capturing again. The same driver and upstream fixture run on both commits. The watch is enabled through the same orchestration command used by watch_pull_request, not by a paid agent tool call.

Browser recording: open checks on each side, observe waiting phase, close check popover to inspect the success wake, reopen checks after Done passes. Video omits the lower 150 CSS pixels (input/model selector) and masks the Workspace identity region; the replay response below the success notification is also masked after each wake because its tool labels expose workspace paths. Check popovers and the success notification remain visible. Captions label commit, environment and upstream phase. Source viewport is identical on both sides. It is not a reconstructed app or a test report.

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

observations.json contains actual RPC results and success-wake text read from each isolated database orchestration_events table. The waiting-phase snapshot is taken before changing to done: base passed=true, head passed=false. Base emits All 1 required check passed at 00:37:23, before done input at 00:37:38. Head emits no early success and emits All 2 required checks passed at 00:39:19 after done input at 00:37:35. Times are UTC. The free replay agent response after a wake is unrelated fixture content and is not the evidence of check success. No test suite was used as proof.
