Context
Leaf 1 of epic #17540, unblocked today: Neo.dashboard.DockWorkspace is merged with two real consumers proving its shape — the example (examples/dashboard/dock/, minimal) and the workstation (apps/workstation/, richest; #17546 / PR #17565 @ 5c9b8aaddc). The operator's mental model for the whole series fronts this part: a human or an AI peer asking "how can I use and configure it inside MY Neo app?"
The Problem
The intro (learn/guides/uibuildingblocks/DockLayouts.md) answers "what is this and why does it work" and now carries a correct but compressed adoption checklist. An adopter's actual question sequence — what do I extend, what do I seed, how do my components become panes, what policies can I set, how do I skin it, how do layouts persist, what does a tear-out window need from me — has no page that answers it in order, with runnable configuration and receipts. The Knowledge Base inherits the gap.
The Fix
- Structural pre-flight (recorded on the epic before authoring): the series' placement under the
guides/uibuildingblocks tree node, part naming, and the exact split — the intro stays the front door; this leaf ratifies the four-part shape (adopt / mechanics / features / Neo-UIs) or corrects it with reasons.
- The adoption guide (name per pre-flight, e.g.
DockAdoptingInYourApp.md): teaches extends Neo.dashboard.DockWorkspace end to end in a consumer app —
- the committed document: shape, seeding in
construct, the initial projectDockModel() shell mount, dockShellIndex / dockHostReference when chrome or overlay siblings exist;
- panes:
resolvePane mapping the item catalog to YOUR components (live instances vs configs vs blueprints), resolveRevealPane, header text, the FLIP marker arriving for free;
- policies at the operation layer, taught truthfully:
pinnable / movable are enforced by the model today (never by UI code); closable is a declared catalog field whose close-routing enforcement is #17419's open leaf — the guide presents it as a forward contract, not as enforced (corrected 2026-08-22 per PR review round 1: the original wording here claimed three-policy enforcement; closeItem does not yet consult closable);
- the hooks catalog with the two live receipts: what the minimal consumer overrides (almost nothing) vs what the richest one does (
getDockProjectionOptions, getRefreshOptions mapping commit shapes, getReconcileOptions' three sanctioned seams, awaited afterRefreshDockWorkspace) — and the hook-admission rule as the reader's own bar;
- theming by tokens: override anchor (
neo-dock-workspace) vs default carrier (.neo-dashboard), additionalThemeFiles replacement semantics, the app-root Viewport trap;
- persistence:
createSavedLayout / restoreSavedLayout, the perspective-carrying envelope, fail-closed restore;
- the vessel render target: the deliberately empty child-app viewport a tear-out window needs;
- failure semantics the adopter inherits: settled-tail commits, loud missing host, the empty projection.
Every snippet consistent with one of the two live consumers (cited); house pattern throughout (claims with receipts, traps with tickets, render-verified Mermaid where a diagram earns its place); registered in
learn/tree.json; intro gains its forward link to the series.
Acceptance Criteria
Out of Scope
- Parts 2–4 (mechanics / features / Neo-UIs) — their own leaves, sequenced by the pre-flight.
- Any engine change; any intro rewrite beyond the forward link.
Related
Parent #17540 · #17514 (the intro) · #17539 / #17541 / #17546 (the class and its two consumers) · #13158.
Live latest-open sweep: latest 12 open issues checked at 2026-08-22T19:48Z; no equivalent found. A2A in-flight claim sweep: inbox drained to zero at 19:23Z + redeliveries verified; no overlapping claim.
Origin Session ID: bd272031-6109-449d-8a0c-38230064a8f3
Retrieval Hint: query_raw_memories("dock adoption guide extends DockWorkspace your app seed document resolvePane policies tokens persistence vessel")
Mnemosyne (Claude Fable 5, Claude Code) 🪢
Context
Leaf 1 of epic #17540, unblocked today:
Neo.dashboard.DockWorkspaceis merged with two real consumers proving its shape — the example (examples/dashboard/dock/, minimal) and the workstation (apps/workstation/, richest; #17546 / PR #17565 @5c9b8aaddc). The operator's mental model for the whole series fronts this part: a human or an AI peer asking "how can I use and configure it inside MY Neo app?"The Problem
The intro (
learn/guides/uibuildingblocks/DockLayouts.md) answers "what is this and why does it work" and now carries a correct but compressed adoption checklist. An adopter's actual question sequence — what do I extend, what do I seed, how do my components become panes, what policies can I set, how do I skin it, how do layouts persist, what does a tear-out window need from me — has no page that answers it in order, with runnable configuration and receipts. The Knowledge Base inherits the gap.The Fix
guides/uibuildingblockstree node, part naming, and the exact split — the intro stays the front door; this leaf ratifies the four-part shape (adopt / mechanics / features / Neo-UIs) or corrects it with reasons.DockAdoptingInYourApp.md): teachesextends Neo.dashboard.DockWorkspaceend to end in a consumer app —construct, the initialprojectDockModel()shell mount,dockShellIndex/dockHostReferencewhen chrome or overlay siblings exist;resolvePanemapping the item catalog to YOUR components (live instances vs configs vs blueprints),resolveRevealPane, header text, the FLIP marker arriving for free;pinnable/movableare enforced by the model today (never by UI code);closableis a declared catalog field whose close-routing enforcement is #17419's open leaf — the guide presents it as a forward contract, not as enforced (corrected 2026-08-22 per PR review round 1: the original wording here claimed three-policy enforcement;closeItemdoes not yet consultclosable);getDockProjectionOptions,getRefreshOptionsmapping commit shapes,getReconcileOptions' three sanctioned seams, awaitedafterRefreshDockWorkspace) — and the hook-admission rule as the reader's own bar;neo-dock-workspace) vs default carrier (.neo-dashboard),additionalThemeFilesreplacement semantics, the app-root Viewport trap;createSavedLayout/restoreSavedLayout, the perspective-carrying envelope, fail-closed restore;learn/tree.json; intro gains its forward link to the series.Acceptance Criteria
learn/guides/uibuildingblocks/, registered inlearn/tree.json, and answers the adopter sequence above in order, every code snippet consistent withexamples/dashboard/dock/orapps/workstation/at head (cited inline).DockLayouts.md(the intro) links forward to the series; no other intro change.npm run ai:lint-guides0 hard;lint-tree-jsongreen.guide-authoring.Out of Scope
Related
Parent #17540 · #17514 (the intro) · #17539 / #17541 / #17546 (the class and its two consumers) · #13158.
Live latest-open sweep: latest 12 open issues checked at 2026-08-22T19:48Z; no equivalent found. A2A in-flight claim sweep: inbox drained to zero at 19:23Z + redeliveries verified; no overlapping claim.
Origin Session ID: bd272031-6109-449d-8a0c-38230064a8f3
Retrieval Hint:
query_raw_memories("dock adoption guide extends DockWorkspace your app seed document resolvePane policies tokens persistence vessel")Mnemosyne (Claude Fable 5, Claude Code) 🪢