6.7 KiB
6.7 KiB
name, description
| name | description |
|---|---|
| sad-pipeline | Quy trình sinh/hoàn thiện tài liệu Phân tích & Thiết kế Hệ thống (SAD) có cổng phê duyệt — làm rõ brief bằng câu hỏi trước, chạy từng stage qua workflow generate-sad, người dùng duyệt/sửa xong mới sang bước kế. Dùng khi người dùng muốn tạo tài liệu SAD, phân tích thiết kế hệ thống, hoặc chạy lại một mục của SAD. |
SAD pipeline có cổng phê duyệt (stage-gated)
Bạn (main assistant) là người điều phối và gatekeeper. Bạn KHÔNG tự viết nội dung các mục — đó là việc của các subagent. Việc của bạn: hỏi người dùng, chạy đúng stage, trình bày kết quả trung thực, ghi trạng thái duyệt, và chỉ đi tiếp khi được duyệt.
Workflow engine: .claude/workflows/generate-sad.js — gọi bằng
Workflow({ scriptPath: "<abs path>/.claude/workflows/generate-sad.js", args: {...} }).
Trạng thái nằm trong file (frontmatter của từng section + docs/00-project-brief.md), không dựa vào resumeFromRunId (chỉ sống trong 1 phiên; review thực tế có thể kéo dài nhiều ngày).
Tham số args
| Tham số | Dùng khi | Ý nghĩa |
|---|---|---|
stage |
luôn | intake → requirements → architecture → fanout → detailed → security → testops → consolidate; all = chạy liền không gate |
brief |
intake lần đầu | mô tả dự án của người dùng (nguyên văn) |
answers |
intake vòng 2+ | trả lời của người dùng, dạng Q: ... \nA: ... cho từng câu |
round |
intake | số vòng hiện tại (1, 2, 3); vòng 3 tự chốt mặc định |
notes |
Revise / rerun | ghi chú người duyệt hoặc findings cần xử lý |
only |
fanout | ["api"], ["data","uiux"]… để chạy lại một phần |
requirementIds |
mọi stage sau requirements | danh sách FR-xx đã duyệt để tính coverage bằng code |
Bước 0 — Intake & làm rõ brief
- Lấy brief từ người dùng (nếu chưa có, hỏi 1 câu mở: "Hãy mô tả hệ thống cần xây dựng — mục tiêu, người dùng, tính năng chính, ràng buộc").
- Chạy
{stage:'intake', brief, round:1}. - Nếu
ready === false:- Lấy
intake.gaps, ưu tiênCriticalrồiImportant; tối đa 4 câu/lượt quaAskUserQuestion. - Mỗi câu: option đầu =
proposedDefaultgắn "(Đề xuất)"; thêm 1–2 option thay thế hợp lý; người dùng luôn có "Other". Ghi rõriskIfAssumedtrong description của option mặc định. - Gom trả lời thành
answers(Q: <question>\nA: <trả lời hoặc "dùng mặc định">), chạy lại{stage:'intake', answers, round: round+1}. - Tối đa 3 vòng. Vòng 3 agent tự chốt mặc định →
ready=true.
- Lấy
- GATE 0: trình bày
profile,referenceModelSummary,adoptedDefaults,summary; hỏi duyệt brief. Nếu người dùng muốn sửa → chạy lại intake vớianswerschứa phần sửa.
Bước 1–7 — Vòng lặp stage có gate
Thứ tự: requirements → architecture → fanout → detailed → security → testops → consolidate.
Với mỗi stage:
- Chạy
{stage, requirementIds, notes?}(fanout có thể thêmonly). - Trình bày gate trung thực từ kết quả trả về:
filesWritten(nếuok=false→ nói rõ file chưa được ghi, không đi tiếp)coverage.uncovered— FR nào chưa được mục này đề cập (với fanout: xemresults.api/data/uiux)confidence,assumptions,openQuestions,findings,summary- Khuyến nghị Sửa nếu
confidence = low,uncoveredkhông rỗng ở mục cần phủ hết (api/testops), hoặc có findinghigh. - Nếu mục nhiều sơ đồ Mermaid (03, 05, 06, 07) và người dùng muốn xem, có thể publish file section thành Artifact để sơ đồ render được.
- Hỏi duyệt bằng
AskUserQuestionvới 3 lựa chọn: Duyệt / Sửa (kèm ghi chú) / Dừng.- Duyệt: với từng file trong
filesWritten, đọc file rồiEditfrontmatterstatus: draft→status: approved. Sang stage kế. - Sửa: lấy ghi chú (người dùng gõ ở Other hoặc hỏi thêm 1 câu);
Editfrontmatter file liên quanstatus: needs-revisionvà điềnreviewer_notes; chạy lại cùng stage vớinotes. Lặp cho tới khi Duyệt. - Dừng: tóm tắt trạng thái các mục (approved/draft/needs-revision) và cách tiếp tục sau.
- Duyệt: với từng file trong
- Sau khi
requirementsđược duyệt:GreppatternFR-\d+trongdocs/sections/02-phan-tich-yeu-cau.md(hoặc dùngrequirements[].idtrả về) →requirementIds, truyền cho mọi stage sau.
Findings nhắm vào mục trước (từ security, consolidate, hoặc bất kỳ agent)
- Liệt kê findings theo
targetSection+severity. - Hỏi người dùng: chạy lại mục đích với findings làm
notes? (có thể chọn từng finding) - Nếu có: chạy stage tương ứng (
architecturecho "03";fanout+onlycho "04"/"05"/"07";detailedcho "06"…) vớinotes = findings đã chọn. Duyệt lại mục đó. - Sau đó các mục phụ thuộc phía sau phải chạy lại (đánh
status: needs-revisionrồi chạy theo thứ tự) theo bảng dưới. Tối đa 2 vòng sửa/mục — vượt quá thì dừng và báo người dùng quyết định thủ công.
Bảng phụ thuộc (mục nào đổi → mục nào phải chạy lại)
| Mục thay đổi | Phải chạy lại |
|---|---|
| 00 brief | tất cả |
| 01–02 requirements | 03, 04, 05, 06, 07, 08, 09, consolidate |
| 03 architecture | 04, 05, 06, 08, 09, consolidate |
| 04 api / 05 data | 06, 08, 09, consolidate |
| 07 uiux | 09, consolidate |
| 06 detailed | 08 (phần rà soát luồng), 09, consolidate |
| 08 security | 09, consolidate |
| 09 testops | consolidate |
Quy tắc bắt buộc
- Không bỏ qua gate. Chỉ dùng
stage:'all'khi người dùng nói rõ "chạy hết không cần duyệt" — và nhắc rằng chế độ này không có kiểm soát trung gian. - Không tự viết/sửa nội dung chuyên môn của mục thay agent; chỉ điều phối, hỏi, và sửa frontmatter trạng thái.
- Báo đúng thực tế: agent trả
ok=false/nullnghĩa là chưa có file — không mô tả như đã xong. - Không hỏi lại điều đã có trong
docs/00-project-brief.md. - Kết thúc mỗi lượt bằng tóm tắt ngắn: mục nào approved, mục nào đang draft/needs-revision, bước kế tiếp là gì.