Deferred from the 2026-08-05/06 build round (operator call: park it).
Operator-confirmed semantics: an island = a completely fresh room — ideas, builds/fleet, conversation tree, transcript. All windows switch together. Created/switched from a 🏝 Islands control in the ⚙ Controls dock.
Planned architecture (from the approved plan, unbuilt — a first agent attempt died to a session limit leaving no code):
IslandManager (new src/server/islands.ts) owning N runtime contexts with ONE active: instantiate the existing createProjectorRuntime boundary per island (registry/ledger/detection/research are already runtime-scoped) via an injected async factory providing per-island builds/<islandId>/ + artifacts roots.
- Shared singletons (mic session, ASR, hands hub, preview ports) stay outside and reroute to the active island on switch (stop capture → swap → resume).
- Persistence:
artifacts/islands.json {islands:[{id,name,createdAtMs}], activeId}; lazy runtime creation on first switch; boot island wraps the initial runtime.
- Snapshot gains
island: {id, name, all:[{id,name}]}; switching publishes the new island's snapshot over the existing SSE so every window follows automatically.
- Endpoints:
POST /api/island (create+switch), POST /api/island/:id/switch, GET /api/islands.
- Quiesce inactive islands (pause detection ticker + research cadence); cap ~8 islands.
- Dock UI: current island name, dwellable island list, "➕ New island".
Deferred from the 2026-08-05/06 build round (operator call: park it).
Operator-confirmed semantics: an island = a completely fresh room — ideas, builds/fleet, conversation tree, transcript. All windows switch together. Created/switched from a 🏝 Islands control in the ⚙ Controls dock.
Planned architecture (from the approved plan, unbuilt — a first agent attempt died to a session limit leaving no code):
IslandManager(newsrc/server/islands.ts) owning N runtime contexts with ONE active: instantiate the existingcreateProjectorRuntimeboundary per island (registry/ledger/detection/research are already runtime-scoped) via an injected async factory providing per-islandbuilds/<islandId>/+ artifacts roots.artifacts/islands.json{islands:[{id,name,createdAtMs}], activeId}; lazy runtime creation on first switch; boot island wraps the initial runtime.island: {id, name, all:[{id,name}]}; switching publishes the new island's snapshot over the existing SSE so every window follows automatically.POST /api/island(create+switch),POST /api/island/:id/switch,GET /api/islands.