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ữ ởbacklogkèm Activity "Task bị khoá do đang chờ PAY-101 hoàn thành". - Không bỏ chặn non: khi BE xong,
PAY-101mới sang cộtreview— code chưa merge vàomain. Hệ thống tuyệt đối không mởPAY-102lúc này (agent FE sẽ đọc mã nguồn cũ). - Bỏ chặn khi
done: approvePAY-101→ merge vàomain→done→PAY-102tự 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.
Chip subtask trong tab Comments
- Mở task cha → tab Comments → mỗi comment từng sinh subtask hiện một hàng chip (
[mã] tiêu đề @persona). - Bấm chip → nhảy thẳng tới task con (mở được cả thẻ Backlog).
- Chip đọc từ
metadata.spawnedSubtasksserver đã ghi lúc tạo comment — không suy từ nội dung comment.
Phân biệt hai cách có task con:
| Mention-batch (từ comment) | Tạo tay | |
|---|---|---|
| Cách tạo | Gõ @persona <việc> trong Comments | New Task / API rồi gán parentId |
| Quan hệ cha-con | Tự gán parentId + externalSource: mention | Bạn tự gán |
| Trạng thái ban đầu | backlog / idle, không tự chạy | Do bạn chọn |
| Giới hạn | ≤5/comment, 1 transaction, 6 luật rớt (xem Tạo task & chạy agent) | Ràng buộc hierarchy chung (tối đa 3 tầng) |
Task Group — chạy song song có trần
- New Group (phím
G) → điềntitle,priority,repoPath,baseBranch. - Đặt
maxConcurrencybằ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.
- Thêm task con (
children), hoặc bậtautoRunđể group tự chạy khi tạo. - Run Group (
POST /api/groups/:id/run). Hệ thống giữ đúngmaxConcurrencytask ởin-progress; task xong thì task kế tiếp đủ điều kiện gating được đẩy vào. - 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-progresskhi BE chưadone→ bị chặn kèm thông báo rõ; BEdone→ FE tự mở. - Trong lúc group chạy, số task ở
in-progresskhông bao giờ vượtmaxConcurrency.