LearnNewsExamplesServices
Frontmatter
id15144
titlePromote the dense workstation to a standalone app
stateClosed
labels
enhancementairefactoringtestingarchitecture
assigneesneo-gpt-emmy
createdAt6:55 AM
updatedAt9:22 AM
githubUrlhttps://github.com/neomjs/neo/issues/15144
authorneo-gpt-emmy
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt9:22 AM
milestonev13.2

Promote the dense workstation to a standalone app

Closed Backlog/active-chunk-5 enhancementairefactoringtestingarchitecture
neo-gpt-emmy
neo-gpt-emmy commented on 6:55 AM

Context

The operator's 2026-07-14 authority delta identifies a product-boundary error in the just-landed dense-workstation showcase: the v13.2 flagship is buried behind the AgentOS dock-demo childapp even though the application does not consume Fleet Manager or the planned Agent Harness. The next ticket and PR must correct that boundary.

Closed #15099 explicitly selected apps/agentos/childapps/dockdemo and rejected a standalone app because it treated that childapp as the release product surface. PR #15133 proved the feature itself — density × living data, real docking, two themes, deterministic tour — but live source inspection falsifies the placement premise. This ticket reverses only that home decision; it preserves the shipped proof.

This is directly inside the v13.2 roadmap gate: public animated docking demos and flagship applications must read as products, not as hidden modes of an unrelated AgentOS childapp.

The Problem

The flagship currently boots only at /apps/agentos/childapps/dockdemo/index.html?demo=c. apps/agentos/childapps/dockdemo/view/Viewport.mjs imports DemoCWorkspace and selects it through the demo=c query mode.

The runtime implementation itself is not an AgentOS/Fleet consumer:

  • DemoCWorkspace.mjs composes generic Neo dashboard, state, grid, DockService, DockZoneModel, and TourRunner authorities.
  • its two data surfaces are app-owned Store<Model> instances under one root state.Provider;
  • it imports no Fleet store, roster, lifecycle controller, account model, or harness shell.

The actual coupling is accidental product identity:

  • every class and DOM selector is named AgentOS.childapps.dockdemo.* / .agentos-dockdemo-*;
  • the workspace loads AgentOS.view.Viewport solely to inherit the Fleet palette;
  • its SCSS consumes --fm-* tokens defined in AgentOS theme files;
  • panel copy names Fleet, Memory Core, Native Edge Graph, swarm, and harness concepts despite the surface being a general operations workstation;
  • the tour content lives in apps/agentos/tour/;
  • unit and E2E paths encode AgentOS ownership.

A top-level flagship must be independently discoverable, bootable, buildable, themed, tested, and named. Moving only the URL while retaining AgentOS namespace/theme ownership would leave the architectural error intact.

The Architectural Reality

  • Canonical standalone browser applications live at apps/<app>/ and own app.mjs, index.html, neo-config.json, view/, and any model/ / store/ state. apps/colors and apps/finance are direct sibling precedents.
  • apps/agentos/childapps/dockdemo remains the home of Demo A (dock choreography) and Demo B (perspectives/pop-out). Those technical demonstrations do not become part of the flagship.
  • The durable product identity is Workstation; “dense” is an acceptance property, not an application namespace. The destination is apps/workstation/ with Workstation.* classes.
  • neo.harness.dockZone.v1 remains the currently shipped generic dock-document schema used by core dashboard classes and non-AgentOS examples. Renaming that core contract is not required to correct this consumer boundary.
  • The app-work invariants remain binding: one view-root state.Provider; data-carrying UI binds data.Store of data.Model; SCSS owns styling; no plain-array data projection and no CSS-in-JS.
  • Structural pre-flight is a sibling-file-lift: the new top-level app and app-scoped test directories match established repository roles. No new subsystem or architecture-map row is introduced.

The Fix

One PR performs an ownership-preserving extraction, not a fork:

  1. Create apps/workstation/ as a complete Neo app build target with app.mjs, index.html, neo-config.json, and a Workstation.view.Viewport that directly mounts the workspace without a query-mode switch.
  2. Relocate and rename Demo C's workspace, panes, model, stores, and tour content into app-owned Workstation.* modules. Preserve the existing dock document, Store/Model identities, feed contract, TourRunner screenplay, and docking behavior.
  3. Move the workspace SCSS into resources/scss/src/apps/workstation/; add light/dark Workstation theme files; replace --fm-* with app-owned --workstation-* tokens and .agentos-dockdemo-* selectors with .workstation-*.
  4. Generalize the panel/story copy into an operations workstation. Remove Fleet Manager, AgentOS, Memory Core, Native Edge Graph, swarm, and harness product claims from the app while preserving the twenty-pane density and living-data narrative.
  5. Remove Demo C's import and ?demo=c mode from the AgentOS dockdemo viewport. Do not add a wrapper, redirect, re-export, or second source copy.
  6. Relocate and rename the focused unit and whitebox E2E specs to Workstation-owned paths. Point the mounted journey at /apps/workstation/index.html and update class/DOM identity oracles.
  7. Update the dockdemo README so it documents only Demos A/B, and add a Workstation README with the standalone run URL and proof contract.

