@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,198 +1,198 @@
|
|
|
1
|
-
# /setup-ai-first —
|
|
1
|
+
# /setup-ai-first — Khởi tạo Spec-Driven Docs trong một dự án
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Dẫn người dùng qua một setup một-lần tạo mọi thư mục cần thiết, cài CLAUDE.md, và verify môi trường.
|
|
4
4
|
|
|
5
5
|
## Gate
|
|
6
|
-
# Gate —
|
|
6
|
+
# Gate — Quy trình vào chuẩn cho mọi lệnh
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
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ó.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Bước 0 — Kiểm tra chế độ Sub-Agent
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Trước tiên, kiểm tra xem `$ARGUMENTS` có phải là payload JSON từ một orchestrator hay không:
|
|
13
13
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
- **
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
3.
|
|
14
|
+
1. Thử parse `$ARGUMENTS` dưới dạng JSON.
|
|
15
|
+
2. Nếu parse thành công **và** chứa `"_agent_mode": true`:
|
|
16
|
+
- **Bỏ qua hoàn toàn Bước 1, 2 và 3 của Gate này.**
|
|
17
|
+
- Đặt target file = `payload.target_file`
|
|
18
|
+
- Đặt loaded context = `payload.context` (KHÔNG chạy context-loader.md)
|
|
19
|
+
- Đặt phạm vi UC = `payload.uc_id` (chỉ xử lý UC này)
|
|
20
|
+
- Đặt line range = `payload.uc_section` (chỉ đọc đúng section đó của PRD)
|
|
21
|
+
- Đi thẳng tới phần logic riêng của lệnh.
|
|
22
|
+
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).
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Bước 0-B — Kiểm tra Model
|
|
25
25
|
|
|
26
|
-
*
|
|
26
|
+
*Bỏ qua bước này nếu `_agent_mode: true` (sub-agent — orchestrator đã kiểm tra rồi).*
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
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.
|
|
29
|
+
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.
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Hiển thị và chờ phản hồi:
|
|
32
32
|
|
|
33
33
|
```
|
|
34
34
|
⚙️ MODEL CHECK
|
|
35
35
|
──────────────────────────────────────────────────────────────────
|
|
36
|
-
Recommended : claude-opus-4 (
|
|
37
|
-
Why needed :
|
|
38
|
-
|
|
36
|
+
Recommended : claude-opus-4 (hoặc model Opus mới nhất)
|
|
37
|
+
Why needed : Phân tích spec, review kiến trúc, sinh code đòi hỏi
|
|
38
|
+
suy luận sâu. Model nhỏ hơn dễ bỏ sót edge case.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
• Settings → Model →
|
|
42
|
-
•
|
|
40
|
+
Cách đổi trong Claude Code:
|
|
41
|
+
• Settings → Model → chọn "claude-opus"
|
|
42
|
+
• hoặc: /model → chọn claude-opus
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
Y —
|
|
46
|
-
S —
|
|
44
|
+
Đang chạy claude-opus?
|
|
45
|
+
Y — đúng, đang dùng claude-opus → tiếp tục
|
|
46
|
+
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)
|
|
47
47
|
──────────────────────────────────────────────────────────────────
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
- "Y" →
|
|
51
|
-
- "S" →
|
|
52
|
-
- "N"
|
|
50
|
+
- "Y" → tiếp tục sang Bước 1.
|
|
51
|
+
- "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).
|
|
52
|
+
- "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."
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## Bước 1 — Xác định Target File
|
|
55
55
|
|
|
56
|
-
1.
|
|
57
|
-
2.
|
|
58
|
-
- **BDD
|
|
59
|
-
- **PRD
|
|
60
|
-
- **tech-docs
|
|
61
|
-
- **design-spec
|
|
56
|
+
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.
|
|
57
|
+
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/`):
|
|
58
|
+
- **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 đó.
|
|
59
|
+
- **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.)*
|
|
60
|
+
- **Lệnh tech-docs**: `{specs_dir}/{domain}/*/tech-docs/{UC-ID}*-tech-design*.md`.
|
|
61
|
+
- **Lệnh design-spec**: `{specs_dir}/{domain}/*/design-spec/{TICKET-ID}*.md`.
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
3.
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
63
|
+
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.
|
|
64
|
+
3. Nếu `$ARGUMENTS` rỗng hoặc không tìm thấy file khớp:
|
|
65
|
+
- 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).
|
|
66
|
+
- 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)"
|
|
67
|
+
- Chờ người dùng chọn rồi mới tiếp tục.
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Bước 2 — Chạy Context Loader
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
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`.
|
|
72
|
+
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.
|
|
73
73
|
|
|
74
|
-
##
|
|
74
|
+
## Bước 3 — CHECKPOINT
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
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:
|
|
77
77
|
|
|
78
78
|
```
|
|
79
79
|
CHECKPOINT
|
|
80
80
|
-----------
|
|
81
81
|
Target : {resolved file path}
|
|
82
|
-
Project : {project.name
|
|
82
|
+
Project : {project.name từ project-context.yaml}
|
|
83
83
|
Tech stack : {language} / {framework}
|
|
84
|
-
Module : {module
|
|
85
|
-
Domains : {
|
|
84
|
+
Module : {module nếu có, else "not configured"}
|
|
85
|
+
Domains : {danh sách domain, ngăn cách bởi dấu phẩy}
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Tiếp tục? (Y/N)
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
- "Y" →
|
|
92
|
-
- "N" →
|
|
90
|
+
Chờ người dùng trả lời rõ ràng "Y" hoặc "N" rồi mới tiếp tục.
|
|
91
|
+
- "Y" → tiếp tục sang các bước riêng của lệnh bên dưới.
|
|
92
|
+
- "N" → dừng lại và hỏi người dùng muốn thay đổi gì.
|
|
93
93
|
|
|
94
94
|
|
|
95
|
-
*
|
|
95
|
+
*Lưu ý: Với lệnh này — **bỏ qua Gate Step 1, 2, và 3** (chưa có file input và chưa có project context). Chỉ chạy Step 0-B (model check). Project root là **thư mục làm việc hiện tại**. Đi thẳng tới Precondition Check bên dưới.*
|
|
96
96
|
|
|
97
97
|
---
|
|
98
98
|
|
|
99
99
|
## Precondition Check
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
-
|
|
103
|
-
- N →
|
|
104
|
-
- Y →
|
|
105
|
-
-
|
|
101
|
+
Kiểm tra đã setup chưa:
|
|
102
|
+
- Nếu cả `CLAUDE.md` **và** `.agent/project-context.yaml` đều tồn tại → hỏi: "Dự án này đã được khởi tạo. Chạy lại setup để regenerate file config? (Y/N)"
|
|
103
|
+
- N → dừng
|
|
104
|
+
- Y → tiếp tục (file có sẵn được giữ — mỗi bước sẽ đề nghị merge/skip)
|
|
105
|
+
- Nếu chỉ có `specs/` hoặc phát hiện setup một phần → tiếp tục bình thường (an toàn chạy lại)
|
|
106
106
|
|
|
107
|
-
## Step 0.5 —
|
|
107
|
+
## Step 0.5 — Loại dự án
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
Hỏi người dùng:
|
|
110
110
|
|
|
111
111
|
```
|
|
112
|
-
|
|
113
|
-
1. Single-service —
|
|
114
|
-
2. Umbrella repo —
|
|
115
|
-
3. PO Spec repo — docs
|
|
112
|
+
Dự án này thuộc loại nào?
|
|
113
|
+
1. Single-service — một codebase, một platform (setup chuẩn)
|
|
114
|
+
2. Umbrella repo — repo này chứa nhiều service submodule (microservices / multi-app)
|
|
115
|
+
3. PO Spec repo — chỉ docs, không có code chạy được (chỉ PRD + design-spec)
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
Lưu câu trả lời thành `project_type`. Mặc định `1` nếu user không trả lời.
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
Dựa trên câu trả lời:
|
|
121
121
|
|
|
122
|
-
**project_type = 1 (Single-service):**
|
|
122
|
+
**project_type = 1 (Single-service):** Tiếp tục setup chuẩn bên dưới.
|
|
123
123
|
|
|
124
|
-
**project_type = 2 (Umbrella):**
|
|
125
|
-
- "Path
|
|
126
|
-
- "
|
|
127
|
-
(
|
|
124
|
+
**project_type = 2 (Umbrella):** Hỏi hai câu follow-up:
|
|
125
|
+
- "Path tới spec submodule (vd `free-trial-specs`)? Nhấn Enter để skip."
|
|
126
|
+
- "Liệt kê các service dạng cặp `domain:module`, ngăn cách bởi dấu phẩy
|
|
127
|
+
(vd `user:java-spring,order:java-spring`). Nhấn Enter để skip."
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
- Skip
|
|
131
|
-
-
|
|
132
|
-
*(
|
|
133
|
-
-
|
|
134
|
-
- Skip
|
|
135
|
-
-
|
|
129
|
+
Rồi:
|
|
130
|
+
- Skip tạo bất kỳ artifact `specs/` nào (mọi spec — PRD, BDD, tech-docs, design-spec — sống trong spec submodule theo bố cục feature-package `specs/{domain}/{prd-slug}/`)
|
|
131
|
+
- Chỉ tạo: `.trace/`, `.agent/review/` ở cấp umbrella
|
|
132
|
+
*(Trừ khi user yêu cầu rõ tạo cấu trúc đầy đủ)*
|
|
133
|
+
- Sinh `.agent/project-context.yaml` ở umbrella mode với services và spec_source đã cung cấp
|
|
134
|
+
- Skip tạo `CLAUDE.md` (umbrella không có một tech stack đơn)
|
|
135
|
+
- Sau setup, nhắc: "Mở từng service submodule riêng trong Claude Code để cài framework ở đó nếu cần."
|
|
136
136
|
|
|
137
137
|
**project_type = 3 (PO Spec repo):**
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
- Skip: `.trace/` (
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
- **
|
|
146
|
-
-
|
|
138
|
+
- Tạo base dir: `specs/product-definition/`, `specs/domain-knowledge/`, `feedback/`, `.agent/review/`
|
|
139
|
+
- Artifact theo từng feature (`specs/{domain}/{prd-slug}/{ {TICKET-ID}-{prd-slug}.md, bdd/, tech-docs/, design-spec/}`) được tạo on demand bởi các lệnh generate — ĐỪNG tạo trước
|
|
140
|
+
- Skip: `.trace/` (theo service, sống cạnh code trong mỗi service submodule)
|
|
141
|
+
- Sinh `CLAUDE.md` tối thiểu chỉ với §1 (project overview) và §7 (git conventions)
|
|
142
|
+
- Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán làm `@trace.domain` trong mọi PRD
|
|
143
|
+
- Thông báo:
|
|
144
|
+
- Lệnh cho PO repo: `/define-product`, `/generate-prd`, `/review-context`, `/generate-design-spec`
|
|
145
|
+
- **Quan trọng cho handoff team dev:** Mọi PRD phải có `@trace.domain: {domain}` trong frontmatter. Team dev dùng nó để route BDD/code sinh ra tới đúng service submodule. Tên domain không nhất quán sẽ phá routing.
|
|
146
|
+
- Frontmatter PRD khuyến nghị:
|
|
147
147
|
```
|
|
148
|
-
@trace.domain: {domain} ←
|
|
148
|
+
@trace.domain: {domain} ← phải khớp một key trong services config của team dev
|
|
149
149
|
@trace.id: {TICKET-ID}
|
|
150
150
|
@trace.status: draft | approved
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
## Step 1 —
|
|
153
|
+
## Step 1 — Tạo cấu trúc thư mục
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
Tạo các thư mục này (skip nếu đã tồn tại):
|
|
156
156
|
|
|
157
157
|
```
|
|
158
158
|
{project-root}/
|
|
159
159
|
├── specs/
|
|
160
|
-
│ ├── product-definition/ ← Output
|
|
160
|
+
│ ├── product-definition/ ← Output của /define-product
|
|
161
161
|
│ └── domain-knowledge/ ← business dictionary & domain context
|
|
162
162
|
├── .trace/ ← .trace/{domain}/{prd-slug}/{UC-ID}.tsv
|
|
163
163
|
└── .agent/
|
|
164
164
|
└── review/
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
**
|
|
168
|
-
|
|
167
|
+
**Bố cục feature-package** — artifact spec theo từng feature KHÔNG được tạo trước. Mỗi lệnh generate
|
|
168
|
+
tự tạo folder của nó on demand dưới `specs/{domain}/{prd-slug}/`:
|
|
169
169
|
|
|
170
170
|
```
|
|
171
171
|
specs/{domain}/{prd-slug}/
|
|
172
|
-
├── prd.md
|
|
173
|
-
├── bdd/ ← /generate-bdd (.feature
|
|
172
|
+
├── {TICKET-ID}-{prd-slug}.md ← /generate-prd (vd SEG01-segment-scoring-service.md)
|
|
173
|
+
├── bdd/ ← /generate-bdd (file .feature)
|
|
174
174
|
├── tech-docs/ ← /generate-tech-docs
|
|
175
|
-
└── design-spec/ ← /generate-design-spec (FE/App
|
|
175
|
+
└── design-spec/ ← /generate-design-spec (chỉ platform FE/App)
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
*
|
|
178
|
+
*Tạo base dir nào tuỳ theo `project_type` set ở Step 0.5:*
|
|
179
179
|
|
|
180
|
-
| project_type |
|
|
180
|
+
| project_type | Tạo | Skip |
|
|
181
181
|
|---|---|---|
|
|
182
|
-
| **1 — Single-service** |
|
|
183
|
-
| **2 — Umbrella** | `.trace/` + `.agent/review/`
|
|
184
|
-
| **3 — PO Spec repo** | `specs/product-definition/`, `specs/domain-knowledge/`, **`feedback/`**, `.agent/review/` (
|
|
182
|
+
| **1 — Single-service** | Cấu trúc base ở trên (`specs/product-definition/`, `specs/domain-knowledge/`, `.trace/`, `.agent/review/`) | folder theo feature (tạo on demand) |
|
|
183
|
+
| **2 — Umbrella** | Chỉ `.trace/` + `.agent/review/` (ở umbrella root) | Mọi thứ khác — **toàn bộ spec sống trong spec submodule (`spec_source`)** dưới `specs/{domain}/{prd-slug}/`; service submodule chỉ chứa **code + `.trace/`** |
|
|
184
|
+
| **3 — PO Spec repo** | `specs/product-definition/`, `specs/domain-knowledge/`, **`feedback/`**, `.agent/review/` (folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand) | `.trace/` (theo service, sống cạnh code trong mỗi service submodule) |
|
|
185
185
|
|
|
186
|
-
## Step 2 —
|
|
186
|
+
## Step 2 — Tạo CLAUDE.md
|
|
187
187
|
|
|
188
|
-
*
|
|
189
|
-
*
|
|
188
|
+
*Bỏ qua hoàn toàn step này nếu `project_type = 2` (Umbrella) — umbrella không có một tech stack đơn.*
|
|
189
|
+
*Với `project_type = 3` (PO Spec repo) — tạo CLAUDE.md tối thiểu chỉ với §1 (project overview) và §7 (git conventions). Skip §2–§6.*
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
191
|
+
Kiểm tra `CLAUDE.md` tồn tại chưa:
|
|
192
|
+
- Có → hỏi "Merge template hay skip?"
|
|
193
|
+
- Không → tạo từ template bên dưới
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
Sau khi tạo, hướng dẫn: "Mở CLAUDE.md và điền các giá trị `{{PLACEHOLDER}}` bằng thông tin dự án của bạn."
|
|
196
196
|
|
|
197
197
|
### CLAUDE.md Template
|
|
198
198
|
|
|
@@ -242,27 +242,27 @@ branch_feature: "feature/{{TICKET_PREFIX}}-{N}-{slug}"
|
|
|
242
242
|
commit_feature: "feat({{TICKET_PREFIX}}-{N}): {description}"
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
## Step 3 —
|
|
245
|
+
## Step 3 — Tạo project-context.yaml
|
|
246
246
|
|
|
247
|
-
*
|
|
248
|
-
- *
|
|
249
|
-
- *
|
|
247
|
+
*Với `project_type = 2` (Umbrella):*
|
|
248
|
+
- *Nếu `.agent/project-context.yaml` đã được sinh bởi `--init --umbrella` → mở nó và verify/sửa section `services` (domain key, path, module). Skip copy template bên dưới.*
|
|
249
|
+
- *Nếu chưa sinh → hỏi: "Path spec submodule?" và "Services (cặp domain:module)?" rồi sinh config umbrella (xem Step 0.5 cho format).*
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
Tạo `.agent/project-context.yaml` dùng `.agent/templates/project-context.yaml` làm template nguồn.
|
|
252
252
|
|
|
253
|
-
Copy
|
|
253
|
+
Copy template và hướng dẫn: "Mở `.agent/project-context.yaml` và điền mọi giá trị `{{PLACEHOLDER}}`. Section `paths` đã được cấu hình sẵn với default hợp lý — chỉnh nếu dự án dùng tên thư mục khác."
|
|
254
254
|
|
|
255
|
-
## Step 4 —
|
|
255
|
+
## Step 4 — Tạo business-dictionary.md
|
|
256
256
|
|
|
257
|
-
*Skip
|
|
257
|
+
*Skip Step 4 và 5 nếu `project_type = 2` (Umbrella) — business dictionary và core entities sống trong spec submodule và do team PO quản lý. Team dev đọc chúng từ `{spec_source}/specs/domain-knowledge/`.*
|
|
258
258
|
|
|
259
259
|
|
|
260
|
-
|
|
260
|
+
Tạo `specs/domain-knowledge/business-dictionary.md` nếu chưa tồn tại:
|
|
261
261
|
|
|
262
262
|
```markdown
|
|
263
263
|
# Business Dictionary — {{PROJECT_NAME}}
|
|
264
264
|
|
|
265
|
-
>
|
|
265
|
+
> Thuật ngữ chuẩn cho dự án này. Mọi PRD, BDD spec, và code phải theo các thuật ngữ này.
|
|
266
266
|
> Managed by: PO / SA team.
|
|
267
267
|
|
|
268
268
|
## Canonical Terms
|
|
@@ -284,17 +284,17 @@ Create `specs/domain-knowledge/business-dictionary.md` if it does not exist:
|
|
|
284
284
|
| {Entity} | status | {value1, value2} |
|
|
285
285
|
```
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
Hướng dẫn: "Mở `specs/domain-knowledge/business-dictionary.md` và thêm thuật ngữ dự án của bạn. File này sẽ được mọi lệnh đọc để enforce naming nhất quán."
|
|
288
288
|
|
|
289
|
-
## Step 5 —
|
|
289
|
+
## Step 5 — Tạo core-entities.md
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
Tạo `specs/domain-knowledge/core-entities.md` nếu chưa tồn tại:
|
|
292
292
|
|
|
293
293
|
```markdown
|
|
294
294
|
# Core Entities — {{PROJECT_NAME}}
|
|
295
295
|
|
|
296
|
-
>
|
|
297
|
-
>
|
|
296
|
+
> Glossary entity máy-đọc-được cho phát triển có AI hỗ trợ.
|
|
297
|
+
> Được mọi lệnh nạp để AI biết domain model của bạn mà không cần đọc source code.
|
|
298
298
|
> Managed by: Tech Lead / Architect.
|
|
299
299
|
>
|
|
300
300
|
> HOW TO USE:
|
|
@@ -332,89 +332,89 @@ Create `specs/domain-knowledge/core-entities.md` if it does not exist:
|
|
|
332
332
|
*(Add more entities following the same pattern above)*
|
|
333
333
|
```
|
|
334
334
|
|
|
335
|
-
|
|
335
|
+
Hướng dẫn: "Mở `specs/domain-knowledge/core-entities.md` và định nghĩa các domain entity chính. Bắt đầu với aggregate root. File này được mọi lệnh AI nạp — định nghĩa tốt ở đây tiết kiệm đáng kể qua-lại khi sinh code."
|
|
336
336
|
|
|
337
|
-
## Step 6 —
|
|
337
|
+
## Step 6 — Cài VS Code Extension (Khuyến nghị)
|
|
338
338
|
|
|
339
|
-
|
|
339
|
+
Khuyến nghị user cài extension VS Code **Spec Driven Docs Tools** — nó cung cấp panel Review Board + Living Documentation tích hợp với workflow này.
|
|
340
340
|
|
|
341
341
|
```bash
|
|
342
342
|
code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
|
|
343
343
|
```
|
|
344
344
|
|
|
345
|
-
|
|
345
|
+
Hoặc: VS Code → `Ctrl+Shift+P` → **"Extensions: Install from Marketplace"** → tìm **Spec Driven Docs Tools**.
|
|
346
346
|
|
|
347
|
-
**
|
|
348
|
-
- 📋 **Review Board** —
|
|
349
|
-
- 📊 **Living Documentation** — traceability
|
|
347
|
+
**Nó làm gì:**
|
|
348
|
+
- 📋 **Review Board** — UI trực quan để review findings từ `/refine-prd`, `/review-context`, `/review-tech-docs`
|
|
349
|
+
- 📊 **Living Documentation** — dashboard traceability dựa trên `.trace/*.tsv`
|
|
350
350
|
|
|
351
351
|
## Step 7 — Verify
|
|
352
352
|
|
|
353
|
-
Checklist
|
|
353
|
+
Checklist tuỳ theo `project_type`:
|
|
354
354
|
|
|
355
355
|
**project_type = 1 (Single-service):**
|
|
356
|
-
- [ ] `specs/`
|
|
357
|
-
- [ ] `specs/product-definition/`
|
|
358
|
-
- [ ] `specs/domain-knowledge/`
|
|
359
|
-
- [ ] `.trace/`
|
|
360
|
-
*(
|
|
361
|
-
- [ ] `.agent/project-context.yaml`
|
|
362
|
-
- [ ] `CLAUDE.md`
|
|
363
|
-
- [ ] `specs/domain-knowledge/business-dictionary.md`
|
|
364
|
-
- [ ] `specs/domain-knowledge/core-entities.md`
|
|
356
|
+
- [ ] `specs/` tồn tại
|
|
357
|
+
- [ ] `specs/product-definition/` tồn tại
|
|
358
|
+
- [ ] `specs/domain-knowledge/` tồn tại
|
|
359
|
+
- [ ] `.trace/` tồn tại
|
|
360
|
+
*(folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand — không check ở đây)*
|
|
361
|
+
- [ ] `.agent/project-context.yaml` tồn tại
|
|
362
|
+
- [ ] `CLAUDE.md` tồn tại
|
|
363
|
+
- [ ] `specs/domain-knowledge/business-dictionary.md` tồn tại
|
|
364
|
+
- [ ] `specs/domain-knowledge/core-entities.md` tồn tại
|
|
365
365
|
|
|
366
366
|
**project_type = 2 (Umbrella):**
|
|
367
|
-
- [ ] `.agent/project-context.yaml`
|
|
368
|
-
- [ ] `services`
|
|
369
|
-
- [ ] `spec_source`
|
|
370
|
-
- [ ] `.agent/review/`
|
|
371
|
-
- [ ] Spec submodule
|
|
367
|
+
- [ ] `.agent/project-context.yaml` tồn tại với `setup.mode: umbrella`
|
|
368
|
+
- [ ] Section `services` có ít nhất một entry với đúng domain key
|
|
369
|
+
- [ ] Path `spec_source` tồn tại (vd thư mục `my-project-specs/` có mặt)
|
|
370
|
+
- [ ] `.agent/review/` tồn tại
|
|
371
|
+
- [ ] Spec submodule đã init: `git submodule status` không hiện prefix `-`
|
|
372
372
|
|
|
373
373
|
**project_type = 3 (PO Spec repo):**
|
|
374
|
-
- [ ] `specs/product-definition/`
|
|
375
|
-
- [ ] `specs/domain-knowledge/`
|
|
376
|
-
- [ ] `feedback/`
|
|
377
|
-
*(
|
|
378
|
-
- [ ] `.agent/review/`
|
|
379
|
-
- [ ] `.agent/project-context.yaml`
|
|
380
|
-
- [ ] `CLAUDE.md`
|
|
381
|
-
- [ ] `specs/domain-knowledge/business-dictionary.md`
|
|
382
|
-
- [ ] `specs/domain-knowledge/core-entities.md`
|
|
374
|
+
- [ ] `specs/product-definition/` tồn tại
|
|
375
|
+
- [ ] `specs/domain-knowledge/` tồn tại
|
|
376
|
+
- [ ] `feedback/` tồn tại
|
|
377
|
+
*(folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand — không check ở đây)*
|
|
378
|
+
- [ ] `.agent/review/` tồn tại
|
|
379
|
+
- [ ] `.agent/project-context.yaml` tồn tại
|
|
380
|
+
- [ ] `CLAUDE.md` tồn tại (tối thiểu)
|
|
381
|
+
- [ ] `specs/domain-knowledge/business-dictionary.md` tồn tại
|
|
382
|
+
- [ ] `specs/domain-knowledge/core-entities.md` tồn tại
|
|
383
383
|
|
|
384
384
|
## Output
|
|
385
385
|
|
|
386
|
-
# Report Footer —
|
|
386
|
+
# Report Footer — Định dạng output chuẩn cho mọi lệnh
|
|
387
387
|
|
|
388
|
-
|
|
388
|
+
Mọi report của lệnh phải kết thúc bằng section footer chuẩn này.
|
|
389
389
|
|
|
390
390
|
## Status Badge
|
|
391
391
|
|
|
392
|
-
|
|
393
|
-
- `✅ Complete` —
|
|
394
|
-
- `❌ Failed` —
|
|
395
|
-
- `⚠️ Warnings` —
|
|
392
|
+
Chọn một theo kết quả:
|
|
393
|
+
- `✅ Complete` — mọi bước thành công, không có vấn đề
|
|
394
|
+
- `❌ Failed` — lệnh không hoàn thành được do lỗi chặn
|
|
395
|
+
- `⚠️ Warnings` — hoàn thành nhưng có vấn đề không chặn, nên review lại
|
|
396
396
|
|
|
397
397
|
## Output Artifacts
|
|
398
398
|
|
|
399
|
-
|
|
399
|
+
Liệt kê mọi file được tạo hoặc sửa bởi lệnh này:
|
|
400
400
|
```
|
|
401
401
|
Output Artifacts:
|
|
402
|
-
{created|updated} {file-path} ({
|
|
403
|
-
{created|updated} {file-path} ({
|
|
402
|
+
{created|updated} {file-path} ({mô tả ngắn})
|
|
403
|
+
{created|updated} {file-path} ({mô tả ngắn})
|
|
404
404
|
```
|
|
405
405
|
|
|
406
|
-
|
|
406
|
+
Nếu không ghi file nào (vd: lệnh review hoặc phân tích) → ghi `Output Artifacts: none (read-only)`.
|
|
407
407
|
|
|
408
408
|
## Pipeline Position
|
|
409
409
|
|
|
410
|
-
|
|
411
|
-
|
|
410
|
+
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`,
|
|
411
|
+
để người dùng luôn thấy lệnh này nằm ở đâu trong luồng end-to-end:
|
|
412
412
|
|
|
413
413
|
```
|
|
414
414
|
Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
415
415
|
```
|
|
416
416
|
|
|
417
|
-
|
|
417
|
+
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:
|
|
418
418
|
|
|
419
419
|
| Phase | Commands |
|
|
420
420
|
|-------|----------|
|
|
@@ -428,118 +428,118 @@ Find the current command in this phase legend and mark **its** phase in the map
|
|
|
428
428
|
| QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
|
|
429
429
|
| Trace Audit | `/validate-traces` |
|
|
430
430
|
|
|
431
|
-
|
|
431
|
+
Với **lệnh review**, thêm vòng review 3 bước và đánh dấu bước hiện tại, vd:
|
|
432
432
|
`Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
|
|
433
433
|
|
|
434
|
-
**
|
|
435
|
-
`/report-bug`, `/propose-scenario`, `/generate-spec-manifest`)
|
|
436
|
-
**
|
|
434
|
+
**Lệnh xuyên suốt** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
|
|
435
|
+
`/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) nằm ngoài pipeline tuyến tính —
|
|
436
|
+
**bỏ hẳn dòng Pipeline** cho các lệnh này (đừng cố nhét chúng vào sơ đồ).
|
|
437
437
|
|
|
438
|
-
##
|
|
438
|
+
## Gợi ý lệnh tiếp theo
|
|
439
439
|
|
|
440
|
-
|
|
440
|
+
Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
|
|
441
441
|
|
|
442
|
-
|
|
|
442
|
+
| Lệnh hiện tại | Gợi ý lệnh tiếp theo |
|
|
443
443
|
|-------------------------|-----------------------------------------------|
|
|
444
|
-
| /setup-ai-first | `/define-product`
|
|
444
|
+
| /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
|
|
445
445
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
446
|
-
| /generate-prd | `/refine-prd {prd-file}`
|
|
447
|
-
| /refine-prd |
|
|
448
|
-
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (
|
|
449
|
-
| /generate-design-spec | Designer review →
|
|
450
|
-
| /generate-bdd | `/review-context {feature-file}`
|
|
451
|
-
| /review-context (BDD) | `/generate-tech-docs {UC-ID}`
|
|
452
|
-
| /qc-analyze | `/qc-plan {UC-ID}` (
|
|
446
|
+
| /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
|
|
447
|
+
| /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
|
|
448
|
+
| /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 |
|
|
449
|
+
| /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
450
|
+
| /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
|
|
451
|
+
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
|
|
452
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (xử lý các gap blocker 🔴 trước) |
|
|
453
453
|
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
454
|
-
| /qc-design-test | `/qc-review {UC-ID}` (test-case
|
|
455
|
-
| /qc-review (test-case) | `/qc-run-test {UC-ID}`
|
|
456
|
-
| /qc-run-test | `/qc-report {UC-ID}`
|
|
457
|
-
| /qc-review (script) | `/qc-report {UC-ID}`
|
|
458
|
-
| /qc-report | `/validate-traces {UC-ID}`
|
|
454
|
+
| /qc-design-test | `/qc-review {UC-ID}` (review test-case) |
|
|
455
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` nếu APPROVED; sửa TC nếu NEEDS_FIX |
|
|
456
|
+
| /qc-run-test | `/qc-report {UC-ID}` rồi `/qc-review {UC-ID}` (review script) |
|
|
457
|
+
| /qc-review (script) | `/qc-report {UC-ID}` rồi tạo PR nếu APPROVED |
|
|
458
|
+
| /qc-report | `/validate-traces {UC-ID}` để làm mới Living Docs (qc_status) |
|
|
459
459
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
460
|
-
| /review-tech-docs | `/generate-code {feature-file}`
|
|
461
|
-
| /generate-code |
|
|
460
|
+
| /review-tech-docs | `/generate-code {feature-file}` nếu APPROVED; sửa doc nếu NEEDS_FIX |
|
|
461
|
+
| /generate-code | Lần gen đầu → `/review-code {UC-ID}`; gen lại → `/dev-gen-test {UC-ID}` |
|
|
462
462
|
| /dev-gen-test | `/dev-run-test {UC-ID}` |
|
|
463
463
|
| /dev-run-test (passing) | `/review-code {UC-ID}` |
|
|
464
|
-
| /dev-run-test (failing) | `/fix-bug {ticket-id}`
|
|
465
|
-
| /review-code | `/dev-smoke-test {UC-ID}`
|
|
466
|
-
| /dev-smoke-test |
|
|
467
|
-
| /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`;
|
|
468
|
-
| /fix-bug |
|
|
469
|
-
| /debug | `/fix-bug {ticket-id}`
|
|
470
|
-
| /report-bug |
|
|
471
|
-
| /propose-scenario |
|
|
472
|
-
| /learn |
|
|
473
|
-
| /sync | `/validate-traces`
|
|
474
|
-
| /update-framework | Review `git diff .agent/`, commit; `/sync`
|
|
475
|
-
|
|
476
|
-
|
|
464
|
+
| /dev-run-test (failing) | `/fix-bug {ticket-id}` hoặc `/debug {error}` |
|
|
465
|
+
| /review-code | `/dev-smoke-test {UC-ID}` hoặc tạo PR |
|
|
466
|
+
| /dev-smoke-test | Tạo PR và link tới ticket |
|
|
467
|
+
| /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; tất cả OK → tạo PR |
|
|
468
|
+
| /fix-bug | Tạo PR và link tới ticket |
|
|
469
|
+
| /debug | `/fix-bug {ticket-id}` nếu cần sửa |
|
|
470
|
+
| /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
|
|
471
|
+
| /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
|
|
472
|
+
| /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
|
|
473
|
+
| /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
|
|
474
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
|
|
475
|
+
|
|
476
|
+
Định dạng footer như sau:
|
|
477
477
|
```
|
|
478
478
|
---
|
|
479
479
|
Status : {badge}
|
|
480
|
-
{Output Artifacts
|
|
480
|
+
{khối Output Artifacts}
|
|
481
481
|
Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
|
|
482
|
-
(review
|
|
483
|
-
Next : {
|
|
482
|
+
(lệnh review) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
|
|
483
|
+
Next : {lệnh gợi ý kèm ví dụ tham số}
|
|
484
484
|
```
|
|
485
|
-
*(
|
|
485
|
+
*(Bỏ dòng `Pipeline` cho các lệnh xuyên suốt liệt kê ở trên.)*
|
|
486
486
|
|
|
487
487
|
|
|
488
488
|
```
|
|
489
|
-
/setup-ai-first
|
|
489
|
+
/setup-ai-first Hoàn tất ✅
|
|
490
490
|
```
|
|
491
491
|
|
|
492
|
-
Output
|
|
492
|
+
Output tuỳ theo `project_type`:
|
|
493
493
|
|
|
494
494
|
**Single-service:**
|
|
495
495
|
```
|
|
496
496
|
Next:
|
|
497
|
-
1.
|
|
498
|
-
2.
|
|
499
|
-
3.
|
|
500
|
-
4.
|
|
501
|
-
5. git add
|
|
502
|
-
6.
|
|
497
|
+
1. Điền CLAUDE.md (thay các giá trị {{PLACEHOLDER}})
|
|
498
|
+
2. Điền .agent/project-context.yaml
|
|
499
|
+
3. Điền specs/domain-knowledge/business-dictionary.md
|
|
500
|
+
4. Điền specs/domain-knowledge/core-entities.md
|
|
501
|
+
5. git add và commit 4 file đó
|
|
502
|
+
6. Cài VS Code extension:
|
|
503
503
|
code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
|
|
504
|
-
7. /define-product
|
|
504
|
+
7. /define-product để bắt đầu feature đầu tiên
|
|
505
505
|
```
|
|
506
506
|
|
|
507
507
|
**Umbrella:**
|
|
508
508
|
```
|
|
509
509
|
Next:
|
|
510
510
|
1. Review .agent/project-context.yaml:
|
|
511
|
-
-
|
|
512
|
-
-
|
|
513
|
-
-
|
|
511
|
+
- Cập nhật services[].path khớp tên thư mục submodule thực tế
|
|
512
|
+
- Cập nhật domain key của services khớp @trace.domain trong các file PRD
|
|
513
|
+
- Xác nhận path spec_source đúng
|
|
514
514
|
|
|
515
|
-
2.
|
|
515
|
+
2. Chạy /sync — một lệnh lo mọi thứ còn lại:
|
|
516
516
|
/sync
|
|
517
517
|
→ git pull + submodule init + spec submodule update
|
|
518
|
-
→
|
|
519
|
-
(
|
|
518
|
+
→ Tự tạo .agent/project-context.yaml cho mỗi service submodule
|
|
519
|
+
(phát hiện module từ pom.xml / go.mod / package.json / pubspec.yaml v.v.)
|
|
520
520
|
→ Sync Living Docs panel
|
|
521
521
|
→ Refresh spec-manifest.yaml
|
|
522
522
|
|
|
523
|
-
3.
|
|
524
|
-
/generate-bdd {spec_source}/specs/{domain}/{prd-slug}/prd.md
|
|
523
|
+
3. Bắt đầu sinh:
|
|
524
|
+
/generate-bdd {spec_source}/specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
|
|
525
525
|
```
|
|
526
526
|
|
|
527
527
|
**PO Spec repo:**
|
|
528
528
|
```
|
|
529
529
|
Next:
|
|
530
|
-
1.
|
|
531
|
-
- domains: [
|
|
530
|
+
1. Điền .agent/project-context.yaml:
|
|
531
|
+
- domains: [liệt kê mọi business domain — chúng thành giá trị @trace.domain trong PRD]
|
|
532
532
|
- project.name, project.description
|
|
533
|
-
2.
|
|
534
|
-
3.
|
|
535
|
-
4. git add
|
|
536
|
-
5.
|
|
533
|
+
2. Điền specs/domain-knowledge/business-dictionary.md ← canonical terms
|
|
534
|
+
3. Điền specs/domain-knowledge/core-entities.md ← entity glossary
|
|
535
|
+
4. git add và commit các file đó
|
|
536
|
+
5. Cài VS Code extension:
|
|
537
537
|
code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
|
|
538
|
-
6. /define-product
|
|
538
|
+
6. /define-product để bắt đầu feature đầu tiên
|
|
539
539
|
|
|
540
|
-
⚠️
|
|
541
|
-
-
|
|
542
|
-
-
|
|
543
|
-
|
|
544
|
-
-
|
|
540
|
+
⚠️ Nhắc handoff team dev:
|
|
541
|
+
- Mỗi PRD phải có @trace.domain khớp một trong domains list của bạn
|
|
542
|
+
- Khi team dev setup umbrella repo của họ, họ map các tên domain này
|
|
543
|
+
tới path service submodule trong section services của project-context.yaml
|
|
544
|
+
- Chia sẻ tên domain với team dev trước khi họ cấu hình umbrella
|
|
545
545
|
```
|