fix: stop Bonsplit observation feedback loop in pane rendering
Summary
Fixes #21375.
The reported hang stacks end in SwiftUI observation re-tracking during a transaction. WorkspaceContentView.body was assigning BonsplitController.isInteractive on every evaluation; its setter writes Bonsplit's observable split controller, creating a render feedback loop while SwiftUI installs observation tracking. The body also rebuilt the Finder drop callback and read full tab snapshots for selection identity.
This PR moves interactivity synchronization and drop-handler installation to lifecycle/input-activity callbacks, rebinds them when a mounted workspace instance is replaced, and skips redundant interactivity writes. Pane rendering now builds one per-pane selection snapshot per body evaluation, validates transient stale selections so Bonsplit's first-tab fallback remains visible, and avoids rebuilding that snapshot for every tab. Existing sustained tab-bar diagnostics now have a hosted-window regression assertion, with focused tests for idempotent synchronization and stale selection fallback.
The code-level evidence points directly at the self-invalidating Bonsplit write in the stack's SwiftUI observation path. No Instruments trace was available in this environment, so the existing tab-bar diagnostic and regression coverage remain the runtime evidence for confirming the suspected render storm.
Validation
python3 scripts/verify-local.py --swift-changed: localization, test-wiring, and feature-flag checks passed; Swift syntax was unsupported because this checkout has no Swift toolchain../scripts/sync-test-wiring --check: passed.- GitHub macOS compile admission and changed-suite app-host test job: passed on the final implementation head.
Changelog
Fixed: stop SwiftUI pane rendering from mutating Bonsplit observation state during body evaluation.