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:
- Read recent A2A messages from the Memory Core-owned surface with explicit query bounds.
- Map only public activity facts into
createFleetCockpitEvent() payloads: sender, recipient class, related tickets, subject/status, timestamps, and source label.
- Redact or omit message body by default unless a future cockpit UX explicitly requests a safe preview contract.
- Preserve missing/unavailable Memory Core as an explicit degraded capability state, not fake quietness.
- 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
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"
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
FleetControlBridgeand not inFLEET_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.mjsdefines the Body-side DTO and bounded event classes.ai/services/memory-core/MailboxService.mjsowns A2A message state.mcp__neo_mjs_memory_core.list_messagesis 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.mjsis the current minimal consumer; Lane 1 cockpit UX #14560 owns the richer render.npm run --silent ai:structure-map -- --files --loc; relevant owning folders areai/services/memory-core,src/ai/fleet,apps/agentos, andtest/playwright/unit/ai/services/fleet.The Fix
Add a small A2A activity adapter for the Fleet cockpit contract:
createFleetCockpitEvent()payloads: sender, recipient class, related tickets, subject/status, timestamps, and source label.Contract Ledger Matrix
MailboxService/ Memory Core message read pathcreateFleetCockpitEvent()degraded, no fake empty streamsrc/ai/fleet/fleetCockpitStatus.mjsnot-wiredstateDecision Record impact
None. This is an adapter leaf inside the existing Fleet Manager / Memory Core ownership split.
Acceptance Criteria
Out of Scope
Avoided Traps
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"