@edupia-tutor/spec-driven-docs 0.14.6 → 0.14.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/bin/index.js +1 -1
  2. package/commands/debug.md +1 -1
  3. package/commands/define-product.md +1 -1
  4. package/commands/dev-gen-test.md +1 -1
  5. package/commands/dev-run-test.md +1 -1
  6. package/commands/dev-smoke-test.md +1 -1
  7. package/commands/fix-bug.md +1 -1
  8. package/commands/generate-bdd.md +74 -5
  9. package/commands/generate-bdd.tmpl +73 -4
  10. package/commands/generate-code.md +19 -2
  11. package/commands/generate-code.tmpl +18 -1
  12. package/commands/generate-design-spec.md +50 -6
  13. package/commands/generate-design-spec.tmpl +49 -5
  14. package/commands/generate-prd.md +9 -5
  15. package/commands/generate-prd.tmpl +1 -0
  16. package/commands/generate-spec-manifest.md +1 -1
  17. package/commands/generate-tech-docs.md +2 -1
  18. package/commands/generate-tech-docs.tmpl +1 -0
  19. package/commands/learn.md +1 -1
  20. package/commands/map-testids.md +1 -1
  21. package/commands/propose-scenario.md +7 -3
  22. package/commands/propose-scenario.tmpl +6 -2
  23. package/commands/qc-analyze.md +15 -1
  24. package/commands/qc-analyze.tmpl +14 -0
  25. package/commands/qc-design-test.md +1 -1
  26. package/commands/qc-plan.md +1 -1
  27. package/commands/qc-report.md +1 -1
  28. package/commands/qc-review.md +1 -1
  29. package/commands/qc-run-test.md +1 -1
  30. package/commands/refine-prd.md +33 -13
  31. package/commands/refine-prd.tmpl +32 -12
  32. package/commands/report-bug.md +1 -1
  33. package/commands/review-code.md +1 -1
  34. package/commands/review-context.md +49 -27
  35. package/commands/review-context.tmpl +48 -26
  36. package/commands/review-tech-docs.md +1 -1
  37. package/commands/setup-ai-first.md +10 -10
  38. package/commands/setup-ai-first.tmpl +9 -9
  39. package/commands/sync.md +1 -1
  40. package/commands/update-framework.md +1 -1
  41. package/commands/validate-traces.md +2 -1
  42. package/commands/validate-traces.tmpl +1 -0
  43. package/core/FRAMEWORK_VERSION +1 -1
  44. package/core/commands/debug.md +1 -1
  45. package/core/commands/define-product.md +1 -1
  46. package/core/commands/dev-gen-test.md +1 -1
  47. package/core/commands/dev-run-test.md +1 -1
  48. package/core/commands/dev-smoke-test.md +1 -1
  49. package/core/commands/fix-bug.md +1 -1
  50. package/core/commands/generate-bdd.md +74 -5
  51. package/core/commands/generate-code.md +19 -2
  52. package/core/commands/generate-design-spec.md +50 -6
  53. package/core/commands/generate-prd.md +9 -5
  54. package/core/commands/generate-spec-manifest.md +1 -1
  55. package/core/commands/generate-tech-docs.md +2 -1
  56. package/core/commands/learn.md +1 -1
  57. package/core/commands/map-testids.md +1 -1
  58. package/core/commands/propose-scenario.md +7 -3
  59. package/core/commands/qc-analyze.md +15 -1
  60. package/core/commands/qc-design-test.md +1 -1
  61. package/core/commands/qc-plan.md +1 -1
  62. package/core/commands/qc-report.md +1 -1
  63. package/core/commands/qc-review.md +1 -1
  64. package/core/commands/qc-run-test.md +1 -1
  65. package/core/commands/refine-prd.md +33 -13
  66. package/core/commands/report-bug.md +1 -1
  67. package/core/commands/review-code.md +1 -1
  68. package/core/commands/review-context.md +49 -27
  69. package/core/commands/review-tech-docs.md +1 -1
  70. package/core/commands/setup-ai-first.md +10 -10
  71. package/core/commands/sync.md +1 -1
  72. package/core/commands/update-framework.md +1 -1
  73. package/core/commands/validate-traces.md +2 -1
  74. package/core/skills/code/SKILL.md +7 -759
  75. package/core/skills/debug/SKILL.md +9 -859
  76. package/core/skills/design-spec/SKILL.md +3 -582
  77. package/core/skills/prd/SKILL.md +5 -464
  78. package/core/skills/setup-ai-first/SKILL.md +3 -208
  79. package/core/skills/spec/SKILL.md +7 -450
  80. package/core/skills/test/SKILL.md +10 -1290
  81. package/core/steps/report-footer.md +1 -1
  82. package/core/steps/spawn-agent.md +12 -7
  83. package/core/templates/prd.template.md +7 -4
  84. package/core/templates/project-context.yaml +2 -2
  85. package/docs/01-getting-started/core-concepts.md +3 -3
  86. package/docs/01-getting-started/quickstart.md +4 -3
  87. package/docs/02-guides/bdd-input-checklist.md +68 -0
  88. package/docs/02-guides/developer/README.md +3 -0
  89. package/docs/02-guides/developer/bdd-and-trace.md +4 -3
  90. package/docs/02-guides/developer/commands.md +3 -3
  91. package/docs/02-guides/developer/pr-checklist.md +1 -0
  92. package/docs/02-guides/developer/scenarios.md +2 -2
  93. package/docs/02-guides/developer/workflow.md +3 -3
  94. package/docs/02-guides/prd-input-checklist.md +94 -0
  95. package/docs/02-guides/product-owner/README.md +5 -3
  96. package/docs/02-guides/product-owner/commands.md +1 -1
  97. package/docs/02-guides/product-owner/handoff-checklist.md +5 -5
  98. package/docs/02-guides/product-owner/scenarios.md +19 -17
  99. package/docs/02-guides/tech-docs-input-checklist.md +82 -0
  100. package/docs/02-guides/tester/README.md +1 -1
  101. package/docs/02-guides/tester/bug-reporting.md +1 -1
  102. package/docs/02-guides/tester/qc-automation.md +1 -1
  103. package/docs/03-concepts/README.md +1 -0
  104. package/docs/03-concepts/mechanisms-explained.md +34 -0
  105. package/docs/03-concepts/pipeline.md +12 -9
  106. package/docs/03-concepts/traceability.md +7 -4
  107. package/docs/04-operations/bug-flow.md +2 -0
  108. package/docs/04-operations/sync-and-update.md +3 -3
  109. package/docs/05-reference/command-cheatsheet.md +9 -9
  110. package/docs/05-reference/commands.md +12 -10
  111. package/docs/05-reference/trace-schema.md +2 -1
  112. package/package.json +1 -1
  113. package/skills/code/SKILL.md +7 -759
  114. package/skills/code/SKILL.tmpl +7 -164
  115. package/skills/debug/SKILL.md +9 -859
  116. package/skills/debug/SKILL.tmpl +9 -252
  117. package/skills/design-spec/SKILL.md +3 -582
  118. package/skills/design-spec/SKILL.tmpl +3 -87
  119. package/skills/prd/SKILL.md +5 -464
  120. package/skills/prd/SKILL.tmpl +5 -63
  121. package/skills/setup-ai-first/SKILL.md +3 -208
  122. package/skills/setup-ai-first/SKILL.tmpl +3 -108
  123. package/skills/spec/SKILL.md +7 -450
  124. package/skills/spec/SKILL.tmpl +7 -162
  125. package/skills/test/SKILL.md +10 -1290
  126. package/skills/test/SKILL.tmpl +10 -288
  127. package/steps/report-footer.md +1 -1
  128. package/steps/spawn-agent.md +12 -7
  129. package/templates/prd.template.md +7 -4
  130. package/templates/project-context.yaml +2 -2
