Files
PROJECT-CONTORL/openspec/changes/archive/2025-12-29-add-collaboration/specs/collaboration/spec.md
beabigegg 3470428411 feat: implement collaboration module
- Backend (FastAPI):
  - Task comments with nested replies and soft delete
  - @mention parsing with 10-mention limit per comment
  - Notification system with read/unread tracking
  - Blocker management with project owner notification
  - WebSocket endpoint with JWT auth and keepalive
  - User search API for @mention autocomplete
  - Alembic migration for 4 new tables

- Frontend (React + Vite):
  - Comments component with @mention autocomplete
  - NotificationBell with real-time WebSocket updates
  - BlockerDialog for task blocking workflow
  - NotificationContext for state management

- OpenSpec:
  - 4 requirements with scenarios defined
  - add-collaboration change archived

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 20:45:07 +08:00

3.3 KiB

ADDED Requirements

Requirement: Task Comments

系統 SHALL 支援任務內部的討論留言,減少 Email 往返。

Scenario: 新增留言

  • GIVEN 使用者擁有任務的存取權限
  • WHEN 使用者在任務中新增留言
  • THEN 系統儲存留言並顯示在討論區
  • AND 記錄留言者與時間戳記

Scenario: 回覆留言

  • GIVEN 任務已有留言
  • WHEN 使用者回覆特定留言
  • THEN 系統建立巢狀回覆結構
  • AND 通知原留言者

Scenario: 編輯留言

  • GIVEN 使用者是留言的作者
  • WHEN 使用者編輯自己的留言
  • THEN 系統更新留言內容
  • AND 標示「已編輯」及編輯時間

Scenario: 刪除留言

  • GIVEN 使用者是留言的作者
  • WHEN 使用者刪除自己的留言
  • THEN 系統移除留言
  • AND 若有回覆則顯示「此留言已刪除」

Requirement: User Mentions

系統 SHALL 支援 @相關人員 功能,提及時發送即時通知。

Scenario: @提及通知

  • GIVEN 使用者在留言中使用 @username 提及某人
  • WHEN 留言送出
  • THEN 被提及者收到即時通知
  • AND 通知包含任務連結與留言摘要

Scenario: @提及自動完成

  • GIVEN 使用者輸入 @ 符號
  • WHEN 使用者繼續輸入
  • THEN 系統顯示符合的使用者名單供選擇
  • AND 可用鍵盤或滑鼠選擇

Scenario: @提及數量限制

  • GIVEN 使用者在單則留言中提及超過 10 人
  • WHEN 留言送出
  • THEN 系統拒絕並顯示錯誤訊息

Requirement: Blocker Management

系統 SHALL 提供阻礙 (Blocker) 機制,強制要求主管介入排解。

Scenario: 標記阻礙

  • GIVEN 工程師的任務遇到阻礙無法進行
  • WHEN 工程師將任務標記為 "Blocked"
  • THEN 系統設定 Task.blocker_flag = true
  • AND 建立 Blocker 記錄
  • AND 發送即時通知給該任務所屬專案的 Owner

Scenario: 阻礙原因說明

  • GIVEN 任務被標記為 Blocked
  • WHEN 使用者標記阻礙
  • THEN 系統要求填寫阻礙原因
  • AND 原因顯示在任務詳情與通知中

Scenario: 解除阻礙

  • GIVEN 主管或被指派者處理完阻礙
  • WHEN 使用者解除 Blocked 狀態
  • THEN 系統設定 Task.blocker_flag = false
  • AND 記錄解除時間與處理說明

Requirement: Real-time Notifications

系統 SHALL 透過 Redis Pub/Sub 與 WebSocket 推播即時通知。

Scenario: 即時通知推播

  • GIVEN 發生需要通知的事件(被指派任務、被 @提及、阻礙標記)
  • WHEN 事件發生
  • THEN 系統透過 WebSocket 即時推播通知給相關使用者
  • AND 未讀通知顯示數量標示

Scenario: 通知已讀標記

  • GIVEN 使用者有未讀通知
  • WHEN 使用者查看通知
  • THEN 系統標記為已讀
  • AND 更新未讀數量

Scenario: 通知清單查詢

  • GIVEN 使用者需要查看歷史通知
  • WHEN 使用者開啟通知中心
  • THEN 系統顯示通知列表(依時間降序)
  • AND 支援分頁與已讀/未讀篩選

Scenario: WebSocket 重連

  • GIVEN 使用者的 WebSocket 連線中斷
  • WHEN 連線恢復
  • THEN 系統自動重新建立連線
  • AND 補送中斷期間的未讀通知