Contract Ledger

Target surface Source of authority Proposed behavior Fallback Docs Evidence
/apps/workstation/index.html standalone app marker trio directly boots the flagship Workstation fail loudly on missing app/config; no AgentOS wrapper Workstation README mounted whitebox E2E
Workstation.* class tree relocated app modules app owns viewport, workspace, panes, model, stores, and tour none; duplicate AgentOS classes forbidden JSDoc + README class census + focused unit
Workstation light/dark palette app-owned SCSS + theme files --workstation-* tokens supply both Neo themes no --fm-* inheritance SCSS intent comments computed-style + dual-theme E2E
AgentOS dockdemo boot modes dockdemo Viewport only Demo A default and ?demo=b; no Demo C import unknown modes resolve to Demo A as today dockdemo README A/B focused tests + source census
dense living-data proof existing Workstation stores, dock document, and tour same 100k scale store, capped ≥10/sec feed, twenty panes, split/return, overflow, both themes fail-closed test oracles Workstation README relocated unit + E2E

Decision Record impact

none — this relocates a product consumer and removes false AgentOS ownership. It does not alter the landed dock schema, ADR 0029 docking invariants, TourRunner contract, or framework APIs.

Acceptance Criteria

  • apps/workstation/ is a complete standalone Neo app and /apps/workstation/index.html boots it directly in development.
  • The standalone build/config census recognizes Workstation; its neo-config.json enables the same required runtime capabilities and both Neo light/dark themes.
  • The relocated implementation uses Workstation.* classes, .workstation-* selectors, and --workstation-* theme tokens. No AgentOS.*, .agentos-dockdemo-*, --fm-*, Fleet, AgentOS, Memory Core, Native Edge Graph, swarm, or harness product identity remains in the Workstation app/theme/test tree, except the unchanged core schema string neo.harness.dockZone.v1.
  • AgentOS dockdemo no longer imports or routes Demo C; Demo A and Demo B retain their current URLs and behavior.
  • There is one implementation, not copied AgentOS and Workstation variants; the old Demo C modules, tour, SCSS, and app-scoped tests are removed from their AgentOS paths.
  • Workstation still mounts at least eighteen dock items, exactly 100,000 scale records, one capped batched feed growing at ≥10 records/sec, real overflow, split/return choreography, and both themes.
  • One root state.Provider still owns the exact Store<Model> instances; pane, store, component, and relevant DOM identities remain stable across the tour.
  • Relocated focused unit coverage passes for the dock document, stores, and workspace ownership contracts.
  • Relocated whitebox E2E passes at the standalone URL with zero page/runtime errors, sequential-frame continuity, overflow geometry, 100k scroll, Canvas-worker updates, dual-theme completion, and no temporary DockFlip residue.
  • Focused Demo A/B coverage proves their childapp was not regressed by removing Demo C.
  • Cross-family review.

Out of Scope

Renaming neo.harness.dockZone.v1 or moving core docking classes · implementing #15136 tab-chrome reconciliation · changing the DockFlip work in PR #15143 · extracting Demo A/B · changing Fleet Manager or the Agent Harness · redesigning the accepted Workstation composition · new docking operations or public APIs.

Avoided Traps

  • Move all three demos: rejected — it preserves the accidental A/B/C grouping and fails to give the flagship its own product boundary.
  • Standalone wrapper importing the childapp: rejected — the URL changes while ownership, namespace, theme, and source authority remain wrong.
  • Copy instead of relocate: rejected — two implementations drift and recreate the exact theming concern that #15099 used to reject standalone ownership.
  • Keep Fleet tokens/copy after moving files: rejected — filesystem placement alone does not make an independent app.
  • Compatibility redirect from ?demo=c: rejected before v13.2 ships — it preserves an unrelated AgentOS route and dual discoverability with no released compatibility contract.
  • Escalate to a new Discussion: rejected — this is a reversible, sibling-pattern app extraction with no core API or cross-system trade-off, and the operator supplied the missing product-boundary authority directly.

Related

Parent: #13158 · follows #15099 / PR #15133 · follow-up #15136 · motion dependency PR #15143

Live latest-open sweep: checked the latest 20 open issues at 2026-07-14T04:54Z; no equivalent found. All-state title/content searches returned only closed #15099, whose standalone rejection is the premise this ticket supersedes. A2A all-state recency sweep: latest 30 messages checked at the same gate; no overlapping [lane-claim] or [lane-intent].

Retrieval Hint: standalone Workstation extract Demo C AgentOS childapp app boundary theme ownership fm tokens

tobiu referenced in commit b1dfd47 - "refactor(workstation): promote flagship to standalone app (#15144) (#15146)" on 9:22 AM
tobiu closed this issue on 9:22 AM