@educa-corp/sdd-framework 0.6.0 → 0.7.0

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 (205) hide show
  1. package/bin/gate-trace.js +25 -2
  2. package/bin/index.js +32 -5
  3. package/bin/lint-trace.js +41 -0
  4. package/bin/self-check.js +430 -3
  5. package/bin/trace-schema.json +391 -30
  6. package/core/FRAMEWORK_VERSION +1 -1
  7. package/{commands/extend-prd.md → core/commands/amend-prd.md} +205 -173
  8. package/core/commands/dev-run-test.md +47 -9
  9. package/core/commands/extend-prd.md +39 -12
  10. package/core/commands/generate-bdd.md +43 -4
  11. package/core/commands/generate-code.md +33 -0
  12. package/core/commands/generate-tech-docs.md +34 -2
  13. package/core/commands/qc-run-test.md +29 -3
  14. package/core/commands/refine-prd.md +13 -2
  15. package/core/commands/review-context.md +43 -8
  16. package/core/commands/sync.md +105 -1
  17. package/core/commands/validate-traces.md +284 -11
  18. package/core/rules/workflow.md +34 -0
  19. package/core/steps/context-loader.md +26 -5
  20. package/core/templates/feature.template +1 -1
  21. package/docs/02-concepts/architecture.md +36 -0
  22. package/docs/04-reference/commands.md +148 -134
  23. package/docs/04-reference/trace-schema.md +39 -0
  24. package/docs/explain/02b-extend-prd.md +1 -1
  25. package/docs/explain/02c-amend-prd.md +152 -0
  26. package/docs/explain/28-sync.md +25 -0
  27. package/docs/explain/README.md +136 -135
  28. package/package.json +1 -8
  29. package/commands/debug.md +0 -529
  30. package/commands/debug.tmpl +0 -260
  31. package/commands/define-product.md +0 -438
  32. package/commands/define-product.tmpl +0 -225
  33. package/commands/dev-gen-test.md +0 -700
  34. package/commands/dev-gen-test.tmpl +0 -490
  35. package/commands/dev-run-test.md +0 -435
  36. package/commands/dev-run-test.tmpl +0 -225
  37. package/commands/dev-smoke-test.md +0 -374
  38. package/commands/dev-smoke-test.tmpl +0 -217
  39. package/commands/extend-prd.tmpl +0 -273
  40. package/commands/fix-bug.md +0 -519
  41. package/commands/fix-bug.tmpl +0 -197
  42. package/commands/generate-architecture.md +0 -354
  43. package/commands/generate-architecture.tmpl +0 -197
  44. package/commands/generate-bdd.md +0 -923
  45. package/commands/generate-bdd.tmpl +0 -590
  46. package/commands/generate-code.md +0 -859
  47. package/commands/generate-code.tmpl +0 -649
  48. package/commands/generate-design-spec.md +0 -737
  49. package/commands/generate-design-spec.tmpl +0 -524
  50. package/commands/generate-prd.md +0 -722
  51. package/commands/generate-prd.tmpl +0 -226
  52. package/commands/generate-spec-manifest.md +0 -321
  53. package/commands/generate-spec-manifest.tmpl +0 -164
  54. package/commands/generate-tech-docs.md +0 -920
  55. package/commands/generate-tech-docs.tmpl +0 -273
  56. package/commands/learn.md +0 -399
  57. package/commands/learn.tmpl +0 -130
  58. package/commands/map-testids.md +0 -238
  59. package/commands/map-testids.tmpl +0 -81
  60. package/commands/propose-scenario.md +0 -359
  61. package/commands/propose-scenario.tmpl +0 -202
  62. package/commands/qc-analyze.md +0 -269
  63. package/commands/qc-analyze.tmpl +0 -112
  64. package/commands/qc-design-test.md +0 -226
  65. package/commands/qc-design-test.tmpl +0 -69
  66. package/commands/qc-plan.md +0 -206
  67. package/commands/qc-plan.tmpl +0 -49
  68. package/commands/qc-report.md +0 -217
  69. package/commands/qc-report.tmpl +0 -60
  70. package/commands/qc-review.md +0 -210
  71. package/commands/qc-review.tmpl +0 -53
  72. package/commands/qc-run-test.md +0 -326
  73. package/commands/qc-run-test.tmpl +0 -116
  74. package/commands/refine-prd.md +0 -653
  75. package/commands/refine-prd.tmpl +0 -281
  76. package/commands/report-bug.md +0 -305
  77. package/commands/report-bug.tmpl +0 -148
  78. package/commands/review-code.md +0 -415
  79. package/commands/review-code.tmpl +0 -146
  80. package/commands/review-context.md +0 -902
  81. package/commands/review-context.tmpl +0 -530
  82. package/commands/review-tech-docs.md +0 -561
  83. package/commands/review-tech-docs.tmpl +0 -404
  84. package/commands/setup-ai-first.md +0 -602
  85. package/commands/setup-ai-first.tmpl +0 -450
  86. package/commands/sync.md +0 -430
  87. package/commands/sync.tmpl +0 -429
  88. package/commands/update-framework.md +0 -203
  89. package/commands/update-framework.tmpl +0 -202
  90. package/commands/validate-traces.md +0 -1077
  91. package/commands/validate-traces.tmpl +0 -920
  92. package/hooks/data-guard.js +0 -232
  93. package/hooks/settings.json +0 -19
  94. package/modules/android-compose/module.yaml +0 -13
  95. package/modules/android-compose/stack-profile.yaml +0 -57
  96. package/modules/angular/architecture-snippets/component-patterns.md +0 -187
  97. package/modules/angular/module.yaml +0 -6
  98. package/modules/angular/stack-profile.yaml +0 -38
  99. package/modules/context-engineering/architecture-snippets/context-design.md +0 -119
  100. package/modules/context-engineering/module.yaml +0 -9
  101. package/modules/context-engineering/stack-profile.yaml +0 -61
  102. package/modules/dotnet/architecture-snippets/clean-arch.md +0 -160
  103. package/modules/dotnet/module.yaml +0 -6
  104. package/modules/dotnet/stack-profile.yaml +0 -50
  105. package/modules/flutter/module.yaml +0 -14
  106. package/modules/flutter/stack-profile.yaml +0 -59
  107. package/modules/golang/architecture-snippets/domain-layout.md +0 -283
  108. package/modules/golang/module.yaml +0 -6
  109. package/modules/golang/stack-profile.yaml +0 -40
  110. package/modules/ios-swiftui/module.yaml +0 -13
  111. package/modules/ios-swiftui/stack-profile.yaml +0 -55
  112. package/modules/java-spring/architecture-snippets/layered-arch.md +0 -201
  113. package/modules/java-spring/module.yaml +0 -15
  114. package/modules/java-spring/stack-profile.yaml +0 -28
  115. package/modules/nextjs/architecture-snippets/app-router-patterns.md +0 -269
  116. package/modules/nextjs/module.yaml +0 -14
  117. package/modules/nextjs/stack-profile.yaml +0 -74
  118. package/modules/nuxt/module.yaml +0 -14
  119. package/modules/nuxt/stack-profile.yaml +0 -58
  120. package/modules/phaser-game/architecture-snippets/phaser-scene-patterns.md +0 -646
  121. package/modules/phaser-game/module.yaml +0 -15
  122. package/modules/phaser-game/stack-profile.yaml +0 -90
  123. package/modules/php-laravel/architecture-snippets/service-repository.md +0 -302
  124. package/modules/php-laravel/module.yaml +0 -15
  125. package/modules/php-laravel/stack-profile.yaml +0 -56
  126. package/modules/qc-playwright/stack-profile.yaml +0 -66
  127. package/modules/react/architecture-snippets/hooks-query-patterns.md +0 -254
  128. package/modules/react/module.yaml +0 -14
  129. package/modules/react/stack-profile.yaml +0 -63
  130. package/modules/react-native/module.yaml +0 -14
  131. package/modules/react-native/stack-profile.yaml +0 -56
  132. package/modules/vue/module.yaml +0 -14
  133. package/modules/vue/stack-profile.yaml +0 -65
  134. package/rules/data-protection.md +0 -80
  135. package/rules/workflow.md +0 -99
  136. package/skills/code/SKILL.md +0 -19
  137. package/skills/code/SKILL.tmpl +0 -19
  138. package/skills/debug/SKILL.md +0 -19
  139. package/skills/debug/SKILL.tmpl +0 -19
  140. package/skills/design-spec/SKILL.md +0 -11
  141. package/skills/design-spec/SKILL.tmpl +0 -11
  142. package/skills/discovery/SKILL.md +0 -14
  143. package/skills/discovery/SKILL.tmpl +0 -14
  144. package/skills/prd/SKILL.md +0 -19
  145. package/skills/prd/SKILL.tmpl +0 -19
  146. package/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
  147. package/skills/qc/qa-analyst/acceptance-criteria.md +0 -60
  148. package/skills/qc/qa-analyst/business-rules.md +0 -59
  149. package/skills/qc/qa-analyst/data-flow.md +0 -64
  150. package/skills/qc/qa-analyst/spec-breakdown.md +0 -61
  151. package/skills/qc/qa-designer/e2e/journey.md +0 -41
  152. package/skills/qc/qa-designer/exploratory/charter.md +0 -68
  153. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +0 -43
  154. package/skills/qc/qa-designer/functional/api.md +0 -45
  155. package/skills/qc/qa-designer/functional/gui-feature.md +0 -46
  156. package/skills/qc/qa-designer/functional/gui-screen.md +0 -52
  157. package/skills/qc/qa-designer/integration/api.md +0 -42
  158. package/skills/qc/qa-designer/integration/db.md +0 -39
  159. package/skills/qc/qa-designer/integration/gui.md +0 -40
  160. package/skills/qc/qa-designer/integration/kafka.md +0 -40
  161. package/skills/qc/qa-designer/non-functional.md +0 -40
  162. package/skills/qc/qa-planner/test-plan.md +0 -120
  163. package/skills/qc/qa-reviewer/script/e2e.md +0 -87
  164. package/skills/qc/qa-reviewer/script/exploratory.md +0 -45
  165. package/skills/qc/qa-reviewer/script/functional.md +0 -101
  166. package/skills/qc/qa-reviewer/script/integration.md +0 -91
  167. package/skills/qc/qa-reviewer/script/non-functional.md +0 -126
  168. package/skills/qc/qa-reviewer/test-case/e2e.md +0 -73
  169. package/skills/qc/qa-reviewer/test-case/exploratory.md +0 -43
  170. package/skills/qc/qa-reviewer/test-case/functional.md +0 -76
  171. package/skills/qc/qa-reviewer/test-case/integration.md +0 -69
  172. package/skills/qc/qa-reviewer/test-case/non-functional.md +0 -73
  173. package/skills/qc/qa-runner/e2e.md +0 -49
  174. package/skills/qc/qa-runner/exploratory/session.md +0 -36
  175. package/skills/qc/qa-runner/functional/api.md +0 -35
  176. package/skills/qc/qa-runner/functional/gui-feature.md +0 -51
  177. package/skills/qc/qa-runner/functional/gui-screen.md +0 -55
  178. package/skills/qc/qa-runner/integration.md +0 -47
  179. package/skills/qc/qa-runner/non-functional.md +0 -49
  180. package/skills/qc/qa-runner/report/report.md +0 -37
  181. package/skills/setup-ai-first/SKILL.md +0 -19
  182. package/skills/setup-ai-first/SKILL.tmpl +0 -19
  183. package/skills/spec/SKILL.md +0 -19
  184. package/skills/spec/SKILL.tmpl +0 -19
  185. package/skills/test/SKILL.md +0 -18
  186. package/skills/test/SKILL.tmpl +0 -18
  187. package/steps/business-language.md +0 -56
  188. package/steps/capture-lesson.md +0 -112
  189. package/steps/context-loader.md +0 -406
  190. package/steps/gate.md +0 -151
  191. package/steps/report-footer.md +0 -125
  192. package/steps/review-fanout.md +0 -159
  193. package/steps/spawn-agent.md +0 -129
  194. package/steps/trace-mirror.md +0 -53
  195. package/templates/README.md +0 -70
  196. package/templates/architecture.template.md +0 -394
  197. package/templates/ci/trace-gate.yml +0 -146
  198. package/templates/design-spec.template.md +0 -217
  199. package/templates/feature.template +0 -123
  200. package/templates/hooks/pre-push +0 -61
  201. package/templates/platform-guide.template.md +0 -145
  202. package/templates/prd.template.md +0 -283
  203. package/templates/product-definition.template.md +0 -188
  204. package/templates/project-context.yaml +0 -212
  205. package/templates/tech-design.template.md +0 -490
