6.7 KiB
6.7 KiB
name, description
| name | description |
|---|---|
| sad-proposal | Tổng hợp bộ tài liệu SAD đã hoàn thiện thành bản proposal gửi khách hàng dạng ứng dụng HTML/CSS trực quan (docs/proposal/index.html + biến thể Artifact), qua 3 stage có cổng phê duyệt — content (proposal-writer) → build (proposal-builder) → review (proposal-reviewer chống rò rỉ nội bộ, kiểm tra trung thực). Dùng khi người dùng nói "làm proposal", "đề xuất giải pháp gửi khách", "tổng hợp SAD thành proposal", "xuất proposal HTML/PDF". |
Proposal từ SAD — quy trình có cổng phê duyệt
Bạn (main assistant) điều phối và làm gatekeeper. Không tự viết nội dung proposal — proposal-writer viết, proposal-builder dựng, proposal-reviewer rà. Bạn hỏi người dùng, chạy đúng stage, trình bày trung thực, và không bao giờ để tài liệu có rò rỉ nội bộ đi ra ngoài.
Engine: .claude/workflows/generate-proposal.js — gọi
Workflow({ scriptPath: "<abs path>/.claude/workflows/generate-proposal.js", args: {...} }).
Tham số args
| Tham số | Ý nghĩa |
|---|---|
stage |
content → build → review; all = chạy liền + 1 vòng tự sửa (chỉ khi người dùng yêu cầu) |
notes |
ghi chú người duyệt / findings khi chạy lại một stage |
keyFacts |
mảng {fact, source} lấy từ gate content, truyền cho stage review |
autoFix |
(all) mặc định true |
sadFile, sectionsDir, briefFile, configFile, outDir |
đường dẫn; mặc định docs/SAD.md, docs/sections, docs/00-project-brief.md, docs/proposal/proposal-config.md, docs/proposal |
Bước 0 — Điều kiện đầu vào
Glob docs/SAD.md. Không có → kiểm tradocs/sections/*.md: nếu có, đề nghị chạy stageconsolidatecủa skillsad-pipelinetrước; người dùng vẫn có thể tiếp tục từ sections (writer hỗ trợ) nhưng phải được cảnh báo.Grep "^status:" docs/sections/*.md. Mục nào chưaapproved→ liệt kê và hỏi: tiếp tục với bản chưa duyệt (proposal sẽ là bản nháp nội bộ) hay quay lại duyệt SAD trước? Ghi quyết định vào lượt trả lời.Glob docs/proposal/proposal-config.md. Không có → copyproposal-config.template.md(cùng thư mục skill này) sangdocs/proposal/proposal-config.md.
Bước 1 — Thu thập thông tin thương mại (không lấy từ SAD)
AskUserQuestion tối đa 4 câu/lượt, tối đa 2 lượt; không hỏi lại điều đã có trong config hoặc brief:
- Lượt 1: tên khách hàng + người liên hệ; đơn vị đề xuất + người phụ trách; ngày phát hành & hiệu lực; mô hình giá (
fixed/time-and-materials/phased/omit— đề xuấtomitnếu chưa có số). - Lượt 2 (nếu cần): timeline bắt đầu/độ dài (prefill từ ràng buộc trong brief, VD "MVP 4 tháng"); đội ngũ (vai trò/số lượng); ngôn ngữ
vi/en; màu thương hiệu/logo. - Cập nhật
docs/proposal/proposal-config.mdbằng Edit. Câu người dùng chưa trả lời → giữ[[CẦN ĐIỀN]], không tự điền. - Nếu
pricingModel ≠ omitmà chưa có bảng chi phí → hỏi có nhập ngay không; không → để bảng trống có placeholder.
Bước 2 — Stage content (GATE P1)
- Chạy
{stage:'content'}(kèmnotesnếu là lần sửa). - Trình bày:
filesWritten, số section,placeholders(đầy đủ),excludedInternal,confidence,summary.confidence=low→ nêu lý do (SAD chưa đủ/config thiếu) và khuyến nghị Sửa hoặc bổ sung config. - Hỏi Duyệt / Sửa (ghi chú) / Dừng. Duyệt → Edit frontmatter
docs/proposal/proposal-content.md:status: draft→status: content-approved. Sửa → chạy lạicontentvớinotes. LưukeyFactstừ gate để dùng ở bước 4.
Bước 3 — Stage build (GATE P2)
- Chạy
{stage:'build'}(kèmnotesnếu sửa). - Trình bày:
filesWritten,failedChecks(phải rỗng),placeholdersCount,mermaidBlocks,approxSizeKB,summary. Hướng dẫn mởdocs/proposal/index.htmlbằng trình duyệt để xem. - Xem trực quan (khuyến nghị): publish
docs/proposal/artifact.htmlbằng Artifact (favicon📑, description 1 câu; Mermaid render sẵn trong Artifact). Artifact mặc định riêng tư — việc chia sẻ link cho khách là quyết định của người dùng, chỉ sau khi GATE P3 đạt. - Hỏi Duyệt / Sửa (ghi chú) / Dừng.
failedCheckskhông rỗng → mặc định khuyến nghị Sửa.
Bước 4 — Stage review (GATE P3 — cổng bảo vệ khách hàng)
- Chạy
{stage:'review', keyFacts}. - Trình bày:
verdict,leaks(từng snippet),placeholders,findingstheo severity,failedFacts,canSend. - Định tuyến sửa (tối đa 2 vòng, sau đó dừng và báo người dùng):
leakshoặc findingtarget=content→ chạy lạicontentvớinotes= danh sách; rồi chạy lạibuild(nội dung đổi thì HTML phải dựng lại); rồireview.- chỉ finding
target=html→ chạy lạibuildvớinotes; rồireview. placeholderscòn → không phải lỗi pipeline: liệt kê để người dùng điền vào config (giá/ngày/tên) rồi chạy lạicontent→build→review; hoặc người dùng chấp nhận gửi bản nháp nội bộ có đánh dấu vàng.
- Chỉ khi
canSend === truemới gọi là bản gửi được.verdict=passnhưng còn placeholder → "bản nháp chờ điền".
Bước 5 — Bàn giao
- PDF: mở
docs/proposal/index.html→ In → "Save as PDF" (đã có CSS in: ẩn sidebar, ngắt trang theo mục, khổ A4). - Artifact: republish
artifact.html(cùng file path → cùng URL) nếu đã sửa; nhắc rằng link mặc định riêng tư. - Tóm tắt cuối: verdict, số leak (phải 0), số placeholder, đường dẫn 3 file, mục nào đã duyệt. Nhắc: SAD là tài liệu nội bộ, chỉ gửi proposal.
Quy tắc bắt buộc
- Không bỏ gate;
stage:'all'chỉ khi người dùng nói rõ, và vẫn phải chạy/đọcreviewtrước khi bàn giao. - Không tự điền giá/ngày/tên; không tự sửa câu chữ proposal thay agent (trừ frontmatter trạng thái).
- Có
leaks→ tuyệt đối không publish/share; sửa trước. - Báo trung thực:
ok=falsenghĩa là file chưa được ghi. - Mỗi lượt kết thúc bằng tóm tắt ngắn: trạng thái 3 stage, bước kế tiếp.