fix(server): follow the finishing run's own session and check sharing across projects

A queued message that changes model after an ExitWorktree restarts the
session, and promotion gives the provider thread a new session ID before
capture runs. The follow looked up that unopened session and skipped the
move, so the successor started in the removed worktree. The capture effect
now carries the session the finishing run used.

Branch adoption treated a checkout as exclusive when only threads in other
projects, or another project rooted there, used it. It now checks threads in
every project and project roots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bebaa10be0PR Batch Tester committed on 10/22/2026, 5:35:56 AMparent5539af8
7 files changedLine totals unavailable