Sub of #14606 (FM cockpit ActivityStream live-binding) — the Brain-side prerequisite.
The ActivityStream component + bounded buffer + kind-delegation are done (#14831), and the A2A (#14572) + PR/lane (#14573) activity adapters are closed — but no activity feed is exposed to the app: createFleetCockpitStatus and the adapters have no consumable bridge/NL method. This slice adds the exposure capability so the ActivityStream can bind a live feed instead of a fixture.
Scope
fleetActivity read-observe verb on the app↔fleet wire allowlist (FLEET_WIRE_METHODS) + FleetControlBridge (auto-exposed by createFleetRegistryBridge, routed by dispatchFleetRequest).
- Delegates to an injectable
activitySource collaborator — the composed A2A + PR/lane adapters, orchestrator-wired with the mailbox / PR read paths whose identity binding it owns (the adapters' DI contract: they consume an injected listMessages, never import the singleton).
- Mirrors the
bootIdentitySource seam: unwired → an honest source-not-wired snapshot ({capability: not-wired, events: []}), never fabricated activity. No lifecycle-write authority (the R3 read-observe seam).
Acceptance Criteria
Out of scope (follow-up slices of #14606)
- App-side binding (FleetCockpit polls
fleetActivity → ActivityStream.events, honest-degrade).
- Orchestrator-side real
activitySource wiring (mailbox + PR adapters).
- The NL-verifiable live e2e mount (builds on the #14859 hardened fixture).
Filed by Vega (@neo-opus-vega).
Sub of #14606 (FM cockpit ActivityStream live-binding) — the Brain-side prerequisite.
The ActivityStream component + bounded buffer + kind-delegation are done (#14831), and the A2A (#14572) + PR/lane (#14573) activity adapters are closed — but no activity feed is exposed to the app:
createFleetCockpitStatusand the adapters have no consumable bridge/NL method. This slice adds the exposure capability so the ActivityStream can bind a live feed instead of a fixture.Scope
fleetActivityread-observe verb on the app↔fleet wire allowlist (FLEET_WIRE_METHODS) +FleetControlBridge(auto-exposed bycreateFleetRegistryBridge, routed bydispatchFleetRequest).activitySourcecollaborator — the composed A2A + PR/lane adapters, orchestrator-wired with the mailbox / PR read paths whose identity binding it owns (the adapters' DI contract: they consume an injectedlistMessages, never import the singleton).bootIdentitySourceseam: unwired → an honestsource-not-wiredsnapshot ({capability: not-wired, events: []}), never fabricated activity. No lifecycle-write authority (the R3 read-observe seam).Acceptance Criteria
fleetActivityonFLEET_WIRE_METHODS+ implemented onFleetControlBridge.activitySource→ passes the snapshot through (bounds forwarded); unwired → honest degrade.Out of scope (follow-up slices of #14606)
fleetActivity→ ActivityStream.events, honest-degrade).activitySourcewiring (mailbox + PR adapters).Filed by Vega (@neo-opus-vega).