After optional demo execution and docking-policy ownership leave the root, the remaining entrypoint must actually meet the operator's adoption bar. Existing FeedPane/ScalePane, model.Record, Feed/Scale stores and WorkspaceController provide ordinary Neo homes; paneStories, resident markup, feed production/status and composition are still embedded in Workspace.
This is a leaf of the dedicated Workstation consumer-refactoring epic. The shared outcome is a ≤1,000-total-line composition entrypoint with working ordinary docking and optional scripted demos.
The Problem
The named responsibility currently lives on apps/workstation/view/Workspace.mjs, coupling its state, caller surface and teardown to the root. This leaf removes that responsibility and updates its actual callers in the same PR; it does not create a forwarding method for every moved member.
The Architectural Reality
Placement pre-flight: new pane/view classes match FeedPane/ScalePane in apps/workstation/view; controllers match WorkspaceController; data owners use existing model/store domains and root state.Provider. No replacement app framework or new top-level subsystem is needed.
The Fix
Complete app-owned pane/view/data composition using the existing class families. Keep one root provider and the same Store identities; move resident presentation into a named view and live-data production into its appropriate app data owner. Use examples/dashboard/dock/MainContainer.mjs (609 total lines at the source check) as the entrypoint shape: declare zones, panes, tabs, widget registration, default layout and engine capabilities as data/config. Apply that example's existing document/config idiom. New declarative configuration schemas or automatic lifecycle-owner construction belong to the separately scoped Ideation Sandbox, not this leaf. The extracted owners hold actual behavior—live-data production, vessel policy, scripted gestures and tour settlement—with optional demo activation and only a few justified product hooks on the root. Update the app README to show ordinary use and optional tour activation, and measure the final entrypoint rather than accepting the sum of earlier deletions.
Contract Ledger Matrix
Target surface
Source of authority
Proposed behavior
Fallback
Docs
Evidence
Entry definition
Operator 500–1000 target; current Workspace composition
At most 1,000 total source lines, readable without inspecting demo drivers
No feature deletion to pass
App README and local JSDoc
Physical-line measurement plus ordinary-use journey
Pane/provider/feed ownership
Existing FeedPane/ScalePane, root stateProvider and app stores
Same live panes/stores and one producer; normal Neo views/data owners
Existing recreate/restore behavior
Owner JSDoc
Identity, feed and repeated recreate/restore controls
Integrated product
Existing Workstation behavior and prior leaves
Normal docking and explicit tours both remain usable
Existing honest failure states
Updated adoption example
Selected final-head end-to-end journeys
Acceptance Criteria
Workspace.mjs is ≤1,000 total physical source lines (500–1,000 expected, no padding floor). It declares the dock document, pane catalog and engine capabilities with short justified hooks; it uses existing engine defaults and does not contain moved executors or controller state.
No new or modified app module exceeds 2,000 total lines. Useful documentation remains; all responsibility moves and retained hooks are accounted for, with no wrapper-per-method or generic helper monolith.
Normal boot/docking, pin/reveal, pane recreation, cross-window return, undo/redo and warm/cold saved-layout paths work without activating the demo runtime.
The feed retains its declared rate/cap and one producer; pane/store identities survive normal docking and restoration. Cleanup releases owned resources without disposing borrowed ones.
Explicitly activated dense tour and the existing five-beat executable journey retain their assertions; this does not claim whole-media/human film approval or close its separate gate.
The app README demonstrates the compact ordinary composition and identifies optional demo ownership. Final-head unit and selected existing E2E receipts cover the moved concerns; record the final line measurement.
Out of Scope
Repository-wide lint changes, new general guide series, product redesign, reduced demo workload, and closure of unrelated engine/canvas/film defects.
Avoided Traps
No giant helper or copied post-setup factory descriptors; no shadow Group/document registry; no feature removal or weakened assertions to meet the size bar. Preserve explicit creator/borrower cleanup. Existing defects require baseline attribution rather than a false green.
Decision Record impact
Aligned with ADR 0029; preserves existing engine operation, Group, projection and native-window contracts. Any required engine-contract change must be separately authorized and linked before this leaf merges.
unowned-rationale: available for a peer to self-select after intake and dependency checks; the epic steward tracks the outcome without pre-assigning a batch.
Creation sweep: latest 20 open issues and all-state recent A2A rechecked immediately before creation; no duplicate of this leaf. Problem-specific MC recall checked; current source and the parent contract govern where recall is irrelevant. Own assignments were checked for this same Workstation epic; existing film/guide tickets retain their separate scope.
Context
After optional demo execution and docking-policy ownership leave the root, the remaining entrypoint must actually meet the operator's adoption bar. Existing FeedPane/ScalePane, model.Record, Feed/Scale stores and WorkspaceController provide ordinary Neo homes; paneStories, resident markup, feed production/status and composition are still embedded in Workspace.
This is a leaf of the dedicated Workstation consumer-refactoring epic. The shared outcome is a ≤1,000-total-line composition entrypoint with working ordinary docking and optional scripted demos.
The Problem
The named responsibility currently lives on
apps/workstation/view/Workspace.mjs, coupling its state, caller surface and teardown to the root. This leaf removes that responsibility and updates its actual callers in the same PR; it does not create a forwarding method for every moved member.The Architectural Reality
Placement pre-flight: new pane/view classes match FeedPane/ScalePane in apps/workstation/view; controllers match WorkspaceController; data owners use existing model/store domains and root state.Provider. No replacement app framework or new top-level subsystem is needed.
The Fix
Complete app-owned pane/view/data composition using the existing class families. Keep one root provider and the same Store identities; move resident presentation into a named view and live-data production into its appropriate app data owner. Use
examples/dashboard/dock/MainContainer.mjs(609 total lines at the source check) as the entrypoint shape: declare zones, panes, tabs, widget registration, default layout and engine capabilities as data/config. Apply that example's existing document/config idiom. New declarative configuration schemas or automatic lifecycle-owner construction belong to the separately scoped Ideation Sandbox, not this leaf. The extracted owners hold actual behavior—live-data production, vessel policy, scripted gestures and tour settlement—with optional demo activation and only a few justified product hooks on the root. Update the app README to show ordinary use and optional tour activation, and measure the final entrypoint rather than accepting the sum of earlier deletions.Contract Ledger Matrix
Acceptance Criteria
Out of Scope
Repository-wide lint changes, new general guide series, product redesign, reduced demo workload, and closure of unrelated engine/canvas/film defects.
Avoided Traps
No giant helper or copied post-setup factory descriptors; no shadow Group/document registry; no feature removal or weakened assertions to meet the size bar. Preserve explicit creator/borrower cleanup. Existing defects require baseline attribution rather than a false green.
Decision Record impact
Aligned with ADR 0029; preserves existing engine operation, Group, projection and native-window contracts. Any required engine-contract change must be separately authorized and linked before this leaf merges.
unowned-rationale: available for a peer to self-select after intake and dependency checks; the epic steward tracks the outcome without pre-assigning a batch.
Origin Session ID: 153d2e0a-ebae-4087-bcd5-3c92d213132c
Parent: #18456 Related: #18304 · #18303
Creation sweep: latest 20 open issues and all-state recent A2A rechecked immediately before creation; no duplicate of this leaf. Problem-specific MC recall checked; current source and the parent contract govern where recall is irrelevant. Own assignments were checked for this same Workstation epic; existing film/guide tickets retain their separate scope.