LearnNewsExamplesServices
Frontmatter
id17560
titleFleet view folder: topology move and base-class naming (mechanical)
stateClosed
labels
enhancementairefactoringarchitectureagent-os
assigneesneo-fable-clio
createdAtAug 22, 2026, 6:58 PM
updatedAtAug 22, 2026, 10:11 PM
githubUrlhttps://github.com/neomjs/neo/issues/17560
authorneo-fable-clio
commentsCount0
parentIssue17559
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[ ] 17568 Fleet util modules become classes with owned placement, [ ] 17561 Tasks view: a list.Base with section header records
closedAtAug 22, 2026, 10:11 PM

Fleet view folder: topology move and base-class naming (mechanical)

Closed Backlog/active-chunk-18 enhancementairefactoringarchitectureagent-os
neo-fable-clio
neo-fable-clio commented on Aug 22, 2026, 6:58 PM

Context

First leaf of #17559 (laws 1 + 3). apps/agentos/view/fleet/ is one flat folder of 43 files (27 PascalCase classes, 16 camelCase modules); twelve container.Base subclasses and seven component.Base subclasses carry role-word suffixes ("Pane", "Stream", "Card", "Detail", "Bar", "Rail", "Dot", "Grid" on a container) instead of their base family. Every later leaf of the epic is born into the topology this leaf creates, so it runs FIRST — after the in-flight fleet-folder PRs (#17542, #17545) merge, to keep the move conflict-free.

The Problem

Class names that lie about their base class (FleetGrid extends container.Base), a folder that cannot be navigated by surface, and Brain-side pure-function modules mixed into Body-side app code. Zero behavior change is owed here; the shape change is the deliverable.

The Architectural Reality

  • Precedent: apps/portal/view/** — a folder per surface (about/, learn/, news/, …), each with MainContainer + MainContainerController (+ MainContainerStateProvider), components named by base.
  • Consumers of the current class names: unit specs under test/playwright/unit/apps/agentos/view/fleet/**, e2e specs (Neural Link find_instances by className), cockpitDockDocument.mjs / kindRegistry.mjs module imports, docs/output. Dock item ids ('tasks', 'memories', …) and fm-* CSS class names are NOT JS class names and stay unchanged.
  • SCSS mirrors: resources/scss/src/apps/agentos/fleet/*.scss follow the same folder split (file moves only; selectors untouched).

The Fix

  1. git mv into the epic's topology: cockpit/ (FleetCockpit → cockpit/Container, its Controller, dock document, presets), roster/ (+ roster/card/), activity/, tasks/, memories/, mailbox/ (agent + operator + compose form + recipient chips), detail/, instances/, health/.
  2. Rename every class so the suffix is its base family; the folder supplies the namespace (AgentOS.view.fleet.tasks.Container, …roster.List once #17553 lands, …health.Container, …roster.card.Container, …roster.card.FamilyRailComponent, …). (Amended at delivery: ntypes stay UNCHANGED — they are registry keys consumed by item.ntype === checks, not base-class claims; renaming them would touch runtime consumers for zero conformance gain.)
  3. The camelCase modules RELOCATE to apps/agentos/util/ as modules with imports rewritten. (Amended at delivery: the class CONVERSION and the final per-module placement — cockpit-scoped builders vs cross-surface util classes — are #17568, the natively-linked successor this review round mandated; converting call sites in 40+ files belongs in its own reviewable leaf.)
  4. Specs and SCSS files mirror the moves; docs/output regenerated; kindRegistry / dock document imports updated.
  5. A structural witness spec under test/playwright/unit/apps/agentos/ walks apps/agentos/view/** and asserts: every class's suffix matches its base family, and no camelCase module lives under view/ — the regression guard for laws 1 + 3.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
AgentOS.view.fleet.* class names (ntypes unchanged — amended) #17559 law 1 renamed to base-family suffixes inside surface namespaces; ntypes stay as registry keys every consumer (specs, e2e selectors, registry, dock imports) updated in the same PR class docblocks structural witness spec + green suites
apps/agentos/util/* (relocated modules — amended) #17559 law 3; Neo.util.* precedent modules relocated with imports rewritten; class conversion + final per-module placement = #17568 (successor, natively linked) none — pure relocation, no logic change module docblocks call-site grep: zero imports from the old paths
additionalThemeFiles namespaces (added at review round 1) src/worker/App.mjs namespace→SCSS mapping every entry follows its moved chunk (…fleet.cockpit.SpineBanner, …fleet.cockpit.ViewerWakeTelltale, …fleet.mailbox.Chips) the conformance witness resolves every entry to a real chunk — fail closed config docblocks the theme-resolution witness
dock item ids + fm-* CSS classes unchanged untouched n/a n/a theme-surface check green

Acceptance Criteria

  • Structural witness spec green: no class under apps/agentos/view/** whose suffix contradicts its base family; no camelCase module under view/.
  • npm run test-unit (owning trees incl. apps/agentos/**) and the agentos e2e specs green at the head — zero behavior change (no assertion text changes except names/paths).
  • npm run check-theme-surfaces green; SCSS files moved, selectors untouched.
  • docs/output regenerated in the same commit; zero imports from retired paths (grep receipt).
  • Headed receipt: the cockpit boots and every dock pane renders in the dev cockpit after the move.

Out of Scope

Primitive migrations (their own leaves under #17559), CSS class renames (theme-surface + golden implications), controller/provider extraction (#17335), any behavior change.

Related

Epic: #17559. Must land after #17542 and #17545 (blocked-by edges). Precedent: apps/portal/view/**.

Live latest-open sweep: checked latest 20 open issues at 2026-08-22T16:55:35Z; no equivalent. A2A claim sweep: no competing claim.

Origin Session ID: 28bee2e0-4dc8-4375-8514-78fcf38d0d30 Retrieval Hint: query_raw_memories("fleet view folder topology move base-class naming mechanical util classes")

tobiu referenced in commit 1fd30a5 - "chore(agentos): fleet view topology move and base-class naming (#17560) (#17566) on Aug 22, 2026, 10:11 PM
tobiu closed this issue on Aug 22, 2026, 10:11 PM