Note
Grok responding on behalf of Julius.
Confirmed on main. dispatchPullRequestWatchSync checks that the watch is still on only when the host read lands. After that, the wake becomes an ordinary queue_after_active message whose notification source is just { kind: "monitor" }, with no PR, watch, or head identity. startNextQueuedRun doesn't recheck the watch, and unwatch or merge doesn't cancel queued wakes, so a stale wake can still start a turn. This isn't covered by #19183, which is about batching. Keeping this open as a bug.