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.mjsactivatePerspective — 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.ContainerremoveInactiveCards).
The Fix
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'].
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.
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.
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.)
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
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
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).
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).
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 puredockZone.v1data leaf;stream-tabsis atabsnode holding one item today; multi-item tabs nodes are shipped mechanics.apps/agentos/view/fleet/cockpitPresets.mjs— the seededdockLayoutCollection.v1; Focus/Review derive from the default document, so south tabs inherit by construction.apps/agentos/view/fleet/FleetCockpit.mjsactivatePerspective— the switch seam;detailRecordis the owner-held selectionresolveDockComponentRefmaterializes from.tab.ContainerremoveInactiveCards).The Fix
memories,operator(title → "Mailbox"),catchUpmove fromsecondary-railintostream-tabs(['stream','memories','operator','catchUp'], Activity active); they dropautoHiddenand becomekind: 'panel'. The rail keeps inspector + invoked tools:['detail','perspectives','defineAgent','wakeRoutes'].fleet/"Fleet" →overview/"Overview"; collectionactiveLayoutIdfollows. The keeper tab and the fleet dock panel legitimately keep "Fleet" — they name the same subject; only the layout snapshot was costumed.detailRecordto the roster's first resident before the commit re-projects; a live pane updates in place through the select seam's owner accessor.Known accepted behavior shift:
CatchUpPanefires itshistoryRequestat 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()shipsstream-tabs: ['stream','memories','operator','catchUp'](Activity active) andsecondary-rail: ['detail','perspectives','defineAgent','wakeRoutes']; the three reading surfaces carry noautoHiddenandkind: 'panel';operatortitles "Mailbox".activeLayoutId: 'overview'; no visible surface names a "Fleet" preset.activatePerspectiveinto an inspector-revealing document withdetailRecord == nulllands on a loaded detail pane (roster's first resident) — never the empty state — while a prior selection is preserved untouched.test/playwright/unit/apps/agentostree is green.Contract Ledger
(Backfilled per PR #17452 review round 1, RA-5 — every consumed-surface change this leaf ships.)
cockpitDockDocument()item homes/kinds/titlesapps/agentos/view/fleet/cockpitDockDocument.mjs(data leaf)memories/operator/catchUpbecome residentstream-tabsmembers,kind: 'panel', noautoHidden;operatortitles "Mailbox"; rail =['detail','perspectives','defineAgent','wakeRoutes']cockpitDockDocument.spec.mjscockpitPresets.mjsfleet→overview, name "Fleet" → "Overview",activeLayoutId: 'overview'; Focus/Review unchangedfleetCockpitProjection.spec.mjspresets suite + DockNL journey (activatePerspective('Overview'))FleetCockpit#activatePerspective+#isInspectorRevealeddetailRecord == nulldefaults to the PROVIDER roster's first record BEFORE the commit re-projects; a prior selection is never overwritten; live pane updates via the owner accessordetailRecordstays null → honest empty state; absent detail item → never revealed, zero mutationactivatePerspective+isInspectorRevealedJSDocFleetCockpit#resolveFleetRosterStore(provider-owned,resolveAgentDefinitionsStorepattern)null→ honest empty options / null posturefleetCockpitResidentBoot.spec.mjs(provider-not-grid arm) + parity suiteFleetCockpit.loadRosterlive block + paneonConstructeddocsCatchUpPane/OperatorMailboxonConstructed JSDoc + FleetCockpit commentsfleetCockpitResidentBoot.spec.mjs(5 arms)test/playwright/e2e/agentos/*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")