Force stop queued-follow-up evidence driver

Use a current-main checkout with scenario-runner support. Run vp i, apply
proof-runner.patch, and copy the two scripts/scenarios files to that directory.
Run:
T3CODE_DEV_SEED=0 vp run scenarios:prove scripts/scenarios/force-stop-follow-up.e2e.ts --base 95cb068c10a6cf0b33eed0a0cab3b298763fe852 --head 45f491e3876ff116bad52f5132a1af787dbdfecb --upload-command "ghdrop upload"

The same temporary provider and synchronization fixture is applied to both app
commits. No release guard, releaseUnlessBusy, keepIf, run selection, or settlement
logic is changed. The original replay prompt does not confirm Stop. After Force
stop captures its original target, the fixture signals that prompt to return
cancelled. Cleanup then waits for the promoted follow-up to be visibly running
in the browser. The scenario releases cleanup; the follow-up provider waits until
cleanup returns before sending its completion. These are file-watcher barriers,
not sleeps. The real ACP adapter, orchestration, session manager, WebSocket and
web client run on both sides. The UI queues after Stop because Stop holds any
messages already queued. All state is synthetic on fresh isolated databases.

Observed base: the follow-up stays Working after cleanup and never renders the
completion within the 15-second observation. Observed head: its completion is
rendered and the thread becomes Done. This proves the session-release race under
a controlled interleaving, not the natural frequency of the race on real models.
