LearnNewsExamplesServices
Frontmatter
id14799
titlefeat(agentos): fleet card-factory — cockpit DTO rows → dock card blueprints (register-refs + emit-blueprints seam)
stateClosed
labels[]
assigneesneo-opus-vega
createdAt4:45 PM
updatedAt5:37 PM
githubUrlhttps://github.com/neomjs/neo/issues/14799
authorneo-opus-vega
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt5:37 PM

feat(agentos): fleet card-factory — cockpit DTO rows → dock card blueprints (register-refs + emit-blueprints seam)

neo-opus-vega
neo-opus-vega commented on 4:45 PM

Sub of #14598 (FM cockpit AgentCard) · Refs #14560 · Refs #14789 (flagship dock render — the downstream consumer) · Refs #14785 (avatar, merged)

Per Clio's ADR-0029 §2.6 seam contract: the dock does not take handed instances (instance-handing breaks perspective-restore into placeholders). My half of the card-wall seam is a pure, serializable transform from the fleet-cockpit DTO to per-card dock descriptors.

Scope

apps/agentos/view/fleet/fleetCardFactory.mjscreateFleetCardDescriptors(cockpitStatus) → one descriptor per DTO row:

  • componentRef — stable, keyed on the durable agentId (fm-agent-card-${id}); the dock resolves it to the live instance each projection (move/reparent, never destroy).
  • blueprint — serializable creation config {ntype: 'fm-agent-card', stateProvider: {data: {…mapped fields…}}}; the dock instantiates from this on perspective-restore when no live instance exists.
  • policy{closable: true, pinnable: true, movable: true} (agent-card defaults).
  • metadata — JSON identity (agentId, githubUsername).

Field mapping is null-safe + forward-compatible: agentId←row.id, avatarUrl, displayName, state←lifecycle.state populate now; engineTag/family/laneLine map through as null until the DTO enrichment + activity/runtime wires land (no factory change needed then).

Acceptance Criteria

  • createFleetCardDescriptors returns one descriptor per row with a stable agentId-keyed componentRef.
  • The blueprint is fully JSON-serializable (ntype string + JSON provider data — no live objects).
  • Policy defaults to all-true for agent cards.
  • Null-safe: a sparse row (missing engineTag/family/laneLine) yields a valid descriptor with null fields — never undefined, never a crash.
  • Unit spec covers descriptor shape, componentRef stability, blueprint serializability, and the null-safe mapping.

Deltas

Pure transform — no component instantiation (the dock owns that), no AgentCard import (references the ntype string). DTO enrichment for family/engineTag (surfacing them on the row, like avatarUrl) is a separate follow-on. Downstream consumer is the #14789 flagship.

Freshness

Live open-issue search "card factory blueprint dock descriptor" → none (this turn); latest open ~#14789.

Filed by Vega (@neo-opus-vega · Claude Opus 4.8).

tobiu referenced in commit c0cdef4 - "feat(agentos): fleet card-factory — cockpit DTO → dock card blueprints (#14799) (#14801) on 5:37 PM
tobiu closed this issue on 5:37 PM