@@ -4,475 +4,16 @@ description: Sinh PRD từ một product definition, hoặc phân tích một PR
4
4
 
5
5
  # PRD Skills — Generate & Refine
6
6
 
7
- Skill này xử lý hai lệnh: `/generate-prd` để tạo PRD, và `/refine-prd` để phân tích PRD tìm gap.
8
-
9
- ---
7
+ Skill này xử lý `/generate-prd` và `/refine-prd`. Để **không lệch logic/schema**, skill KHÔNG nhân bản — mỗi lệnh thực thi **y hệt** command tương ứng.
10
8
 
11
9
  ## /generate-prd — Sinh Product Requirements Document
12
10
 
13
- ### Gate
14
-
15
- <!-- Directory: {paths.product_definitions_dir}/**/*.md -->
16
- # Gate — Quy trình vào chuẩn cho mọi lệnh
17
-
18
- Mọi lệnh PHẢI chạy gate này trước khi thực thi phần logic riêng của nó.
19
-
20
- ## Bước 0 — Kiểm tra chế độ Sub-Agent
21
-
22
- Trước tiên, kiểm tra xem `$ARGUMENTS` có phải là payload JSON từ một orchestrator hay không:
23
-
24
- 1. Thử parse `$ARGUMENTS` dưới dạng JSON.
25
- 2. Nếu parse thành công **và** chứa `"_agent_mode": true`:
26
- - **Bỏ qua hoàn toàn Bước 1, 2 và 3 của Gate này.**
27
- - Đặt target file = `payload.target_file`
28
- - Đặt loaded context = `payload.context` (KHÔNG chạy context-loader.md)
29
- - Đặt phạm vi UC = `payload.uc_id` (chỉ xử lý UC này)
30
- - Đặt line range = `payload.uc_section` (chỉ đọc đúng section đó của PRD)
31
- - Đặt dimension = `payload.dimension` nếu có (lệnh review per-UC: chỉ review đúng lăng kính này)
32
- - Đi thẳng tới phần logic riêng của lệnh.
33
- 3. Nếu `$ARGUMENTS` không phải JSON hoặc không có `_agent_mode` → tiếp tục sang Bước 1 (chế độ thường).
34
-
35
- ## Bước 0-B — Kiểm tra Model
36
-
37
- *Bỏ qua bước này nếu `_agent_mode: true` (sub-agent — orchestrator đã kiểm tra rồi).*
38
-
39
- Các lệnh sinh nội dung và review phức tạp đòi hỏi khả năng suy luận mạnh.
40
- Dùng model nhỏ hơn sẽ rủi ro: bỏ sót edge case, phân tích spec thiếu sót, vi phạm kiến trúc.
41
-
42
- Hiển thị và chờ phản hồi:
43
-
44
- ```
45
- ⚙️ MODEL CHECK
46
- ──────────────────────────────────────────────────────────────────
47
- Recommended : claude-opus-4 (hoặc model Opus mới nhất)
48
- Why needed : Phân tích spec, review kiến trúc, sinh code đòi hỏi
49
- suy luận sâu. Model nhỏ hơn dễ bỏ sót edge case.
50
-
51
- Cách đổi trong Claude Code:
52
- • Settings → Model → chọn "claude-opus"
53
- • hoặc: /model → chọn claude-opus
54
-
55
- Đang chạy claude-opus?
56
- Y — đúng, đang dùng claude-opus → tiếp tục
57
- S — bỏ qua kiểm tra (tôi chấp nhận rủi ro chất lượng thấp hơn với model hiện tại)
58
- ──────────────────────────────────────────────────────────────────
59
- ```
60
-
61
- - "Y" → tiếp tục sang Bước 1.
62
- - "S" → tiếp tục sang Bước 1 (người dùng chấp nhận rủi ro, thêm ⚠️ vào report cuối).
63
- - "N" hoặc bất kỳ giá trị nào khác → **DỪNG.** Xuất: "Vui lòng chuyển sang claude-opus rồi chạy lại lệnh này."
64
-
65
- ## Bước 1 — Xác định Target File
66
-
67
- 1. Nếu `$ARGUMENTS` được cung cấp và trỏ tới một file tồn tại → dùng trực tiếp làm target.
68
- 2. Nếu `$ARGUMENTS` là một **UC-ID / ticket ID / tên rút gọn** (không có path) → phân giải thành file bằng cách glob theo bố cục feature-package. `{prd-slug}` lúc này **chưa biết**, nên dùng wildcard `*` cho segment đó, và `**` đệ quy dưới `bdd/` để phủ hết các thư mục con theo platform (`bdd/web/`, `bdd/app/`, `bdd/system/`):
69
- - **Lệnh BDD** (target là `.feature`): `{specs_dir}/{domain}/*/bdd/**/{UC-ID}*.feature` — hoặc `{specs_dir}/*/*/bdd/**/{UC-ID}*.feature` nếu domain cũng chưa biết. Nếu lệnh ngụ ý một platform/scope cụ thể (vd: system tech-doc cần BDD `system/`), ưu tiên kết quả trong thư mục con platform đó.
70
- - **Lệnh PRD** (target là file PRD `{TICKET-ID}-{prd-slug}.md` — file `.md` duy nhất ở gốc feature folder, cạnh `bdd/`): `{specs_dir}/{domain}/*/{TICKET-ID}*.md` nếu biết TICKET-ID; nếu không, `{specs_dir}/{domain}/*/*.md` (khớp feature folder có id tương ứng), hoặc `{specs_dir}/*/*/*.md` nếu domain cũng chưa biết. *(Glob `*/*.md` ở cấp gốc folder chỉ khớp PRD — tech-docs/design-spec `.md` nằm sâu hơn trong thư mục con.)*
71
- - **Lệnh tech-docs**: `{specs_dir}/{domain}/*/tech-docs/{UC-ID}*-tech-design*.md`.
72
- - **Lệnh design-spec**: `{specs_dir}/{domain}/*/design-spec/{TICKET-ID}*.md`.
73
-
74
- Khi một file khớp: đặt nó làm target **và** ghi lại `domain` + `prd_slug` từ path của nó (theo quy tắc trích xuất trong `context-loader.md` Bước 1 — `prd_slug` = segment đầu tiên sau `{specs_dir}/{domain}/`). Mọi path mà lệnh đọc/ghi về sau (BDD/tech-docs/design-spec/trace cùng cấp) đều dùng **`prd_slug` đã phân giải đó**, nên tất cả artifact nằm chung một feature package. Nếu nhiều file khớp (vd: nhiều platform), chọn theo platform/scope của lệnh hoặc liệt kê ra và hỏi.
75
- 3. Nếu `$ARGUMENTS` rỗng hoặc không tìm thấy file khớp:
76
- - Liệt kê các file trong thư mục liên quan của lệnh này (vd: `specs/*/*/*.md` — file PRD ở gốc mỗi feature folder — cho lệnh PRD, `specs/*/*/bdd/**/*.feature` cho lệnh BDD).
77
- - Hiển thị danh sách cho người dùng và hỏi: "Bạn muốn làm việc với file nào? (Nhập số thứ tự hoặc tên file)"
78
- - Chờ người dùng chọn rồi mới tiếp tục.
79
-
80
- ## Bước 2 — Chạy Context Loader
81
-
82
- Nạp toàn bộ context của dự án bằng cách làm theo quy trình trong `steps/context-loader.md`.
83
- Lưu toàn bộ context đã nạp vào bộ nhớ để dùng xuyên suốt phiên làm việc của lệnh.
84
-
85
- ## Bước 3 — CHECKPOINT
86
-
87
- Sau khi hoàn thành Bước 1 và 2, hiển thị bản tóm tắt và chờ xác nhận:
88
-
89
- ```
90
- CHECKPOINT
91
- -----------
92
- Target : {resolved file path}
93
- Project : {project.name từ project-context.yaml}
94
- Tech stack : {language} / {framework}
95
- Module : {module nếu có, else "not configured"}
96
- Domains : {danh sách domain, ngăn cách bởi dấu phẩy}
97
-
98
- Tiếp tục? (Y/N)
99
- ```
100
-
101
- Chờ người dùng trả lời rõ ràng "Y" hoặc "N" rồi mới tiếp tục.
102
- - "Y" → tiếp tục sang các bước riêng của lệnh bên dưới.
103
- - "N" → dừng lại và hỏi người dùng muốn thay đổi gì.
104
-
105
-
106
- ### Quy tắc nội dung — chống jargon kỹ thuật *(áp dụng cho mọi PRD sinh ra)*
107
-
108
- **1. PRD platform-agnostic — chỉ mô tả WHAT (nghiệp vụ), KHÔNG mô tả HOW (kỹ thuật).**
109
- Viết AC / Business Rule / Business Logic theo *kết quả nghiệp vụ*, KHÔNG nhét chi tiết triển khai (API, JWT/token, endpoint, HTTP status, tên class/bảng/cột DB, query, spinner, animation…). Những thứ đó thuộc **Tech Docs** (kỹ thuật) hoặc **Design Spec** (giao diện).
110
-
111
- | ✅ Viết trong PRD (nghiệp vụ) | ❌ KHÔNG viết trong PRD |
112
- |---|---|
113
- | "Đăng nhập thành công → truy cập được tính năng" | "API trả về JWT token" ← Tech Docs |
114
- | "Sai mật khẩu 5 lần → khoá tài khoản 30 phút" | "Click button → hiện toast" ← Design Spec |
115
- | "Phiên hết hạn → yêu cầu xác thực lại" | "Hiển thị spinner khi loading" ← Design Spec |
116
-
117
- - Nếu PO đưa chi tiết UI (màu, layout, animation) → **nhắc**: *"Chi tiết UI này thuộc Design Spec, không thuộc PRD. Ghi nhận để tạo Design Spec sau."*
118
- - Enum/thuật ngữ kỹ thuật ĐÃ chuẩn hoá trong domain-knowledge (vd `userType`, `TYPE_1`) thì giữ nguyên gốc — đây là từ vựng nghiệp vụ, KHÔNG phải jargon triển khai.
119
-
120
- **2. Terminology — bám từ điển dự án.**
121
- - Thay mọi **banned term** bằng canonical term (xem `business-dictionary.md` § Banned Terms); ghi chú việc thay ở mục **Giả định AI**.
122
- - Status/Enum → lấy đúng giá trị trong `core-entities.md` (Enum Registry).
123
- - **Thuật ngữ MỚI**: nếu input PO có từ chưa có trong `business-dictionary.md` và lặp ≥2 lần → **DỪNG, hỏi PO** (nghĩa là gì / canonical term / có thêm vào từ điển không) trước khi tiếp tục.
124
-
125
- **3. Cross-reference bắt buộc.** Mọi chỗ nhắc TICKET-ID khác → inline link `[TICKET-ID](./file.md)` nếu file PRD tồn tại; không để plain text.
126
-
127
- ### Generate
128
-
129
- Sinh PRD theo đúng cấu trúc chuẩn dưới đây (template canonical: `templates/prd.template.md`). Quy ước bắt buộc:
130
-
131
- - **Ngôn ngữ:** heading + nội dung viết tiếng Việt (giữ thuật ngữ kỹ thuật/Enum nguyên gốc).
132
- - **Tiêu đề file:** `# {TICKET}-{N} {Feature Name}` — KHÔNG thêm tiền tố "PRD —".
133
- - **Tên file ghi ra:** `specs/{domain}/{prd-slug}/{TICKET}-{prd-slug}.md` (vd `SEG01-segment-scoring-service.md` — KHÔNG đặt tên `prd.md`; bố cục feature-package — mọi artifact của feature nằm chung folder này, PRD là file `.md` duy nhất ở gốc folder).
134
- - **Business Rule:** đặt BÊN TRONG từng Use Case (không gom thành mục phẳng), bảng 3 cột `ID | Business Rule | Business Logic`; ID theo dạng `{TICKET}-{N}-UC{n}-BR{m}` (đánh số BR liên tục xuyên suốt các UC, không reset mỗi UC).
135
- - **Acceptance Criteria:** danh sách phẳng `**AC{n}:**`, văn xuôi — KHÔNG ép Given/When/Then.
136
- - **Liên kết:** trỏ tới PRD/tài liệu liên quan bằng link tương đối; trỏ `core-entities` / `business-dictionary` ở mục Tài liệu tham khảo.
137
- - **Giả định AI:** nếu phát hiện độ vênh/giả định chưa được PO chốt → liệt kê thành `Q1…Qn` để PO xác nhận; nếu mọi thứ đã rõ từ product-definition → ghi "Không có — toàn bộ nội dung đã được PO xác nhận".
138
-
139
- Template (cấu trúc đầu ra — single-source từ `templates/prd.template.md`):
140
-
141
- ````markdown
142
- # {TICKET}-{N} {Feature Name}
143
-
144
- <!--
145
- Template này được sử dụng bởi workflow /generate-prd.
146
- AI Agent sẽ điền các section dựa trên input từ PO.
147
- Các placeholder {…} cần được thay thế bằng nội dung thực tế.
148
-
149
- FORMAT CHUẨN: Business Rule = bảng 3 cột
150
- ID | Business Rule | Business Logic (KHÔNG tách Business Logic ra khối riêng).
151
-
152
- TERMINOLOGY:
153
- - Tuân thủ 100% từ điển project: specs/domain-knowledge/business-dictionary.md
154
- (KHÔNG dùng từ điển của project khác). Thay banned term bằng canonical term;
155
- nếu phát hiện banned term trong input PO → thay + ghi chú trong "Giả định AI".
156
- - Status/Enum values → tham chiếu core-entities.md (Enum Registry).
157
-
158
- CROSS-REFERENCE (BẮT BUỘC): Bất kỳ chỗ nào nhắc đến một tính năng/ticket khác
159
- (pre-condition, business rule, giả định, AC, hay bất kỳ section nào) → PHẢI gắn inline link:
160
- [TICKET-ID khác](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md)
161
- Không để TICKET-ID dạng plain text nếu tồn tại file PRD tương ứng. (Mỗi PRD nằm trong feature-package riêng nên link trỏ sang folder anh em `../{prd-slug-khác}/`.)
162
- Ngoài ra, ghi rõ quan hệ phụ thuộc trong "Tài liệu tham khảo" ở Appendix.
163
-
164
- NEW TERM DETECTION: Nếu input PO xuất hiện thuật ngữ CHƯA CÓ trong business-dictionary.md
165
- và lặp lại ≥ 2 lần → DỪNG lại, hỏi PO confirm trước khi tiếp tục:
166
- + Thuật ngữ đó nghĩa gì trong ngữ cảnh hệ thống?
167
- + English term chuẩn nên dùng là gì?
168
- + Có cần bổ sung vào business-dictionary.md không?
169
- Sau khi PO confirm → cập nhật business-dictionary.md (nếu PO đồng ý) rồi mới tiếp tục.
170
-
171
- NUMBERING:
172
- - UC ID: {TICKET}-{N}-UC{n} (n bắt đầu từ 1, tăng theo từng use case)
173
- - BR ID: {TICKET}-{N}-UC{n}-BR{m} (m tăng LIÊN TỤC xuyên suốt PRD, KHÔNG reset mỗi UC)
174
- -->
175
-
176
- ---
177
-
178
- ## Metadata
179
-
180
- | Field | Value |
181
- |---------------|------------------------------------------|
182
- | **PRD ID** | {TICKET}-{N} |
183
- | **Version** | 1.0 |
184
- | **Status** | draft |
185
- | **Author** | AI-assisted |
186
- | **PO** | {tên PO} |
187
- | **Domain** | {domain} |
188
- | **Created** | {date} |
189
- | **Updated** | {date} |
190
- | **Ticket** | {TICKET}-{N}{ — nếu PO có link tracker thật, thêm bên cạnh: `{TICKET}-{N} ([Jira]({tracker_url}))`} |
191
- | **API Source** | *(để trống nếu greenfield — chỉ điền `existing` khi PRD bọc một API đã chạy production)* |
192
-
193
- ---
194
-
195
- # Feature
196
-
197
- **{Feature Name}**
198
-
199
- {Đoạn mô tả tổng quan: feature làm gì, cho ai, giải quyết vấn đề gì — lấy từ product-definition.}
200
-
201
- ---
202
-
203
- # 1. Tổng quan
204
-
205
- ## a. User Story
206
-
207
- - **Là một (As a)** {persona}
208
- - **Tôi muốn (I want to)** {action}
209
- - **Để (So that)** {benefit}
210
-
211
- ## b. Phạm vi
212
-
213
- **In Scope**
214
- - {hạng mục trong phạm vi 1}
215
- - {hạng mục trong phạm vi 2}
216
-
217
- **Out of Scope** *(chỉ thêm khi có ranh giới cần nói rõ)*
218
- - {hạng mục ngoài phạm vi + lý do / chủ sở hữu}
219
-
220
- ## c. Phụ thuộc liên service *(mức nghiệp vụ — KHÔNG mô tả API/event/kỹ thuật)*
221
-
222
- > Kế thừa từ Product Definition Phase 1 ("Phụ thuộc liên service"). Nếu contract do đối tác phát triển song song (xem `API Source`), ghi phụ thuộc partner vào đây.
223
-
224
- - {Cần {dữ liệu/năng lực} từ {feature/team/partner} — vì {lý do nghiệp vụ}} — hoặc "Không có"
225
-
226
- ---
227
-
228
- # 2. Acceptance Criteria
229
-
230
- > Mỗi AC kế thừa liên kết "Bắt nguồn từ BR" của Product Definition (Phase 6), remap sang BR ID của PRD. Vì BR ID đã chứa số UC nên ref BR truy ngược được tới đúng UC.
231
-
232
- **AC1:** {Tiêu chí nghiệm thu, văn xuôi, kiểm chứng được.} _(BR: {TICKET}-{N}-UC{n}-BR{m})_
233
-
234
- **AC2:** {…} _(BR: {TICKET}-{N}-UC{n}-BR{m})_
235
-
236
- ---
237
-
238
- # 3. Use Case
239
-
240
- #### {TICKET}-{N}-UC1: {Tên use case}
241
-
242
- **Actor:** {actor}
11
+ **Đọc và tuân theo `commands/generate-prd.md`** với cùng `$ARGUMENTS`.
243
12
 
