@edupia-tutor/spec-driven-docs 0.14.0 → 0.14.2
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.
- package/bin/index.js +12 -1
- package/commands/debug.md +436 -436
- package/commands/debug.tmpl +111 -111
- package/commands/define-product.md +350 -345
- package/commands/define-product.tmpl +69 -64
- package/commands/dev-gen-test.md +365 -365
- package/commands/dev-gen-test.tmpl +63 -63
- package/commands/dev-run-test.md +376 -376
- package/commands/dev-run-test.tmpl +74 -74
- package/commands/dev-smoke-test.md +341 -341
- package/commands/dev-smoke-test.tmpl +60 -60
- package/commands/fix-bug.md +403 -403
- package/commands/fix-bug.tmpl +78 -78
- package/commands/generate-bdd.md +513 -513
- package/commands/generate-bdd.tmpl +211 -211
- package/commands/generate-code.md +481 -483
- package/commands/generate-code.tmpl +179 -181
- package/commands/generate-design-spec.md +497 -497
- package/commands/generate-design-spec.tmpl +220 -220
- package/commands/generate-prd.md +452 -400
- package/commands/generate-prd.tmpl +50 -200
- package/commands/generate-spec-manifest.md +340 -340
- package/commands/generate-spec-manifest.tmpl +59 -59
- package/commands/generate-tech-docs.md +365 -365
- package/commands/generate-tech-docs.tmpl +84 -84
- package/commands/learn.md +347 -347
- package/commands/learn.tmpl +22 -22
- package/commands/map-testids.md +322 -322
- package/commands/map-testids.tmpl +41 -41
- package/commands/propose-scenario.md +335 -335
- package/commands/propose-scenario.tmpl +54 -54
- package/commands/qc-analyze.md +323 -324
- package/commands/qc-analyze.tmpl +42 -43
- package/commands/qc-design-test.md +304 -304
- package/commands/qc-design-test.tmpl +23 -23
- package/commands/qc-plan.md +297 -297
- package/commands/qc-plan.tmpl +16 -16
- package/commands/qc-report.md +302 -302
- package/commands/qc-report.tmpl +21 -21
- package/commands/qc-review.md +298 -298
- package/commands/qc-review.tmpl +17 -17
- package/commands/qc-run-test.md +337 -337
- package/commands/qc-run-test.tmpl +35 -35
- package/commands/refine-prd.md +428 -430
- package/commands/refine-prd.tmpl +62 -62
- package/commands/report-bug.md +351 -351
- package/commands/report-bug.tmpl +70 -70
- package/commands/review-code.md +364 -364
- package/commands/review-code.tmpl +39 -39
- package/commands/review-context.md +578 -580
- package/commands/review-context.tmpl +212 -212
- package/commands/review-tech-docs.md +427 -427
- package/commands/review-tech-docs.tmpl +146 -146
- package/commands/setup-ai-first.md +239 -239
- package/commands/setup-ai-first.tmpl +133 -133
- package/commands/sync.md +145 -145
- package/commands/sync.tmpl +93 -93
- package/commands/update-framework.md +88 -88
- package/commands/update-framework.tmpl +36 -36
- package/commands/validate-traces.md +381 -381
- package/commands/validate-traces.tmpl +100 -100
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +436 -436
- package/core/commands/define-product.md +350 -345
- package/core/commands/dev-gen-test.md +365 -365
- package/core/commands/dev-run-test.md +376 -376
- package/core/commands/dev-smoke-test.md +341 -341
- package/core/commands/fix-bug.md +403 -403
- package/core/commands/generate-bdd.md +513 -513
- package/core/commands/generate-code.md +481 -483
- package/core/commands/generate-design-spec.md +497 -497
- package/core/commands/generate-prd.md +452 -400
- package/core/commands/generate-spec-manifest.md +340 -340
- package/core/commands/generate-tech-docs.md +365 -365
- package/core/commands/learn.md +347 -347
- package/core/commands/map-testids.md +322 -322
- package/core/commands/propose-scenario.md +335 -335
- package/core/commands/qc-analyze.md +323 -324
- package/core/commands/qc-design-test.md +304 -304
- package/core/commands/qc-plan.md +297 -297
- package/core/commands/qc-report.md +302 -302
- package/core/commands/qc-review.md +298 -298
- package/core/commands/qc-run-test.md +337 -337
- package/core/commands/refine-prd.md +428 -430
- package/core/commands/report-bug.md +351 -351
- package/core/commands/review-code.md +364 -364
- package/core/commands/review-context.md +578 -580
- package/core/commands/review-tech-docs.md +427 -427
- package/core/commands/setup-ai-first.md +239 -239
- package/core/commands/sync.md +145 -145
- package/core/commands/update-framework.md +88 -88
- package/core/commands/validate-traces.md +381 -381
- package/core/skills/code/SKILL.md +389 -389
- package/core/skills/debug/SKILL.md +391 -391
- package/core/skills/design-spec/SKILL.md +318 -318
- package/core/skills/discovery/SKILL.md +7 -547
- package/core/skills/prd/SKILL.md +298 -394
- package/core/skills/setup-ai-first/SKILL.md +80 -80
- package/core/skills/spec/SKILL.md +178 -178
- package/core/skills/test/SKILL.md +604 -604
- package/core/steps/capture-lesson.md +44 -44
- package/core/steps/context-loader.md +175 -175
- package/core/steps/gate.md +54 -54
- package/core/steps/report-footer.md +52 -52
- package/core/steps/review-fanout.md +85 -87
- package/core/steps/spawn-agent.md +45 -45
- package/core/steps/trace-mirror.md +21 -21
- package/core/templates/architecture.template.md +37 -37
- package/core/templates/design-spec.template.md +77 -77
- package/core/templates/platform-guide.template.md +47 -47
- package/core/templates/prd.template.md +107 -232
- package/core/templates/product-definition.template.md +101 -88
- package/core/templates/project-context.yaml +2 -2
- package/docs/01-getting-started/core-concepts.md +1 -1
- package/docs/01-getting-started/quickstart.md +7 -7
- package/docs/02-guides/developer/bdd-and-trace.md +1 -1
- package/docs/02-guides/developer/scenarios.md +5 -5
- package/docs/02-guides/product-owner/handoff-checklist.md +1 -1
- package/docs/02-guides/product-owner/scenarios.md +23 -23
- package/docs/02-guides/tester/bug-reporting.md +2 -2
- package/docs/02-guides/tester/reading-specs.md +2 -2
- package/docs/02-guides/tester/scenarios.md +1 -1
- package/docs/02-guides/tester/spec-manifest.md +3 -3
- package/docs/02-guides/tester/workflow.md +1 -1
- package/docs/03-concepts/architecture.md +3 -3
- package/docs/03-concepts/pipeline.md +3 -3
- package/docs/04-operations/publishing.md +20 -3
- package/docs/04-operations/sync-and-update.md +5 -5
- package/docs/05-reference/command-cheatsheet.md +2 -2
- package/docs/05-reference/commands.md +8 -8
- package/package.json +1 -1
- package/scripts/migrate-specs.js +5 -3
- package/scripts/rename-prd-files.js +174 -0
- package/skills/code/SKILL.md +389 -389
- package/skills/code/SKILL.tmpl +56 -56
- package/skills/debug/SKILL.md +391 -391
- package/skills/debug/SKILL.tmpl +60 -60
- package/skills/design-spec/SKILL.md +318 -318
- package/skills/design-spec/SKILL.tmpl +37 -37
- package/skills/discovery/SKILL.md +7 -547
- package/skills/discovery/SKILL.tmpl +7 -140
- package/skills/prd/SKILL.md +298 -394
- package/skills/prd/SKILL.tmpl +40 -151
- package/skills/setup-ai-first/SKILL.md +80 -80
- package/skills/setup-ai-first/SKILL.tmpl +28 -28
- package/skills/spec/SKILL.md +178 -178
- package/skills/spec/SKILL.tmpl +20 -20
- package/skills/test/SKILL.md +604 -604
- package/skills/test/SKILL.tmpl +44 -44
- package/steps/capture-lesson.md +44 -44
- package/steps/context-loader.md +175 -175
- package/steps/gate.md +54 -54
- package/steps/report-footer.md +52 -52
- package/steps/review-fanout.md +85 -87
- package/steps/spawn-agent.md +45 -45
- package/steps/trace-mirror.md +21 -21
- package/templates/architecture.template.md +37 -37
- package/templates/design-spec.template.md +77 -77
- package/templates/platform-guide.template.md +47 -47
- package/templates/prd.template.md +107 -232
- package/templates/product-definition.template.md +101 -88
- package/templates/project-context.yaml +2 -2
|
@@ -1,254 +1,104 @@
|
|
|
1
|
-
# /generate-prd —
|
|
1
|
+
# /generate-prd — Sinh Product Requirements Document
|
|
2
2
|
|
|
3
3
|
## Gate
|
|
4
4
|
{{include:steps/gate.md}}
|
|
5
5
|
|
|
6
|
-
*
|
|
6
|
+
*Lưu ý: Với lệnh này, target file ở Bước 1 là một file product-definition trong `{paths.product_definitions_dir}/`. Phân giải từ `$ARGUMENTS` hoặc liệt kê thư mục và hỏi.*
|
|
7
7
|
|
|
8
8
|
## Context
|
|
9
9
|
{{include:steps/context-loader.md}}
|
|
10
10
|
|
|
11
|
-
*
|
|
11
|
+
*Context bổ sung cho lệnh này: Đọc toàn bộ file product-definition. Trích xuất: **TICKET-ID**, **domain**, **tên feature**, dữ liệu Phase 1-7, và bảng **Chuẩn hoá thuật ngữ** (Terminology Map ở Phase 0 — các cặp `thuật ngữ PO → thuật ngữ chuẩn`). Lưu bản đồ này để áp dụng ở bước Quy tắc thuật ngữ. **Nếu Phase 7 (Validation Report) còn `Xung đột phát hiện` / `Mục còn thiếu` khác "None" → diễn đạt lại mỗi mục thành một câu hỏi theo format `Q… — [AI DRAFT]` của section "Giả định AI" (nêu rõ độ vênh + cần PO chốt điều gì), thay vì dán thô. AI không tự quyết thay PO.***
|
|
12
12
|
|
|
13
|
-
CHECKPOINT
|
|
13
|
+
CHECKPOINT trước khi sinh: "Sinh PRD cho **{TICKET-ID} — {feature}** (domain: {domain}). Tiếp tục? (Y/N)"
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Quy tắc thuật ngữ *(áp dụng nếu business-dictionary.md tồn tại)*
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
- **Áp dụng Terminology Map từ product-definition**: với mỗi cặp `thuật ngữ PO → thuật ngữ chuẩn` trong bảng **Chuẩn hoá thuật ngữ** (Phase 0 của product-definition), dùng **thuật ngữ chuẩn** khi viết PRD. Đây là bản đồ PO đã xác nhận ở discovery — luôn ưu tiên áp dụng kể cả khi business-dictionary.md vắng mặt, để PRD nhất quán với product-definition. Nếu bảng trống/không có → bỏ qua âm thầm.
|
|
20
|
+
- **Thay banned term**: thay mọi banned term bằng bản chuẩn tương đương (xem dictionary § Banned Terms).
|
|
21
|
+
- **Dùng canonical term**: chỉ dùng các thuật ngữ được định nghĩa trong dictionary.
|
|
22
|
+
- **NEW TERM DETECTION**: Nếu một thuật ngữ trong input PO xuất hiện ≥2 lần và KHÔNG có trong dictionary → **DỪNG** và hỏi PO:
|
|
23
|
+
- Thuật ngữ đó nghĩa là gì trong ngữ cảnh hệ thống?
|
|
24
|
+
- English canonical term nên dùng là gì?
|
|
25
|
+
- Có cần bổ sung vào business-dictionary.md không?
|
|
26
|
+
Sau khi PO confirm → cập nhật `business-dictionary.md` (nếu đồng ý) → tiếp tục sinh.
|
|
27
|
+
- Nếu không có banned term và tất cả thuật ngữ đều chuẩn → tiếp tục không gián đoạn.
|
|
27
28
|
|
|
28
|
-
## Cross-Reference
|
|
29
|
+
## Quy tắc Cross-Reference
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
Bất kỳ chỗ nào nhắc tới một TICKET-ID khác trong PRD (pre-condition, BR, ghi chú, appendix) → **PHẢI** là inline link. Mỗi PRD sống trong feature-package riêng (`{paths.specs_dir}/{domain}/{prd-slug-khác}/`), nên link trỏ sang folder anh em:
|
|
31
32
|
```
|
|
32
|
-
[TICKET-ID](
|
|
33
|
+
[TICKET-ID khác](../{prd-slug-khác}/{TICKET-ID-khác}-{prd-slug-khác}.md)
|
|
33
34
|
```
|
|
34
|
-
|
|
35
|
+
Không bao giờ để TICKET-ID dạng plain text nếu file PRD tương ứng tồn tại trong `{paths.specs_dir}/{domain}/`.
|
|
35
36
|
|
|
36
|
-
## UC
|
|
37
|
+
## Quy ước đánh số UC và BR
|
|
37
38
|
|
|
38
|
-
- **UC ID**: `{TICKET-ID}-UC{N}` — N
|
|
39
|
-
- **BR ID**: `{TICKET-ID}-UC{N}-BR{M}` — **M
|
|
40
|
-
-
|
|
39
|
+
- **UC ID**: `{TICKET-ID}-UC{N}` — N bắt đầu từ 1, tăng theo từng use case.
|
|
40
|
+
- **BR ID**: `{TICKET-ID}-UC{N}-BR{M}` — **M tăng liên tục trên toàn PRD** (KHÔNG reset theo từng UC).
|
|
41
|
+
- Ví dụ: UC1 → BR1, BR2; UC2 → BR3, BR4 (KHÔNG phải BR1, BR2 lại từ đầu).
|
|
41
42
|
|
|
42
43
|
---
|
|
43
44
|
|
|
44
|
-
## Platform Strategy — PRD
|
|
45
|
+
## Platform Strategy — PRD là tài liệu nghiệp vụ (không technical)
|
|
45
46
|
|
|
46
|
-
PRD mô tả **WHAT** (yêu cầu nghiệp vụ) — không
|
|
47
|
-
|
|
47
|
+
PRD mô tả **WHAT** (yêu cầu nghiệp vụ) — không nhét chi tiết **kỹ thuật** (API, token, endpoint, HTTP status, tên class/bảng/cột DB, query). Những thứ đó thuộc **Tech Docs**.
|
|
48
|
+
PRD **được phép** có User Flow + Wireframe ở mức nghiệp vụ (§4) để BA/QC/Dev cùng hình dung; chỉ **chi tiết visual** (màu sắc, layout pixel, animation, micro-interaction) mới thuộc **Design Spec**.
|
|
48
49
|
|
|
49
|
-
| ✅ Viết trong PRD (
|
|
50
|
+
| ✅ Viết trong PRD (nghiệp vụ) | ❌ KHÔNG viết trong PRD |
|
|
50
51
|
|---|---|
|
|
51
|
-
| "Đăng nhập thành công → truy cập được tính năng" | "
|
|
52
|
-
| "Sai
|
|
53
|
-
|
|
|
52
|
+
| "Đăng nhập thành công → truy cập được tính năng" | "API trả về JWT token" ← Tech Docs |
|
|
53
|
+
| "Sai mật khẩu 5 lần → khoá tài khoản 30 phút" | "Hiển thị spinner khi loading" ← Design Spec |
|
|
54
|
+
| Wireframe mức nghiệp vụ: màn hình có gì, hành động ra kết quả gì | "Animation fade 300ms, màu #FF0000" ← Design Spec |
|
|
54
55
|
|
|
55
56
|
**Một PRD phục vụ tất cả platform:**
|
|
56
57
|
- **FE/App team** → đọc PRD + Design Spec → `/generate-bdd` (UI-level scenarios)
|
|
57
58
|
- **BE team** → đọc PRD trực tiếp → `/generate-bdd` (API-level scenarios)
|
|
58
|
-
- Design Spec là tài liệu riêng cho FE/App —
|
|
59
|
+
- Design Spec là tài liệu **chi tiết visual** riêng cho FE/App — Wireframe nghiệp vụ trong PRD chỉ là khung.
|
|
59
60
|
|
|
60
|
-
Khi viết AC, nếu PO đề cập chi tiết
|
|
61
|
-
*"Chi tiết
|
|
61
|
+
Khi viết AC, nếu PO đề cập chi tiết visual (màu sắc, animation, layout pixel) → nhắc nhở:
|
|
62
|
+
*"Chi tiết visual này thuộc về Design Spec, không thuộc PRD. Ghi nhận lại để tạo Design Spec sau."*
|
|
62
63
|
|
|
63
64
|
---
|
|
64
65
|
|
|
65
66
|
## Generate
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
Ghi `{paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` theo cấu trúc dưới đây.
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
```markdown
|
|
72
|
-
# {TICKET-ID} {Feature Name}
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Metadata
|
|
77
|
-
|
|
78
|
-
| Field | Value |
|
|
79
|
-
|---------------|----------------------------------|
|
|
80
|
-
| **PRD ID** | {TICKET-ID} |
|
|
81
|
-
| **Version** | 1.0 |
|
|
82
|
-
| **Status** | draft |
|
|
83
|
-
| **Author** | {PO name or "AI-assisted"} |
|
|
84
|
-
| **Domain** | {domain} |
|
|
85
|
-
| **Created** | {YYYY-MM-DD} |
|
|
86
|
-
| **Updated** | {YYYY-MM-DD} |
|
|
87
|
-
| **API Source** | *(bỏ trống nếu greenfield — thêm `existing` nếu API đã tồn tại trên hệ thống)* |
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
# Feature
|
|
92
|
-
|
|
93
|
-
{Describe the capability or function this feature provides — 2-3 concise sentences.}
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
# 1. Overview
|
|
98
|
-
|
|
99
|
-
## a. User Story
|
|
100
|
-
|
|
101
|
-
- **As a** {User role}
|
|
102
|
-
- **I want to** {User goal}
|
|
103
|
-
- **So that** {Business value}
|
|
104
|
-
|
|
105
|
-
## b. Scope
|
|
106
|
-
|
|
107
|
-
**In Scope**
|
|
108
|
-
|
|
109
|
-
- {Function 1}
|
|
110
|
-
- {Function 2}
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
# 2. Acceptance Criteria
|
|
115
|
-
|
|
116
|
-
- **AC1:** {Acceptance criterion — testable, observable, no UI details}
|
|
117
|
-
- **AC2:** {Acceptance criterion}
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
# 3. Use Case
|
|
122
|
-
|
|
123
|
-
#### {TICKET-ID}-UC1: {Use Case Name}
|
|
124
|
-
|
|
125
|
-
- **Actor:** {User performing the action}
|
|
126
|
-
- **Description:** {Business scenario description — 1 sentence}
|
|
127
|
-
- **Pre-condition:** {Condition that must be true BEFORE use case begins}
|
|
128
|
-
- **Post-condition:** {State / result AFTER use case completes}
|
|
129
|
-
|
|
130
|
-
**Business Rule**
|
|
131
|
-
|
|
132
|
-
| ID | Business Rule |
|
|
133
|
-
|----|---------------|
|
|
134
|
-
| {TICKET-ID}-UC1-BR1 | {Rule — WHAT the system must do} |
|
|
135
|
-
| {TICKET-ID}-UC1-BR2 | {Rule} |
|
|
136
|
-
|
|
137
|
-
**Business Logic**
|
|
138
|
-
|
|
139
|
-
**{TICKET-ID}-UC1-BR1:**
|
|
140
|
-
- Logic 1
|
|
141
|
-
- Logic 2
|
|
142
|
-
- Logic 3
|
|
143
|
-
|
|
144
|
-
**{TICKET-ID}-UC1-BR2:**
|
|
145
|
-
- Logic
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
# 4. UI/UX Guidelines
|
|
150
|
-
|
|
151
|
-
## a. User Flow
|
|
152
|
-
|
|
153
|
-
{Brief description of sequence and decision branches}
|
|
154
|
-
|
|
155
|
-
```mermaid
|
|
156
|
-
flowchart TD
|
|
157
|
-
A[Step 1: ...] --> B[Step 2: ...]
|
|
158
|
-
B --> C{Condition?}
|
|
159
|
-
C -->|Yes| D[Result A]
|
|
160
|
-
C -->|No| E[Result B]
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## b. Wireframe
|
|
164
|
-
|
|
165
|
-
**Screen 1: {Screen Name}**
|
|
166
|
-
|
|
167
|
-
**Screen:** {Screen name}
|
|
168
|
-
|
|
169
|
-
**Components:**
|
|
170
|
-
- {Component 1}
|
|
171
|
-
- {Component 2}
|
|
172
|
-
- {Component 3}
|
|
173
|
-
|
|
174
|
-
**Actions:**
|
|
175
|
-
- {Action 1} → {Result}
|
|
176
|
-
- {Action 2} → {Result}
|
|
70
|
+
> **Quy ước tên file PRD:** `{TICKET-ID}-{prd-slug}.md` — vd `SEG01-segment-scoring-service.md`. KHÔNG đặt tên `prd.md`. Mỗi feature-package có đúng **một** file PRD ở cấp gốc folder (cạnh `bdd/`, `tech-docs/`, `design-spec/`); tính duy nhất nằm ở cả tên folder lẫn TICKET-ID trong tên file.
|
|
177
71
|
|
|
178
72
|
---
|
|
179
73
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
> {Paste verbatim content from product-definition file — Context + Problem + Goal}
|
|
185
|
-
|
|
186
|
-
## References
|
|
187
|
-
|
|
188
|
-
- {[TICKET-ID](./TICKET-ID-slug.md) — relationship description}
|
|
189
|
-
|
|
190
|
-
## Existing API Contract *(chỉ điền khi API Source = existing)*
|
|
191
|
-
|
|
192
|
-
> API đã tồn tại trên hệ thống. PO ghi lại contract để BDD generation dùng trực tiếp —
|
|
193
|
-
> không cần tổng hợp từ FE/App BDD, không cần T7 sign-off gate.
|
|
194
|
-
|
|
195
|
-
| Method | Path | Auth | Request | Response |
|
|
196
|
-
|--------|------|------|---------|----------|
|
|
197
|
-
| {GET/POST/PUT/DELETE} | {/api/v1/path} | {Bearer / none} | `{ field: type }` | `{ field: type }` |
|
|
198
|
-
|
|
199
|
-
**Error responses:**
|
|
200
|
-
|
|
201
|
-
| HTTP Status | Error Code | Khi nào xảy ra |
|
|
202
|
-
|-------------|------------|----------------|
|
|
203
|
-
| {4xx/5xx} | {ERR_CODE} | {condition} |
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## AI Assumptions
|
|
208
|
-
|
|
209
|
-
> Assumptions AI made when information was incomplete. Needs PO review and confirmation.
|
|
210
|
-
|
|
211
|
-
- {Assumption 1 — [AI DRAFT]}
|
|
212
|
-
```
|
|
74
|
+
````markdown
|
|
75
|
+
{{include:templates/prd.template.md}}
|
|
76
|
+
````
|
|
213
77
|
|
|
214
78
|
---
|
|
215
79
|
|
|
216
|
-
## Quality Checklist *(
|
|
80
|
+
## Quality Checklist *(kiểm tra trước khi ghi)*
|
|
217
81
|
|
|
218
|
-
- [ ]
|
|
219
|
-
- [ ]
|
|
220
|
-
- [ ] Business Rule (WHAT)
|
|
221
|
-
- [ ] BR ID
|
|
222
|
-
- [ ]
|
|
223
|
-
- [ ]
|
|
224
|
-
- [ ] User Flow
|
|
225
|
-
- [ ] Wireframe
|
|
82
|
+
- [ ] Mọi AC đều testable (pass/fail rõ ràng), không có chi tiết kỹ thuật (API/token/DB) hay visual chi tiết (màu sắc, font, animation)
|
|
83
|
+
- [ ] Mỗi UC có Actor / Description / Pre-condition / Post-condition
|
|
84
|
+
- [ ] Business Rule (WHAT) và Business Logic (HOW) nằm chung bảng 3 cột `ID | Business Rule | Business Logic`
|
|
85
|
+
- [ ] BR ID tăng liên tục trên toàn PRD — không reset theo từng UC
|
|
86
|
+
- [ ] Mọi cross-reference TICKET-ID đều là inline link `[TICKET-ID](./file.md)`
|
|
87
|
+
- [ ] Không có banned term (nếu dictionary tồn tại)
|
|
88
|
+
- [ ] User Flow có cả luồng lỗi / luồng ngoại lệ
|
|
89
|
+
- [ ] Wireframe phủ tất cả màn hình liên quan tới Use Case
|
|
226
90
|
- [ ] **Định dạng (readability)**: User Story / AC / các field của UC (Actor, Description, Pre/Post-condition) viết dạng bullet `- **Label:** …` — mỗi ý MỘT dòng, KHÔNG viết các dòng liền nhau (sẽ bị dồn thành 1 đoạn khi render); có một dòng trống trước và sau mỗi bảng
|
|
227
91
|
|
|
228
|
-
## Changelog Section (append at end of PRD)
|
|
229
|
-
|
|
230
|
-
Every PRD must end with this section. Start at v1.0:
|
|
231
|
-
|
|
232
|
-
```markdown
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## Changelog
|
|
236
|
-
|
|
237
|
-
| Version | Date | Changes |
|
|
238
|
-
|---------|------|---------|
|
|
239
|
-
| 1.0 | {YYYY-MM-DD} | Initial version |
|
|
240
|
-
```
|
|
241
|
-
|
|
242
92
|
## Output
|
|
243
93
|
|
|
244
94
|
{{include:steps/report-footer.md}}
|
|
245
95
|
|
|
246
96
|
```
|
|
247
|
-
/generate-prd
|
|
97
|
+
/generate-prd Hoàn tất — {TICKET-ID}
|
|
248
98
|
---
|
|
249
99
|
Status : ✅ Complete
|
|
250
100
|
Output Artifacts:
|
|
251
|
-
created {paths.specs_dir}/{domain}/{prd-slug}/prd.md (PRD v1.0)
|
|
252
|
-
Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/prd.md
|
|
253
|
-
→
|
|
101
|
+
created {paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md (PRD v1.0)
|
|
102
|
+
Next : /refine-prd {paths.specs_dir}/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
103
|
+
→ rồi /review-context {prd-file} ← kiểm tra chất lượng PRD trước khi sinh BDD
|
|
254
104
|
```
|