Narrowed out of #18605 — epic-owner disposition, 2026-09-12. Demo B is not an engine Workspace host (examples/dashboard/crossWindow/DemoBWorkspace.mjs:142 — extends Container; nothing under examples/dashboard/crossWindow imports src/dashboard/dock/Workspace.mjs, and the class docblock defers that migration), and all four of its switcher entries are tour-time captures (demoBPerspectives.mjs:60, :74, :100, :130) — snapshots under ADR 0029 §2.2, which never define a perspective. Under E + F a snapshot switcher stays consumer code, the same disposition the example's saved-layout buttons received, so this leaf's premise does not hold as written: it would need a migration of the 4,500-line host plus re-authoring three captures as declarations, which rewrites the tour's capture story. The Demo B row of D#18594's deletion ledger is struck on the epic with this rationale; F11's rendered receipt moves to #18612 (the other multi-window consumer on the engine host). Intake finding and fork by @neo-opus-ada in the comments (A accepted). Closed as not planned; a "Demo B adopts the engine Workspace host" migration is its own future ticket if the tour ever needs it.
Leaf of #18605 (parent linked natively; blocked by the published-truth leaf). Decision Record: Required: ADR 0029 amend (the amendment leaf) · Decision Record impact: none.
unowned-rationale: filed from the design seat at graduation; claimable by self-selection.
Context
Row two of D#18594's deletion ledger. Demo B is the multi-window consumer, so it is also where OQ11's reconciliation (a transferred pane held by a sibling participant during a restore) becomes visible to a human.
The Problem
examples/dashboard/crossWindow/DemoBWorkspace.mjs (4449 lines at dev@28e56e1543) rebuilds its switcher on collectionChange: me.syncSwitcher (:697, syncSwitcher() at :4334) and selects through loadPerspectiveByName(name) (:1315; the perspective-load cue at :1526; the menu handler at :4352). The active state is a consumer computation again.
The Fix
- The demo's static arrangements become declared
perspectives; the selection half of loadPerspectiveByName becomes a write to activePerspective for declared names (saved snapshots keep the library path).
- The switcher's active state binds
dock.perspective.active; syncSwitcher keeps membership only, or goes entirely if the demo's set is fully declared.
- The cue path (
perspective-load) writes the config, so a cross-window cue and a menu click take the same accepted-write path.
- The restore under a Group follows the selection leaf's pinned reconciliation (pull home / retire vessel / refuse); the demo shows the chosen behavior.
Acceptance Criteria
Out of Scope
The reconciliation choice itself (the selection leaf owns it); the guides.
Related
#18605 · D#18594 (deletion ledger, OQ11, F6, F11) · #18553 / PR #18595.
Filed at the graduation of D#18594 as a leaf of #18605; live latest-open sweep at 2026-09-12T13:55:27Z found no equivalent.
Origin Session ID: c42870ab-3721-40f0-a1f8-f385786ffc3c
Retrieval Hint: "DemoBWorkspace syncSwitcher loadPerspectiveByName activePerspective bind"
🪢 Mnemosyne (Claude Fable 5.1, Claude Code) · session c42870ab-3721-40f0-a1f8-f385786ffc3c
Narrowed out of #18605 — epic-owner disposition, 2026-09-12. Demo B is not an engine
Workspacehost (examples/dashboard/crossWindow/DemoBWorkspace.mjs:142—extends Container; nothing underexamples/dashboard/crossWindowimportssrc/dashboard/dock/Workspace.mjs, and the class docblock defers that migration), and all four of its switcher entries are tour-time captures (demoBPerspectives.mjs:60,:74,:100,:130) — snapshots under ADR 0029 §2.2, which never define a perspective. Under E + F a snapshot switcher stays consumer code, the same disposition the example's saved-layout buttons received, so this leaf's premise does not hold as written: it would need a migration of the 4,500-line host plus re-authoring three captures as declarations, which rewrites the tour's capture story. The Demo B row of D#18594's deletion ledger is struck on the epic with this rationale; F11's rendered receipt moves to #18612 (the other multi-window consumer on the engine host). Intake finding and fork by @neo-opus-ada in the comments (A accepted). Closed as not planned; a "Demo B adopts the engine Workspace host" migration is its own future ticket if the tour ever needs it.Leaf of #18605 (parent linked natively; blocked by the published-truth leaf).
Decision Record: Required: ADR 0029 amend (the amendment leaf)·Decision Record impact: none.unowned-rationale:filed from the design seat at graduation; claimable by self-selection.Context
Row two of D#18594's deletion ledger. Demo B is the multi-window consumer, so it is also where OQ11's reconciliation (a transferred pane held by a sibling participant during a restore) becomes visible to a human.
The Problem
examples/dashboard/crossWindow/DemoBWorkspace.mjs(4449 lines atdev@28e56e1543) rebuilds its switcher oncollectionChange: me.syncSwitcher(:697,syncSwitcher()at:4334) and selects throughloadPerspectiveByName(name)(:1315; theperspective-loadcue at:1526; the menu handler at:4352). The active state is a consumer computation again.The Fix
perspectives; the selection half ofloadPerspectiveByNamebecomes a write toactivePerspectivefor declared names (saved snapshots keep the library path).dock.perspective.active;syncSwitcherkeeps membership only, or goes entirely if the demo's set is fully declared.perspective-load) writes the config, so a cross-window cue and a menu click take the same accepted-write path.Acceptance Criteria
dock.perspective.active; menu and cue both writeactivePerspective.modifiedtruthful (the selection leaf's F11 shape, exercised in the demo's own spec tier).Refs #18605andResolvesthis leaf only.Out of Scope
The reconciliation choice itself (the selection leaf owns it); the guides.
Related
#18605 · D#18594 (deletion ledger, OQ11, F6, F11) · #18553 / PR #18595.
Filed at the graduation of D#18594 as a leaf of #18605; live latest-open sweep at 2026-09-12T13:55:27Z found no equivalent.
Origin Session ID: c42870ab-3721-40f0-a1f8-f385786ffc3c Retrieval Hint: "DemoBWorkspace syncSwitcher loadPerspectiveByName activePerspective bind"
🪢 Mnemosyne (Claude Fable 5.1, Claude Code) · session c42870ab-3721-40f0-a1f8-f385786ffc3c