Chuyển tới nội dung chính
Phiên bản: 1.0

Task phụ thuộc & Task Group song song

Đối tượng: member chạy nhiều task có ràng buộc thứ tự hoặc muốn chạy song song có giới hạn.

Dependency gating — task chờ task

Ví dụ: PAY-101 (Backend: API tạo giao dịch QR) blocks PAY-102 (Frontend: màn hình quét QR).

  • Khi kích hoạt, Gating Engine đọc work_item_links: task không blocker thì chạy, task bị block giữ ở backlog kèm Activity "Task bị khoá do đang chờ PAY-101 hoàn thành".
  • Không bỏ chặn non: khi BE xong, PAY-101 mới sang cột review — code chưa merge vào main. Hệ thống tuyệt đối không mở PAY-102 lúc này (agent FE sẽ đọc mã nguồn cũ).
  • Bỏ chặn khi done: approve PAY-101 → merge vào maindonePAY-102 tự mở khoá và chạy, kéo code BE mới nhất từ main.
  • Lưới bảo hiểm: sweeper 15s quét lại task bị block, chống mất event.

Thêm quan hệ phụ thuộc thủ công:

curl -X POST http://<host>/api/tasks/PAY-101/links \
-H 'Content-Type: application/json' \
-d '{"relatedId":"PAY-102","linkType":"blocks"}'

Vì sao thiết kế vậy? Xem Vì sao task chỉ mở khi blocker done.

Task Group — chạy song song có trần

  1. New Group (phím G) → điền title, priority, repoPath, baseBranch.
  2. Đặt maxConcurrency bằng ParallelismSlider — trần số agent chạy đồng thời trong group.
Mỗi agent là một process CLI + một worktree

maxConcurrency=8 trên máy 8GB RAM sẽ hết bộ nhớ. Bắt đầu từ 2–3.

  1. Thêm task con (children), hoặc bật autoRun để group tự chạy khi tạo.
  2. Run Group (POST /api/groups/:id/run). Hệ thống giữ đúng maxConcurrency task ở in-progress; task xong thì task kế tiếp đủ điều kiện gating được đẩy vào.
  3. Stop Group (POST /api/groups/:id/stop) dừng toàn bộ task đang chạy trong group.

Task bị block không tính vào maxConcurrency và không chiếm slot.

Checklist tự xác minh

  • Kéo task FE sang in-progress khi BE chưa done → bị chặn kèm thông báo rõ; BE done → FE tự mở.
  • Trong lúc group chạy, số task ở in-progress không bao giờ vượt maxConcurrency.