64 lines
2 KiB
Markdown
64 lines
2 KiB
Markdown
|
|
---
|
||
|
|
kind: task
|
||
|
|
slug: convoy-activity-feed-sse
|
||
|
|
title: Live convoy activity feed (SSE)
|
||
|
|
plan_slug: automation-foundation
|
||
|
|
epic_slug: fleet-dashboard
|
||
|
|
status: draft
|
||
|
|
priority: P2
|
||
|
|
tenant_id: global
|
||
|
|
owner: unassigned
|
||
|
|
cursor_todo_id: null
|
||
|
|
updated_at: "2026-08-03"
|
||
|
|
---
|
||
|
|
|
||
|
|
# Task summary
|
||
|
|
|
||
|
|
Real-time activity stream from `convoy_events` for mission control and fleet dashboard — research/build/gate/health events without full page refresh.
|
||
|
|
|
||
|
|
## Description
|
||
|
|
|
||
|
|
**Benchmark:** Autensa live activity feed (SSE). Echodo already appends `convoy_events` for role completion, transitions, and (future) health events — this task exposes them as a **subscription surface**.
|
||
|
|
|
||
|
|
### Transport
|
||
|
|
|
||
|
|
- Prefer Next.js Route Handler `GET /api/convoys/activity/stream` with SSE (workspace-scoped via session)
|
||
|
|
- Alternative: tRPC subscription if infra already supports it — pick one, document in ADR addendum
|
||
|
|
|
||
|
|
### Event types surfaced
|
||
|
|
|
||
|
|
- `role_complete`, `transition`, `health`, `gate_action`
|
||
|
|
- Payload: `convoy_id`, `title`, `event_type`, `role`, `outcome`, `occurred_at`, `estimated_cost_usd` (when present)
|
||
|
|
|
||
|
|
### UI
|
||
|
|
|
||
|
|
- Mission control: collapsible **Activity** strip (last 20 events for current workspace)
|
||
|
|
- Fleet dashboard: global feed with product/repo filter
|
||
|
|
- Fallback: React Query poll every 30s when SSE unavailable
|
||
|
|
|
||
|
|
## Dependencies
|
||
|
|
|
||
|
|
- Epic 4 `convoy_events` (shipped)
|
||
|
|
- [Task-orchestrator-auto-nudge](../Epic-apps-orchestrator/Task-orchestrator-auto-nudge.md) for health events (soft — feed works without it)
|
||
|
|
|
||
|
|
## Subtasks
|
||
|
|
|
||
|
|
- [ ] SSE route with workspace membership check
|
||
|
|
- [ ] `convoy_events` tail query + fan-out on insert (LISTEN/NOTIFY or short poll server-side)
|
||
|
|
- [ ] `ActivityFeed` client component
|
||
|
|
- [ ] Rate limit / connection cap per user
|
||
|
|
|
||
|
|
## Estimation
|
||
|
|
|
||
|
|
M
|
||
|
|
|
||
|
|
## Acceptance criteria
|
||
|
|
|
||
|
|
- [ ] New `role_complete` event appears in mission control within 5s without refresh
|
||
|
|
- [ ] User cannot subscribe to another workspace's events
|
||
|
|
- [ ] Connection closes cleanly on navigation
|
||
|
|
|
||
|
|
## Links
|
||
|
|
|
||
|
|
- Epic: `./Epic-fleet-dashboard.md`
|