@@ -1,283 +0,0 @@
1
- # {TICKET}-{N} {Feature Name}
2
-
3
- <!--
4
- Template này được sử dụng bởi workflow /generate-prd.
5
- AI Agent sẽ điền các section dựa trên input từ PO.
6
- Các placeholder {…} cần được thay thế bằng nội dung thực tế.
7
-
8
- FORMAT BR: MẶC ĐỊNH bảng 3 cột — ID | Business Rule | Business Logic
9
- (KHÔNG tách Business Logic ra khối riêng).
10
- NGOẠI LỆ — MỞ CỘT: nếu MỌI BR trong một UC chia sẻ cùng một bộ thuộc tính lặp lại
11
- (vd trigger / data / tần suất), promote các thuộc tính đó thành CỘT RIÊNG —
12
- một bản ghi = một DÒNG. Dấu hiệu tự phát hiện: đang phải dùng <br/> để nhồi
13
- NHIỀU HƠN MỘT bản ghi cùng cấu trúc vào một ô. Chi tiết + cảnh báo BR ID churn:
14
- xem §3 "Business Rule" của template và mục "Hình dạng bảng Business Rule" của lệnh.
15
-
16
- TERMINOLOGY:
17
- - Tuân thủ 100% từ điển project: specs/domain-knowledge/business-dictionary.md
18
- (KHÔNG dùng từ điển của project khác). Thay banned term bằng canonical term;
19
- nếu phát hiện banned term trong input PO → thay + ghi chú trong "Giả định AI".
20
- - Status/Enum values → tham chiếu core-entities.md (Enum Registry).
21
-
22
- CROSS-REFERENCE (BẮT BUỘC): Bất kỳ chỗ nào nhắc đến một tính năng/ticket khác
23
- (pre-condition, business rule, giả định, AC, hay bất kỳ section nào) → PHẢI gắn inline link:
24
- [TICKET-ID khác](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md)
25
- 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}/`.)
26
- Ngoài ra, ghi rõ quan hệ phụ thuộc trong "Tài liệu tham khảo" ở Appendix.
27
-
28
- NEW TERM DETECTION: Nếu input PO xuất hiện thuật ngữ CHƯA CÓ trong business-dictionary.md
29
- và lặp lại ≥ 2 lần → DỪNG lại, hỏi PO confirm trước khi tiếp tục:
30
- + Thuật ngữ đó nghĩa gì trong ngữ cảnh hệ thống?
31
- + English term chuẩn nên dùng là gì?
32
- + Có cần bổ sung vào business-dictionary.md không?
33
- Sau khi PO confirm → cập nhật business-dictionary.md (nếu PO đồng ý) rồi mới tiếp tục.
34
-
35
- NUMBERING:
36
- - UC ID: {TICKET}-{N}-UC{n} (n bắt đầu từ 1, tăng theo từng use case)
37
- - 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)
38
- -->
39
-
40
- ---
41
-
42
- ## Metadata
43
-
44
- | Field | Value |
45
- |---------------|------------------------------------------|
46
- | **PRD ID** | {TICKET}-{N} |
47
- | **Version** | 1.0 |
48
- | **Status** | draft |
49
- | **Author** | AI-assisted |
50
- | **PO** | {tên PO} |
51
- | **Domain** | {domain} |
52
- | **Created** | {date} |
53
- | **Updated** | {date} |
54
- | **Ticket** | {TICKET}-{N}{ — nếu PO có link tracker thật, thêm bên cạnh: `{TICKET}-{N} ([Jira]({tracker_url}))`} |
55
- | **API Source** | *(để trống nếu greenfield — chỉ điền `existing` khi PRD bọc một API đã chạy production)* |
56
-
57
- ---
58
-
59
- # Feature
60
-
61
- **{Feature Name}**
62
-
63
- {Đ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.}
64
-
65
- ---
66
-
67
- # 1. Tổng quan
68
-
69
- ## a. User Story
70
-
71
- - **Là một (As a)** {persona}
72
- - **Tôi muốn (I want to)** {action}
73
- - **Để (So that)** {benefit}
74
-
75
- ## b. Phạm vi
76
-
77
- > **Scope = ranh giới, KHÔNG phải đặc tả.** Mỗi mục một dòng ngắn "làm gì / không làm gì". Đừng nhét **cơ chế** (retry/timeout/nhánh lỗi → BR/BL) hay **định nghĩa thuật ngữ** (vd "điểm khởi tạo = …" → Business Definition / business-dictionary) vào đây.
78
-
79
- **In Scope**
80
- - {hạng mục trong phạm vi 1}
81
- - {hạng mục trong phạm vi 2}
82
-
83
- **Out of Scope** *(chỉ thêm khi có ranh giới cần nói rõ)*
84
- - {hạng mục ngoài phạm vi + lý do / chủ sở hữu}
85
-
86
- ## c. Phụ thuộc liên service *(mức nghiệp vụ — KHÔNG mô tả API/event/kỹ thuật)*
87
-
88
- > 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.
89
-
90
- - {Cần {dữ liệu/năng lực} từ {feature/team/partner} — vì {lý do nghiệp vụ}} — hoặc "Không có"
91
-
92
- ## d. Quy ước *(TUỲ CHỌN — chỉ thêm khi tài liệu có quy ước áp dụng xuyên suốt; nếu không có → XOÁ HẲN section này)*
93
-
94
- > Khai báo **MỘT LẦN** các quy ước áp dụng cho **mọi BR** ở §3. BR **KHÔNG** lặp lại nội dung đã khai ở đây,
95
- > AC §2 **trỏ tới** quy ước thay vì chép lại. Đây là nơi chứa định nghĩa dùng chung, giá trị mặc định,
96
- > và cách đọc các cột của bảng BR — những thứ trước đây bị xé nhỏ và lặp trong từng dòng.
97
- >
98
- > Phân biệt với **§1b Phạm vi** (ranh giới làm/không làm) và **business-dictionary** (định nghĩa thuật ngữ
99
- > cấp domain, dùng chung nhiều PRD): §1d chỉ chứa quy ước **cục bộ của tài liệu này**.
100
-
101
- - **{Tên quy ước}**: {nội dung áp dụng cho mọi BR bên dưới}
102
- - **{Giá trị mặc định dùng chung}**: {…}
103
-
104
- ---
105
-
106
- # 2. Acceptance Criteria
107
-
108
- > 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.
109
- >
110
- > **1 AC = 1 tiêu chí NGHIỆM THU (outcome quan sát/kiểm được) + ref BR.** KHÔNG viết cơ chế trong AC (số lần retry, timeout, tên/chủ cờ, nhánh lỗi chi tiết) — cái đó thuộc **BR/BL** ở §3, AC chỉ trỏ tới. Nếu tiêu chí có **nhiều nhánh** → tách **bullet con** (mỗi ý một dòng), đừng dồn thành câu dài. Khi `/refine-prd` làm rõ thêm: chi tiết cơ chế → đẩy sang BR/BL; ở tầng AC thì tách bullet/AC mới — KHÔNG nối mệnh đề vào câu cũ (tránh AC thành "đoạn văn" và trùng BR).
111
-
112
- **AC1:** {Tiêu chí nghiệm thu, văn xuôi, kiểm chứng được.} _(BR: {TICKET}-{N}-UC{n}-BR{m})_
113
-
114
- **AC2:** {Tiêu chí có nhiều nhánh — tách bullet:} _(BR: {TICKET}-{N}-UC{n}-BR{m})_
115
- - {nhánh/điều kiện 1 → kết quả kỳ vọng}
116
- - {nhánh/điều kiện 2 → kết quả kỳ vọng}
117
-
118
- ---
119
-
120
- # 3. Use Case
121
-
122
- #### {TICKET}-{N}-UC1: {Tên use case}
123
-
124
- **Actor:** {actor}
125
-
126
- **Description:** {mô tả luồng}
127
-
128
- **Pre-condition:**
129
- - {điều kiện trước 1}
130
-
131
- **Post-condition:**
132
- - {kết quả sau 1}
133
-
134
- **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)*
135
-
136
- **Business Rule**
137
-
138
- > **Hình dạng bảng — mặc định 3 cột.** Dùng dạng này khi Business Logic là **văn xuôi** (mô tả luật bằng câu).
139
-
140
- | ID | Business Rule | Business Logic |
141
- |----|---------------|----------------|
142
- | {TICKET}-{N}-UC1-BR1 | {luật ngắn gọn} | - {logic chi tiết, xuống dòng bằng `<br/>`}<br/>- {…} |
143
- | {TICKET}-{N}-UC1-BR2 | {…} | - {…} |
144
-
145
- <!--
146
- NGOẠI LỆ — MỞ CỘT (dùng THAY cho bảng 3 cột ở trên, KHÔNG dùng cả hai):
147
-
148
- Điều kiện kích hoạt: MỌI BR trong UC này chia sẻ CÙNG một bộ thuộc tính lặp lại.
149
- Dấu hiệu tự phát hiện: đang phải dùng <br/> để nhồi NHIỀU HƠN MỘT bản ghi cùng
150
- cấu trúc vào một ô Business Logic.
151
-
152
- Khi kích hoạt: promote thuộc tính thành CỘT, một bản ghi = một DÒNG:
153
-
154
- | ID | Business Rule | {Thuộc tính 1} | {Thuộc tính 2} | {Thuộc tính 3} |
155
- |-----|---------------|----------------|----------------|----------------|
156
- | BR1 | {luật ngắn} | {giá trị} | {giá trị} | {giá trị} |
157
- | BR2 | {luật ngắn} | {giá trị} | {giá trị} | {giá trị} |
158
-
159
- Hai cột ID + Business Rule LUÔN giữ (traceability phụ thuộc chúng). Chỉ cột
160
- Business Logic được tách thành N cột. Giá trị dùng chung cho mọi dòng → đưa lên
161
- §1d Quy ước, ĐỪNG lặp trong từng ô.
162
-
163
- ⚠️ CẢNH BÁO BR ID CHURN — đọc trước khi mở cột trên PRD ĐÃ TỒN TẠI:
164
- Mở cột đúng nghĩa = một bản ghi một dòng ⇒ số BR TĂNG. Vì BR ID tăng liên tục
165
- trên toàn PRD, chèn dòng ở giữa sẽ ĐÁNH SỐ LẠI mọi BR phía sau. Nếu PRD này đã có
166
- BDD downstream, mọi tag `@trace.business_rules` trong .feature sẽ trỏ SAI trong im lặng.
167
- → Trước khi mở cột trên PRD đã có: kiểm tra `{specs_dir}/{domain}/{prd-slug}/bdd/`.
168
- - Chưa có BDD → mở cột tự do.
169
- - ĐÃ có BDD → DỪNG, báo người dùng: cần re-gen BDD sau khi đổi, hoặc giữ nguyên hình dạng cũ.
170
- PRD sinh MỚI không bị ảnh hưởng (chưa có downstream).
171
- -->
172
-
173
- > **Note {BR ref}:** *(TUỲ CHỌN)* {giải thích **quyết định đã chốt** — vì sao luật này như vậy, ràng buộc
174
- > nào dẫn tới nó, biên nào đã cân nhắc}. Đặt ngay sau bảng, cạnh nơi phát sinh.
175
- >
176
- > **Ranh giới với "Giả định AI" (Appendix):** Note = quyết định **đã chốt**, giải thích cho người đọc sau.
177
- > Giả định AI = **độ vênh CẦN PO chốt**. Note **KHÔNG** được nuốt Giả định AI — nghi ngờ thì để ở Giả định AI.
178
-
179
- ---
180
-
181
- #### {TICKET}-{N}-UC2: {Tên use case}
182
-
183
- {lặp cấu trúc UC như trên; BR đánh số tiếp tục BR3, BR4…}
184
-
185
- ---
186
-
187
- # 4. UI/UX Guidelines
188
-
189
- ## a. User Flow
190
-
191
- ```mermaid
192
- flowchart TD
193
- START(["{điểm bắt đầu}"]) --> A{"{điểm quyết định}"}
194
- A -->|{nhánh}| B["{bước}"]
195
- ```
196
-
197
- ## b. Wireframe
198
-
199
- > **KHÔNG nhân bản §3.** Wireframe liệt kê **màn + thành phần + hành động** — nó là nguồn coverage màn hình
200
- > cho `/generate-bdd` (C.1), KHÔNG phải bản sao thứ hai của bảng Business Rule.
201
- > Nếu một dòng Wireframe không thêm thông tin nào ngoài BR đã có → **tham chiếu BR ID, đừng chép nội dung**.
202
- > Nếu cả §4b không thêm gì mới so với §3 → **xoá hẳn §4b** (hai nguồn sự thật cho cùng một dữ liệu sẽ lệch nhau
203
- > ngay lần sửa đầu tiên).
204
-
205
- ### Screen 1: {Tên màn}
206
-
207
- | Thành phần | Chi tiết |
208
- |------------|----------|
209
- | **Screen** | {tên/ngữ cảnh màn} |
210
- | **Components** | - {thành phần 1}<br/>- {thành phần 2} |
211
- | **Actions** | - {hành động 1 → kết quả}<br/>- {hành động 2 → kết quả} |
212
-
213
- ---
214
-
215
- ### Screen 2: {Tên màn}
216
-
217
- {lặp bảng như trên cho từng màn}
218
-
219
- ---
220
-
221
- # Appendix
222
-
223
- ## Input gốc từ PO
224
-
225
- > {Trích nguyên văn input/ghi chú gốc của PO + đường dẫn product-definition nguồn.}
226
-
227
- ## Tài liệu tham khảo
228
-
229
- - [{TICKET liên quan}](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md) — {quan hệ: pre-condition / overlapping / related…}
230
- - BDD: [`./bdd/`](./bdd/)
231
- - Design spec: [`./design-spec/`](./design-spec/) — không áp dụng với feature thuần backend (không có màn hình)
232
- - Từ điển nghiệp vụ: [`specs/domain-knowledge/business-dictionary.md`](../../domain-knowledge/business-dictionary.md)
233
- - Domain knowledge: [`specs/domain-knowledge/{domain}.md`](../../domain-knowledge/{domain}.md)
234
-
235
- ## Existing API Contract *(CHỈ brownfield — điền khi API Source = existing; greenfield BỎ QUA cả section này)*
236
-
237
- <!--
238
- Chỉ dùng khi PRD bọc một API đã tồn tại trên hệ thống. PO ghi lại contract để:
239
- - /generate-bdd (system) dùng trực tiếp làm input — không cần tổng hợp từ FE/App BDD;
240
- - /generate-tech-docs chạy mode reverse-document (mô tả lại as-is, không design mới);
241
- - /review-tech-docs bỏ qua cổng T7 cross-team sign-off (contract đã cố định).
242
- Nếu greenfield (thiết kế mới) → xoá toàn bộ section này.
243
- -->
244
-
245
- | Method | Path | Auth | Request | Response |
246
- |--------|------|------|---------|----------|
247
- | {GET/POST/PUT/DELETE} | {/api/v1/path} | {Bearer / none} | `{ field: type }` | `{ field: type }` |
248
-
249
- **Error responses:**
250
-
251
- | HTTP Status | Error Code | Khi nào xảy ra |
252
- |-------------|------------|----------------|
253
- | {4xx/5xx} | {ERR_CODE} | {condition} |
254
-
255
- ## Giả định AI
256
-
257
- > {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.}
258
-
259
- - **Q1 — [AI DRAFT] {tiêu đề}:** {mô tả độ vênh + nguồn}. **Cần PO chốt {điều gì}.**
260
-
261
- _(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.")_
262
-
263
- ---
264
-
265
- # Change Log
266
-
267
- > Hiện tại: **v1.0** ({date}) · Lịch sử đầy đủ → [changelog](./changelog/{TICKET}-{N}-{slug}.changelog.md) *(file kho chỉ tạo khi changelog vượt 5 version)*
268
-
269
- <!-- Bảng phẳng, MỘT dòng/version, MỚI NHẤT TRÊN CÙNG. Chỉ giữ tối đa 5 version gần nhất ở đây;
270
- cũ hơn → /refine-prd & /review-context tự dồn (rollover) sang file changelog/ ở link trên. -->
271
-
272
- | Version | Date | Changes (UC/AC/BR bị ảnh hưởng) |
273
- |---------|------|---------------------------------|
274
- | 1.0 | {date} | Bản đầu — sinh từ product-definition. |
275
-
276
- ---
277
-
278
- <!--
279
- NEXT STEPS:
280
- Khi PRD được approve (status: approved), chạy:
281
- /generate-bdd "specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md"
282
- để sinh BDD feature specs từ PRD này.
283
- -->
@@ -1,188 +0,0 @@
1
- # {TICKET-ID} Product Definition — {Feature Name}
2
-
3
- <!--
4
- Template này được dùng bởi workflow /define-product.
5
- AI Agent điền từng section qua Q&A theo từng phase với PO.
6
- Output là input có cấu trúc cho /generate-prd.
7
-
8
- QUY TẮC:
9
- - Mỗi section tương ứng với 1 phase trong workflow
10
- - Section chưa đủ → giữ placeholder, KHÔNG được sang phase tiếp theo
11
- - Trạng thái xác nhận của PO được ghi trong mỗi section
12
- -->
13
-
14
- ---
15
-
16
- ## Metadata
17
-
18
- | Field | Value |
19
- |--------------------|--------------------------------|
20
- | **Ticket** | {TICKET-ID} |
21
- | **Feature** | {tên tính năng} |
22
- | **Domain** | {domain} |
23
- | **PO** | {tên PO} |
24
- | **Created** | {YYYY-MM-DD} |
25
- | **Status** | in-progress / completed |
26
- | **Completed Phase**| {số phase hoàn thành gần nhất} |
27
-
28
- ---
29
-
30
- ## Phase 0: Đồng bộ tri thức (Knowledge Sync)
31
-
32
- > ⚙️ AI tự thu thập — đây là **bối cảnh hệ thống**, KHÔNG phải yêu cầu nghiệp vụ do PO viết. Mục đích: chuẩn hoá thuật ngữ và nhận biết phần đã có để tái sử dụng. Không cần input từ PO.
33
-
34
- ### Khái niệm / dữ liệu nghiệp vụ liên quan
35
- - {Khái niệm 1} — {mô tả ngắn}
36
- - {Khái niệm 2} — {mô tả ngắn}
37
-
38
- ### Phần hệ thống / feature liên quan
39
- - {Phần 1}
40
- - {Phần 2}
41
-
42
- ### Rule / Logic có sẵn
43
- - {Rule/logic từ các PRD có sẵn hoặc domain knowledge}
44
-
45
- ### Chuẩn hoá thuật ngữ
46
- | Thuật ngữ trong input PO | Thuật ngữ chuẩn (business-dictionary) |
47
- |--------------------------|---------------------------------------|
48
- | {thuật ngữ gốc} | {thuật ngữ chuẩn} |
49
-
50
- ---
51
-
52
- ## Phase 1: Định nghĩa tính năng (Feature Definition)
53
-
54
- > ✅ PO xác nhận: {Có/Không}
55
-
56
- ### Bối cảnh (Context)
57
- {Bối cảnh nghiệp vụ dẫn đến tính năng này}
58
-
59
- ### Tuyên bố vấn đề (Problem Statement)
60
- {Vấn đề cần giải quyết}
61
-
62
- ### Mục tiêu (Goal)
63
- {Mục tiêu của tính năng}
64
-
65
- ### Actor
66
- | Actor | Vai trò | Chính/Phụ |
67
- |----------|--------------------|-----------|
68
- | {Actor} | {mô tả vai trò} | Primary |
69
-
70
- ### Phạm vi (In Scope)
71
- - {Chức năng 1}
72
- - {Chức năng 2}
73
-
74
- ### Ngoài phạm vi (Out of Scope)
75
- - {Hạng mục KHÔNG làm trong ticket này — kèm lý do / để dành pha sau}
76
-
77
- ### User Story
78
- - **Là một (As a)** {vai trò}
79
- - **Tôi muốn (I want to)** {mục tiêu}
80
- - **Để (So that)** {giá trị nghiệp vụ}
81
-
82
- ### Phụ thuộc liên service *(mức nghiệp vụ)*
83
-
84
- > Feature này cần **dữ liệu/năng lực** gì từ feature/team khác — KHÔNG mô tả API/event/callback (đó là kỹ thuật, thuộc Tech-docs).
85
-
86
- - {Cần {dữ liệu/năng lực} từ {feature/team} — vì {lý do nghiệp vụ}} — hoặc "Không có"
87
-
88
- ---
89
-
90
- ## Phase 2: Định nghĩa User Flow
91
-
92
- > ✅ PO xác nhận: {Có/Không}
93
-
94
- ### Điểm vào (Entry Point)
95
- {Người dùng bắt đầu tương tác với tính năng như thế nào}
96
-
97
- ### Các bước của Flow
98
- | Bước | Hành động | Trạng thái/Kết quả nghiệp vụ | Ghi chú |
99
- |------|-----------------|------------------------------|------------|
100
- | 1 | {hành động} | {trạng thái/kết quả nghiệp vụ} | {ghi chú} |
101
- | 2 | {hành động} | {trạng thái/kết quả nghiệp vụ} | {ghi chú} |
102
-
103
- ### Màn hình & thành phần chính
104
- > Mức nghiệp vụ — nguồn cho Wireframe PRD (§4b) và độ phủ BDD (C.1). KHÔNG pixel/layout/màu.
105
-
106
- | Màn hình | Thành phần chính | Hành động → kết quả nghiệp vụ |
107
- |----------|------------------|-------------------------------|
108
- | {màn 1} | {thành phần} | {hành động → kết quả} |
109
-
110
- ### Điểm ra (Exit Point)
111
- {Kết quả cuối khi flow hoàn thành}
112
-
113
- ### Edge Cases / Luồng lỗi & ngoại lệ
114
- > Các kịch bản thất bại nghiệp vụ ngoài happy path — input thiếu, điều kiện không thoả, thao tác đồng thời, phụ thuộc không sẵn sàng.
115
- - {Kịch bản: khi {điều kiện bất thường} → {kết quả nghiệp vụ kỳ vọng}}
116
-
117
- ---
118
-
119
- ## Phase 3: Nhật ký làm rõ (Clarification Log)
120
-
121
- > Ghi lại mọi câu hỏi và câu trả lời qua các vòng.
122
-
123
- ### Vòng {N}
124
- | # | Nhóm | Câu hỏi | PO trả lời |
125
- |---|----------|------------|------------|
126
- | 1 | Context | {câu hỏi} | {trả lời} |
127
- | 2 | Flow | {câu hỏi} | {trả lời} |
128
- | 3 | Logic | {câu hỏi} | {trả lời} |
129
-
130
- ### Mục chưa giải quyết
131
- - {Mục chưa giải quyết — nếu còn tồn đọng, KHÔNG được sang Phase 4}
132
-
133
- ---
134
-
135
- ## Phase 4: Business Rules
136
-
137
- > ✅ PO xác nhận: {Có/Không}
138
-
139
- | Rule ID | Hành động/Trigger | Quy tắc | Điều kiện |
140
- |---------|---------------------|---------------------|------------------------|
141
- | BR-1 | {hành động từ flow} | {business rule} | {điều kiện áp dụng} |
142
- | BR-2 | {hành động từ flow} | {business rule} | {điều kiện áp dụng} |
143
-
144
- ---
145
-
146
- ## Phase 5: Business Logic
147
-
148
- > ✅ PO xác nhận: {Có/Không}
149
-
150
- | Rule ID | Logic nghiệp vụ (rẽ nhánh / công thức / điều kiện) | Thông báo/kết quả nghiệp vụ khi lỗi |
151
- |---------|---------------------------------------------------|-------------------------------------|
152
- | BR-1 | {logic nghiệp vụ khi rule kích hoạt} | {vd: báo "Số dư không đủ"} |
153
- | BR-2 | {logic nghiệp vụ khi rule kích hoạt} | {…} |
154
-
155
- ---
156
-
157
- ## Phase 6: Acceptance Criteria
158
-
159
- > ✅ PO xác nhận: {Có/Không}
160
-
161
- | AC ID | Mô tả | Hành vi kỳ vọng | Bắt nguồn từ |
162
- |-------|------------------------|---------------------------|--------------|
163
- | AC-1 | {mô tả tiêu chí} | {hành vi kỳ vọng} | BR-{N} |
164
- | AC-2 | {mô tả tiêu chí} | {hành vi kỳ vọng} | BR-{N} |
165
-
166
- ---
167
-
168
- ## Phase 7: Báo cáo kiểm chứng (Validation Report)
169
-
170
- ### Ma trận độ phủ (Coverage Matrix)
171
- | Hành động Flow | Có Rule? | Có Logic? | Có AC? | Status |
172
- |----------------|----------|-----------|--------|--------|
173
- | {Hành động 1} | ✅/❌ | ✅/❌ | ✅/❌ | OK/GAP |
174
-
175
- ### Xung đột phát hiện
176
- - {Mô tả xung đột — hoặc "None"}
177
-
178
- ### Mục còn thiếu
179
- - {Rule/AC/logic còn thiếu — hoặc "None"}
180
-
181
- ---
182
-
183
- <!--
184
- NEXT STEPS:
185
- Khi Product Definition hoàn tất (Status: completed), chạy:
186
- /generate-prd {path-to-this-file}
187
- để sinh PRD từ Product Definition này.
188
- -->