Context
Stage 2 of the operator's two-stage blog post (2026-10-11), and the second entry in the series order recorded on #13383 (comment). Stage 1, learn/blog/multi-window-dashboards-with-dock-layouts.md (#19602, merged as 97112ed5ea), shows what the person at the dashboard gets. It ends on two configs and a promise: "The next post in this series builds a workspace end to end."
The Problem
- Angle: build one dashboard workspace from an empty app to panes that leave the window and come home. Each step is a decision the developer owns, shown with code that runs.
- Audience: developers who read stage 1 and want to try it. Neo knowledge is optional, and each step links its guide.
- Sources to mine (nothing invented):
learn/guides/uibuildingblocks/DockLayoutsAdoption.md (the five decisions; its default tear-out contract as corrected by #19608);
DockLayoutsWindows.md, DockLayoutsStateAndPersistence.md, DockLayoutsPanes.md and DockLayoutsStyling.md;
learn/tutorials/DockLayoutsFirstLayout.md;
src/dashboard/dock/Workspace.mjs (enableDockTearOutLifecycle, openTearOutVessel, canOpenTearOutVessel, perspectives, the action flags);
- the Workstation (
apps/workstation/view/VesselWorkspace.mjs, its BootIntent, its IndexedDB persistence);
examples/dashboard/crossWindow/Viewport.mjs (the empty boot page);
examples/dashboard/dock/MainContainer.mjs (perspectives, saved layouts).
The Architectural Reality
Docs only: learn/blog/<slug>.md, a blog.json leaf, and images in neomjs/pages under resources_pub/website/blog/<slug>/. A code block is shown in the post only after it has run, live in the Portal or in an app the post names.
The Fix
One post, ordered the way a developer would build:
- panes and zones;
- pane policies (lock, pin, close);
- named perspectives and saving a layout;
- turning on windows (
useSharedWorkers, the tear-out opt-in, the cross-window sort group, the empty page a torn-out window boots into);
- styling with tokens;
- the keyboard path.
The bounds come from the guides, not memory.
Plan (2026-10-11, from a read of the corrected Adoption guide):
- Live where the Portal can run it. Blog posts render
javascript live-preview blocks (the v10 deep dives use them). Steps 1–3 and the action flags run as live, editable previews: panes and zones, per-pane policy (closable/movable/pinnable on the declaration), and perspectives + activePerspective behind a toolbar (the dock example's dockShellIndex pattern).
- Read-only where it cannot. A torn-out window reopens the host document with
?tearout=<itemId>, which a live preview inside the Portal cannot answer. The windows step is read-only code checked against Workspace.mjs, and the reader runs it in the Workstation. Persistence (Persistence.createSavedLayout / restoreSavedLayout) and styling tokens (.neo-dock-workspace .neo-dashboard) are read-only too.
- Every live block is render-verified in the Portal before review, and every read-only block's symbols are checked at the PR's base.
Acceptance Criteria
Out of Scope
Engine changes, and the benefits story (stage 1).
Related
Live latest-open sweep: latest 20 open issues read at 2026-10-11T16:19Z, no equivalent. A2A in-flight sweep: no claim on an implementation post.
Retrieval Hint: "dock layouts implementation blog post build workspace perspectives tear-out boot page"
Context
Stage 2 of the operator's two-stage blog post (2026-10-11), and the second entry in the series order recorded on #13383 (comment). Stage 1,
learn/blog/multi-window-dashboards-with-dock-layouts.md(#19602, merged as97112ed5ea), shows what the person at the dashboard gets. It ends on two configs and a promise: "The next post in this series builds a workspace end to end."The Problem
learn/guides/uibuildingblocks/DockLayoutsAdoption.md(the five decisions; its default tear-out contract as corrected by #19608);DockLayoutsWindows.md,DockLayoutsStateAndPersistence.md,DockLayoutsPanes.mdandDockLayoutsStyling.md;learn/tutorials/DockLayoutsFirstLayout.md;src/dashboard/dock/Workspace.mjs(enableDockTearOutLifecycle,openTearOutVessel,canOpenTearOutVessel,perspectives, the action flags);apps/workstation/view/VesselWorkspace.mjs, itsBootIntent, its IndexedDB persistence);examples/dashboard/crossWindow/Viewport.mjs(the empty boot page);examples/dashboard/dock/MainContainer.mjs(perspectives, saved layouts).The Architectural Reality
Docs only:
learn/blog/<slug>.md, ablog.jsonleaf, and images inneomjs/pagesunderresources_pub/website/blog/<slug>/. A code block is shown in the post only after it has run, live in the Portal or in an app the post names.The Fix
One post, ordered the way a developer would build:
useSharedWorkers, the tear-out opt-in, the cross-window sort group, the empty page a torn-out window boots into);The bounds come from the guides, not memory.
Plan (2026-10-11, from a read of the corrected Adoption guide):
javascript live-previewblocks (the v10 deep dives use them). Steps 1–3 and the action flags run as live, editable previews: panes and zones, per-pane policy (closable/movable/pinnableon the declaration), andperspectives+activePerspectivebehind a toolbar (the dock example'sdockShellIndexpattern).?tearout=<itemId>, which a live preview inside the Portal cannot answer. The windows step is read-only code checked againstWorkspace.mjs, and the reader runs it in the Workstation. Persistence (Persistence.createSavedLayout/restoreSavedLayout) and styling tokens (.neo-dock-workspace .neo-dashboard) are read-only too.Acceptance Criteria
ca3b95460f; steps 1–3 run headless in the Portal, steps 4–6 match the examples they name)Workspace.mjsand the corrected Adoption guide at the PR's base: what the engine owns, and what the application supplies. (at the PR's base; the addon list gets a re-read against #19622, see the follow-up ticket)blog.jsonand render-verified on the Portal.Out of Scope
Engine changes, and the benefits story (stage 1).
Related
Live latest-open sweep: latest 20 open issues read at 2026-10-11T16:19Z, no equivalent. A2A in-flight sweep: no claim on an implementation post.
Retrieval Hint: "dock layouts implementation blog post build workspace perspectives tear-out boot page"