LearnNewsExamplesServices
Frontmatter
id14572
titleFleet cockpit A2A activity adapter
stateClosed
labels
enhancementaiarchitecture
assigneesneo-gpt
createdAt3:23 AM
updatedAt10:46 AM
githubUrlhttps://github.com/neomjs/neo/issues/14572
authorneo-gpt
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt10:46 AM

Fleet cockpit A2A activity adapter

Closed Backlog/active-chunk-2 enhancementaiarchitecture
neo-gpt
neo-gpt commented on 3:23 AM

Context

Lane 2/C now has the cockpit DTO floor in PR #14571, and Ada explicitly split runtime process truth from activity sources in the #14561 decomposition sprint. The DTO keeps activity as not-wired; this ticket turns the Memory Core A2A side into a real cockpit activity adapter without pretending A2A events are fleet-wire.

The Problem

The Fleet cockpit needs to show agent/team activity without scraping UI text or inventing sample events. A2A state lives in Memory Core, not in FleetControlBridge and not in FLEET_WIRE_METHODS. If Lane 1 consumes raw mailbox payloads directly, it couples cockpit rows to private transport details and risks leaking message content that should stay outside the operator surface.

The Architectural Reality

  • src/ai/fleet/fleetCockpitStatus.mjs defines the Body-side DTO and bounded event classes.
  • ai/services/memory-core/MailboxService.mjs owns A2A message state.
  • mcp__neo_mjs_memory_core.list_messages is the operator-visible read path used by agents today; implementation should use the owning Memory Core service/API, not a UI scrape.
  • apps/agentos/view/FleetSettingsPanel.mjs is the current minimal consumer; Lane 1 cockpit UX #14560 owns the richer render.
  • Structure-map gate: ran npm run --silent ai:structure-map -- --files --loc; relevant owning folders are ai/services/memory-core, src/ai/fleet, apps/agentos, and test/playwright/unit/ai/services/fleet.

The Fix

Add a small A2A activity adapter for the Fleet cockpit contract:

  1. Read recent A2A messages from the Memory Core-owned surface with explicit query bounds.
  2. Map only public activity facts into createFleetCockpitEvent() payloads: sender, recipient class, related tickets, subject/status, timestamps, and source label.
  3. Redact or omit message body by default unless a future cockpit UX explicitly requests a safe preview contract.
  4. Preserve missing/unavailable Memory Core as an explicit degraded capability state, not fake quietness.
  5. Add focused unit coverage for redaction, source labels, time bounds, and degraded state.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
A2A cockpit events MailboxService / Memory Core message read path map bounded recent message metadata to createFleetCockpitEvent() Memory Core unavailable -> capability degraded, no fake empty stream issue body + source JSDoc unit tests with message fixtures
Secret/body boundary Memory Core message privacy + cockpit DTO sanitizer omit full message body and secret-shaped fields by default redacted placeholder source JSDoc unit test proves body/secret omission
Fleet DTO integration src/ai/fleet/fleetCockpitStatus.mjs emit bounded event types/source labels consumed by Lane 1 adapter absent -> existing not-wired state DTO JSDoc unit test against DTO event factory

Decision Record impact

None. This is an adapter leaf inside the existing Fleet Manager / Memory Core ownership split.

Acceptance Criteria

  • A Memory Core A2A activity adapter exists for Fleet cockpit consumption.
  • The adapter emits only bounded, source-labeled cockpit events.
  • Full message body and secret-shaped fields are not exposed by default.
  • Memory Core missing/error state is represented as degraded/provisional capability state, not fake empty activity.
  • Focused unit coverage proves mapping, bounds, redaction, and fail-closed behavior.

Out of Scope

  • Runtime process truth; Ada owns the runtime-status wire method.
  • PR/lane GitHub activity; tracked separately.
  • Lane 1 visual design/rendering in #14560.
  • Neural Link proof in #14563.

Avoided Traps

  • No fleet-wire method for A2A events.
  • No mailbox UI scraping.
  • No full message-body leak into the cockpit.
  • No silent empty state when Memory Core is unavailable.

Related

#13015 · #14561 · #14562 · #14563 · #14571 · #14560

Live latest-open sweep: checked latest 25 open issues immediately before creation at 2026-07-04T01:24Z; no equivalent A2A activity adapter found. A2A in-flight sweep: checked recent mailbox claims; Ada requested this decomposition, no competing claim found. KB/local duplicate sweep: exact search only found the #14562 DTO placeholders; Memory Core semantic search returned no existing activity-adapter ticket. Origin Session ID: 33403f62-0332-411a-bda3-0f4ab10cd1e6 Retrieval Hint: "Fleet cockpit A2A activity adapter Memory Core MailboxService createFleetCockpitEvent"

tobiu referenced in commit 1d46057 - "feat(fleet): add A2A cockpit activity adapter (#14572) (#14704)" on 10:46 AM
tobiu closed this issue on 10:46 AM