Files
PROJECT-CONTORL/openspec/changes/archive/2026-01-05-add-kanban-realtime-sync/tasks.md
beabigegg 69b81d9241 feat: implement kanban real-time sync and fix workload cache
## Kanban Real-time Sync (NEW-002)
- Backend:
  - WebSocket endpoint: /ws/projects/{project_id}
  - Project room management in ConnectionManager
  - Redis Pub/Sub: project:{project_id}:tasks channel
  - Task CRUD event publishing (5 event types)
  - Redis connection retry with exponential backoff
  - Race condition fix in broadcast_to_project

- Frontend:
  - ProjectSyncContext for WebSocket management
  - Reconnection with exponential backoff (max 5 attempts)
  - Multi-tab event deduplication via event_id
  - Live/Offline connection indicator
  - Optimistic updates with rollback

- Spec:
  - collaboration spec: +1 requirement (Project Real-time Sync)
  - 7 new scenarios for real-time sync

## Workload Cache Fix (NEW-001)
- Added cache invalidation to all task endpoints:
  - create_task, update_task, update_task_status
  - delete_task, restore_task, assign_task
- Extended to clear heatmap cache as well

## OpenSpec Archive
- 2026-01-05-add-kanban-realtime-sync

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 20:28:42 +08:00

3.9 KiB
Raw Blame History

Tasks: Add Kanban Real-time Sync

Phase 1: Backend Infrastructure

1.1 擴展 WebSocket Manager

  • websocket_manager.py 新增專案房間管理
    • 新增 project_connections: Dict[str, Set[WebSocket]]
    • 實作 join_project(websocket, project_id) 方法
    • 實作 leave_project(websocket, project_id) 方法
    • 實作 broadcast_to_project(project_id, message) 方法
  • 驗證: 單元測試確認房間管理邏輯

1.2 新增專案 WebSocket 端點

  • websocket/router.py 新增 /ws/projects/{project_id} 端點
    • JWT Token 驗證 (復用現有 get_user_from_token)
    • 專案存取權限驗證
    • 心跳機制 (復用現有 PING/PONG 邏輯)
    • Redis Pub/Sub 訂閱 channel project:{project_id}:tasks
  • 驗證: 整合測試確認連線建立與權限檢查

1.3 新增 Redis Pub/Sub Channel

  • redis_pubsub.py 新增 ProjectTaskSubscriber 類別
    • 訂閱 project:{project_id}:tasks channel
    • 轉發訊息到 WebSocket
  • 新增 publish_task_event(project_id, event_type, task_data) 函數
    • event_id 用於多分頁事件去重
    • 含 Redis 連線重試機制
  • 驗證: 單元測試確認訊息發送與接收

Phase 2: Backend Integration

2.1 任務 CRUD 事件發送

  • 修改 tasks/router.py 的以下端點:
    • create_task: 發送 task_created 事件
    • update_task: 發送 task_updated 事件
    • update_task_status: 發送 task_status_changed 事件
    • delete_task: 發送 task_deleted 事件
    • assign_task: 發送 task_assigned 事件
  • 驗證: API 測試確認事件在 CRUD 後正確發送 (8/8 tests passed)

2.2 批次操作支援

  • 確保批次狀態更新也發送事件 (延後實作)
  • 考慮事件合併/節流以避免大量更新時的效能問題 (延後實作)
  • 驗證: 壓力測試確認批次操作不影響系統效能

Phase 3: Frontend Integration

3.1 新增專案同步 Context

  • 建立 ProjectSyncContext.tsx
    • 管理專案 WebSocket 連線
    • 提供訂閱/取消訂閱方法
    • 處理重連邏輯 (指數退避 + 最大重試次數)
    • 使用 event_id 進行多分頁事件去重
  • 驗證: 開發者工具確認連線狀態

3.2 更新 KanbanBoard 組件

  • 整合 ProjectSyncContext
    • 進入頁面時訂閱專案
    • 離開頁面時取消訂閱
  • 處理即時事件:
    • task_created: 新增任務到對應欄位
    • task_updated: 更新任務資料
    • task_status_changed: 移動任務到新欄位 (含 status_color)
    • task_deleted: 從看板移除任務
  • 實作樂觀更新 (Optimistic Update)
    • 拖曳時立即更新 UI
    • API 失敗時回滾
    • 使用 event_id 避免重複應用事件
  • 驗證: 手動測試多瀏覽器同步

3.3 視覺回饋

  • 新增連線狀態指示器 (Live / Offline)
  • 新增任務更新時的動畫效果 (延後實作)
  • 顯示「其他使用者正在編輯」提示 (延後實作)
  • 驗證: UI 審查確認視覺效果

Phase 4: Testing & Documentation

4.1 後端測試

  • WebSocket 連線測試
  • 專案權限驗證測試
  • Redis Pub/Sub 整合測試
  • 併發更新測試 (延後實作)
  • 驗證: 8/8 測試通過

4.2 前端測試

  • Context 單元測試 (Build 通過)
  • KanbanBoard 整合測試 (延後實作)
  • 多使用者同步 E2E 測試 (延後實作)
  • 驗證: Build 成功

4.3 效能驗證

  • 壓力測試100+ 併發使用者 (延後實作)
  • 延遲測試:事件傳播 < 500ms (延後實作)
  • 驗證: 效能指標符合預期

完成狀態

Phase 完成度 備註
Phase 1 100% 基礎架構完成
Phase 2 80% 批次操作延後
Phase 3 90% 動畫效果延後
Phase 4 60% E2E/壓力測試延後

整體完成度: 核心功能 100%,進階功能延後