SessionManager held a concrete Tmux, so its decisions — spawn rollback ordering, liveness diffing, activity change-detection — could only be reached by forking a real tmux server. Inner now holds an Arc<dyn Panes>; Tmux is the production adapter, FakePanes the one tests drive. Arc<dyn Panes> rather than a type parameter: a generic would spread through LocalApiState, attach and cli, and one vtable hop is free next to a fork+exec. Adds tests/session_decisions.rs — six cases, no subprocess, 0.24s. Replaces the chmod-0o500 rollback test, which detected root and returned early, so on CI it asserted nothing; the failure is now forced by a regular file sitting where the sidecar directory's parent must be, which no uid can work around. It also asserts the rollback *order*, not just the end state. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>