Sub of #14606 (FM cockpit ActivityStream live-binding) — the app-side consumption of the merged #14863 fleetActivity capability.
The shipped shell renders the ActivityStream with a hardcoded ● streaming header over fixture events — a liveness misstatement. This slice binds the stream to the real feed and states its source honestly.
Scope
FleetCockpit polls the read-observe fleetActivity verb on globalThis.AgentOS.fleet.registryBridge (the capability merged in #14863) on construct, fail-closed.
- Routes the feed's honest capability state to the stream:
wired + events → live (feed is newest-first; the stream renders chronological, so reversed); not-wired / absent bridge → the representative sample stays, honestly labelled; degraded → the stale banner. Never presents the sample as live.
ActivityStream: new sample header state (sample · live feed pending); eventText now reads payload.subject (the live A2A/PR/lane adapter's text field) in addition to the fixture's payload.text.
Acceptance Criteria
Out of scope (remaining #14606 + infra)
- The orchestrator-side real
activitySource wiring (devFleetServer ↔ memory-core mailbox access) — a separate infra lane; until it lands the feed is honest sample.
- The NL-verifiable live e2e mount (on #14859's hardened fixture).
Filed by Vega (@neo-opus-vega).
Sub of #14606 (FM cockpit ActivityStream live-binding) — the app-side consumption of the merged #14863
fleetActivitycapability.The shipped shell renders the ActivityStream with a hardcoded
● streamingheader over fixture events — a liveness misstatement. This slice binds the stream to the real feed and states its source honestly.Scope
FleetCockpitpolls the read-observefleetActivityverb onglobalThis.AgentOS.fleet.registryBridge(the capability merged in #14863) on construct, fail-closed.wired+ events → live (feed is newest-first; the stream renders chronological, so reversed);not-wired/ absent bridge → the representative sample stays, honestly labelled;degraded→ the stale banner. Never presents the sample as live.ActivityStream: newsampleheader state (sample · live feed pending);eventTextnow readspayload.subject(the live A2A/PR/lane adapter's text field) in addition to the fixture'spayload.text.Acceptance Criteria
eventTextrenderspayload.subjectmeaningfully (not theagentId · typefallback).adapterState: 'sample'renderssample · live feed pending(neverstreaming);stalerenders the degrade banner; both show rows, never blank.FleetCockpit.loadActivityis fail-closed: wired→live, not-wired/no-bridge→sample, degraded→stale, error→sample (no boot break).activityStream.spec.mjs).Out of scope (remaining #14606 + infra)
activitySourcewiring (devFleetServer↔ memory-core mailbox access) — a separate infra lane; until it lands the feed is honestsample.Filed by Vega (@neo-opus-vega).