LearnNewsExamplesServices
Frontmatter
id15008
titleFM cockpit: state-backed named perspective switching
stateClosed
labels
enhancementdeveloper-experienceai
assigneesneo-gpt
createdAt1:49 AM
updatedAt2:06 AM
githubUrlhttps://github.com/neomjs/neo/issues/15008
authorneo-gpt
commentsCount0
parentIssue14560
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt2:06 AM
milestonev13.2

FM cockpit: state-backed named perspective switching

Closed Backlog/active-chunk-5 enhancementdeveloper-experienceai
neo-gpt
neo-gpt commented on 1:49 AM

Context

Exact-head review of PR #15004 found that its Fleet / Focus / Review preset layer is independently complete, but its state-continuity interpretation cannot honestly close #14616: ADR 0029 section 2.6 and that ticket require stable component references to resolve to the same live pane instances across projection.

This ticket is the narrow close target for the valuable layer PR #15004 actually delivers, so the live-instance remainder stays owned and visible on #14616 instead of forcing a broad code rewrite into the current review cycle.

The Problem

Fleet Manager operators need named duty layouts without manually reconstructing the cockpit. The useful first layer is state-backed preset switching:

  • three seeded duty layouts;
  • restoration through the landed DockPerspectiveStore;
  • the normal committed-document and FLIP refresh path;
  • owner-held pane state preserved across projection;
  • visible fail-closed refusal;
  • Neural Link activation.

That behavior is real even though the current projection still recreates pane component instances.

The Architectural Reality

  • DockPerspectiveStore is the saved-layout source of authority.
  • FleetCockpit.activatePerspective() must use the same document-commit loop as every dock operation.
  • Owner state continuity and live instance identity are distinct contracts. This ticket accepts the former only; #14616 retains the latter.
  • Unknown or invalid names must leave the committed document byte-identical and render the refusal.
  • Window-topology reconciliation and CRUD management UI are separate consumers.

The Fix

  1. Seed Fleet / Focus / Review as valid window-scope layouts in one perspective store.
  2. Render the preset controls from store state and track the active layout.
  3. Restore through the standard committed-document loop, inheriting FLIP and reduced-motion behavior.
  4. Preserve owner-held Fleet grid/stream state and the provider-owned roster store.
  5. Expose activatePerspective through the existing Neural Link surface.
  6. Render failed activation visibly while leaving worker truth untouched.

Contract Ledger

Surface Source of authority Accepted behavior Fail-closed behavior Evidence
FleetCockpit.activatePerspective(name) DockPerspectiveStore restores Fleet / Focus / Review through the standard document commit loop unknown or invalid name leaves the current document byte-identical and records a visible error focused unit + mounted ghost refusal
preset bar perspective-store list + active id buttons derive from stored records and pressed state follows the active record no hardcoded shadow state focused unit + cockpit journey
pane data continuity Fleet cockpit owner fields + provider-owned roster store grid adapter state and activity events survive the switch no claim of component-instance identity continuity fixture
Neural Link activation registered cockpit surface Review / Fleet can be activated and worker truth read back the same refusal contract applies AgentOS E2E journey

Acceptance Criteria

  • Fleet / Focus / Review records validate and list from one DockPerspectiveStore.
  • Switching commits through the normal dock-document loop and tracks the active record.
  • Owner-held grid and stream state plus the provider-owned roster store survive a switch.
  • Unknown-name activation leaves the live document byte-identical and paints a refusal chip.
  • A real preset-button click and Neural Link Review / Fleet switches are covered.
  • Reduced motion is inherited from the shared motion-token path.
  • Cross-family review before merge.

Out of Scope

  • Live pane instance preservation across perspective switches; that remains the explicit #14616 remainder.
  • Changed-topology reconciliation.
  • Save-current / rename / delete management UI.
  • Resolving the pre-existing VDOM reply wedge tracked by #14985.

Evidence

PR #15004 exact head 5c7fcd5800321c450833371786b598755239a11f:

  • hosted CI: 11/11 green;
  • touched focused unit: 10/10 green;
  • new perspective E2E: green;
  • mounted Ghost refusal chip: visibly rendered;
  • direct live identity probe separately proved the intentionally excluded #14616 remainder.

Related

Parent epic: #14560 Origin ticket / live-instance remainder: #14616 Implementation: PR #15004 Authority: ADR 0029 section 2.6 Known render-refresh wedge: #14985

Origin Session ID: 019f484c-662f-7f31-969a-cbde373efd4a