244
- **Description:** {mô tả luồng}
245
-
246
- **Pre-condition:**
247
- - {điều kiện trước 1}
248
-
249
- **Post-condition:**
250
- - {kết quả sau 1}
251
-
252
- **AC liên quan:** AC{x}, AC{y} *(các AC mà UC này thoả — phải đúng bằng tập AC có ref BR trỏ về UC này ở §2)*
253
-
254
- **Business Rule**
255
-
256
- | ID | Business Rule | Business Logic |
257
- |----|---------------|----------------|
258
- | {TICKET}-{N}-UC1-BR1 | {luật ngắn gọn} | - {logic chi tiết, xuống dòng bằng `<br/>`}<br/>- {…} |
259
- | {TICKET}-{N}-UC1-BR2 | {…} | - {…} |
260
-
261
- ---
262
-
263
- #### {TICKET}-{N}-UC2: {Tên use case}
264
-
265
- {lặp cấu trúc UC như trên; BR đánh số tiếp tục BR3, BR4…}
266
-
267
- ---
268
-
269
- # 4. UI/UX Guidelines
270
-
271
- ## a. User Flow
272
-
273
- ```mermaid
274
- flowchart TD
275
- START(["{điểm bắt đầu}"]) --> A{"{điểm quyết định}"}
276
- A -->|{nhánh}| B["{bước}"]
277
- ```
278
-
279
- ## b. Wireframe
280
-
281
- ### Screen 1: {Tên màn}
282
-
283
- | Thành phần | Chi tiết |
284
- |------------|----------|
285
- | **Screen** | {tên/ngữ cảnh màn} |
286
- | **Components** | - {thành phần 1}<br/>- {thành phần 2} |
287
- | **Actions** | - {hành động 1 → kết quả}<br/>- {hành động 2 → kết quả} |
288
-
289
- ---
290
-
291
- ### Screen 2: {Tên màn}
292
-
293
- {lặp bảng như trên cho từng màn}
294
-
295
- ---
296
-
297
- # Appendix
298
-
299
- ## Input gốc từ PO
300
-
301
- > {Trích nguyên văn input/ghi chú gốc của PO + đường dẫn product-definition nguồn.}
302
-
303
- ## Tài liệu tham khảo
304
-
305
- - [{TICKET liên quan}](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md) — {quan hệ: pre-condition / overlapping / related…}
306
- - Từ điển nghiệp vụ: `{path}/business-dictionary.md`
307
- - Domain knowledge: `{path}/{domain}.md`
308
-
309
- ## Existing API Contract *(CHỈ brownfield — điền khi API Source = existing; greenfield BỎ QUA cả section này)*
310
-
311
- <!--
312
- Chỉ dùng khi PRD bọc một API đã tồn tại trên hệ thống. PO ghi lại contract để:
313
- - /generate-bdd (system) dùng trực tiếp làm input — không cần tổng hợp từ FE/App BDD;
314
- - /generate-tech-docs chạy mode reverse-document (mô tả lại as-is, không design mới);
315
- - /review-tech-docs bỏ qua cổng T7 cross-team sign-off (contract đã cố định).
316
- Nếu greenfield (thiết kế mới) → xoá toàn bộ section này.
317
- -->
318
-
319
- | Method | Path | Auth | Request | Response |
320
- |--------|------|------|---------|----------|
321
- | {GET/POST/PUT/DELETE} | {/api/v1/path} | {Bearer / none} | `{ field: type }` | `{ field: type }` |
322
-
323
- **Error responses:**
324
-
325
- | HTTP Status | Error Code | Khi nào xảy ra |
326
- |-------------|------------|----------------|
327
- | {4xx/5xx} | {ERR_CODE} | {condition} |
328
-
329
- ## Giả định AI
330
-
331
- > {Giả định / độ vênh AI phát hiện khi đối chiếu product-definition với domain-knowledge — cần PO review. AI KHÔNG tự hoà giải.}
332
-
333
- - **Q1 — [AI DRAFT] {tiêu đề}:** {mô tả độ vênh + nguồn}. **Cần PO chốt {điều gì}.**
334
-
335
- _(Nếu không có độ vênh: ghi "Không có — toàn bộ nội dung đã được PO xác nhận qua Product Definition.")_
336
-
337
- ---
338
-
339
- # Change Log
340
-
341
- ### v1.0 — {mô tả} ({date})
342
-
343
- | Mục | Thay đổi |
344
- |-----|----------|
345
- | — | Bản đầu — sinh từ product-definition. |
346
-
347
- ---
348
-
349
- <!--
350
- NEXT STEPS:
351
- Khi PRD được approve (status: approved), chạy:
352
- /generate-bdd "specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md"
353
- để sinh BDD feature specs từ PRD này.
354
- -->
355
-
356
- ````
357
-
358
- ### Output
359
-
360
- ```
361
- ✅ Đã tạo PRD: specs/{domain}/{prd-slug}/{TICKET}-{prd-slug}.md
362
- Status: draft
363
- ```
364
-
365
- # Report Footer — Định dạng output chuẩn cho mọi lệnh
366
-
367
- Mọi report của lệnh phải kết thúc bằng section footer chuẩn này.
368
-
369
- ## Status Badge
370
-
371
- Chọn một theo kết quả:
372
- - `✅ Complete` — mọi bước thành công, không có vấn đề
373
- - `❌ Failed` — lệnh không hoàn thành được do lỗi chặn
374
- - `⚠️ Warnings` — hoàn thành nhưng có vấn đề không chặn, nên review lại
375
-
376
- ## Output Artifacts
377
-
378
- Liệt kê mọi file được tạo hoặc sửa bởi lệnh này:
379
- ```
380
- Output Artifacts:
381
- {created|updated} {file-path} ({mô tả ngắn})
382
- {created|updated} {file-path} ({mô tả ngắn})
383
- ```
384
-
385
- Nếu không ghi file nào (vd: lệnh review hoặc phân tích) → ghi `Output Artifacts: none (read-only)`.
386
-
387
- ## Pipeline Position
388
-
389
- In một sơ đồ pipeline một dòng, đánh dấu phase của lệnh HIỆN TẠI bằng `◀ bạn ở đây`,
390
- để người dùng luôn thấy lệnh này nằm ở đâu trong luồng end-to-end:
391
-
392
- ```
393
- Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
394
- ```
395
-
396
- Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **phase của nó** trong sơ đồ trên:
397
-
398
- | Phase | Commands |
399
- |-------|----------|
400
- | Discovery | `/define-product` |
401
- | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
402
- | Design Spec | `/generate-design-spec` |
403
- | BDD | `/generate-bdd` · `/review-context` (BDD) |
404
- | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
405
- | Code | `/generate-code` · `/review-code` |
406
- | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
407
- | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
408
- | Trace Audit | `/validate-traces` |
409
-
410
- Với **lệnh review**, thêm vòng review 3 bước và đánh dấu bước hiện tại, vd:
411
- `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
412
-
413
- **Lệnh xuyên suốt** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
414
- `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) nằm ngoài pipeline tuyến tính —
415
- **bỏ hẳn dòng Pipeline** cho các lệnh này (đừng cố nhét chúng vào sơ đồ).
416
-
417
- ## Gợi ý lệnh tiếp theo
418
-
419
- Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
420
-
421
- | Lệnh hiện tại | Gợi ý lệnh tiếp theo |
422
- |-------------------------|-----------------------------------------------|
423
- | /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
424
- | /define-product | `/generate-prd {product-definition-file}` |
425
- | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
426
- | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
427
- | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (rồi BDD sau khi sign-off); BE: `/generate-bdd {prd-file}` trực tiếp; sửa PRD nếu NEEDS_FIX |
428
- | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
429
- | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
430
- | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
431
- | /qc-analyze | `/qc-plan {UC-ID}` (xử lý các gap blocker 🔴 trước) |
432
- | /qc-plan | `/qc-design-test {UC-ID}` |
433
- | /qc-design-test | `/qc-review {UC-ID}` (review test-case) |
434
- | /qc-review (test-case) | `/qc-run-test {UC-ID}` nếu APPROVED; sửa TC nếu NEEDS_FIX |
435
- | /qc-run-test | `/qc-report {UC-ID}` rồi `/qc-review {UC-ID}` (review script) |
436
- | /qc-review (script) | `/qc-report {UC-ID}` rồi tạo PR nếu APPROVED |
437
- | /qc-report | `/validate-traces {UC-ID}` để làm mới Living Docs (qc_status) |
438
- | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
439
- | /review-tech-docs | `/generate-code {feature-file}` nếu APPROVED; sửa doc nếu NEEDS_FIX |
440
- | /generate-code | Lần gen đầu → `/review-code {UC-ID}`; gen lại → `/dev-gen-test {UC-ID}` |
441
- | /dev-gen-test | `/dev-run-test {UC-ID}` |
442
- | /dev-run-test (passing) | `/review-code {UC-ID}` |
443
- | /dev-run-test (failing) | `/fix-bug {ticket-id}` hoặc `/debug {error}` |
444
- | /review-code | `/dev-smoke-test {UC-ID}` hoặc tạo PR |
445
- | /dev-smoke-test | Tạo PR và link tới ticket |
446
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; tất cả OK → tạo PR |
447
- | /fix-bug | Tạo PR và link tới ticket |
448
- | /debug | `/fix-bug {ticket-id}` nếu cần sửa |
449
- | /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
450
- | /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
451
- | /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
452
- | /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
453
- | /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
454
-
455
- Định dạng footer như sau:
456
- ```
457
- ---
458
- Status : {badge}
459
- {khối Output Artifacts}
460
- Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
461
- (lệnh review) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
462
- Next : {lệnh gợi ý kèm ví dụ tham số}
463
- ```
464
- *(Bỏ dòng `Pipeline` cho các lệnh xuyên suốt liệt kê ở trên.)*
465
-
466
-
467
- ---
13
+ Command lo: guard discovery completed · phân giải API Source (existing/greenfield/partner) · Terminology Map · map §1c "Phụ thuộc liên service" + §4b Wireframe · slug kế thừa · template canonical (`templates/prd.template.md`) · Change Log rolling-window.
468
14
 
469
15
  ## /refine-prd — Phân tích PRD qua 4 lăng kính review
470
16
 
471
- Lệnh này thực thi **y hệt** `commands/refine-prd.md` — không nhân bản logic ở đây để tránh lệch schema findings.
472
-
473
- `commands/refine-prd.md` bao gồm:
474
- - Phân tích PRD bằng 4 lăng kính **fan-out đa sub-agent** (QA / DEV / SA / PO) + vòng completeness-critic (1 lần chạy ra đủ finding).
475
- - Ghi findings YAML với **schema đầy đủ** (`uc_id`, `quote`, `auto_fixable`) — bắt buộc cho source-jump và nút "Apply to PRD" của Review Board.
476
- - **Resume Mode** (`--resume`): áp dụng findings đã accept → bump version → ghi changelog → reset `draft`.
477
-
478
17
  → **Đọc và tuân theo `commands/refine-prd.md`** với cùng `$ARGUMENTS`.
18
+
19
+ Command lo: 4 lăng kính fan-out đa sub-agent + completeness-critic (findings đầy đủ 1 lần chạy) · schema findings đầy đủ (`uc_id`, `quote`, `auto_fixable`) cho Review Board · Resume Mode (apply → bump version → reset draft → changelog).