Xử lý rework và xung đột merge
Trang này hướng dẫn từ chối task bằng Request Changes đúng cách, xử lý xung đột merge và rollback Wiki khi cần. Đọc khi bạn đã quen Review View và diff chưa đạt hoặc merge báo conflict.
Đối tượng: approver khi diff chưa đạt hoặc merge bị conflict. Điều kiện: đã quen Review View. Role kỹ thuật: Request Changes cần
admin+ human thật, giống Approve.
Rework và conflict nhìn một mạch
Request Changes — vòng rework (tối đa 3 chu kỳ)
- Trong Review Panel bấm Request Changes → ReworkModal.
- Viết ghi chú cụ thể — đây là toàn bộ thông tin agent nhận được:
- Tệ: "Sửa lại đi".
- Tốt: "Bổ sung try-catch retry 3 lần với backoff khi VNPay timeout, thêm unit test cho nhánh timeout".
- Server ghi
task_runsloạirework, bơm ghi chú vào.board/history.md(mục## Rework Attempt #<số> (ngày-giờ)kèmKind+Note), chuyển task vềin-progresstrên cùng worktree và branch cũ (không rẽ nhánh mới). - Agent sửa xong → quay lại
reviewcho vòng duyệt tiếp. Tra cứu chuỗi verdict:GET /api/tasks/:id/reviews;task_runscórun_indextăng dần vớikind='rework'.
Qua API (runId trả về để đối chiếu audit; blockingFindings tùy chọn):
curl -X POST http://<host>/api/tasks/<taskId>/rework \
-H 'Content-Type: application/json' \
-d '{"note": "Bổ sung try-catch retry 3 lần với backoff khi VNPay timeout, thêm unit test cho nhánh timeout"}'
{ "success": true, "task": { "id": "<taskId>", "columnId": "in-progress" }, "runId": "…" }
Hệ thống khoá tự chạy lại, task chuyển needs-human để người can thiệp tay.
Lần rework thứ 4 trả đúng 400 {"error": "Task has exceeded maximum rework attempts (3). Escalated to human engineer.", "reviewState": "needs-human"}.
Lúc này làm tay trong worktree, commit, rồi approve lại trên UI.
Xung đột merge — auto-rework đúng 1 lần
Bối cảnh: hai task song song sửa cùng file; task A merge trước; khi approve task B, git báo conflict.
- Bảo vệ repo gốc trước tiên: merge fail →
git merge --abortngay (repo gốc luôn sạch, lock được nhả). Task sangmerge-conflict, API trả 409 có cấu trúc (không phải 500):
{ "error": "<thông-báo-git>", "conflict": true, "reviewState": "merge-conflict" }
- Dò xung đột cách ly: trong
task.worktreePath, merge thửbaseBranch(rơi vềmain) vào nhánh task, lấy danh sách file conflict (git diff --name-only --diff-filter=U), rồi abort — không chiếm lock repo gốc nên không chặn task khác. - Auto-rework đúng 1 lần: ghi hướng dẫn vào
.board/history.md, gọi lại rework vớikind='auto_conflict_resolution'trên cùng worktree (ghi ch ú liệt kê đúng file conflict). - Agent gỡ xong → merge lần 2 →
done. Agent thất bại, hoặc đây đã là lần auto-conflict thứ 2 (Auto merge conflict resolution already attempted) →needs-human, giao cho người.
useWorktree=false)?Dừng ngay ở needs-human, không auto-rework — không có nơi cách ly để thử. Xử lý tay:
docker exec -it agentjira_server sh -c 'cd <worktreePath> && git status'
Gỡ conflict, commit, rồi approve lại trên UI.
Rollback Wiki & nhánh tri thức
- Rollback trang Wiki (
POST /api/wiki/pages/:slug/revisions/:version/rollback?projectId=…): cần Boardadminvà human thật (cùng cổngwiki:approvevới duyệt draft) — rollback tạo version mới, không ghi đè lịch sử. ThiếuprojectId→400 projectId is required to roll back a wiki page; version sai →400 version must be a positive integer. - Member/agent gọi rollback → 403 ngay tại cổng Board (thiếu
adminhoặc không phải human). - Vượt qua cổng Board nhưng Arkon từ chối quyền → 502 kèm detail (
Failed to roll back page: …): đó là cổng Arkon, liên hệ owner Space / sysadmin kiểm tra department và token. - Merge / close nhánh Wiki (
POST /api/wiki/branches/:id/merge·.../close) cũng cầnadmin+ human — merge là duyệt mọi draft trong nhánh trong 1 transaction (thiếuprojectId→400 projectId is required to act on a wiki branch; nhánh của Space khác →403 Branch does not belong to this Space; kẹt conflict giữa đường →409 Merge blocked by a conflict: …, giữ nguyên để bạn xử lý).
curl -X POST 'http://<host>/api/wiki/pages/<slug>/revisions/2/rollback?projectId=<spaceId>'
curl -X POST 'http://<host>/api/wiki/branches/<branchId>/merge?projectId=<spaceId>' \
-H 'Content-Type: application/json' -d '{"note": "Đã đọc hết draft trong nhánh"}'
Gặp lỗi? Xem Xử lý sự cố.
Đi tiếp: Duyệt & approve · Pentest Human Gate · Xử lý sự cố.