@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,14 +1,14 @@
|
|
|
1
1
|
# {TICKET-ID} Product Definition — {Feature Name}
|
|
2
2
|
|
|
3
3
|
<!--
|
|
4
|
-
|
|
5
|
-
AI Agent
|
|
6
|
-
Output
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
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
12
|
-->
|
|
13
13
|
|
|
14
14
|
---
|
|
@@ -18,151 +18,164 @@
|
|
|
18
18
|
| Field | Value |
|
|
19
19
|
|--------------------|--------------------------------|
|
|
20
20
|
| **Ticket** | {TICKET-ID} |
|
|
21
|
-
| **Feature** | {
|
|
21
|
+
| **Feature** | {tên tính năng} |
|
|
22
22
|
| **Domain** | {domain} |
|
|
23
|
-
| **PO** | {PO
|
|
23
|
+
| **PO** | {tên PO} |
|
|
24
24
|
| **Created** | {YYYY-MM-DD} |
|
|
25
25
|
| **Status** | in-progress / completed |
|
|
26
|
-
| **Completed Phase**| {
|
|
26
|
+
| **Completed Phase**| {số phase hoàn thành gần nhất} |
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## Phase 0: Knowledge Sync
|
|
30
|
+
## Phase 0: Đồng bộ tri thức (Knowledge Sync)
|
|
31
31
|
|
|
32
|
-
> AI
|
|
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
33
|
|
|
34
|
-
###
|
|
35
|
-
- {
|
|
36
|
-
- {
|
|
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
37
|
|
|
38
|
-
###
|
|
39
|
-
- {
|
|
40
|
-
- {
|
|
38
|
+
### Phần hệ thống / feature liên quan
|
|
39
|
+
- {Phần 1}
|
|
40
|
+
- {Phần 2}
|
|
41
41
|
|
|
42
|
-
###
|
|
43
|
-
- {Rule/logic
|
|
42
|
+
### Rule / Logic có sẵn
|
|
43
|
+
- {Rule/logic từ các PRD có sẵn hoặc domain knowledge}
|
|
44
44
|
|
|
45
|
-
###
|
|
46
|
-
|
|
|
47
|
-
|
|
48
|
-
| {
|
|
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
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
52
|
-
## Phase 1: Feature Definition
|
|
52
|
+
## Phase 1: Định nghĩa tính năng (Feature Definition)
|
|
53
53
|
|
|
54
|
-
> ✅ PO
|
|
54
|
+
> ✅ PO xác nhận: {Có/Không}
|
|
55
55
|
|
|
56
|
-
### Context
|
|
57
|
-
{
|
|
56
|
+
### Bối cảnh (Context)
|
|
57
|
+
{Bối cảnh nghiệp vụ dẫn đến tính năng này}
|
|
58
58
|
|
|
59
|
-
### Problem Statement
|
|
60
|
-
{
|
|
59
|
+
### Tuyên bố vấn đề (Problem Statement)
|
|
60
|
+
{Vấn đề cần giải quyết}
|
|
61
61
|
|
|
62
|
-
### Goal
|
|
63
|
-
{
|
|
62
|
+
### Mục tiêu (Goal)
|
|
63
|
+
{Mục tiêu của tính năng}
|
|
64
64
|
|
|
65
|
-
###
|
|
66
|
-
| Actor |
|
|
67
|
-
|
|
68
|
-
| {Actor} | {
|
|
65
|
+
### Actor
|
|
66
|
+
| Actor | Vai trò | Chính/Phụ |
|
|
67
|
+
|----------|--------------------|-----------|
|
|
68
|
+
| {Actor} | {mô tả vai trò} | Primary |
|
|
69
69
|
|
|
70
|
-
###
|
|
71
|
-
- {
|
|
72
|
-
- {
|
|
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}
|
|
73
76
|
|
|
74
77
|
### User Story
|
|
75
|
-
- **As a** {
|
|
76
|
-
- **I want to** {
|
|
77
|
-
-
|
|
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ó"
|
|
78
87
|
|
|
79
88
|
---
|
|
80
89
|
|
|
81
|
-
## Phase 2: User Flow
|
|
90
|
+
## Phase 2: Định nghĩa User Flow
|
|
91
|
+
|
|
92
|
+
> ✅ PO xác nhận: {Có/Không}
|
|
82
93
|
|
|
83
|
-
|
|
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}
|
|
84
96
|
|
|
85
|
-
###
|
|
86
|
-
|
|
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ú} |
|
|
87
102
|
|
|
88
|
-
###
|
|
89
|
-
|
|
90
|
-
|------|-----------------|------------------|-------------|
|
|
91
|
-
| 1 | {User action} | {Screen/State} | {Notes} |
|
|
92
|
-
| 2 | {User action} | {Screen/State} | {Notes} |
|
|
103
|
+
### Điểm ra (Exit Point)
|
|
104
|
+
{Kết quả cuối khi flow hoàn thành}
|
|
93
105
|
|
|
94
|
-
###
|
|
95
|
-
|
|
106
|
+
### Edge Cases / Luồng lỗi & ngoại lệ
|
|
107
|
+
> 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.
|
|
108
|
+
- {Kịch bản: khi {điều kiện bất thường} → {kết quả nghiệp vụ kỳ vọng}}
|
|
96
109
|
|
|
97
110
|
---
|
|
98
111
|
|
|
99
|
-
## Phase 3: Clarification Log
|
|
112
|
+
## Phase 3: Nhật ký làm rõ (Clarification Log)
|
|
100
113
|
|
|
101
|
-
>
|
|
114
|
+
> Ghi lại mọi câu hỏi và câu trả lời qua các vòng.
|
|
102
115
|
|
|
103
|
-
###
|
|
104
|
-
| # |
|
|
116
|
+
### Vòng {N}
|
|
117
|
+
| # | Nhóm | Câu hỏi | PO trả lời |
|
|
105
118
|
|---|----------|------------|------------|
|
|
106
|
-
| 1 | Context | {
|
|
107
|
-
| 2 | Flow | {
|
|
108
|
-
| 3 | Logic | {
|
|
119
|
+
| 1 | Context | {câu hỏi} | {trả lời} |
|
|
120
|
+
| 2 | Flow | {câu hỏi} | {trả lời} |
|
|
121
|
+
| 3 | Logic | {câu hỏi} | {trả lời} |
|
|
109
122
|
|
|
110
|
-
###
|
|
111
|
-
- {
|
|
123
|
+
### Mục chưa giải quyết
|
|
124
|
+
- {Mục chưa giải quyết — nếu còn tồn đọng, KHÔNG được sang Phase 4}
|
|
112
125
|
|
|
113
126
|
---
|
|
114
127
|
|
|
115
128
|
## Phase 4: Business Rules
|
|
116
129
|
|
|
117
|
-
> ✅ PO
|
|
130
|
+
> ✅ PO xác nhận: {Có/Không}
|
|
118
131
|
|
|
119
|
-
| Rule ID |
|
|
120
|
-
|
|
121
|
-
| BR-1 | {
|
|
122
|
-
| BR-2 | {
|
|
132
|
+
| Rule ID | Hành động/Trigger | Quy tắc | Điều kiện |
|
|
133
|
+
|---------|---------------------|---------------------|------------------------|
|
|
134
|
+
| BR-1 | {hành động từ flow} | {business rule} | {điều kiện áp dụng} |
|
|
135
|
+
| BR-2 | {hành động từ flow} | {business rule} | {điều kiện áp dụng} |
|
|
123
136
|
|
|
124
137
|
---
|
|
125
138
|
|
|
126
139
|
## Phase 5: Business Logic
|
|
127
140
|
|
|
128
|
-
> ✅ PO
|
|
141
|
+
> ✅ PO xác nhận: {Có/Không}
|
|
129
142
|
|
|
130
|
-
| Rule ID |
|
|
131
|
-
|
|
132
|
-
| BR-1 | {
|
|
133
|
-
| BR-2 | {
|
|
143
|
+
| 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 |
|
|
144
|
+
|---------|---------------------------------------------------|-------------------------------------|
|
|
145
|
+
| BR-1 | {logic nghiệp vụ khi rule kích hoạt} | {vd: báo "Số dư không đủ"} |
|
|
146
|
+
| BR-2 | {logic nghiệp vụ khi rule kích hoạt} | {…} |
|
|
134
147
|
|
|
135
148
|
---
|
|
136
149
|
|
|
137
150
|
## Phase 6: Acceptance Criteria
|
|
138
151
|
|
|
139
|
-
> ✅ PO
|
|
152
|
+
> ✅ PO xác nhận: {Có/Không}
|
|
140
153
|
|
|
141
|
-
| AC ID |
|
|
154
|
+
| AC ID | Mô tả | Hành vi kỳ vọng | Bắt nguồn từ |
|
|
142
155
|
|-------|------------------------|---------------------------|--------------|
|
|
143
|
-
| AC-1 | {
|
|
144
|
-
| AC-2 | {
|
|
156
|
+
| AC-1 | {mô tả tiêu chí} | {hành vi kỳ vọng} | BR-{N} |
|
|
157
|
+
| AC-2 | {mô tả tiêu chí} | {hành vi kỳ vọng} | BR-{N} |
|
|
145
158
|
|
|
146
159
|
---
|
|
147
160
|
|
|
148
|
-
## Phase 7: Validation Report
|
|
161
|
+
## Phase 7: Báo cáo kiểm chứng (Validation Report)
|
|
149
162
|
|
|
150
|
-
### Coverage Matrix
|
|
151
|
-
| Flow
|
|
152
|
-
|
|
153
|
-
| {
|
|
163
|
+
### Ma trận độ phủ (Coverage Matrix)
|
|
164
|
+
| Hành động Flow | Có Rule? | Có Logic? | Có AC? | Status |
|
|
165
|
+
|----------------|----------|-----------|--------|--------|
|
|
166
|
+
| {Hành động 1} | ✅/❌ | ✅/❌ | ✅/❌ | OK/GAP |
|
|
154
167
|
|
|
155
|
-
###
|
|
156
|
-
- {
|
|
168
|
+
### Xung đột phát hiện
|
|
169
|
+
- {Mô tả xung đột — hoặc "None"}
|
|
157
170
|
|
|
158
|
-
###
|
|
159
|
-
- {
|
|
171
|
+
### Mục còn thiếu
|
|
172
|
+
- {Rule/AC/logic còn thiếu — hoặc "None"}
|
|
160
173
|
|
|
161
174
|
---
|
|
162
175
|
|
|
163
176
|
<!--
|
|
164
177
|
NEXT STEPS:
|
|
165
|
-
|
|
178
|
+
Khi Product Definition hoàn tất (Status: completed), chạy:
|
|
166
179
|
/generate-prd {path-to-this-file} --jira {TICKET-ID}
|
|
167
|
-
|
|
180
|
+
để sinh PRD từ Product Definition này.
|
|
168
181
|
-->
|
|
@@ -25,7 +25,7 @@ project:
|
|
|
25
25
|
# All paths are relative to workspace root.
|
|
26
26
|
paths:
|
|
27
27
|
# Feature-Package Layout:
|
|
28
|
-
# specs/{domain}/{prd-slug}/prd.md
|
|
28
|
+
# specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md — PRD document
|
|
29
29
|
# specs/{domain}/{prd-slug}/bdd/ — BDD .feature files
|
|
30
30
|
# specs/{domain}/{prd-slug}/tech-docs/ — Technical design docs
|
|
31
31
|
# specs/{domain}/{prd-slug}/design-spec/ — Design specs (FE/App only)
|
|
@@ -39,7 +39,7 @@ paths:
|
|
|
39
39
|
bdd_writing_guide: "specs/templates/bdd-writing-guide.md"
|
|
40
40
|
trace_report: "specs/.trace/trace-report.md"
|
|
41
41
|
|
|
42
|
-
# PRD template (PRDs are
|
|
42
|
+
# PRD template (PRDs are at specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md)
|
|
43
43
|
prd_template: "specs/templates/prd.template.md"
|
|
44
44
|
refinement_dir: ".agent/review"
|
|
45
45
|
|
|
@@ -33,7 +33,7 @@ Discovery → PRD → BDD Spec → Tech Design → Code → Dev Self-Check
|
|
|
33
33
|
| Phase | Ai | Lệnh chính | Output |
|
|
34
34
|
|-------|-----|-----------|--------|
|
|
35
35
|
| Discovery | PO + AI | `/define-product` | `specs/product-definition/{slug}.md` |
|
|
36
|
-
| PRD | AI → SA/PO | `/generate-prd`, `/refine-prd`, `/review-context` | `specs/{domain}/{prd-slug}/prd.md` |
|
|
36
|
+
| PRD | AI → SA/PO | `/generate-prd`, `/refine-prd`, `/review-context` | `specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` |
|
|
37
37
|
| Design Spec *(FE/App)* | AI → Designer/PO | `/generate-design-spec` | `specs/{domain}/{prd-slug}/design-spec/...` |
|
|
38
38
|
| BDD Spec | AI → SA/Dev | `/generate-bdd`, `/review-context` | `specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature` |
|
|
39
39
|
| Tech Design | AI → SA/Lead | `/generate-tech-docs`, `/review-tech-docs` | `tech-docs/{domain}/{UC-ID}-tech-design.md` |
|
|
@@ -42,16 +42,16 @@ Discovery → PRD → BDD → Tech Design → Code → Dev self-check:
|
|
|
42
42
|
|
|
43
43
|
# PHASE 2 — PRD
|
|
44
44
|
/generate-prd specs/product-definition/{slug}.md
|
|
45
|
-
→ specs/{domain}/{prd-slug}/prd.md
|
|
46
|
-
/refine-prd specs/{domain}/{prd-slug}/prd.md # AI suggestions → Review Board
|
|
47
|
-
/refine-prd --resume specs/{domain}/{prd-slug}/prd.md # apply + bump version
|
|
48
|
-
/review-context specs/{domain}/{prd-slug}/prd.md # quality gate (P1–P4)
|
|
49
|
-
/review-context --resume specs/{domain}/{prd-slug}/prd.md
|
|
45
|
+
→ specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
46
|
+
/refine-prd specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # AI suggestions → Review Board
|
|
47
|
+
/refine-prd --resume specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # apply + bump version
|
|
48
|
+
/review-context specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md # quality gate (P1–P4)
|
|
49
|
+
/review-context --resume specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
50
50
|
→ ✅ APPROVED → tiếp Phase 3
|
|
51
51
|
|
|
52
52
|
# PHASE 3 — SPEC & DESIGN
|
|
53
|
-
# (FE/App only) /generate-design-spec specs/{domain}/{prd-slug}/prd.md → designer + PO sign-off
|
|
54
|
-
/generate-bdd specs/{domain}/{prd-slug}/prd.md
|
|
53
|
+
# (FE/App only) /generate-design-spec specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md → designer + PO sign-off
|
|
54
|
+
/generate-bdd specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
55
55
|
→ specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
56
56
|
/review-context specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
57
57
|
/review-context --resume specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature # apply + bump bdd_version
|
|
@@ -70,7 +70,7 @@ Framework dùng metadata `@trace.*` để liên kết PRD → BDD → Code. (Chi
|
|
|
70
70
|
### Ví dụ trace chain hoàn chỉnh
|
|
71
71
|
|
|
72
72
|
```
|
|
73
|
-
specs/auth/login/
|
|
73
|
+
specs/auth/login/{TICKET-ID}-login.md ← @trace.domain: auth, @trace.status: approved
|
|
74
74
|
↓
|
|
75
75
|
specs/auth/login/bdd/system/FT-001-UC1-login.feature ← @trace.prd: FT-001 · web/app/system riêng (system tổng hợp từ web+app)
|
|
76
76
|
↓
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
1. git submodule update --remote my-project-specs
|
|
21
21
|
(lấy PRD + BDD mới nhất từ PO)
|
|
22
22
|
|
|
23
|
-
2. /review-context my-project-specs/specs/payment/checkout/
|
|
23
|
+
2. /review-context my-project-specs/specs/payment/checkout/{TICKET-ID}-checkout.md
|
|
24
24
|
→ Kiểm tra @trace.status = approved (không code khi còn draft)
|
|
25
25
|
→ Đọc kỹ AC, UC, BR
|
|
26
26
|
|
|
@@ -109,7 +109,7 @@ PO notify: "FT-042 updated — BR7 thay đổi giới hạn từ 5tr → 10tr"
|
|
|
109
109
|
│
|
|
110
110
|
▼
|
|
111
111
|
Dev chạy:
|
|
112
|
-
/review-context specs/payment/checkout/
|
|
112
|
+
/review-context specs/payment/checkout/{TICKET-ID}-checkout.md
|
|
113
113
|
→ Xem diff từ v1.0 sang v1.1 (agent highlight thay đổi)
|
|
114
114
|
│
|
|
115
115
|
▼
|
|
@@ -185,7 +185,7 @@ Service : BE
|
|
|
185
185
|
Severity : Major
|
|
186
186
|
|
|
187
187
|
Spec context:
|
|
188
|
-
PRD : specs/auth/login/
|
|
188
|
+
PRD : specs/auth/login/{TICKET-ID}-login.md (v1.0)
|
|
189
189
|
BDD : free-trial-specs/specs/auth/login/bdd/system/FT-001-login.feature
|
|
190
190
|
→ Scenario: "Lock account after 5 failed attempts"
|
|
191
191
|
Tech Doc : free-trial-specs/specs/auth/login/tech-docs/FT-001-auth-api.md
|
|
@@ -212,7 +212,7 @@ Code: ??? → kiểm tra tiếp
|
|
|
212
212
|
Chạy:
|
|
213
213
|
```
|
|
214
214
|
/fix-bug "BUG-20260605-003: FT-001-UC2-BR3 — account not locked after 5 failures
|
|
215
|
-
PRD: specs/auth/login/
|
|
215
|
+
PRD: specs/auth/login/{TICKET-ID}-login.md
|
|
216
216
|
BDD: free-trial-specs/specs/auth/login/bdd/system/FT-001-login.feature"
|
|
217
217
|
```
|
|
218
218
|
Agent sẽ: đọc BDD scenario được chỉ định · tìm code implement scenario đó (theo `@trace.bdd`) · so sánh logic thực tế vs spec · propose fix có giải thích.
|
|
@@ -253,7 +253,7 @@ PO thông báo: "FT-042 Design Spec + BDD đã sẵn sàng"
|
|
|
253
253
|
git submodule update --remote my-project-specs
|
|
254
254
|
|
|
255
255
|
FE dev đọc:
|
|
256
|
-
- my-project-specs/specs/payment/checkout/
|
|
256
|
+
- my-project-specs/specs/payment/checkout/{TICKET-ID}-checkout.md (business rules)
|
|
257
257
|
- my-project-specs/specs/payment/checkout/design-spec/FT-042-*.md (screens, components)
|
|
258
258
|
- my-project-specs/specs/payment/checkout/bdd/web/FT-042-UC*.feature (BDD đã gen sẵn)
|
|
259
259
|
│
|
|
@@ -34,7 +34,7 @@ Trước khi thông báo dev team bắt đầu, kiểm tra:
|
|
|
34
34
|
- [ ] Tất cả BDD files đã được review và không có `MISSING` trong Coverage Matrix
|
|
35
35
|
|
|
36
36
|
**Git:**
|
|
37
|
-
- [ ] Đã commit và push toàn bộ feature-package (`specs/{domain}/{prd-slug}/` — gồm `prd.md`, `design-spec/`, `bdd/`) lên spec repo
|
|
37
|
+
- [ ] Đã commit và push toàn bộ feature-package (`specs/{domain}/{prd-slug}/` — gồm `{TICKET-ID}-{prd-slug}.md`, `design-spec/`, `bdd/`) lên spec repo
|
|
38
38
|
- [ ] Thông báo dev team domain name và BDD path để họ cập nhật `git submodule update --remote`
|
|
39
39
|
|
|
40
40
|
---
|
|
@@ -20,11 +20,11 @@ Output: `specs/product-definition/FEAT-01-login.md`
|
|
|
20
20
|
```
|
|
21
21
|
Agent tự động: đọc product definition · expand thành PRD đầy đủ với UC, AC, BR · nhắc nếu bạn viết UI details · kiểm tra terminology với business-dictionary.
|
|
22
22
|
|
|
23
|
-
Output: `specs/auth/FEAT-01-login/
|
|
23
|
+
Output: `specs/auth/FEAT-01-login/FEAT-01-login.md`
|
|
24
24
|
|
|
25
25
|
**Bước 3 — Review nội dung:**
|
|
26
26
|
```
|
|
27
|
-
/refine-prd specs/auth/FEAT-01-login/
|
|
27
|
+
/refine-prd specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
28
28
|
```
|
|
29
29
|
Agent fan-out 4 lens (QA/DEV/SA/PO) chạy song song, rồi chạy completeness-critic loop cho đến khi một vòng không tìm ra finding mới, cuối cùng dedup + resolve conflict. Findings đầy đủ trong 1 lần chạy.
|
|
30
30
|
|
|
@@ -33,12 +33,12 @@ Mở findings file, xem xét từng finding: `accepted` → apply · `modified`
|
|
|
33
33
|
> **Finding khó hiểu? Bấm 💬 Giải thích.** Nếu một finding mô tả nặng tính kỹ thuật, dùng nút **💬 Giải thích** trên Review Board (extension Spec Driven Docs Tools). Claude sẽ giải thích lại bằng ngôn ngữ no-tech + đề xuất phương án cụ thể (cover cả edge case) ngay trong terminal, và **chờ bạn confirm trước khi apply** vào PRD — tránh refine nhiều vòng. Prompt sửa được qua setting `reviewBoard.clarifyPrompt` (không cần cài lại extension).
|
|
34
34
|
|
|
35
35
|
```
|
|
36
|
-
/review-context --resume specs/auth/FEAT-01-login/
|
|
36
|
+
/review-context --resume specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
**Bước 4 — Final check:**
|
|
40
40
|
```
|
|
41
|
-
/review-context specs/auth/FEAT-01-login/
|
|
41
|
+
/review-context specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
42
42
|
```
|
|
43
43
|
Kiểm tra: `@trace.status`, `@trace.domain`, completeness.
|
|
44
44
|
|
|
@@ -51,7 +51,7 @@ Kiểm tra: `@trace.status`, `@trace.domain`, completeness.
|
|
|
51
51
|
|
|
52
52
|
**Bước 6 — Tạo Design Spec (FE/App):**
|
|
53
53
|
```
|
|
54
|
-
/generate-design-spec specs/auth/FEAT-01-login/
|
|
54
|
+
/generate-design-spec specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
55
55
|
```
|
|
56
56
|
Agent hỏi platform (web / app). PO phải cung cấp **Figma link node-level** (URL chứa `?node-id=`, lấy bằng right-click vào frame → "Copy link to selection") cho **mỗi screen**. Screen nào thiếu link → bị flag ❌ Missing, Status giữ `draft`, `/generate-bdd` bị BLOCKED cho đến khi đủ link.
|
|
57
57
|
|
|
@@ -59,7 +59,7 @@ Sau khi Designer review + confirm đủ Figma node-id links → `@trace.status:
|
|
|
59
59
|
|
|
60
60
|
**Bước 7 — Generate BDD:**
|
|
61
61
|
```
|
|
62
|
-
/generate-bdd specs/auth/FEAT-01-login/
|
|
62
|
+
/generate-bdd specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
63
63
|
```
|
|
64
64
|
Agent hỏi: **"Platform? (1) web (2) app (3) system"**
|
|
65
65
|
- Chọn `web` → `specs/auth/FEAT-01-login/bdd/web/FEAT-01-UC1-login-web.feature`
|
|
@@ -111,7 +111,7 @@ git push
|
|
|
111
111
|
|
|
112
112
|
**Bước 1 — Design Spec:**
|
|
113
113
|
```
|
|
114
|
-
/generate-design-spec specs/auth/FEAT-01-login/
|
|
114
|
+
/generate-design-spec specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
115
115
|
```
|
|
116
116
|
Output: `specs/auth/FEAT-01-login/design-spec/FEAT-01-design-spec-web.md`
|
|
117
117
|
|
|
@@ -119,7 +119,7 @@ Mỗi screen cần Figma link node-id. Screen thiếu → flag ❌ Missing, BLOC
|
|
|
119
119
|
|
|
120
120
|
**Bước 2 — Generate BDD:**
|
|
121
121
|
```
|
|
122
|
-
/generate-bdd specs/auth/FEAT-01-login/
|
|
122
|
+
/generate-bdd specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
| Lần | Platform | Output |
|
|
@@ -147,12 +147,12 @@ cat .agent/review/FEAT-01-login-prd-review-context-findings.yaml
|
|
|
147
147
|
|
|
148
148
|
**Bước 3 — Apply:**
|
|
149
149
|
```
|
|
150
|
-
/review-context --resume specs/auth/FEAT-01-login/
|
|
150
|
+
/review-context --resume specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
**Bước 4 — Re-review:**
|
|
154
154
|
```
|
|
155
|
-
/review-context specs/auth/FEAT-01-login/
|
|
155
|
+
/review-context specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
156
156
|
```
|
|
157
157
|
Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
158
158
|
|
|
@@ -167,12 +167,12 @@ Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
|
167
167
|
|
|
168
168
|
**Bước 2 — Sửa nội dung:**
|
|
169
169
|
```
|
|
170
|
-
/refine-prd specs/auth/FEAT-01-login/
|
|
170
|
+
/refine-prd specs/auth/FEAT-01-login/FEAT-01-login.md "Thêm yêu cầu: hỗ trợ đăng nhập bằng OTP"
|
|
171
171
|
```
|
|
172
172
|
|
|
173
173
|
**Bước 3 — Review lại:**
|
|
174
174
|
```
|
|
175
|
-
/review-context specs/auth/FEAT-01-login/
|
|
175
|
+
/review-context specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
176
176
|
/review-context --resume (nếu cần fix)
|
|
177
177
|
```
|
|
178
178
|
|
|
@@ -183,7 +183,7 @@ Lặp lại cho đến khi `recommendation: APPROVED`.
|
|
|
183
183
|
# major bump (2.0) nếu thay đổi cơ bản
|
|
184
184
|
```
|
|
185
185
|
```bash
|
|
186
|
-
git add specs/auth/FEAT-01-login/
|
|
186
|
+
git add specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
187
187
|
git commit -m "feat(auth): update FEAT-01 PRD v1.1 — add OTP login AC"
|
|
188
188
|
git push
|
|
189
189
|
```
|
|
@@ -239,7 +239,7 @@ services:
|
|
|
239
239
|
2. Quyết định PRD nào đúng.
|
|
240
240
|
3. Sửa file:
|
|
241
241
|
```
|
|
242
|
-
/review-context --resume specs/auth/FEAT-01-login/
|
|
242
|
+
/review-context --resume specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
243
243
|
# với finding P3: modified: "session timeout cập nhật thành 2 giờ theo FEAT-05"
|
|
244
244
|
```
|
|
245
245
|
4. Cả 2 PRD phải nhất quán trước khi dev team generate BDD.
|
|
@@ -268,20 +268,20 @@ git push
|
|
|
268
268
|
```
|
|
269
269
|
specs/
|
|
270
270
|
├── auth/
|
|
271
|
-
│ ├── FEAT-01-login/
|
|
272
|
-
│ └── FEAT-08-sso/
|
|
271
|
+
│ ├── FEAT-01-login/FEAT-01-login.md (approved)
|
|
272
|
+
│ └── FEAT-08-sso/FEAT-08-sso.md (draft)
|
|
273
273
|
├── payment/
|
|
274
|
-
│ ├── FEAT-03-checkout/
|
|
275
|
-
│ └── FEAT-11-refund/
|
|
274
|
+
│ ├── FEAT-03-checkout/FEAT-03-checkout.md (approved)
|
|
275
|
+
│ └── FEAT-11-refund/FEAT-11-refund.md (draft)
|
|
276
276
|
└── loyalty/
|
|
277
|
-
└── FEAT-06-points/
|
|
277
|
+
└── FEAT-06-points/FEAT-06-points.md (in-review)
|
|
278
278
|
```
|
|
279
279
|
|
|
280
280
|
**Gợi ý:** Hoàn thiện 1 PRD đến `approved` trước khi bắt đầu PRD tiếp theo. Chỉ PRD `approved` mới được dev team sử dụng.
|
|
281
281
|
|
|
282
282
|
```bash
|
|
283
283
|
# Xem nhanh tất cả PRDs và status:
|
|
284
|
-
grep -r "@trace.status" specs/ --include="
|
|
284
|
+
grep -r "@trace.status" specs/ --include="*.md"
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
---
|
|
@@ -297,7 +297,7 @@ grep -r "@trace.status" specs/ --include="prd.md"
|
|
|
297
297
|
```
|
|
298
298
|
|
|
299
299
|
```
|
|
300
|
-
/review-context specs/auth/FEAT-01-login/
|
|
300
|
+
/review-context specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
301
301
|
→ Phải thấy recommendation: APPROVED và 0 critical findings
|
|
302
302
|
```
|
|
303
303
|
|
|
@@ -306,13 +306,13 @@ grep -r "@trace.status" specs/ --include="prd.md"
|
|
|
306
306
|
[FEAT-01] PRD Login đã approved — sẵn sàng implement
|
|
307
307
|
|
|
308
308
|
Domain: auth
|
|
309
|
-
File: my-project-specs/specs/auth/FEAT-01-login/
|
|
309
|
+
File: my-project-specs/specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
310
310
|
Version: 1.0
|
|
311
311
|
Design Spec (Web): my-project-specs/specs/auth/FEAT-01-login/design-spec/FEAT-01-design-spec-web.md
|
|
312
312
|
|
|
313
313
|
Lệnh để bắt đầu:
|
|
314
314
|
git submodule update --remote my-project-specs
|
|
315
|
-
/review-context my-project-specs/specs/auth/FEAT-01-login/
|
|
315
|
+
/review-context my-project-specs/specs/auth/FEAT-01-login/FEAT-01-login.md
|
|
316
316
|
```
|
|
317
317
|
|
|
318
318
|
---
|
|
@@ -45,7 +45,7 @@ Service : BE / Web / App
|
|
|
45
45
|
Severity : Critical / Major / Minor
|
|
46
46
|
|
|
47
47
|
Spec context:
|
|
48
|
-
PRD : specs/{domain}/{prd-slug}/prd.md (v{x.x})
|
|
48
|
+
PRD : specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md (v{x.x})
|
|
49
49
|
BDD : {bdd path} → Scenario: "{scenario title}"
|
|
50
50
|
Tech Doc : {tech_docs path}
|
|
51
51
|
|
|
@@ -77,7 +77,7 @@ Service : BE
|
|
|
77
77
|
Severity : Major
|
|
78
78
|
|
|
79
79
|
Spec context:
|
|
80
|
-
PRD : specs/auth/FT-001-login/
|
|
80
|
+
PRD : specs/auth/FT-001-login/FT-001-login.md (v1.0)
|
|
81
81
|
BDD : free-trial-specs/specs/auth/FT-001-login/bdd/system/FT-001-login.feature
|
|
82
82
|
→ Scenario: "Lock account after 5 failed attempts"
|
|
83
83
|
Tech Doc : free-trial-specs/specs/auth/FT-001-login/tech-docs/FT-001-auth-api.md
|
|
@@ -18,7 +18,7 @@ Sau khi chạy `/generate-spec-manifest`, tra manifest để lấy paths:
|
|
|
18
18
|
```yaml
|
|
19
19
|
# spec-manifest.yaml
|
|
20
20
|
FT-001:
|
|
21
|
-
prd: "my-project-specs/specs/auth/FT-001-login/
|
|
21
|
+
prd: "my-project-specs/specs/auth/FT-001-login/FT-001-login.md"
|
|
22
22
|
bdd:
|
|
23
23
|
be: "my-project-specs/specs/auth/FT-001-login/bdd/system/FT-001-UC1-login-system.feature"
|
|
24
24
|
web: "my-project-specs/specs/auth/FT-001-login/bdd/web/FT-001-UC1-login-web.feature"
|
|
@@ -26,7 +26,7 @@ FT-001:
|
|
|
26
26
|
be: "my-project-specs/specs/auth/FT-001-login/tech-docs/FT-001-auth-api.md"
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
**Bước 1: Đọc PRD** tại `my-project-specs/specs/auth/FT-001-login/
|
|
29
|
+
**Bước 1: Đọc PRD** tại `my-project-specs/specs/auth/FT-001-login/FT-001-login.md`
|
|
30
30
|
*(nằm trong spec submodule — shared repo của PO)*
|
|
31
31
|
|
|
32
32
|
```markdown
|
|
@@ -16,7 +16,7 @@ git pull && git submodule update --remote --recursive
|
|
|
16
16
|
# 3. Kiểm tra status
|
|
17
17
|
# FT-042:
|
|
18
18
|
# status: approved ← ✅ có thể test
|
|
19
|
-
# prd: "specs/payment/FT-042-checkout/
|
|
19
|
+
# prd: "specs/payment/FT-042-checkout/FT-042-checkout.md"
|
|
20
20
|
# bdd:
|
|
21
21
|
# be: "free-trial-specs/specs/payment/FT-042-checkout/bdd/system/FT-042-UC1-checkout-system.feature"
|
|
22
22
|
# web: "free-trial-specs/specs/payment/FT-042-checkout/bdd/web/FT-042-UC1-checkout-web.feature"
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
## Spec-Manifest Là Gì Và Tại Sao Cần
|
|
6
6
|
|
|
7
|
-
Trong umbrella repo (có `spec_source`), **mọi spec đều nằm trong spec submodule** — gom theo feature-package: mỗi PRD có một thư mục `specs/{domain}/{prd-slug}/` chứa tất cả artifact (`prd.md`, `bdd/{platform}/`, `tech-docs/`, `design-spec/`), trải trên nhiều domain:
|
|
7
|
+
Trong umbrella repo (có `spec_source`), **mọi spec đều nằm trong spec submodule** — gom theo feature-package: mỗi PRD có một thư mục `specs/{domain}/{prd-slug}/` chứa tất cả artifact (`{TICKET-ID}-{prd-slug}.md`, `bdd/{platform}/`, `tech-docs/`, `design-spec/`), trải trên nhiều domain:
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
free-trial-umbrella/ ← umbrella (Claude Code mở ở đây)
|
|
11
11
|
├── free-trial-specs/ ← SPEC submodule — TẤT CẢ spec ở đây
|
|
12
12
|
│ └── specs/
|
|
13
13
|
│ └── auth/FT-001-login/ ← feature-package (1 PRD = 1 thư mục)
|
|
14
|
-
│ ├── prd.md ← PRD
|
|
14
|
+
│ ├── {TICKET-ID}-{prd-slug}.md ← PRD
|
|
15
15
|
│ ├── design-spec/... ← Design Spec
|
|
16
16
|
│ ├── bdd/system/... ← BDD System (BE)
|
|
17
17
|
│ ├── bdd/web/... ← BDD Web (FE)
|
|
@@ -30,7 +30,7 @@ features:
|
|
|
30
30
|
FT-001:
|
|
31
31
|
domain: auth
|
|
32
32
|
status: approved
|
|
33
|
-
prd: "specs/auth/FT-001-login/
|
|
33
|
+
prd: "specs/auth/FT-001-login/FT-001-login.md"
|
|
34
34
|
pdd: "specs/product-definition/auth/FT-001-def.md"
|
|
35
35
|
tech_docs:
|
|
36
36
|
be: "free-trial-specs/specs/auth/FT-001-login/tech-docs/FT-001-UC1-auth-api.md"
|
|
@@ -16,7 +16,7 @@ git pull && git submodule update --remote --recursive
|
|
|
16
16
|
Lookup FT-042 trong spec-manifest.yaml
|
|
17
17
|
→ status: approved? ✅ (nếu draft → dừng, báo PO)
|
|
18
18
|
→ ghi lại paths (tất cả đều nằm trong submodule):
|
|
19
|
-
prd: {spec_source}/specs/{domain}/{prd-slug}/prd.md
|
|
19
|
+
prd: {spec_source}/specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
20
20
|
bdd.system: {spec_source}/specs/{domain}/{prd-slug}/bdd/system/FT-042-*.feature
|
|
21
21
|
bdd.web: {spec_source}/specs/{domain}/{prd-slug}/bdd/web/FT-042-*.feature
|
|
22
22
|
tech_docs.be: {spec_source}/specs/{domain}/{prd-slug}/tech-docs/FT-042-*.md
|