Tabs per tile (phase 1): tab-state model + split collapse master
Foundation for multiple tabs per tile in the tiling workspace. No UI change yet; behavior is preserved. - model.ts: add removeLeaf (collapse split into sibling; root removal is a no-op) and listTileIds, for last-tab close. - tabsModel.ts: pure tab-state model (TileTabsMap), React-free and side-effect-free. closeTab reports removedTabIds + tileEmptied so the hook owns handle release and the caller owns collapse-vs-reseed. - useTilingDocumentSlots: re-back onto TileTabsMap, key DocumentHandles by tab id, preserve getSlot/ensureTile, add getTabs/getActiveTabId/ setActiveTab/newTab/closeTab for the upcoming tab UI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>