Tabs per tile (phase 2) + per-vault workspace state master
Tab strip UI and per-vault layout persistence on top of the phase-1 tab model. - TileTabStrip: per-tile tab chips (select/close, middle-click, +). Empty tabs are not chips — they render TileStartView, a quick-actions start page whose only action is "New File" (wired to App.handleNewFile: createFile + open). + reuses an existing empty tab (findEmptyTab). - tiling.tsx: render the strip + active tab; close-the-last-tab collapses the split via model.removeLeaf / planTileRemoval (pure, tested). - Per-vault state: WorkspaceHost mounts one instance per (kind x vault) and shows only the active one, preserving each vault's tile layout, tabs, and open documents across vault/mode switches. Inactive instances are gated by `active` (ignore opens, suppress bottom bar, no split handle) via WorkspaceProps.active + barSlot WorkspaceActiveProvider. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>