2.4 KiB
2.4 KiB
| kind | slug | title | plan_slug | status | priority | tenant_id | cursor_epic_id | updated_at |
|---|---|---|---|---|---|---|---|---|
| epic | workspace-chat | Workspace chat foundation | workspace-communications | ready | P1 | global | null | 2026-10-22 |
Epic objective
Deliver durable channels and messages with a left-rail destination, reliable unread state, and horizontally scalable realtime delivery. The approved product includes project/supported-object contexts, but the current three-brief foundation accepts workspace contexts only. A bounded contextual integration task remains blocked on an authoritative object permission policy; existing generic objects project rows and tenant checks are not private-object ACLs. All paths follow the parent plan's workspace AND context AND channel access contract, including counts, notifications and realtime revocation.
In scope / out of scope
In scope
- Channel, membership, message, thread, and read-cursor persistence.
- Workspace-authorized tRPC queries and mutations.
- WebSocket event delivery with Redis cross-instance fan-out and reconnect catch-up.
- Chat routes, channel navigation, composer, message list, and left-rail badge.
Out of scope
- Agent execution and tool calls.
- Unified non-chat notifications.
- Search indexing, voice/video, and external federation.
Related tasks
| Task | Link |
|---|---|
| Persist channels, messages, and read state | ./Task-chat-persistence.md |
| Deliver scalable realtime chat events | ./Task-chat-realtime-delivery.md |
| Build chat routes and left-rail navigation | ./Task-chat-ui-and-navigation.md |
| Bind project/supported-object contexts safely | ./Task-contextual-chat-authorization.md |
Dependencies
- Depends on: existing workspace authorization and Redis infrastructure.
- Blocks: unified chat notifications and agent participation.
Acceptance criteria
- Every chat row and query is scoped by
workspace_id. - Sending a message commits durably before an event is broadcast.
- Reconnecting clients catch up from a durable cursor without relying on Redis history.
- Chat is reachable from the left rail and displays durable unread/mention state.
Proposed timeline
| Phase | Window | Notes |
|---|---|---|
| Persistence | 1 | Schema, migrations, authorization, API tests |
| Realtime | 2 | Outbox, WebSockets, Redis fan-out, catch-up |
| UI | 3 | Routes, composer, feed, rail badge |