LearnNewsExamplesServices
Frontmatter
id17451
titleNav cut 1: south reading-surface tabs, preset rename, Review default
stateClosed
labels
enhancementdesignai
assigneesneo-fable-clio
createdAtAug 21, 2026, 12:07 PM
updatedAtAug 21, 2026, 2:38 PM
githubUrlhttps://github.com/neomjs/neo/issues/17451
authorneo-fable-clio
commentsCount0
parentIssue17269
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 21, 2026, 2:38 PM

Nav cut 1: south reading-surface tabs, preset rename, Review default

Closed Backlog/active-chunk-18 enhancementdesignai
neo-fable-clio
neo-fable-clio commented on Aug 21, 2026, 12:07 PM

Nav cut 1: south reading-surface tabs, preset rename, Review default

Context

The #17269 AC1 navigation-model decision passed its spec-first gate today (operator-as-originator review, paired session 2026-08-21 — gate receipt on the ticket). This leaf delivers the model's cut 1 (landing order from the decision comment): the document + preset changes that are small, immediately visible, and add no new mechanics. Cuts 2 (designed tab/rail anatomy, §04 tokens) and 3 (pane content design) remain with #17269 / #17268.

The Problem

Three of the shell's proven reading surfaces — Memories (the #17271 L1 headline surface), the operator Mailbox, and Catch-up — sit as rail items 5–7 of 7 in miniature vertical text while the Activity zone owns ~40% of the screen (the importance/reachability inversion, #17269 G3). The "Fleet" preset collides by name with the Fleet keeper tab while meaning a layout snapshot (G2, preset-costume). The explicit Review preset lands on "Select an agent to inspect" while the implicit card-click path opens the detail loaded (G4, best-path-invisible).

The Architectural Reality

  • apps/agentos/view/fleet/cockpitDockDocument.mjs — the pure dockZone.v1 data leaf; stream-tabs is a tabs node holding one item today; multi-item tabs nodes are shipped mechanics.
  • apps/agentos/view/fleet/cockpitPresets.mjs — the seeded dockLayoutCollection.v1; Focus/Review derive from the default document, so south tabs inherit by construction.
  • apps/agentos/view/fleet/FleetCockpit.mjs activatePerspective — the switch seam; detailRecord is the owner-held selection resolveDockComponentRef materializes from.
  • Rail items are dropped from the tab flow and lazily materialized; resident tab items project as live instances with inactive-card VDOM removal (tab.Container removeInactiveCards).

The Fix

  1. South-tab family: memories, operator (title → "Mailbox"), catchUp move from secondary-rail into stream-tabs (['stream','memories','operator','catchUp'], Activity active); they drop autoHidden and become kind: 'panel'. The rail keeps inspector + invoked tools: ['detail','perspectives','defineAgent','wakeRoutes'].
  2. Preset de-costume via rename: layoutId/perspectiveName fleet/"Fleet" → overview/"Overview"; collection activeLayoutId follows. The keeper tab and the fleet dock panel legitimately keep "Fleet" — they name the same subject; only the layout snapshot was costumed.
  3. Review empty-state default: a perspective that reveals the inspector with no prior selection defaults detailRecord to the roster's first resident before the commit re-projects; a live pane updates in place through the select seam's owner accessor.
  4. Fixture truth follows: the owning unit suites assert the new home truths (south strip, 4-item rail, Overview naming); the obsolete rail-lazy memories pre-state ("in the tree, no pane") converts into a sharper re-materialization-after-true-absence spec for the owner-held selection path.

Known accepted behavior shift: CatchUpPane fires its historyRequest at construction, so the resident tab warm-loads once at boot instead of at rail reveal — acceptable for a reading surface, named here for the record.

