Submatter/plans/Plan-workspace-communications/Epic-workspace-chat/Epic-workspace-chat.md

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.
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