# Required rebase watch proof

Run the driver once per clean checkout, with the specified base/head revision and dependencies installed. Each checkout needs its own fresh T3 home. Start `T3CODE_DEV_SEED=0 vp run dev --no-seed`, then run `node driver.mjs <checkout> init`. Keep credential.mjs beside driver.mjs. GitLab authentication must already be configured for glab and HTTPS git.

Open the returned thread in the paired web client. Use the same light theme and 1280x800 viewport on both sides. Wait until `node driver.mjs <checkout> state` shows a watch head and passing checks. Start a browser recording, run `node driver.mjs <checkout> advance`, and confirm GitLab reports can_be_merged / need_rebase / has_conflicts=false without a head or CI change. Leave it for multiple two-minute watch sweeps. Capture the thread.

Run `node driver.mjs <checkout> rebase`. This rebases and pushes feature and sets its external proof-ci status to pending. Wait until the saved watch head matches the new branch head and checksPending is true; on head, rebaseRequired must be false. Start a second recording, run advance again, confirm need_rebase with pending CI, and leave it for multiple sweeps. Capture the thread. Run unwatch and delete through the driver when finished, then stop the dev stacks.

The published videos preserve real time. Images and videos show the same 980x580 region of the 1280x800 browser viewport, excluding machine labels in the details panel and composer. Each still's region was identical in two captures at least 500 ms apart. All screenshots and representative frames from every recording were inspected before publication.

Observed: base received zero watch notifications and ran only its initial replay turn. Head received exactly one targeted notification for each occurrence, and ran three replay turns total. No repeated notification appeared on intervening sweeps. The head notification body was: "The branch requires a rebase onto main."

This uses real GitLab external commit statuses, not a runner-backed CI job. Inconclusive host reads and the legacy cannot_be_merged/content-conflict variant were not observed.