Acceptance Criteria

  • cockpitDockDocument() ships stream-tabs: ['stream','memories','operator','catchUp'] (Activity active) and secondary-rail: ['detail','perspectives','defineAgent','wakeRoutes']; the three reading surfaces carry no autoHidden and kind: 'panel'; operator titles "Mailbox".
  • The preset collection lists Overview/Focus/Review with activeLayoutId: 'overview'; no visible surface names a "Fleet" preset.
  • activatePerspective into an inspector-revealing document with detailRecord == null lands on a loaded detail pane (roster's first resident) — never the empty state — while a prior selection is preserved untouched.
  • Dock mechanics (auto-hide, reveal, tear-out, pop-out, exact-position return) behaviorally untouched: the full test/playwright/unit/apps/agentos tree is green.
  • The e2e NL preset activation references the renamed preset (consistency edit; e2e runs outside CI).

Contract Ledger

(Backfilled per PR #17452 review round 1, RA-5 — every consumed-surface change this leaf ships.)

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
cockpitDockDocument() item homes/kinds/titles apps/agentos/view/fleet/cockpitDockDocument.mjs (data leaf) memories/operator/catchUp become resident stream-tabs members, kind: 'panel', no autoHidden; operator titles "Mailbox"; rail = ['detail','perspectives','defineAgent','wakeRoutes'] n/a — authored default; consumers of removed rail homes were migrated (see NL row) file docblock + cockpitDockDocument.spec.mjs unit suite asserts the family + rail truth
Preset ids/names/active id cockpitPresets.mjs layoutId fleetoverview, name "Fleet" → "Overview", activeLayoutId: 'overview'; Focus/Review unchanged no persisted stored-layout store exists (share is manual export/import), so no migration path is required; an imported artifact keeps its own ids file docblock fleetCockpitProjection.spec.mjs presets suite + DockNL journey (activatePerspective('Overview'))
Review selection defaulting FleetCockpit#activatePerspective + #isInspectorRevealed a perspective that actually reveals the inspector (tree placement + active tab + non-auto-hidden) with detailRecord == null defaults to the PROVIDER roster's first record BEFORE the commit re-projects; a prior selection is never overwritten; live pane updates via the owner accessor empty provider roster → detailRecord stays null → honest empty state; absent detail item → never revealed, zero mutation activatePerspective + isInspectorRevealed JSDoc 3 preset-suite arms (#17451-tagged)
Roster read authority for resident consumers FleetCockpit#resolveFleetRosterStore (provider-owned, resolveAgentDefinitionsStore pattern) all five roster readers (recipient options, memories agent options, catch-up partitions, activity actor directory, seat-conflation posture) read the provider store, never the projected grid child no provider/bare mount → null → honest empty options / null posture accessor JSDoc fleetCockpitResidentBoot.spec.mjs (provider-not-grid arm) + parity suite
Resident boot lifecycle FleetCockpit.loadRoster live block + pane onConstructed docs panes construct at projection; the first live roster answer refreshes EVERY resident consumer (mailbox recipients included) and re-derives the seat-conflation posture; CatchUp's construction-time history request recovers exactly once at bridge arrival (need-gated); mailbox lands exactly one first read in either identity/pane ordering reconnectFleet remains the manual re-drive for every seam CatchUpPane/OperatorMailbox onConstructed JSDoc + FleetCockpit comments fleetCockpitResidentBoot.spec.mjs (5 arms)
NL journey consumers test/playwright/e2e/agentos/* tab-role activation replaces rail-reveal for the three moved surfaces; memories rematerialization variants re-anchored on true document absence; live-adjacency jump activates the stream tab before focusing n/a spec comments all six affected journey tests executed green at head
Rollback this leaf's diff reverting restores rail homes + "Fleet" preset wholesale; no persisted state migrates in either direction pure data + guarded seam, no storage writes

Out of Scope

Designed tab/rail/south-tab anatomy at §04 steps (#17269 cuts 2, its AC2/AC3/AC5) · pane content design (#17268) · Tasks tab (#17329 joins the south family when it lands) · System keeper view (#17330) · #17211's rail sizing defects (its scope shrinks after this lands — coordination note posted on #17269).

Related

Parent #17269 (navigation vocabulary; AC1 decision + gate receipt live there) · epic #14560 · #17211 · #17268 · #17271 · #17315/#17316 (memories pop-out/drill-in — placement-orthogonal).

Live latest-open sweep: checked latest 20 open issues at 2026-08-21T09:59Z; no equivalent found. A2A in-flight claim sweep: herd window clean (peer claims are Memory-Core/embedding lanes).

Origin Session ID: 1d9a2e33-2b0d-4185-9296-4b32559e2825

Retrieval Hint: query_raw_memories("nav model cut 1 south reading surface tabs preset overview rename review default")

tobiu referenced in commit 3809616 - "feat(fleet): south reading-surface tabs, preset de-costume, Review default (#17451) (#17452) on Aug 21, 2026, 2:38 PM
tobiu closed this issue on Aug 21, 2026, 2:38 PM