@edupia-tutor/spec-driven-docs 0.14.7 → 0.14.9
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/commands/generate-bdd.md +76 -8
- package/commands/generate-bdd.tmpl +56 -108
- package/commands/generate-code.md +18 -1
- package/commands/generate-code.tmpl +18 -1
- package/commands/generate-design-spec.md +35 -5
- package/commands/generate-design-spec.tmpl +35 -5
- package/commands/generate-prd.md +15 -5
- package/commands/generate-prd.tmpl +1 -0
- package/commands/generate-tech-docs.md +1 -0
- package/commands/generate-tech-docs.tmpl +1 -0
- package/commands/propose-scenario.md +6 -2
- package/commands/propose-scenario.tmpl +6 -2
- package/commands/qc-analyze.md +14 -0
- package/commands/qc-analyze.tmpl +14 -0
- package/commands/refine-prd.md +25 -6
- package/commands/refine-prd.tmpl +18 -6
- package/commands/review-context.md +27 -12
- package/commands/review-context.tmpl +20 -12
- package/commands/validate-traces.md +1 -0
- package/commands/validate-traces.tmpl +1 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-bdd.md +76 -8
- package/core/commands/generate-code.md +18 -1
- package/core/commands/generate-design-spec.md +35 -5
- package/core/commands/generate-prd.md +15 -5
- package/core/commands/generate-tech-docs.md +1 -0
- package/core/commands/propose-scenario.md +6 -2
- package/core/commands/qc-analyze.md +14 -0
- package/core/commands/refine-prd.md +25 -6
- package/core/commands/review-context.md +27 -12
- package/core/commands/validate-traces.md +1 -0
- package/core/skills/code/SKILL.md +7 -759
- package/core/skills/debug/SKILL.md +9 -859
- package/core/skills/design-spec/SKILL.md +3 -582
- package/core/skills/prd/SKILL.md +5 -464
- package/core/skills/setup-ai-first/SKILL.md +3 -208
- package/core/skills/spec/SKILL.md +7 -450
- package/core/skills/test/SKILL.md +10 -1290
- package/core/steps/review-fanout.md +7 -0
- package/core/steps/spawn-agent.md +12 -7
- package/core/templates/feature.template +83 -222
- package/core/templates/prd.template.md +14 -5
- package/core/templates/project-context.yaml +1 -1
- package/docs/01-getting-started/core-concepts.md +2 -2
- package/docs/01-getting-started/quickstart.md +4 -3
- package/docs/02-guides/bdd-input-checklist.md +68 -0
- package/docs/02-guides/developer/README.md +3 -0
- package/docs/02-guides/developer/bdd-and-trace.md +1 -0
- package/docs/02-guides/developer/commands.md +3 -3
- package/docs/02-guides/developer/pr-checklist.md +1 -0
- package/docs/02-guides/developer/workflow.md +2 -2
- package/docs/02-guides/prd-input-checklist.md +94 -0
- package/docs/02-guides/product-owner/README.md +3 -1
- package/docs/02-guides/product-owner/commands.md +1 -1
- package/docs/02-guides/tech-docs-input-checklist.md +82 -0
- package/docs/02-guides/tester/README.md +1 -1
- package/docs/02-guides/tester/bug-reporting.md +1 -1
- package/docs/02-guides/tester/qc-automation.md +1 -1
- package/docs/03-concepts/README.md +1 -0
- package/docs/03-concepts/mechanisms-explained.md +57 -0
- package/docs/03-concepts/pipeline.md +12 -9
- package/docs/03-concepts/traceability.md +4 -1
- package/docs/04-operations/bug-flow.md +2 -0
- package/docs/05-reference/command-cheatsheet.md +8 -8
- package/docs/05-reference/commands.md +12 -10
- package/docs/05-reference/trace-schema.md +2 -1
- package/package.json +1 -1
- package/skills/code/SKILL.md +7 -759
- package/skills/code/SKILL.tmpl +7 -164
- package/skills/debug/SKILL.md +9 -859
- package/skills/debug/SKILL.tmpl +9 -252
- package/skills/design-spec/SKILL.md +3 -582
- package/skills/design-spec/SKILL.tmpl +3 -87
- package/skills/prd/SKILL.md +5 -464
- package/skills/prd/SKILL.tmpl +5 -63
- package/skills/setup-ai-first/SKILL.md +3 -208
- package/skills/setup-ai-first/SKILL.tmpl +3 -108
- package/skills/spec/SKILL.md +7 -450
- package/skills/spec/SKILL.tmpl +7 -162
- package/skills/test/SKILL.md +10 -1290
- package/skills/test/SKILL.tmpl +10 -288
- package/steps/review-fanout.md +7 -0
- package/steps/spawn-agent.md +12 -7
- package/templates/feature.template +83 -222
- package/templates/prd.template.md +14 -5
- package/templates/project-context.yaml +1 -1
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
- [ ] `/review-code` → không có issue Critical hoặc Major chưa xử lý
|
|
8
8
|
- [ ] Code trace về đúng BDD scenarios trong `my-project-specs/specs/{domain}/{prd-slug}/bdd/`
|
|
9
9
|
- [ ] Code có `@trace.bdd` comment cho các function implement BDD scenario
|
|
10
|
+
- [ ] BDD `@trace.status: approved` (đã duyệt) trước khi code/PR; FE/App: Design Spec `Status: approved` + `Built from PRD` khớp PRD hiện tại
|
|
10
11
|
- [ ] Tech Docs đã được update nếu có thay đổi API/DB schema
|
|
11
12
|
- [ ] **Không tự sửa BDD** — BDD là của PO, nếu cần update thì báo PO rồi pull lại
|
|
12
13
|
|
|
@@ -27,7 +27,7 @@ flowchart TD
|
|
|
27
27
|
|
|
28
28
|
TD --> E["/dev-gen-test → /dev-run-test<br/>dev tự kiểm (dev_selftest)<br/>ghi vào spec .trace"]
|
|
29
29
|
E --> F["/validate-traces<br/>cập nhật Living Docs (.living-docs)"]
|
|
30
|
-
F --> G["/review-code — 4
|
|
30
|
+
F --> G["/review-code — 4 lăng kính:<br/>Traceability · Layer · Coding Standards · Spec Compliance"]
|
|
31
31
|
G --> H([Tạo PR → notify PO/SA review])
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -98,7 +98,7 @@ FE/App track (web|app) ── KHÔNG chặn chờ BE ──
|
|
|
98
98
|
│
|
|
99
99
|
▼
|
|
100
100
|
/review-code {files}
|
|
101
|
-
→ 4
|
|
101
|
+
→ 4 lăng kính: Traceability / Layer Architecture / Coding Standards / Spec Compliance
|
|
102
102
|
→ Fix issues trước khi tạo PR
|
|
103
103
|
│
|
|
104
104
|
▼
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Guides](README.md) › Checklist Input PRD
|
|
2
|
+
|
|
3
|
+
# Checklist Input PRD — Để PRD Chuẩn Ngay Lần Đầu
|
|
4
|
+
|
|
5
|
+
> Muốn `/generate-prd` ra PRD tốt **ngay lần đầu**, đừng trông vào `/refine-prd` để vá — hãy chuẩn bị đúng đầu vào trước.
|
|
6
|
+
|
|
7
|
+
## Hiểu trước cho đúng
|
|
8
|
+
|
|
9
|
+
- **PRD sinh ra từ một file khảo sát (product-definition)** — output của `/define-product`. Bạn **không gõ thẳng** PRD.
|
|
10
|
+
- **Không có "generate-prd cho BE" riêng.** PRD là tài liệu nghiệp vụ **dùng chung cho mọi platform** (một bản phục vụ cả FE/App/BE). Cái "system/BE" chỉ xuất hiện ở bước sau (`/generate-bdd`).
|
|
11
|
+
- Vì vậy "PRD chuẩn ngay lần đầu" = **chuẩn bị tốt 7 thứ dưới đây trước khi chạy `/generate-prd`**.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 7 câu tự hỏi trước khi bấm `/generate-prd`
|
|
16
|
+
|
|
17
|
+
**1. Bản khảo sát đã làm xong chưa?**
|
|
18
|
+
Đã chạy `/define-product` đi hết 7 bước, không bỏ dở. Máy sẽ **không cho** sinh PRD nếu còn dang dở.
|
|
19
|
+
→ *Vì PRD là tài liệu để ký duyệt — không dựng từ thứ chưa chốt.*
|
|
20
|
+
|
|
21
|
+
**2. "Luật" và "cách xử lý" của tính năng đã viết rõ chưa?** *(quan trọng nhất)*
|
|
22
|
+
Hệ thống **phải làm gì / không được làm gì** (Business Rules), và **xử lý ra sao** trong từng trường hợp (Business Logic). Viết cụ thể, đừng để câu chung chung kiểu "xử lý hợp lý".
|
|
23
|
+
→ *Đây là phần dev dựa vào để code. Mơ hồ ở đây = code sai ở đó.*
|
|
24
|
+
|
|
25
|
+
**3. Đã liệt kê các trường hợp hỏng chưa?**
|
|
26
|
+
Không chỉ lúc chạy ngon, mà cả lúc lỗi: thiếu dữ liệu, điều kiện không thoả, hai người bấm cùng lúc, service khác chết.
|
|
27
|
+
→ *Hệ thống sống nhờ xử lý đúng mấy ca lỗi này; quên là lỗ hổng.*
|
|
28
|
+
|
|
29
|
+
**4. Tính năng này cần gì từ service/đội khác không?**
|
|
30
|
+
Ghi rõ: **cần dữ liệu/khả năng gì, lấy từ ai, để làm gì**. Nếu không cần thì ghi "Không có".
|
|
31
|
+
→ *Tính năng hiếm khi đứng một mình; thiếu mục này dễ tắc giữa chừng.*
|
|
32
|
+
|
|
33
|
+
**5. API của tính năng thuộc loại nào? — phải quyết trước**
|
|
34
|
+
Chọn 1 trong 3:
|
|
35
|
+
- **Đã có sẵn** (API chạy production rồi) → **đưa đường dẫn tới tài liệu API thật** (file swagger/openapi, link, hoặc thư mục code BE) **mà máy mở được**. Mở không được → PRD sẽ ghi "còn thiếu", chưa chuẩn.
|
|
36
|
+
- **Tự làm mới** → để trống, thiết kế sau ở `/generate-tech-docs`.
|
|
37
|
+
- **Đối tác đang làm song song** → chọn loại này (đừng chọn "đã có sẵn").
|
|
38
|
+
→ *Đây là chỗ quyết định độ chuẩn nhiều nhất cho tính năng BE.*
|
|
39
|
+
|
|
40
|
+
**6. Mỗi tiêu chí nghiệm thu (AC) có kiểm được đúng/sai rõ ràng không?**
|
|
41
|
+
Tránh kiểu "nhanh", "ổn". Phải đo được.
|
|
42
|
+
→ *AC mơ hồ thì sau này không ai biết tính năng "đạt" hay "chưa".*
|
|
43
|
+
|
|
44
|
+
**7. Tên gọi và dữ liệu đã dùng đúng từ điển chung chưa?**
|
|
45
|
+
Đảm bảo `business-dictionary.md` (từ chuẩn) và `core-entities.md` (danh sách thực thể/trường dữ liệu) đã cập nhật cho tính năng này.
|
|
46
|
+
→ *Gọi sai tên một bảng/trường là lệch cả chuỗi sau.*
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Checklist nhanh
|
|
51
|
+
|
|
52
|
+
- [ ] Khảo sát `/define-product` đã xong (7 bước, không gap)
|
|
53
|
+
- [ ] Business Rules + cách xử lý viết rõ, không mơ hồ *(đòn bẩy lớn nhất)*
|
|
54
|
+
- [ ] Đã liệt kê đủ các ca lỗi / trường hợp hỏng
|
|
55
|
+
- [ ] Phụ thuộc service/đội khác ghi rõ (hoặc "Không có")
|
|
56
|
+
- [ ] Đã quyết **loại API**; nếu "đã có sẵn" → đường dẫn contract **mở được**
|
|
57
|
+
- [ ] Mỗi AC kiểm được đúng/sai rõ ràng
|
|
58
|
+
- [ ] Từ điển chung + danh sách thực thể đã cập nhật
|
|
59
|
+
- [ ] Định danh đúng: Domain (khớp cấu hình service), PO, mã Ticket
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Riêng tính năng BE — chú ý nhất ở đâu?
|
|
64
|
+
|
|
65
|
+
BE không có Design Spec / màn hình đỡ phía trước, nên **PRD chính là spec**. Hai thứ quyết định độ chuẩn:
|
|
66
|
+
|
|
67
|
+
1. **Business Rules + Business Logic (câu 2)** — vì BE đọc PRD thẳng rồi sinh System BDD từ đây.
|
|
68
|
+
2. **Loại API (câu 5)** — BE "đã có sẵn" mà đường dẫn contract mở không được thì PRD sẽ kẹt ở trạng thái "còn thiếu".
|
|
69
|
+
|
|
70
|
+
> Tính năng BE thuần **không có màn hình** → phần Wireframe để trống/N/A là đúng; đừng để máy bịa màn hình.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Sau khi sinh PRD
|
|
75
|
+
|
|
76
|
+
`/refine-prd` và `/review-context` là để **nhặt sạn** (làm rõ, bắt mâu thuẫn, thêm edge case) — **không phải** để vá cái thiếu từ khâu khảo sát. Chuẩn bị tốt 7 thứ trên thì hai bước này nhẹ tênh.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Map sang các bước của `/define-product` *(cho ai muốn chính xác)*
|
|
81
|
+
|
|
82
|
+
| Câu hỏi | Nằm ở bước nào của discovery |
|
|
83
|
+
|---|---|
|
|
84
|
+
| 1. Khảo sát xong | toàn bộ Phase 1–7, `Status: completed` |
|
|
85
|
+
| 2. Luật + cách xử lý | Phase 4 (Business Rules) + Phase 5 (Business Logic) |
|
|
86
|
+
| 3. Ca lỗi | Phase 2 (Edge Cases) |
|
|
87
|
+
| 4. Phụ thuộc liên service | Phase 1, câu 8 |
|
|
88
|
+
| 5. Loại API | hỏi lúc `/generate-prd` (API Source) |
|
|
89
|
+
| 6. AC kiểm được | Phase 6 (Acceptance Criteria) |
|
|
90
|
+
| 7. Từ điển / thực thể | Phase 0 (Knowledge Sync) + `business-dictionary.md` / `core-entities.md` |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
← [Guides](README.md) · Liên quan: [Checklist Input BDD (System/BE)](bdd-input-checklist.md) · [Quy tắc viết PRD](product-owner/prd-writing-rules.md) · [Checklist handoff](product-owner/handoff-checklist.md)
|
|
@@ -10,6 +10,8 @@ Tài liệu dành cho **Product Owner (PO)** và **Business Analyst (BA)** — v
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| [Commands](commands.md) | Bảng lệnh cho PO/BA · project lessons · xử lý feedback tester |
|
|
12
12
|
| [Tình huống thực tế](scenarios.md) | 12 scenario: tính năng mới, design spec, BDD, PRD thay đổi, brownfield, **System BDD synthesis & cross-platform conflict**, ... |
|
|
13
|
+
| [Checklist input PRD](../prd-input-checklist.md) | 7 câu chuẩn bị để PRD chuẩn ngay lần đầu (kèm lưu ý BE) |
|
|
14
|
+
| [Checklist input BDD (System/BE)](../bdd-input-checklist.md) | Chuẩn bị để `/generate-bdd` (system) chuẩn ngay lần đầu |
|
|
13
15
|
| [Quy tắc viết PRD](prd-writing-rules.md) | Platform-agnostic · testable AC · negative path · BR numbering |
|
|
14
16
|
| [Checklist handoff](handoff-checklist.md) | Checklist verify trước khi thông báo dev team bắt đầu |
|
|
15
17
|
|
|
@@ -51,7 +53,7 @@ PRD (WHAT + WHY) → BDD (HOW verified) → Code (HOW built)
|
|
|
51
53
|
spec repo spec repo dev repo
|
|
52
54
|
```
|
|
53
55
|
|
|
54
|
-
> **Sau khi BDD approved → QC chạy pipeline tự động:** Khi BDD của một UC được
|
|
56
|
+
> **Sau khi BDD approved → QC chạy pipeline tự động:** Khi BDD của một UC được duyệt (đặt `@trace.status: approved` sau review-context BDD sạch), QC team chạy bộ lệnh native `/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report` — đọc official `.feature`, generate + run Playwright/pytest, rồi ghi `qc_status` (official QC coverage) vào Living Docs. PO không chạy QC, nhưng nên biết bước này tồn tại ở downstream. Chi tiết: [chương QC Automation](../tester/qc-automation.md).
|
|
55
57
|
|
|
56
58
|
**3 lý do chính BDD thuộc PO:**
|
|
57
59
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
> **Project Lessons:** Nếu AI cứ lặp lại một kiểu sai khi gen PRD/BDD (vd: quên negative path, dùng sai thuật ngữ), chạy `/learn "AI hay X, đúng phải Y"` (category `prd`/`bdd`). Lesson được nạp vào đầu mọi lệnh → AI không lặp lại. Commit file lessons để cả team dùng chung.
|
|
23
23
|
|
|
24
24
|
> **Xử lý feedback từ tester:** Tester `/report-bug` và `/propose-scenario` commit vào `{spec_source}/feedback/` của spec repo. PO/Dev **thấy chúng khi chạy `/sync`** (dòng `📥 New tester feedback` liệt kê bug + proposal mới kéo về). PO review proposal:
|
|
25
|
-
> - **Map vào AC sẵn có** → coverage gap thật →
|
|
25
|
+
> - **Map vào AC sẵn có** → coverage gap thật → PO/Dev đặt `Status: accepted` trong file proposal → `/generate-bdd` tự chèn vào `.feature` rồi lưu trữ (`incorporated`); hoặc Dev thêm tay.
|
|
26
26
|
> - Là **PRD change request** (behavior chưa có trong PRD) → PO thêm/sửa AC → bump version → `/generate-bdd` lại.
|
|
27
27
|
|
|
28
28
|
---
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Guides](README.md) › Checklist Input Tech-Docs (BE)
|
|
2
|
+
|
|
3
|
+
# Checklist Input Tech-Docs (BE) — Để API Contract Chuẩn Ngay Lần Đầu
|
|
4
|
+
|
|
5
|
+
> Áp cho `/generate-tech-docs` trên một file **System BDD** (`@trace.platform: system`) — sinh ra **BE tech-doc = API contract**. Chuẩn bị đúng đầu vào để FE không phải chờ sửa lại.
|
|
6
|
+
|
|
7
|
+
## Trước tiên: BDD khác tech-doc thế nào?
|
|
8
|
+
|
|
9
|
+
Hai cái trả lời **hai câu hỏi khác nhau** về cùng một tính năng BE:
|
|
10
|
+
|
|
11
|
+
| | **System BDD (BE)** | **BE Tech-docs (API contract)** |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Trả lời | **CÁI GÌ** — hệ thống phải làm gì (hành vi nghiệp vụ) | **LÀM SAO** — hiện thực kỹ thuật |
|
|
14
|
+
| Viết bằng | sự kiện nghiệp vụ: "hệ thống nhận X → trả về Y → báo lỗi Z" | endpoint/method/path, **shape** request/response, HTTP status, data model, DB, error code |
|
|
15
|
+
| Chi tiết kỹ thuật? | **KHÔNG** | **CÓ** — nơi *duy nhất* chứa mấy thứ đó |
|
|
16
|
+
| Ai làm | PO (spec repo) | Dev (`/generate-tech-docs`) |
|
|
17
|
+
| Sinh từ đâu | từ PRD | **từ chính System BDD** |
|
|
18
|
+
| Dùng để | kiểm chứng hành vi (QC test trace về đây) | BE code theo; **FE đọc để gọi API thật** |
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
PRD → System BDD (CÁI GÌ) → /generate-tech-docs → BE tech-doc (LÀM SAO) → code
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Ví von:** System BDD = *"đủ tiền → máy nhả nước; thiếu tiền → báo lỗi, trả tiền lại"* (hành vi). Tech-doc = *bản vẽ kỹ thuật của máy*: `POST /vend` nhận `{coin}` trả `{drink_id, change}`, thiếu tiền trả `402`.
|
|
25
|
+
|
|
26
|
+
**Vì sao tách ra?** BDD không vỡ khi đổi chi tiết kỹ thuật (test ổn định); tech-doc là **contract liên đội** (FE phụ thuộc → cần sign-off T7); brownfield thì contract đã nằm sẵn trong PRD, tech-doc chỉ chép lại.
|
|
27
|
+
|
|
28
|
+
> Một câu: **BDD nói "đúng thì ra cái gì", tech-doc nói "gọi thế nào để ra cái đó".**
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 7 câu tự hỏi trước khi `/generate-tech-docs` (BE)
|
|
33
|
+
|
|
34
|
+
**1. System BDD đã duyệt + sạch lỗi chưa?**
|
|
35
|
+
BDD phải `@trace.status: approved` và **không còn finding critical** từ `/review-context`. Lệnh sẽ **dừng (HALT)** nếu BDD còn lỗi critical chưa xử lý.
|
|
36
|
+
→ *Tech-doc dẫn xuất từ BDD; BDD lỗi thì contract lỗi theo.*
|
|
37
|
+
|
|
38
|
+
**2. BDD đã mô tả đủ hành vi chưa?**
|
|
39
|
+
Mỗi scenario cần rõ: **kết quả trả về**, **các side-effect** (hệ thống lưu/đổi gì), và **tín hiệu lỗi** ("báo lỗi gì khi nào").
|
|
40
|
+
→ *Đây là nguyên liệu để suy ra endpoint, mã lỗi, và data model. BDD thiếu = contract thiếu.*
|
|
41
|
+
|
|
42
|
+
**3. API "đã có sẵn"? → bảng contract trong PRD phải đầy đủ**
|
|
43
|
+
Nếu là brownfield (`API Source: existing`), `/generate-tech-docs` chỉ **chép lại** contract từ PRD (reverse-document). Bảng "Existing API Contract" còn dấu "⛔ còn thiếu" → tech-doc sẽ hổng.
|
|
44
|
+
→ *Brownfield: đảm bảo contract đã trích đầy đủ từ nguồn thật.*
|
|
45
|
+
|
|
46
|
+
**4. Danh sách thực thể / dữ liệu đã chuẩn chưa?**
|
|
47
|
+
API contract cần **data model**: bảng/trường/kiểu/enum. Đảm bảo `core-entities.md` cập nhật đúng cho tính năng.
|
|
48
|
+
→ *Sai tên một trường ở đây là lệch cả request/response lẫn DB.*
|
|
49
|
+
|
|
50
|
+
**5. CLAUDE.md đã có kiến trúc + coding standard chưa?**
|
|
51
|
+
Tech-doc mô tả thiết kế theo **layer/kiến trúc của project**. Lệnh đọc `CLAUDE.md` (§architecture, §coding standards) để bám đúng quy ước.
|
|
52
|
+
→ *Thiếu → tech-doc tả kiến trúc chung chung, code sau lệch.*
|
|
53
|
+
|
|
54
|
+
**6. Đúng stack module cho service chưa?**
|
|
55
|
+
Service phải trỏ đúng module (java-spring / golang / dotnet / …) để lệnh lấy **mẫu layer** phù hợp.
|
|
56
|
+
→ *Sai module = mẫu thiết kế sai stack.*
|
|
57
|
+
|
|
58
|
+
**7. Phụ thuộc liên service đã ghi chưa?**
|
|
59
|
+
Nếu BE gọi/được gọi bởi service khác (§1c của PRD) → contract phải phản ánh các điểm tích hợp đó.
|
|
60
|
+
→ *Bỏ sót = contract thiếu chỗ nối, FE/đội khác tích hợp hụt.*
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Checklist nhanh — trước khi `/generate-tech-docs` (system/BE)
|
|
65
|
+
|
|
66
|
+
- [ ] System BDD `@trace.status: approved` + **0 finding critical** (không lệnh sẽ HALT)
|
|
67
|
+
- [ ] Mỗi scenario rõ: kết quả + side-effects + tín hiệu lỗi
|
|
68
|
+
- [ ] Brownfield → bảng Existing API Contract trong PRD **đầy đủ** (hết ⛔)
|
|
69
|
+
- [ ] `core-entities.md` cập nhật (data model: thực thể/trường/kiểu/enum)
|
|
70
|
+
- [ ] `CLAUDE.md` có kiến trúc layer + coding standards
|
|
71
|
+
- [ ] Service trỏ đúng stack module
|
|
72
|
+
- [ ] Phụ thuộc liên service (§1c PRD) ghi rõ nếu có
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Sau khi sinh tech-doc
|
|
77
|
+
|
|
78
|
+
`/review-tech-docs` chạy các check T1–T7. **T7 = cổng sign-off liên đội** (cross-team): greenfield/partner cần FE/App/SA confirm contract trước khi `@trace.status: approved`; brownfield (`existing`) thì skip T7 vì contract đã chốt sẵn. Contract chỉ thành "BE contract" mà FE chờ **sau khi approved**.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
← [Guides](README.md) · Liên quan: [Checklist Input BDD (System/BE)](bdd-input-checklist.md) · [Checklist Input PRD](prd-input-checklist.md)
|
|
@@ -57,7 +57,7 @@ Design Spec Code Viết test cases · chạy /qc-*
|
|
|
57
57
|
|
|
58
58
|
| Command | Mục đích | Khi nào dùng |
|
|
59
59
|
|---|---|---|
|
|
60
|
-
| `/qc-analyze` | Phân tích spec chain (PRD + BDD + Tech Docs), xác định scope test | Bước 1, sau khi BDD
|
|
60
|
+
| `/qc-analyze` | Phân tích spec chain (PRD + BDD + Tech Docs), xác định scope test | Bước 1, sau khi BDD `@trace.status: approved` (cảnh báo mềm nếu chưa) |
|
|
61
61
|
| `/qc-plan` | Lập test plan: liệt kê scenarios, layer, ưu tiên | Bước 2 |
|
|
62
62
|
| `/qc-design-test` | Thiết kế test case chi tiết (Page Object, data, assertions) | Bước 3 |
|
|
63
63
|
| `/qc-review` | Review test design trước khi code automation | Bước 4 |
|
|
@@ -29,7 +29,7 @@ Nếu `/report-bug` báo *coverage gap* (behavior đúng nhưng chưa có scenar
|
|
|
29
29
|
/propose-scenario FT-001 login với email có khoảng trắng ở cuối vẫn phải thành công
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
- Nếu behavior **đã nằm trong một AC của PRD** → lệnh draft Gherkin (tag `@proposed @from-test`), ghi vào `{spec_source}/feedback/bdd-proposals/` → commit + push. PO/Dev review
|
|
32
|
+
- Nếu behavior **đã nằm trong một AC của PRD** → lệnh draft Gherkin (tag `@proposed @from-test`, mang `Status: proposed`), ghi vào `{spec_source}/feedback/bdd-proposals/` → commit + push. PO/Dev review → đặt `Status: accepted` → `/generate-bdd` tự chèn vào `.feature` rồi lưu trữ (`incorporated`).
|
|
33
33
|
- Nếu behavior **chưa có trong PRD** → lệnh **ghi** một *PRD change request* (`State: Open`) vào `{spec_source}/feedback/prd-change-requests/{UC-ID}-{slug}.md` → commit + push (KHÔNG chỉ in ra). PO thấy nó khi `/sync`, thêm/sửa AC rồi `/generate-bdd` lại.
|
|
34
34
|
|
|
35
35
|
> Tester không tự ghi vào BDD — chỉ đề xuất. Giữ đúng ownership.
|
|
@@ -79,7 +79,7 @@ functional / integration / e2e / non-functional / exploratory.
|
|
|
79
79
|
|
|
80
80
|
## Entry Point
|
|
81
81
|
|
|
82
|
-
Pipeline QC bắt đầu
|
|
82
|
+
Pipeline QC bắt đầu khi BDD của một UC đã duyệt — `# @trace.status: approved` (sau `/review-context (BDD)` sạch critical + người duyệt đặt). `/qc-analyze` đọc field này và **cảnh báo mềm** nếu chưa approved:
|
|
83
83
|
|
|
84
84
|
```
|
|
85
85
|
/qc-analyze {UC-ID} → … → /qc-report {UC-ID} → /validate-traces {UC-ID}
|
|
@@ -9,6 +9,7 @@ Hiểu **cách framework được xây dựng và vận hành** — kiến trúc
|
|
|
9
9
|
- [architecture.md](architecture.md) — 6 lớp (Protection → Output), module plug-in system, build pipeline (`*.tmpl` → `*.md` → `core/`), directory map, sub-agent orchestration, hook data-protection.
|
|
10
10
|
- [pipeline.md](pipeline.md) — các phase Discovery → PRD → Design-Spec → BDD → Tech-Docs → Code → Dev self-check → QC automation → Tester feedback; review gates; và step-architecture model (gate / context-loader / spawn-agent / report-footer) đằng sau mỗi command.
|
|
11
11
|
- [traceability.md](traceability.md) — `@trace.*` tags, trace TSV, hai tín hiệu `dev_selftest` vs `qc_status`, Living Docs (canonical trong spec-module + panel mirror), và `/validate-traces`.
|
|
12
|
+
- [mechanisms-explained.md](mechanisms-explained.md) — giải thích các **cơ chế** framework bằng **ngôn ngữ dễ hiểu** + ví von đời thường (bổ sung cho các trang trên; ưu tiên trực giác).
|
|
12
13
|
|
|
13
14
|
## Đọc gì trước?
|
|
14
15
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
[📚 Docs](../README.md) › [Concepts](README.md) › Cơ Chế (Dễ Hiểu)
|
|
2
|
+
|
|
3
|
+
# Giải Thích Cơ Chế Framework — Ngôn Ngữ Dễ Hiểu
|
|
4
|
+
|
|
5
|
+
> Nơi gom các giải thích **cơ chế hoạt động** của framework bằng lời dễ hiểu + ví von đời thường. Bổ sung cho các trang concepts "chính quy" ([pipeline](pipeline.md), [traceability](traceability.md), [architecture](architecture.md)) — trang này ưu tiên *trực giác*, không phải đặc tả.
|
|
6
|
+
|
|
7
|
+
## Mục lục
|
|
8
|
+
|
|
9
|
+
- [1. PRD lớn → chia việc cho nhiều "thợ phụ" (orchestration / sub-agent)](#1-prd-lớn--chia-việc-cho-nhiều-thợ-phụ-orchestration--sub-agent)
|
|
10
|
+
- [2. AC / BR / Scope ở khác tầng — "4 ngăn" (altitude)](#2-ac--br--scope-ở-khác-tầng--4-ngăn-altitude)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. PRD lớn → chia việc cho nhiều "thợ phụ" (orchestration / sub-agent)
|
|
15
|
+
|
|
16
|
+
**Cơ chế:** Khi PRD **nhỏ**, một mình AI làm hết từ đầu tới cuối. Khi PRD **lớn** (> 3 Use Case hoặc > 300 dòng), AI chuyển sang **chế độ điều phối**: session chính thành "sếp" nhẹ, **spawn mỗi Use Case một sub-agent** ("thợ phụ") có context window riêng để làm song song cho nhanh và đỡ tốn bộ nhớ.
|
|
17
|
+
|
|
18
|
+
**Ví von:** Việc nhỏ thì một người ôm trọn. Việc lớn thì **sếp chia mỗi thợ một Use Case**.
|
|
19
|
+
|
|
20
|
+
**Điểm mấu chốt — sếp làm phần chung MỘT LẦN, rồi "photo" đưa thợ:**
|
|
21
|
+
- **Sếp làm trước, một lần** (ở session chính, đọc cả PRD): kiểm tra **cổng duyệt** (PRD approved?), **nạp Design Spec** (đã duyệt + còn mới + soi nhanh) → rút ra phần màn hình + AC-UI cần phủ (gọi là `design_coverage`), và chốt **platform** (web/app/system).
|
|
22
|
+
- **Khi giao việc**, sếp **kèm sẵn cho mỗi thợ**: platform + `design_coverage` đã rút. Thợ **không** phải tự đi đọc lại design-spec, **không** phải hỏi lại "đã duyệt chưa".
|
|
23
|
+
- Mỗi thợ chỉ đọc đúng **1 Use Case** trong PRD + dùng đồ sếp đưa → sinh BDD cho UC đó.
|
|
24
|
+
|
|
25
|
+
**Vì sao thiết kế vậy:**
|
|
26
|
+
- **Rẻ:** thợ khỏi đọc lại cả design-spec (đỡ token), khỏi bắt người dùng bấm Y/N nhiều lần (cổng duyệt hỏi 1 lần ở sếp).
|
|
27
|
+
- **Không sót:** phần phủ design (Screen States loading/lỗi/trống + AC-UI) áp **cho cả PRD lớn**, không chỉ PRD nhỏ.
|
|
28
|
+
|
|
29
|
+
> **Cạm bẫy đã từng có (và cách tránh):** nếu sếp quên "photo" `design_coverage`/platform khi giao việc → thợ làm theo trí nhớ thiếu → BDD của PRD lớn **rớt mất phần design** (dù PRD nhỏ vẫn đúng). Bài học: state nào orchestrator đã phân giải mà bước sau cần → **phải nhét vào payload giao cho sub-agent**, đừng để rơi.
|
|
30
|
+
|
|
31
|
+
*Chi tiết kỹ thuật:* [pipeline › spawn-agent](pipeline.md#spawn-agentmd--sub-agent-orchestration) · [architecture › sub-agent orchestration](architecture.md#sub-agent-orchestration).
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. AC / BR / Scope ở khác tầng — "4 ngăn" (altitude)
|
|
36
|
+
|
|
37
|
+
**Cơ chế:** Nội dung PRD có **4 "ngăn"**, mỗi loại thông tin ở đúng một ngăn:
|
|
38
|
+
- **AC** (Acceptance Criteria) = *biên bản nghiệm thu* → "đạt khi nào" (kết quả nhìn/đo được) + trỏ số hiệu BR.
|
|
39
|
+
- **BR / BL** (Business Rule / Logic) = *bản vẽ kỹ thuật* → "chạy thế nào" (thử lại mấy lần, timeout, cờ ai giữ, nhánh lỗi).
|
|
40
|
+
- **Scope (In/Out)** = *ranh giới lô đất* → "làm gì / không làm gì" (một dòng, đọc lướt hiểu ngay).
|
|
41
|
+
- **BUSINESS DEFINITION / business-dictionary** = *giải nghĩa từ*.
|
|
42
|
+
|
|
43
|
+
**Vì sao dễ hỏng:** `/refine-prd` giống một **tổ 4 người soi bài** (QA/DEV/SA/PO) + một người canh *"đã đủ chưa?"* (completeness-critic). Cả tổ **chỉ biết THÊM chi tiết** — mà câu hỏi mặc định *"AC đủ chi tiết chưa?"* tự nó **kéo chi tiết bản-vẽ-kỹ-thuật vào biên-bản-nghiệm-thu**. Qua nhiều vòng `--resume`, **AC dày lên bằng BR** → hai ngăn hội tụ, tài liệu trùng lặp + AC hết dùng được như checklist. In Scope tụt tầng cùng lý do (bị nhét định nghĩa cơ chế).
|
|
44
|
+
|
|
45
|
+
> **Gốc rễ:** tổ soi bài tối ưu *"đủ từng section"* nhưng **thiếu lực đối trọng giữ ranh giới vai trò** — không ai kéo "mỗi thứ về đúng ngăn", nên chi tiết cứ trôi xuống, ngăn BR hút hết.
|
|
46
|
+
|
|
47
|
+
**Cách giữ ranh giới (7 luật, 2 nhóm):**
|
|
48
|
+
- **Dọn (hạ nguồn):** AC chỉ ghi outcome + ref BR (cấm cơ chế) · lúc áp fix → cơ chế bỏ vào BR/BL · lính gác bắt AC lỡ chứa cơ chế · Scope chỉ là ranh giới.
|
|
49
|
+
- **Sửa gốc (thượng nguồn):** đổi **câu hỏi** của tổ soi bài (hỏi "AC có outcome test được chưa", chi tiết → BR/BL) · thêm **người canh "đừng lộn ngăn"** vào critic (không chỉ "đủ chưa" mà "có lộn tầng không") · **bắt AC ≈ BR** (trùng nội dung → làm mỏng AC).
|
|
50
|
+
|
|
51
|
+
> **Đừng hiểu nhầm là "cắt bớt":** chi tiết retry/timeout/nhánh lỗi **KHÔNG bị xoá** — nó **di dời** từ AC xuống BR/BL. Vì `/generate-bdd` sinh test theo *mỗi BR → ≥1 scenario*; nhánh lỗi/retry chính là nguồn đẻ test. Bỏ hẳn = mất test.
|
|
52
|
+
|
|
53
|
+
*Chi tiết áp ở đâu:* lăng kính + completeness-critic (`steps/review-fanout.md`, `commands/refine-prd.tmpl`) · P-check (`commands/review-context.tmpl`) · format AC/Scope (`templates/prd.template.md`, `commands/generate-prd.tmpl`).
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
*Có thêm cơ chế nào được giải thích kiểu dễ hiểu → thêm một mục mới ở đây.*
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Pipeline
|
|
4
4
|
|
|
5
|
-
Vòng đời feature đi qua các phase, mỗi transition có
|
|
5
|
+
Vòng đời feature đi qua các phase, mỗi transition lớn có **AI review (tìm findings) + cổng duyệt do người quyết** (xem note "Cổng duyệt" bên dưới):
|
|
6
6
|
**Discovery → PRD → Design-Spec → BDD → Tech-Docs → Code → Dev self-check → QC automation → Tester feedback.** Phần sau mô tả từng phase và **step-architecture model** đằng sau mỗi command.
|
|
7
7
|
|
|
8
8
|
## Mục lục
|
|
@@ -25,7 +25,7 @@ Vòng đời feature đi qua các phase, mỗi transition có một **AI review
|
|
|
25
25
|
| **0. Setup** *(one-time)* | Tech Lead | `/setup-ai-first`, `/sync`, `/sync-figma-*` | Config files, submodules, component catalog |
|
|
26
26
|
| **1. Discovery** | PO + AI | `/define-product` | `specs/product-definition/{TICKET-ID}-{slug}.md` |
|
|
27
27
|
| **2. PRD** | AI → SA/PO review | `/generate-prd`, `/refine-prd`, `/review-context` | `specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` |
|
|
28
|
-
| **2b. Design Spec** *(FE/App only)* | AI → Designer/PO sign-off | `/generate-design-spec` | `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}.md` |
|
|
28
|
+
| **2b. Design Spec** *(FE/App only)* | AI → Designer/PO sign-off | `/generate-design-spec` | `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}-{slug}.md` |
|
|
29
29
|
| **3. BDD Spec** | AI → SA/Dev review | `/generate-bdd`, `/review-context` | `specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature` |
|
|
30
30
|
| **4. Tech Design** *(platform-aware)* | AI → SA/Lead review | `/generate-tech-docs`, `/review-tech-docs` | BE: `specs/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md` (API contract) · FE/App: `{UC-ID}-tech-design-{platform}.md` (client design — **gated** trên System BDD + BE contract) |
|
|
31
31
|
| **5. Code** | AI → Dev review | `/generate-code` *(FE: `--phase=ui`/`--phase=integration`)*, `/review-code` | `src/...` |
|
|
@@ -37,6 +37,8 @@ Vòng đời feature đi qua các phase, mỗi transition có một **AI review
|
|
|
37
37
|
|
|
38
38
|
> **PRD là platform-agnostic (Option C):** Một PRD phục vụ mọi platform — chỉ mô tả business outcome, không UI/API. FE/App: PRD → Design Spec (2b) → BDD. BE: PRD → BDD (skip 2b). Thêm platform sau không cần đổi PRD.
|
|
39
39
|
|
|
40
|
+
> **Cổng duyệt (human sign-off):** mỗi transition lớn có một **cổng do người quyết** — review (AI tìm findings) → người đặt trạng thái `approved` → bước sau. Ba cổng: **PRD** `Status: approved` (PO) · **Design Spec** `Status: approved` (PO+Designer) · **BDD** `@trace.status: approved` (Dev-lead). **Sửa nội dung sau khi duyệt → tự reset về `draft`** (PRD/Design/BDD đều vậy). Các lệnh tiêu thụ (`/generate-bdd`, `/generate-design-spec`, `/generate-tech-docs`, `/generate-code`, `/qc-analyze`) **cảnh báo mềm** nếu nguồn chưa `approved` (cho phép prototype, KHÔNG chặn cứng). Mỗi artifact còn ghi version nguồn để phát hiện **drift**: PRD `applied_to_version` (findings), Design Spec `Built from PRD`, BDD/tech-doc Version Check.
|
|
41
|
+
|
|
40
42
|
---
|
|
41
43
|
|
|
42
44
|
## Workflow chi tiết
|
|
@@ -55,22 +57,23 @@ Phase 2: PRD
|
|
|
55
57
|
/review-context {prd} ────→ .agent/review/{prd-slug}-review-context-findings.yaml
|
|
56
58
|
--fix (auto-fixable) | Review Board → --resume (apply + bump)
|
|
57
59
|
Checks: banned terms (P1) · ambiguity AC/BR (P2) · conflicts (P3) · completeness (P4)
|
|
58
|
-
✅
|
|
60
|
+
✅ 0 critical → PO đặt Status: approved (Metadata) → Phase 2b/3 · ❌ NEEDS_FIX → fix + re-run
|
|
59
61
|
|
|
60
62
|
Phase 2b/3: Design Spec & BDD
|
|
61
|
-
/generate-design-spec ────→ specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}.md
|
|
63
|
+
/generate-design-spec ────→ specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}-{slug}.md
|
|
62
64
|
(FE/App only — PO supplies node-level Figma link ?node-id= per screen;
|
|
63
|
-
AI fetches each frame via Figma MCP. Screen with no readable link → ❌ Missing;
|
|
64
|
-
|
|
65
|
-
[Designer review + PO sign-off]
|
|
65
|
+
AI fetches each frame via Figma MCP. Screen with no readable link → ❌ Missing → Status giữ draft;
|
|
66
|
+
ghi "Built from PRD: vX" để phát hiện lỗi thời; generate-bdd cảnh báo mềm nếu design-spec chưa approved)
|
|
67
|
+
[Designer review + PO sign-off → Status: approved]
|
|
66
68
|
/generate-bdd ────────────→ specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature
|
|
67
69
|
THỨ TỰ OUTSIDE-IN (khi có client): web → app → system
|
|
68
70
|
System BDD được TỔNG HỢP từ web+app BDD (client-facing trước → BE/system suy ra để phục vụ)
|
|
69
71
|
(project chỉ-BE, không web/app: system gen thẳng từ PRD)
|
|
70
72
|
(apply platform vocabulary: web "clicks" / mobile "taps" / backend "submits a request")
|
|
73
|
+
FE/App: đọc AC-UI + Screen States từ design-spec để phủ scenario (gate: approved + Built-from-PRD còn mới + sanity)
|
|
71
74
|
/review-context {feature} → .agent/review/{uc-id}-review-bdd-findings.yaml
|
|
72
75
|
Checks: PRD coverage (mỗi AC + BR bullet → ≥1 scenario) · Gherkin R1–R10 · compliance C1–C5
|
|
73
|
-
✅
|
|
76
|
+
✅ 0 critical → đặt @trace.status: approved (.feature) → Phase 4
|
|
74
77
|
|
|
75
78
|
Phase 4: Tech Design (platform-aware — đọc @trace.platform)
|
|
76
79
|
BE (system):
|
|
@@ -124,7 +127,7 @@ Cross-cutting (any role, anytime)
|
|
|
124
127
|
|
|
125
128
|
## QC automation pipeline (Phase 5b)
|
|
126
129
|
|
|
127
|
-
Bộ test QC **chính thức** — native pipeline, chạy như một **branch sau khi BDD
|
|
130
|
+
Bộ test QC **chính thức** — native pipeline, chạy như một **branch sau khi BDD `@trace.status: approved`** (review-context BDD sạch + người duyệt; `/qc-analyze` cảnh báo mềm nếu chưa), song song / sau khi dev `/generate-code`. 6 stage tuần tự, port từ agent của team QC (QC repo nay chỉ còn reference):
|
|
128
131
|
|
|
129
132
|
```
|
|
130
133
|
BDD approved (specs/{domain}/{prd-slug}/bdd/*.feature)
|
|
@@ -18,7 +18,7 @@ Mỗi artifact link tới mọi artifact khác qua `@trace.*` tags, và trạng
|
|
|
18
18
|
|
|
19
19
|
## Artifact chain & @trace tags
|
|
20
20
|
|
|
21
|
-
Mỗi artifact
|
|
21
|
+
Mỗi artifact liên kết về artifact trước nó bằng metadata (PRD: bảng **Metadata**; BDD / tech-doc / code / test: `@trace.*` tags):
|
|
22
22
|
|
|
23
23
|
```
|
|
24
24
|
product-definition.md
|
|
@@ -36,6 +36,8 @@ product-definition.md
|
|
|
36
36
|
|-------|--------|---------|
|
|
37
37
|
| `Domain` | bảng Metadata PRD | Domain của feature (auth, payment, …) — route vào đúng service submodule |
|
|
38
38
|
| `Status` | bảng Metadata PRD | `draft` / `approved` — dev team chỉ code khi `approved` |
|
|
39
|
+
| `@trace.status` | BDD `.feature` header | `draft` / `approved` — người đặt `approved` sau khi review-context BDD sạch; mirror vào `uc_status` |
|
|
40
|
+
| `uc_status` | trace TSV (mirror) | gương của BDD `@trace.status` — `/validate-traces` đồng bộ → dashboard `approved_ucs` |
|
|
39
41
|
| `@trace.service` / `@trace.module` | BDD / Tech Doc header | Service + module sẽ implement |
|
|
40
42
|
| `@trace.prd_version` / `@trace.bdd_version` | BDD / code / test | Version của spec mà artifact được sinh từ — base cho drift detection |
|
|
41
43
|
| `@trace.implements` | Code comment | Scenario mà code này implement: `={UC-ID}-SC{N}` |
|
|
@@ -106,6 +108,7 @@ Living Docs (VS Code panel) đọc trace TSV và hiển thị traceability healt
|
|
|
106
108
|
- Drill down: PRD → UC → per-scenario table (Spec ver, Gen ver, Code, Tests, **Dev Self-Check**, **QC Status**, **Waiting on**, Status)
|
|
107
109
|
- **Waiting on** (cột `qc_owner` + `qc_blocked_by`): cho PO/PM thấy case chưa pass đang **chờ dev** (product-gap → `BUG-{id}`) hay **chờ PO** confirm/clarify (spec gap → `GAP-{id}`). Aggregates `waiting_dev` / `waiting_po` ở header dashboard.
|
|
108
110
|
- Status badges: ✅ OK · ⚠️ DRIFT · 🔴 GAP · — UNTRACKED · filter theo domain/PRD status/doc status · search theo UC/SC ID.
|
|
111
|
+
- Số **UC approved** (`approved_ucs`) trên dashboard = số UC có BDD `@trace.status: approved`, đồng bộ từ `.feature` qua `/validate-traces` (xem `uc_status` ở bảng trace field trên).
|
|
109
112
|
|
|
110
113
|
**Ba nơi chứa trace data — phân biệt authoritative vs mirror:**
|
|
111
114
|
|
|
@@ -56,6 +56,8 @@ Tester đọc spec chain **PRD → BDD → Code** để xác định layer của
|
|
|
56
56
|
| Yêu cầu thay đổi | cũ | cũ | **PRD change** | PO → Dev | Tester |
|
|
57
57
|
| ✅ rõ ràng | ✅ đúng | ❌ UI sai | **Design Spec bug** | PO/Designer → Dev | Tester |
|
|
58
58
|
|
|
59
|
+
> **Sửa PRD/BDD/Design Spec → phải duyệt lại:** mọi case mà PO sửa PRD (Case 3/4), Dev sửa BDD (Case 2), hoặc PO/Designer sửa Design Spec (Case 5) → artifact đó **tự về `draft`** (PRD/Design `Status` ở Metadata; BDD `@trace.status`). Phải `/review-context` lại + người **đặt `approved`** trước khi downstream (tech-docs / code / QC) tiêu thụ. Proposal scenario: PO/Dev đặt `Status: accepted` → `/generate-bdd` tự nạp rồi lưu trữ.
|
|
60
|
+
|
|
59
61
|
---
|
|
60
62
|
|
|
61
63
|
## 3. Case 1 — Code Bug (Code ≠ BDD)
|
|
@@ -22,10 +22,10 @@ flowchart LR
|
|
|
22
22
|
A["/define-product<br/><b>PO</b>"] --> B["/generate-prd<br/><b>PO</b>"]
|
|
23
23
|
B --> C["/refine-prd<br/><b>PO</b> + Board"]
|
|
24
24
|
C --> D["/review-context (PRD)<br/><b>PO</b> · cổng chất lượng"]
|
|
25
|
-
D
|
|
25
|
+
D -->|"PO đặt Status: approved"| E["/generate-design-spec<br/><b>PO</b> (chỉ FE/App)"]
|
|
26
26
|
E --> F["/generate-bdd<br/><b>PO</b> · web→app→system"]
|
|
27
27
|
F --> G["/review-context (BDD)<br/><b>SA/Dev</b>"]
|
|
28
|
-
G
|
|
28
|
+
G -->|"đặt @trace.status: approved"| H["/generate-tech-docs<br/><b>Dev</b> · BE trước, FE sau"]
|
|
29
29
|
H --> I["/review-tech-docs<br/><b>Dev</b> + Board"]
|
|
30
30
|
I --> J["/generate-code<br/><b>Dev</b>"]
|
|
31
31
|
J --> K["/review-code<br/><b>Dev</b> · 4 lens"]
|
|
@@ -41,11 +41,11 @@ flowchart LR
|
|
|
41
41
|
|
|
42
42
|
```
|
|
43
43
|
PO ───────────────────────────────────────────────────────────────────────────
|
|
44
|
-
/define-product → /generate-prd → /refine-prd → /review-context(PRD)
|
|
44
|
+
/define-product → /generate-prd → /refine-prd → /review-context(PRD) → PO đặt Status: approved
|
|
45
45
|
→ /generate-design-spec (FE/App)
|
|
46
46
|
→ /generate-bdd (web→app→system)
|
|
47
47
|
SA/Dev ────────────────────────────────────────────────────────────────────────
|
|
48
|
-
/review-context(BDD) → /generate-tech-docs → /review-tech-docs
|
|
48
|
+
/review-context(BDD) → đặt @trace.status: approved → /generate-tech-docs → /review-tech-docs
|
|
49
49
|
→ /generate-code → /review-code → /dev-gen-test → /dev-run-test
|
|
50
50
|
QC/Tester ──────────────────────────────────────────────────────────────────────
|
|
51
51
|
/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
|
|
@@ -66,11 +66,11 @@ Có **4 lệnh review** cho **4 loại artifact khác nhau**. Đây là điểm
|
|
|
66
66
|
| **PRD — chất lượng trước khi approve** | `/review-context specs/auth/login/{TICKET-ID}-login.md` | P-checks: banned term, mơ hồ, mâu thuẫn PRD khác, thiếu section, routing theo `Domain` (bảng Metadata) | PO |
|
|
67
67
|
| **BDD `.feature`** | `/review-context specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | B-checks: mỗi AC/BR → có ≥1 scenario? Gherkin R1–R10, compliance C1–C5 | SA/Dev |
|
|
68
68
|
| **Tech design** | `/review-tech-docs specs/auth/login/tech-docs/FEAT-01-UC1-tech-design.md` | T-checks: đúng layer/architecture, entity, trace BDD, cross-team API sign-off | Dev/SA |
|
|
69
|
-
| **Code** | `/review-code FEAT-01-UC1` | 4
|
|
69
|
+
| **Code** | `/review-code FEAT-01-UC1` | 4 lăng kính: Traceability · Layer Architecture · Coding Standards · Spec Compliance | Dev |
|
|
70
70
|
|
|
71
71
|
> **Vì sao PRD có 2 lệnh review?** `/refine-prd` làm **trước** (cải thiện nội dung, fan-out 4 lens). `/review-context` làm **sau** như **cổng chất lượng cuối** trước khi approve + sang BDD. Thứ tự: `generate-prd → refine-prd → review-context → approve`.
|
|
72
72
|
>
|
|
73
|
-
> **Vì sao `/review-context` dùng cho cả PRD lẫn BDD?** Nó tự nhận loại theo file: `.md`
|
|
73
|
+
> **Vì sao `/review-context` dùng cho cả PRD lẫn BDD?** Nó tự nhận loại theo file: `.md` ở gốc feature folder → PRD mode (P-checks); `.feature` → BDD mode (B-checks). Cùng một "cổng chất lượng", hai bộ tiêu chí.
|
|
74
74
|
|
|
75
75
|
---
|
|
76
76
|
|
|
@@ -82,7 +82,7 @@ Mọi lệnh review (`/refine-prd`, `/review-context`, `/review-tech-docs`) đ
|
|
|
82
82
|
① /refine-prd {file} ② Mở Review Board (extension) ③ /… --resume {file}
|
|
83
83
|
─────────────────────────── ────────────────────────────── ──────────────────────────
|
|
84
84
|
PHÂN TÍCH (read-only) → DUYỆT từng finding: → ÁP DỤNG cái đã accept
|
|
85
|
-
ghi .agent/review/ ✓Accept ✎Modify ⏸Defer ✗Reject + bump version + changelog
|
|
85
|
+
ghi .agent/review/ ✓Accept ✎Modify ⏸Defer ✗Reject + bump version + reset draft + changelog
|
|
86
86
|
{slug}-findings.yaml 💬 Giải thích (nếu khó hiểu)
|
|
87
87
|
```
|
|
88
88
|
|
|
@@ -108,7 +108,7 @@ Cùng một lệnh `/review-context` (và họ review nói chung) có **3 chế
|
|
|
108
108
|
|
|
109
109
|
## QC pipeline — 6 bước tuần tự
|
|
110
110
|
|
|
111
|
-
QC là **chuỗi 6 lệnh chạy theo thứ tự** sau khi BDD
|
|
111
|
+
QC là **chuỗi 6 lệnh chạy theo thứ tự** sau khi BDD `@trace.status: approved`. Output bước trước là input bước sau:
|
|
112
112
|
|
|
113
113
|
```
|
|
114
114
|
/qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
|
|
@@ -59,17 +59,19 @@
|
|
|
59
59
|
| `/generate-prd` | `/generate-prd specs/product-definition/FEAT-01-login.md` | `specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` | After define-product. Thêm `API Source: existing` + section "Existing API Contract" cho feature brownfield. |
|
|
60
60
|
| `/refine-prd` | `/refine-prd specs/auth/login/{TICKET-ID}-login.md` | `.agent/review/{prd-slug}-findings.yaml` | After generate-prd — fan-out 4 review lens + completeness-critic loop, mở Review Board. |
|
|
61
61
|
| `/refine-prd --resume` | `/refine-prd --resume specs/auth/login/{TICKET-ID}-login.md` | Applied findings + bumped version | Sau khi review trong Review Board (nút ⚡ Apply tự chạy lệnh này). |
|
|
62
|
-
| `/review-context` (PRD) | `/review-context specs/auth/login/{TICKET-ID}-login.md` | `.agent/review/{prd-slug}-review-context-findings.yaml` | Quality gate
|
|
62
|
+
| `/review-context` (PRD) | `/review-context specs/auth/login/{TICKET-ID}-login.md` | `.agent/review/{prd-slug}-review-context-findings.yaml` | Quality gate trước Phase 3. Checks: routing P0 (umbrella), banned terms (P1), ambiguity (P2), conflicts (P3), completeness (P4), custom (P5). 0 critical → PO đặt `Status: approved`. `--fix`/`--resume` reset Status→draft khi sửa PRD. |
|
|
63
63
|
| `/review-context --fix` | `/review-context --fix specs/auth/login/{TICKET-ID}-login.md` | Applies all auto-fixable findings immediately | Dev quick-fix, không cần Review Board. |
|
|
64
64
|
| `/review-context --resume` | `/review-context --resume specs/auth/login/{TICKET-ID}-login.md` | Applies accepted findings + bump version | PO/SA review — human quyết từng finding. |
|
|
65
65
|
|
|
66
|
+
> **Change Log gọn (rolling-window):** PRD chỉ giữ **5 version gần nhất** trong `# Change Log` (bảng phẳng 1 dòng/version); lịch sử cũ hơn được `/refine-prd` & `/review-context` tự dồn sang `changelog/{TICKET-ID}-{prd-slug}.changelog.md` (thư mục con của feature-package). Nhờ vậy PRD **không phình** theo các vòng refine, Dev/QC khỏi nạp lịch sử thừa vào context. `/generate-bdd` đọc 5 row gần để bắt drift; nếu BDD cũ hơn cửa sổ này → khuyến nghị gen lại toàn bộ (F).
|
|
67
|
+
|
|
66
68
|
---
|
|
67
69
|
|
|
68
70
|
## Phase 2b — Design Spec (FE/App)
|
|
69
71
|
|
|
70
72
|
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
71
73
|
|---------|-------------------|--------|-------------|
|
|
72
|
-
| `/generate-design-spec` | `/generate-design-spec specs/auth/login/{TICKET-ID}-login.md` | `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}.md` | FE/App: sau khi PRD approved, trước BDD. PO
|
|
74
|
+
| `/generate-design-spec` | `/generate-design-spec specs/auth/login/{TICKET-ID}-login.md` | `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-{platform}-{slug}.md` | FE/App: sau khi PRD approved (guard mềm), trước BDD. Ghi `Built from PRD: vX` (phát hiện lỗi thời); re-run có Version Check theo PRD. PO cấp **node-level Figma frame link** (`?node-id=`) cho mỗi screen; AI fetch từng frame qua Figma MCP. Screen thiếu link → ❌ Missing, Status giữ `draft`. **Self-Review Gate** tự rà trước khi ghi; `/generate-bdd` chỉ **cảnh báo mềm** nếu design-spec chưa approved. |
|
|
73
75
|
|
|
74
76
|
> BE teams bỏ qua Phase 2b — đọc PRD trực tiếp rồi `/generate-bdd`.
|
|
75
77
|
|
|
@@ -79,10 +81,10 @@
|
|
|
79
81
|
|
|
80
82
|
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
81
83
|
|---------|-------------------|--------|-------------|
|
|
82
|
-
| `/generate-bdd` | `/generate-bdd specs/auth/login/{TICKET-ID}-login.md` | `specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature` (multi-service: `{prd-slug}/bdd/{service}/{UC-ID}.feature`) | After PRD approved (+ Design Spec sign-off cho FE/App). Đọc Service/Module từ PRD metadata, áp platform vocabulary, hiện SC outline chờ confirm. **Thứ tự outside-in: web → app → system**; `system` **tổng hợp từ web+app BDD** (web&app lệch contract → CHECKPOINT chọn union/platform-hint/separate-endpoints, ghi `@system.resolution:`; chỉ-BE → từ PRD). PRD lớn (>3 UC hoặc >300 dòng) → orchestration mode (1 sub-agent / UC). |
|
|
83
|
-
| `/review-context` (BDD) | `/review-context specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `.agent/review/{uc-id}-review-bdd-findings.yaml` | Quality gate
|
|
84
|
-
| `/review-context --fix` | `/review-context --fix specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | Auto-fix terminology, metadata, coverage matrix | Dev quick-fix. |
|
|
85
|
-
| `/review-context --resume` | `/review-context --resume specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | Applies accepted findings + bump bdd_version | SA review. |
|
|
84
|
+
| `/generate-bdd` | `/generate-bdd specs/auth/login/{TICKET-ID}-login.md` | `specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature` (multi-service: `{prd-slug}/bdd/{service}/{UC-ID}.feature`) | After PRD approved (+ Design Spec sign-off cho FE/App). Đọc Service/Module từ PRD metadata, áp platform vocabulary, hiện SC outline chờ confirm. **Thứ tự outside-in: web → app → system**; `system` **tổng hợp từ web+app BDD** (web&app lệch contract → CHECKPOINT chọn union/platform-hint/separate-endpoints, ghi `@system.resolution:`; chỉ-BE → từ PRD). PRD lớn (>3 UC hoặc >300 dòng) → orchestration mode (1 sub-agent / UC). FE/App: nuốt AC-UI + Screen States từ design-spec (gate approved+fresh+sanity). Proposal tester: chỉ nạp `Status: accepted` rồi lưu trữ. |
|
|
85
|
+
| `/review-context` (BDD) | `/review-context specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `.agent/review/{uc-id}-review-bdd-findings.yaml` | Quality gate trước Phase 4. Checks: PRD coverage (mỗi AC + BR → ≥1 SC), Gherkin R1–R10, compliance C1–C5. 0 critical → đặt `@trace.status: approved`. |
|
|
86
|
+
| `/review-context --fix` | `/review-context --fix specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | Auto-fix terminology, metadata, coverage matrix + reset `@trace.status` & `uc_status` → draft | Dev quick-fix. |
|
|
87
|
+
| `/review-context --resume` | `/review-context --resume specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | Applies accepted findings + bump bdd_version + reset `@trace.status` & `uc_status` → draft | SA review. |
|
|
86
88
|
|
|
87
89
|
---
|
|
88
90
|
|
|
@@ -101,7 +103,7 @@
|
|
|
101
103
|
|
|
102
104
|
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
103
105
|
|---------|-------------------|--------|-------------|
|
|
104
|
-
| `/generate-code` | `/generate-code specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `src/...` (tags `@trace.implements`) | After tech-design approved. Default = full impl/BE. |
|
|
106
|
+
| `/generate-code` | `/generate-code specs/auth/login/bdd/system/FEAT-01-UC1-login.feature` | `src/...` (tags `@trace.implements`) | After tech-design approved. Guard mềm: BDD `@trace.status` approved; FE/App design-spec approved+fresh+sanity. Default = full impl/BE. |
|
|
105
107
|
| `/generate-code --phase=ui` | `/generate-code --phase=ui specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | UI + mock API adapter | FE: BE chưa sẵn sàng — sinh UI + mock adapter. Mock **shape**: BE contract nếu có (chuẩn) → else System BDD + warn; fixture values luôn từ System BDD. Tester test FE ngay được. |
|
|
106
108
|
| `/generate-code --phase=integration` | `/generate-code --phase=integration specs/auth/login/bdd/web/FEAT-01-UC1-login.feature` | Wires real API | FE: sau khi T7 sign-off gate approved — thay mock adapter bằng real API calls. |
|
|
107
109
|
| `/review-code` | `/review-code FEAT-01-UC1` | Review report: Critical / Major / Minor | After generate-code. Check: mỗi scenario có endpoint, trace tags, layer rules, error handling khớp CLAUDE.md §5. Fix CRITICAL + MAJOR trước khi merge. |
|
|
@@ -122,11 +124,11 @@
|
|
|
122
124
|
|
|
123
125
|
## Phase 6b — QC Automation (official QC suite)
|
|
124
126
|
|
|
125
|
-
> Pipeline `/qc-*` **là** official QC suite. Chạy **theo thứ tự** sau khi BDD approved (
|
|
127
|
+
> Pipeline `/qc-*` **là** official QC suite. Chạy **theo thứ tự** sau khi BDD `@trace.status: approved` (review-context BDD sạch + người duyệt; `/qc-analyze` cảnh báo mềm nếu chưa). Tách biệt hoàn toàn với dev self-check: QC sở hữu `qc_status`, dev sở hữu `dev_selftest`. `/qc-run-test` & `/qc-report` dùng module `qc-playwright`, độc lập với dev implementation module. Xem [../02-guides/tester/qc-automation.md](../02-guides/tester/qc-automation.md).
|
|
126
128
|
|
|
127
129
|
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
128
130
|
|---------|-------------------|--------|-------------|
|
|
129
|
-
| `/qc-analyze` | `/qc-analyze FEAT-01-UC1` | **2 file** trong `{qc_dir}/{UC-ID}/` (mặc định `docs/`): `REQUIREMENT_ANALYSIS.md` (gộp requirement + BR + data-flow + AC) + `DOC_GAPS.md` | After BDD approved — đầu pipeline QC. |
|
|
131
|
+
| `/qc-analyze` | `/qc-analyze FEAT-01-UC1` | **2 file** trong `{qc_dir}/{UC-ID}/` (mặc định `docs/`): `REQUIREMENT_ANALYSIS.md` (gộp requirement + BR + data-flow + AC) + `DOC_GAPS.md` | After BDD `@trace.status: approved` (guard mềm) — đầu pipeline QC. |
|
|
130
132
|
| `/qc-plan` | `/qc-plan FEAT-01-UC1` | `{qc_dir}/{UC-ID}/TEST_PLAN.md` (scope, layers, priorities, questions-for-dev) | After `/qc-analyze`. |
|
|
131
133
|
| `/qc-design-test` | `/qc-design-test FEAT-01-UC1` | `{qc_dir}/{UC-ID}/test-cases/*.Test.md` mapped to `{UC-ID}-SC{N}` | After `/qc-plan`. |
|
|
132
134
|
| `/qc-review` | `/qc-review FEAT-01-UC1` | Verdict APPROVED / NEEDS_FIX + findings (**inline — không sinh file**) | After `/qc-design-test` (test-case) hoặc `/qc-run-test` (script). |
|
|
@@ -150,7 +152,7 @@
|
|
|
150
152
|
| Command | Cách dùng (ví dụ) | Output | When to use |
|
|
151
153
|
|---------|-------------------|--------|-------------|
|
|
152
154
|
| `/report-bug {UC-ID} {desc}` | `/report-bug FEAT-01-UC1 "nhập sai mật khẩu vẫn đăng nhập được"` | `{spec_repo}/feedback/bug-reports/{BUG-ID}.md` + spec context + layer classification | Tester hoặc QC tìm thấy bug (gồm QC product-gap). Phân loại layer (Code/BDD/PRD/Design/Env) để route. |
|
|
153
|
-
| `/propose-scenario {UC-ID} {desc}` | `/propose-scenario FEAT-01-UC1 "khoá tài khoản sau 5 lần sai mật khẩu"` | `{spec_repo}/feedback/bdd-proposals/{UC-ID}-*.md` draft Gherkin | Tester hoặc QC tìm thấy edge case BDD chưa cover. Map vào PRD AC sẵn có, hoặc emit PRD change request nếu hành vi thực sự mới. |
|
|
155
|
+
| `/propose-scenario {UC-ID} {desc}` | `/propose-scenario FEAT-01-UC1 "khoá tài khoản sau 5 lần sai mật khẩu"` | `{spec_repo}/feedback/bdd-proposals/{UC-ID}-*.md` draft Gherkin (mang `Status: proposed`) | Tester hoặc QC tìm thấy edge case BDD chưa cover. Map vào PRD AC sẵn có, hoặc emit PRD change request nếu hành vi thực sự mới. Vòng đời: `proposed` → PO/Dev đặt `accepted` → `/generate-bdd` nạp rồi đặt `incorporated` + lưu trữ. |
|
|
154
156
|
|
|
155
157
|
---
|
|
156
158
|
|
|
@@ -51,7 +51,7 @@ sc_id sc_title spec_ver gen_ver implemented_by test_count test_classes dev_selft
|
|
|
51
51
|
| 16 | `tech_doc_revision` | **BE** API-contract revision tại thời điểm codegen | `—` | generate-code / review-tech-docs (BE doc) |
|
|
52
52
|
| 17 | `fe_tech_doc_revision` | **FE** client tech-design revision (`{UC-ID}-tech-design-{platform}.md`) tại thời điểm FE integration | `—` | generate-code `--phase=integration` / review-tech-docs (FE doc) |
|
|
53
53
|
| 18 | `prd_status` | `\| **Status** \|` từ PRD metadata | từ PRD | generate-bdd |
|
|
54
|
-
| 19 | `uc_status` | Trạng thái UC: `draft` / `approved`
|
|
54
|
+
| 19 | `uc_status` | Trạng thái duyệt BDD của UC — **gương của `@trace.status`** (`.feature`): `draft` / `approved` | `draft` (UC mới) | generate-bdd (init) · validate-traces (sync ← `@trace.status`) · review-context (reset draft khi `--fix`/`--resume`) |
|
|
55
55
|
| 20 | `fe_phase` | FE phase khi implement (`ui` / `integration`) | `—` | generate-code `--phase` |
|
|
56
56
|
| 21 | `status` | Trạng thái tổng hợp: `OK` / `DRIFT` / `GAP` / `UNTRACKED` | `UNTRACKED` | validate-traces |
|
|
57
57
|
| 22 | `last_updated` | Ngày update gần nhất (`YYYY-MM-DD`) | today | mọi command ghi row |
|
|
@@ -105,6 +105,7 @@ Mọi artifact link với nhau qua `@trace.*` tags.
|
|
|
105
105
|
# @trace.id: FEAT-001-UC1
|
|
106
106
|
# @trace.service: web-admin
|
|
107
107
|
# @trace.module: react
|
|
108
|
+
# @trace.status: draft # draft/approved — người đặt approved sau review-context BDD sạch; mirror → uc_status
|
|
108
109
|
# @trace.prd_version: 1.2
|
|
109
110
|
# @trace.bdd_version: 3
|
|
110
111
|
# @trace.api_source: existing # brownfield: API đã tồn tại, contract lấy từ PRD
|