Problem
SurfaceHost caches surfaces by pane ID indefinitely. A daemon restart respawns agents with the same IDs, but the cached surface still owns the old, exited clowder attach process. Reconnection therefore leaves the revived agent visually dead.
Evidence: https://github.com/richardcase/clowder/blob/b5492d5/macos/Sources/ClowderApp/SurfaceHost.swift#L28-L50
Reconnect path: https://github.com/richardcase/clowder/blob/b5492d5/macos/Sources/ClowderCore/AppModel.swift#L191-L210
Acceptance criteria
- Associate surfaces with a connection generation.
- Evict/recreate all affected surfaces after same-backend reconnect.
- Refresh selected split trees and add a reconnect test with unchanged pane IDs.
Problem
SurfaceHostcaches surfaces by pane ID indefinitely. A daemon restart respawns agents with the same IDs, but the cached surface still owns the old, exitedclowder attachprocess. Reconnection therefore leaves the revived agent visually dead.Evidence: https://github.com/richardcase/clowder/blob/b5492d5/macos/Sources/ClowderApp/SurfaceHost.swift#L28-L50
Reconnect path: https://github.com/richardcase/clowder/blob/b5492d5/macos/Sources/ClowderCore/AppModel.swift#L191-L210
Acceptance criteria