* refactor: move the contested-workspace primary-host rule to src/shared (move only)
* fix(layout-owner): main routes a twin repo's workspace to the same primary host the window saves to
* fix(layout-owner): route a twin repo's single-host worktree to the host that holds it; hydrate twins the same way
* fix(layout-owner): twin-repo routing counts only runtime owners from the catalog, matching the window; one table checks both sides
* fix: drop the duplicate layout-owner switch import after merging main
* fix: type the twin-routing fixture and partition set