@educa-corp/sdd-framework 0.2.4 → 0.2.6
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-architecture.md +706 -0
- package/commands/generate-architecture.tmpl +194 -0
- package/commands/generate-code.md +35 -9
- package/commands/generate-code.tmpl +35 -9
- package/commands/generate-tech-docs.md +259 -246
- package/commands/generate-tech-docs.tmpl +21 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-architecture.md +706 -0
- package/core/commands/generate-code.md +35 -9
- package/core/commands/generate-tech-docs.md +259 -246
- package/core/skills/setup-ai-first/SKILL.md +12 -4
- package/core/templates/architecture.template.md +392 -111
- package/core/templates/tech-design.template.md +238 -246
- package/docs/01-getting-started/installation.md +47 -112
- package/docs/01-getting-started/quickstart.md +58 -72
- package/docs/01-getting-started/what-is-sdd.md +75 -0
- package/docs/02-concepts/architecture.md +109 -0
- package/docs/02-concepts/glossary.md +87 -0
- package/docs/02-concepts/overview.md +93 -0
- package/docs/02-concepts/pipeline-steps/00-setup.md +102 -0
- package/docs/02-concepts/pipeline-steps/01-discovery.md +129 -0
- package/docs/02-concepts/pipeline-steps/02-specification.md +130 -0
- package/docs/02-concepts/pipeline-steps/03-design-spec.md +90 -0
- package/docs/02-concepts/pipeline-steps/04-bdd.md +120 -0
- package/docs/02-concepts/pipeline-steps/05-tech-docs.md +101 -0
- package/docs/02-concepts/pipeline-steps/06-code.md +119 -0
- package/docs/02-concepts/pipeline-steps/07-dev-selftest.md +92 -0
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +102 -0
- package/docs/02-concepts/pipeline-steps/09-validate-traces.md +104 -0
- package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +105 -0
- package/docs/02-concepts/pipeline-steps/README.md +92 -0
- package/docs/02-concepts/roles-and-hitl.md +73 -0
- package/docs/02-concepts/traceability.md +94 -0
- package/docs/03-guides/architect.md +98 -0
- package/docs/03-guides/developer.md +76 -0
- package/docs/03-guides/product-owner.md +68 -0
- package/docs/03-guides/tester-qa.md +70 -0
- package/docs/04-reference/commands.md +105 -0
- package/docs/04-reference/configuration.md +94 -0
- package/docs/04-reference/model-selection.md +68 -0
- package/docs/04-reference/modules.md +74 -0
- package/docs/04-reference/trace-schema.md +93 -0
- package/docs/README.md +29 -40
- package/docs/explain/00-setup-ai-first.md +77 -0
- package/docs/explain/00b-generate-architecture.md +76 -0
- package/docs/explain/01-define-product.md +79 -0
- package/docs/explain/02-generate-prd.md +78 -0
- package/docs/explain/03-refine-prd.md +86 -0
- package/docs/explain/04-review-context.md +100 -0
- package/docs/explain/05-generate-design-spec.md +73 -0
- package/docs/explain/06-generate-bdd.md +77 -0
- package/docs/explain/07-generate-tech-docs.md +71 -0
- package/docs/explain/08-review-tech-docs.md +79 -0
- package/docs/explain/09-generate-code.md +78 -0
- package/docs/explain/10-review-code.md +70 -0
- package/docs/explain/11-map-testids.md +69 -0
- package/docs/explain/12-dev-gen-test.md +66 -0
- package/docs/explain/13-dev-run-test.md +69 -0
- package/docs/explain/14-dev-smoke-test.md +67 -0
- package/docs/explain/15-qc-analyze.md +68 -0
- package/docs/explain/16-qc-plan.md +61 -0
- package/docs/explain/17-qc-design-test.md +61 -0
- package/docs/explain/18-qc-review.md +59 -0
- package/docs/explain/19-qc-run-test.md +67 -0
- package/docs/explain/20-qc-report.md +61 -0
- package/docs/explain/21-validate-traces.md +68 -0
- package/docs/explain/22-generate-spec-manifest.md +60 -0
- package/docs/explain/23-fix-bug.md +69 -0
- package/docs/explain/24-debug.md +61 -0
- package/docs/explain/25-report-bug.md +65 -0
- package/docs/explain/26-propose-scenario.md +63 -0
- package/docs/explain/27-learn.md +65 -0
- package/docs/explain/28-sync.md +70 -0
- package/docs/explain/29-update-framework.md +65 -0
- package/docs/explain/README.md +134 -0
- package/package.json +1 -1
- package/skills/setup-ai-first/SKILL.md +12 -4
- package/skills/setup-ai-first/SKILL.tmpl +12 -4
- package/templates/architecture.template.md +392 -111
- package/templates/tech-design.template.md +238 -246
- package/docs/01-getting-started/README.md +0 -19
- package/docs/01-getting-started/core-concepts.md +0 -102
- package/docs/02-guides/README.md +0 -26
- package/docs/02-guides/bdd-input-checklist.md +0 -68
- package/docs/02-guides/developer/README.md +0 -49
- package/docs/02-guides/developer/bdd-and-trace.md +0 -126
- package/docs/02-guides/developer/commands.md +0 -76
- package/docs/02-guides/developer/pr-checklist.md +0 -16
- package/docs/02-guides/developer/scenarios.md +0 -460
- package/docs/02-guides/developer/workflow.md +0 -121
- package/docs/02-guides/prd-input-checklist.md +0 -94
- package/docs/02-guides/product-owner/README.md +0 -81
- package/docs/02-guides/product-owner/commands.md +0 -30
- package/docs/02-guides/product-owner/handoff-checklist.md +0 -42
- package/docs/02-guides/product-owner/prd-writing-rules.md +0 -45
- package/docs/02-guides/product-owner/scenarios.md +0 -438
- package/docs/02-guides/tech-docs-input-checklist.md +0 -109
- package/docs/02-guides/tester/README.md +0 -75
- package/docs/02-guides/tester/bug-reporting.md +0 -117
- package/docs/02-guides/tester/qc-automation.md +0 -165
- package/docs/02-guides/tester/reading-specs.md +0 -79
- package/docs/02-guides/tester/scenarios.md +0 -186
- package/docs/02-guides/tester/spec-manifest.md +0 -130
- package/docs/02-guides/tester/test-checklist.md +0 -31
- package/docs/02-guides/tester/workflow.md +0 -77
- package/docs/03-concepts/README.md +0 -20
- package/docs/03-concepts/architecture.md +0 -248
- package/docs/03-concepts/mechanisms-explained.md +0 -124
- package/docs/03-concepts/pipeline.md +0 -278
- package/docs/03-concepts/traceability.md +0 -152
- package/docs/04-operations/README.md +0 -33
- package/docs/04-operations/bug-flow.md +0 -364
- package/docs/04-operations/publishing.md +0 -154
- package/docs/04-operations/sync-and-update.md +0 -522
- package/docs/05-reference/README.md +0 -34
- package/docs/05-reference/command-cheatsheet.md +0 -147
- package/docs/05-reference/commands.md +0 -234
- package/docs/05-reference/model-selection.md +0 -74
- package/docs/05-reference/modules.md +0 -110
- package/docs/05-reference/trace-schema.md +0 -154
- package/docs/06-commands/README.md +0 -75
- package/docs/06-commands/explain-debug.md +0 -32
- package/docs/06-commands/explain-define-product.md +0 -43
- package/docs/06-commands/explain-dev-gen-test.md +0 -28
- package/docs/06-commands/explain-dev-run-test.md +0 -24
- package/docs/06-commands/explain-dev-smoke-test.md +0 -25
- package/docs/06-commands/explain-fix-bug.md +0 -28
- package/docs/06-commands/explain-generate-bdd.md +0 -45
- package/docs/06-commands/explain-generate-code.md +0 -53
- package/docs/06-commands/explain-generate-design-spec.md +0 -54
- package/docs/06-commands/explain-generate-prd.md +0 -45
- package/docs/06-commands/explain-generate-spec-manifest.md +0 -20
- package/docs/06-commands/explain-generate-tech-docs.md +0 -56
- package/docs/06-commands/explain-learn.md +0 -21
- package/docs/06-commands/explain-map-testids.md +0 -28
- package/docs/06-commands/explain-propose-scenario.md +0 -24
- package/docs/06-commands/explain-qc-analyze.md +0 -22
- package/docs/06-commands/explain-qc-design-test.md +0 -20
- package/docs/06-commands/explain-qc-plan.md +0 -21
- package/docs/06-commands/explain-qc-report.md +0 -23
- package/docs/06-commands/explain-qc-review.md +0 -24
- package/docs/06-commands/explain-qc-run-test.md +0 -27
- package/docs/06-commands/explain-refine-prd.md +0 -51
- package/docs/06-commands/explain-report-bug.md +0 -24
- package/docs/06-commands/explain-review-code.md +0 -45
- package/docs/06-commands/explain-review-context.md +0 -68
- package/docs/06-commands/explain-review-tech-docs.md +0 -45
- package/docs/06-commands/explain-setup-ai-first.md +0 -25
- package/docs/06-commands/explain-sync.md +0 -24
- package/docs/06-commands/explain-update-framework.md +0 -22
- package/docs/06-commands/explain-validate-traces.md +0 -25
- package/docs/t-sample.md +0 -826
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
[← Docs Home](../README.md) · [Concepts](./) · [Glossary →](glossary.md)
|
|
2
|
+
|
|
3
|
+
# Overview — Mô hình toàn trình (Big Picture)
|
|
4
|
+
|
|
5
|
+
> Bức tranh lớn của framework: pipeline một chiều, gate hai đầu, và feedback ngược có kiểm soát. Muốn đào sâu từng bước → [Pipeline Steps](pipeline-steps/).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Sơ đồ toàn trình (End-to-end Flow)
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
flowchart TD
|
|
13
|
+
S["0 · Setup<br/>/setup-ai-first"] --> D["1 · Discovery<br/>/define-product"]
|
|
14
|
+
D --> SP["2 · Specification<br/>/generate-prd · /refine-prd · /review-context"]
|
|
15
|
+
SP --> DS["3 · Design-Spec<br/>(chỉ FE/App)"]
|
|
16
|
+
SP --> B["4 · BDD<br/>/generate-bdd · /review-context"]
|
|
17
|
+
DS --> B
|
|
18
|
+
B --> T["5 · Tech-Docs<br/>/generate-tech-docs · /review-tech-docs"]
|
|
19
|
+
T --> C["6 · Code<br/>/generate-code"]
|
|
20
|
+
C --> DV["7 · Dev self-test"]
|
|
21
|
+
DV --> Q["8 · QC Automation"]
|
|
22
|
+
Q --> V["9 · Validate Traces"]
|
|
23
|
+
V -.->|"report-bug · propose-scenario · learn"| SP
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Ba đặc tính bất biến (Invariants)
|
|
29
|
+
|
|
30
|
+
1. **Pipeline một chiều** — output giai đoạn N là input N+1. Không nhảy bước.
|
|
31
|
+
2. **Gate hai đầu** mỗi giai đoạn — gate đầu vào (validate) + gate đầu ra (findings/approval).
|
|
32
|
+
3. **Feedback ngược không tạo loop** — bug/scenario/lesson cải tiến spec & tri thức, rồi pipeline lại chảy một chiều.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## HITL: dày ở thượng nguồn, mỏng ở hạ nguồn
|
|
37
|
+
|
|
38
|
+
**Rule vàng:** AI có thể sai ở bất kỳ đâu, nhưng sai ở **thượng nguồn** (PRD/BDD) nhân lên **cấp số nhân** ở hạ nguồn (code/test). Nên checkpoint **dày** ở spec/design, **mỏng dần** xuống code.
|
|
39
|
+
|
|
40
|
+
| Giai đoạn | HITL | Checkpoint chính |
|
|
41
|
+
|-----------|:----:|------------------|
|
|
42
|
+
| Discovery | 🔴 cao nhất | Chốt từng chặng Q&A |
|
|
43
|
+
| Specification | 🔴 cao | `/review-context` sạch critical + PO approve |
|
|
44
|
+
| Design-Spec / BDD | 🔴 cao | UC decomposition, findings |
|
|
45
|
+
| Tech-Docs | 🟠 vừa | Review đa chiều + ký T7 |
|
|
46
|
+
| Code | 🟡 mỏng | Comprehension checkpoint |
|
|
47
|
+
| Dev-test / QC | 🟡–🟠 | Cổng review test |
|
|
48
|
+
|
|
49
|
+
→ Chi tiết: [Roles & HITL](roles-and-hitl.md).
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Bốn "ngăn altitude" (không lộn tầng)
|
|
54
|
+
|
|
55
|
+
Mọi tài liệu **trước** Tech-Docs nói bằng **ngôn ngữ nghiệp vụ** (Business Language Guard giữ ranh giới):
|
|
56
|
+
|
|
57
|
+
| Ngăn | Là gì | Ví dụ |
|
|
58
|
+
|------|-------|-------|
|
|
59
|
+
| **AC** | Nghiệm thu (outcome) | "Người dùng đăng nhập được sau khi đặt lại mật khẩu" |
|
|
60
|
+
| **BR / BL** | Cơ chế nghiệp vụ | "Link reset hết hạn sau 15 phút" |
|
|
61
|
+
| **Scope** | Ranh giới | "Không hỗ trợ khôi phục qua SMS" |
|
|
62
|
+
| **Dictionary** | Định nghĩa | "Link reset = one-time token gửi qua email" |
|
|
63
|
+
|
|
64
|
+
Chi tiết kỹ thuật (retry/timeout/API/selector) chỉ xuất hiện từ **Tech-Docs** trở đi.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Ba lớp kiến trúc (3-layer)
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Command (orchestrator) → điều phối các phase của workflow
|
|
72
|
+
├── Skill → domain logic, stateless, chỉ consume context
|
|
73
|
+
└── Step → infra tái dùng (context-loader, gate, spawn-agent…)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Đổi pipeline không đụng skill; đổi skill không đụng infra. → [Architecture](architecture.md).
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Đa domain & Umbrella (Multi-domain)
|
|
81
|
+
|
|
82
|
+
- Mọi artifact theo bố cục **feature-package**: `specs/{domain}/{prd-slug}/…`.
|
|
83
|
+
- **Umbrella**: nhiều service submodule + một **spec repo dùng chung** (`spec_source`) chứa PRD/BDD/tech-docs/design-spec/`.trace`/`feedback`/findings. `/sync` đồng bộ.
|
|
84
|
+
- `CLAUDE.md` phân tầng: root (luật chung) + `{service}/CLAUDE.md` (kiến trúc + coding standards theo stack).
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Đọc tiếp (Next)
|
|
89
|
+
|
|
90
|
+
- [Glossary](glossary.md) — thuật ngữ
|
|
91
|
+
- [Roles & HITL](roles-and-hitl.md) — ma trận vai trò
|
|
92
|
+
- [Traceability](traceability.md) — trace & drift
|
|
93
|
+
- [Pipeline Steps](pipeline-steps/) — chi tiết từng bước
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
[← Pipeline Steps](README.md) · [Next: Discovery →](01-discovery.md)
|
|
2
|
+
|
|
3
|
+
# Bước 0 · Setup — Dựng khung dự án (Project Bootstrap)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Chạy **một lần** cho mỗi dự án để tạo cấu trúc thư mục, config và `CLAUDE.md` mà mọi workflow về sau dựa vào.
|
|
6
|
+
> **Command:** `/setup-ai-first` (hoặc `npx @educa-corp/sdd-framework --init`)
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Setup (tiền pipeline) |
|
|
11
|
+
| **Owner** | Admin / Tech Lead |
|
|
12
|
+
| **Tần suất** | Một lần khi khởi tạo dự án (single) hoặc khi thêm service (umbrella) |
|
|
13
|
+
| **HITL** | ⚪ Thấp — chỉ chọn mode & module |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Mục đích (Purpose)
|
|
18
|
+
|
|
19
|
+
Framework cần biết **dự án của bạn nằm ở đâu và dùng stack gì** trước khi có thể sinh spec/code đúng chỗ, đúng convention. Bước Setup:
|
|
20
|
+
|
|
21
|
+
- Tạo bộ khung thư mục chuẩn (`specs/`, `.trace/`, `.agent/`, `.claude/`).
|
|
22
|
+
- Sinh **`project-context.yaml`** — single source of truth cho **paths, mode, services, conventions, tech_stack**.
|
|
23
|
+
- Tạo **`CLAUDE.md`** phân tầng (root + overlay theo service) — nơi tích luỹ kiến trúc & coding standards để AI *follow* thay vì *invent*.
|
|
24
|
+
- Cài các **module stack** đã chọn (java-spring, react, flutter, qc-playwright…).
|
|
25
|
+
|
|
26
|
+
> Bỏ qua bước này = mọi lệnh sau không biết đọc/ghi ở đâu → halt ở gate "required context missing".
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Input (Đầu vào)
|
|
31
|
+
|
|
32
|
+
- Một thư mục dự án (repo git — có thể trống hoặc đã có code).
|
|
33
|
+
- Quyết định **mode**: `single` (một repo) hay `umbrella` (nhiều service submodule + một spec repo dùng chung).
|
|
34
|
+
- Danh sách **tech stack** của các service (để cài đúng module).
|
|
35
|
+
- (Umbrella) đường dẫn tới **spec repo** dùng chung.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Output (Đầu ra)
|
|
40
|
+
|
|
41
|
+
| Artifact | Vai trò |
|
|
42
|
+
|----------|---------|
|
|
43
|
+
| `.agent/` | Bản runtime của framework: `commands/`, `steps/`, `rules/`, `skills/`, `templates/`, `modules/`, `hooks/` |
|
|
44
|
+
| `.claude/` | Cấu hình Claude Code (slash command, settings) |
|
|
45
|
+
| `.agent/project-context.yaml` | **Config runtime** — mọi workflow đọc để biết paths/mode/conventions |
|
|
46
|
+
| `CLAUDE.md` (root) | Luật chung + trỏ tới overlay. Umbrella: thêm `{service}/CLAUDE.md` theo stack |
|
|
47
|
+
| `specs/` + `.trace/` | Khung thư mục cho PRD/BDD/tech-docs/design-spec và trace state |
|
|
48
|
+
| `specs/domain-knowledge/` | Nơi chứa business dictionary & tri thức miền |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Ai làm gì (Roles & responsibilities)
|
|
53
|
+
|
|
54
|
+
| Ai | Việc |
|
|
55
|
+
|----|------|
|
|
56
|
+
| 👤 **Admin/Lead** | Chọn mode single/umbrella, khai báo services & stack, trả lời Q&A setup |
|
|
57
|
+
| 🤖 **AI** | Copy framework files, sinh `project-context.yaml` từ template (token substitution), cài module, dựng `CLAUDE.md` |
|
|
58
|
+
| 👤 **Lead (sau setup)** | **Điền nội dung** `CLAUDE.md` (§2 kiến trúc, §3 coding standards, §5 error handling) và `domain-knowledge/` — phần AI không tự biết |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
63
|
+
|
|
64
|
+
- Dự án này là **single** hay **umbrella** (nhiều service)?
|
|
65
|
+
- Mỗi service dùng **stack** gì → cài module nào?
|
|
66
|
+
- Spec sẽ nằm ở đâu (`specs_dir`), trace ở đâu (`.trace/`)?
|
|
67
|
+
- Lệnh build/test của từng stack là gì (`conventions.build_command`)?
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Framework xử lý thế nào (Mechanics)
|
|
72
|
+
|
|
73
|
+
1. **Init** — `npx … --init` hoặc `/setup-ai-first` copy `.agent/*` và `.claude/*` vào dự án.
|
|
74
|
+
2. **Token substitution** — điền `{{PROJECT_NAME}}`, paths, services… vào `templates/project-context.yaml` → sinh `.agent/project-context.yaml`.
|
|
75
|
+
3. **Cài module** — mỗi module mang `module.yaml` + `stack-profile.yaml` (khai báo `artifact_types`, `generation_layers`, `build_verify`, `test_types`). Skill **đọc profile** thay vì hardcode stack.
|
|
76
|
+
4. **Dựng CLAUDE.md** — tạo file root; umbrella thì thêm overlay cho từng service.
|
|
77
|
+
5. **Verify môi trường** — kiểm Node.js, cấu trúc thư mục.
|
|
78
|
+
|
|
79
|
+
> `project-context.yaml` dùng `{domain}` và `{prd-slug}` làm biến — mọi path đều theo bố cục **feature-package**: `specs/{domain}/{prd-slug}/…`. Xem [Configuration](../../04-reference/configuration.md).
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## HITL / Gate
|
|
84
|
+
|
|
85
|
+
- Không có gate chặn — đây là bước dựng khung.
|
|
86
|
+
- Điểm cần con người: **chọn mode/module đúng** và **điền `CLAUDE.md` + `domain-knowledge/`** sau khi setup. Đây là "trí nhớ nền" mà toàn bộ pipeline sẽ dựa vào.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Anti-pattern
|
|
91
|
+
|
|
92
|
+
- ❌ Bỏ trống `CLAUDE.md` rồi than "AI sinh code sai convention" — AI *follow* file này; trống thì nó *đoán*.
|
|
93
|
+
- ❌ Sửa thẳng `.agent/commands/*.md` — sẽ mất khi `/update-framework`. Nội dung của bạn nằm ở `CLAUDE.md`, `project-context.yaml`, `domain-knowledge/` (không bị ghi đè).
|
|
94
|
+
- ❌ Chọn `single` cho một hệ nhiều service — sau này khó tách spec/trace dùng chung.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Bước tiếp theo (Next step)
|
|
99
|
+
|
|
100
|
+
Điền xong `CLAUDE.md` + `domain-knowledge/` → bắt đầu feature đầu tiên:
|
|
101
|
+
|
|
102
|
+
➡️ [Bước 1 · Discovery — `/define-product`](01-discovery.md)
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
[← Setup](00-setup.md) · [Pipeline Steps](README.md) · [Next: Specification →](02-specification.md)
|
|
2
|
+
|
|
3
|
+
# Bước 1 · Discovery — Khám phá tính năng (Feature Discovery)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Biến một **ý tưởng bằng lời** thành một **khung intent có cấu trúc** thông qua Q&A 8 chặng, PO chốt từng chặng — *trước khi* viết PRD.
|
|
6
|
+
> **Command:** `/define-product`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Discovery (đầu pipeline) |
|
|
11
|
+
| **Owner** | 👤 Product Owner / BA |
|
|
12
|
+
| **Đầu vào** | Ý tưởng bằng lời (+ tuỳ chọn Figma/wireframe) |
|
|
13
|
+
| **Đầu ra** | `product-definition/*.md` — khung intent đã duyệt từng chặng |
|
|
14
|
+
| **HITL** | 🔴 **Cao nhất** — chốt mỗi chặng |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Đây là **thượng nguồn của cả pipeline**. Sai ở đây thì mọi thứ downstream (PRD → BDD → code → test) đều sai theo cấp số nhân. Bước Discovery ép PO diễn đạt intent **một lần, có cấu trúc** để:
|
|
21
|
+
|
|
22
|
+
- Cả người lẫn AI hiểu **giống nhau** ngay từ đầu.
|
|
23
|
+
- Không nhảy thẳng từ "ý tưởng" sang "code" bỏ qua tư duy về user/flow/rule/edge-case.
|
|
24
|
+
- Tạo **nền tảng ổn định** để `/generate-prd` viết PRD chuẩn, không phải đoán.
|
|
25
|
+
|
|
26
|
+
> Đây **chưa phải PRD** — nó là *bộ khung intent* (product definition) mà PRD sẽ dựa vào.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Input (Đầu vào)
|
|
31
|
+
|
|
32
|
+
- **Ý tưởng bằng ngôn ngữ tự nhiên** — "Tôi muốn người dùng đăng nhập bằng số điện thoại".
|
|
33
|
+
- (Tuỳ chọn) **Visual**: link Figma, ảnh wireframe — giúp AI hỏi đúng trọng tâm.
|
|
34
|
+
- Context nền đã có: `CLAUDE.md`, `domain-knowledge/`, `project-context.yaml` (nạp tự động qua Gate).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Output (Đầu ra)
|
|
39
|
+
|
|
40
|
+
| Artifact | Nội dung |
|
|
41
|
+
|----------|----------|
|
|
42
|
+
| `product-definition/{slug}.md` | Khung intent 8 chặng đã được PO chốt: vấn đề · user · flow · UC · business rule · AC · edge case · scope |
|
|
43
|
+
|
|
44
|
+
Output này là **input trực tiếp** của `/generate-prd`.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Ai làm gì (Roles & responsibilities)
|
|
49
|
+
|
|
50
|
+
| Ai | Việc |
|
|
51
|
+
|----|------|
|
|
52
|
+
| 👤 **PO / BA** | **Lead** — trả lời Q&A, chốt từng chặng, quyết định *cái gì đáng làm* |
|
|
53
|
+
| 🤖 **AI** | Co-pilot — hỏi có cấu trúc theo 8 chặng, tổng hợp câu trả lời thành khung intent, phát hiện chỗ mơ hồ để hỏi lại |
|
|
54
|
+
| 👤 **SA/Dev (tuỳ chọn)** | Consult — nếu ý tưởng có ràng buộc kỹ thuật lớn |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
59
|
+
|
|
60
|
+
Q&A đi qua **8 chặng**, mỗi chặng chốt xong mới sang chặng sau:
|
|
61
|
+
|
|
62
|
+
| # | Chặng | Trả lời câu hỏi |
|
|
63
|
+
|---|-------|-----------------|
|
|
64
|
+
| 1 | **Vấn đề** | Đang giải quyết pain point gì? Tại sao đáng làm? |
|
|
65
|
+
| 2 | **User** | Ai dùng? Vai trò/persona nào? |
|
|
66
|
+
| 3 | **Flow** | Luồng chính người dùng đi qua là gì? |
|
|
67
|
+
| 4 | **Use Case (UC)** | Tính năng gồm những UC nào? |
|
|
68
|
+
| 5 | **Business Rule (BR)** | Ràng buộc nghiệp vụ nào chi phối? |
|
|
69
|
+
| 6 | **Acceptance Criteria (AC)** | Thế nào là "làm xong đúng"? |
|
|
70
|
+
| 7 | **Edge case** | Trường hợp biên/ngoại lệ nào cần lường trước? |
|
|
71
|
+
| 8 | **Scope** | Ranh giới: cái gì **trong**, cái gì **ngoài** phạm vi? |
|
|
72
|
+
|
|
73
|
+
> Toàn bộ nói bằng **ngôn ngữ nghiệp vụ** — chi tiết kỹ thuật (API, retry, timeout) bị **Business Language Guard** đẩy sang bước Design/Tech-Docs.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Framework xử lý thế nào (Mechanics)
|
|
78
|
+
|
|
79
|
+
1. **Gate chung** (model check, context-loader, checkpoint — xem [README](README.md#khung-chung-mọi-command-common-gate)).
|
|
80
|
+
2. **Q&A tuần tự 8 chặng** — AI hỏi từng chặng, chờ PO chốt, **lưu state sau mỗi chặng** để có thể resume nếu ngắt giữa chừng.
|
|
81
|
+
3. **Short-circuit** — nếu AI tự thấy một chặng đã đủ rõ, được phép rút gọn nhưng phải nêu lý do.
|
|
82
|
+
4. **Tổng hợp** — gộp câu trả lời thành `product-definition/*.md` có cấu trúc.
|
|
83
|
+
5. Áp **Business Language Guard** để chặn thuật ngữ kỹ thuật lọt vào.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## HITL / Gate
|
|
88
|
+
|
|
89
|
+
- 🔴 **Mật độ cao nhất toàn pipeline.** Mỗi chặng là một checkpoint — PO xác nhận trước khi đi tiếp.
|
|
90
|
+
- Nguyên tắc checkpoint: AI **không hỏi "OK chưa?"** mà hỏi cụ thể — *"UC list đủ chưa? thiếu/thừa UC nào?"*.
|
|
91
|
+
- Nếu PO sửa nhiều lần cùng một kiểu → cân nhắc `/learn` để ghi lesson (xem [Feedback Loop](10-feedback-loop.md)).
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Ví dụ (Example)
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
PO: /define-product
|
|
99
|
+
"Người dùng quên mật khẩu cần lấy lại qua email"
|
|
100
|
+
|
|
101
|
+
AI: [Chặng 1 · Vấn đề] Tôi hiểu vấn đề là: user bị khoá ngoài tài khoản khi
|
|
102
|
+
quên mật khẩu, gây mất khách. Đúng không? Có kênh nào ngoài email không?
|
|
103
|
+
|
|
104
|
+
PO: Đúng. Chỉ email thôi.
|
|
105
|
+
|
|
106
|
+
AI: [Chặng 4 · UC] Tôi đề xuất 3 UC:
|
|
107
|
+
UC-01 Yêu cầu link reset · UC-02 Đặt lại mật khẩu · UC-03 Hết hạn link.
|
|
108
|
+
Đủ chưa? Có thiếu UC "giới hạn số lần yêu cầu" không?
|
|
109
|
+
|
|
110
|
+
PO: Thêm UC giới hạn số lần. …
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Kết quả: `product-definition/quen-mat-khau.md` với 4 UC, BR (link hết hạn 15 phút, tối đa 3 lần/giờ), AC, edge case đã chốt.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Anti-pattern
|
|
118
|
+
|
|
119
|
+
- ❌ Nhảy thẳng từ ý tưởng sang `/generate-prd` (hoặc tệ hơn: sang code) — mất chặng tư duy user/rule/edge-case.
|
|
120
|
+
- ❌ Trả lời chặng cho có, "để AI tự hiểu" — AI sẽ suy diễn và bạn trả giá ở downstream.
|
|
121
|
+
- ❌ Nhồi chi tiết kỹ thuật vào đây — sai altitude, để dành cho Tech-Docs.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Bước tiếp theo (Next step)
|
|
126
|
+
|
|
127
|
+
Khung intent đã chốt → viết PRD:
|
|
128
|
+
|
|
129
|
+
➡️ [Bước 2 · Specification — `/generate-prd` · `/refine-prd` · `/review-context`](02-specification.md)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
[← Discovery](01-discovery.md) · [Pipeline Steps](README.md) · [Next: Design-Spec →](03-design-spec.md)
|
|
2
|
+
|
|
3
|
+
# Bước 2 · Specification — Hình thành đặc tả (PRD)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Biến khung intent thành **PRD** chuẩn nghiệp vụ, tinh chỉnh qua 3 lăng kính, rồi qua **gate chất lượng** để PO đóng dấu `approved`.
|
|
6
|
+
> **Commands:** `/generate-prd` → `/refine-prd` → `/review-context`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Specification |
|
|
11
|
+
| **Owner** | 👤 Product Owner (SA/Dev review) |
|
|
12
|
+
| **Đầu vào** | `product-definition/*.md` (từ Discovery) |
|
|
13
|
+
| **Đầu ra** | PRD `Status: draft → approved` |
|
|
14
|
+
| **HITL** | 🔴 Cao — `/review-context` sạch critical + PO approve |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
PRD là **hợp đồng nghiệp vụ** giữa PO ↔ Dev ↔ AI. Đây là **cổng chất lượng cuối cùng ở thượng nguồn** trước khi phân rã xuống BDD/code. Nếu PRD mơ hồ/lệch, mọi code sinh ra sau đó là "rác hàng loạt". Bước này:
|
|
21
|
+
|
|
22
|
+
- Viết PRD **thuần ngôn ngữ nghiệp vụ**, đúng cấu trúc, có traceability.
|
|
23
|
+
- Bắt lỗi **trước** khi truyền xuống — qua 3 lăng kính DEV/SA/PO và findings có mã.
|
|
24
|
+
- Chốt một trạng thái `approved` rõ ràng để mở khoá downstream.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Ba lệnh, ba vai trò (Three commands)
|
|
29
|
+
|
|
30
|
+
| Lệnh | Vai trò | Kết quả |
|
|
31
|
+
|------|---------|---------|
|
|
32
|
+
| `/generate-prd` | **Sinh** PRD draft từ product-definition | PRD `Status: draft` |
|
|
33
|
+
| `/refine-prd` | **Tinh chỉnh** qua 3 lăng kính DEV/SA/PO (fan-out per-UC) | Findings để PO accept/reject |
|
|
34
|
+
| `/review-context` | **Gate chất lượng** — findings P0–P5, phải sạch critical | PO đặt `Status: approved` |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Input (Đầu vào)
|
|
39
|
+
|
|
40
|
+
- `product-definition/{slug}.md` từ [Discovery](01-discovery.md).
|
|
41
|
+
- Business dictionary / domain-knowledge (nạp tự động).
|
|
42
|
+
- (Umbrella) metadata routing: `Domain` khớp một service key.
|
|
43
|
+
|
|
44
|
+
## Output (Đầu ra)
|
|
45
|
+
|
|
46
|
+
| Artifact | Nội dung |
|
|
47
|
+
|----------|----------|
|
|
48
|
+
| `specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md` | PRD: **Metadata · AC · UC · BR · Wireframe · Change Log** |
|
|
49
|
+
| `.agent/review/*-findings.yaml` | Findings của `/refine-prd` & `/review-context` (để Review Board) |
|
|
50
|
+
| Trạng thái `| Status | approved |` trong Metadata | 🔒 Gate mở khoá `/generate-bdd` |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Ai làm gì (Roles & responsibilities)
|
|
55
|
+
|
|
56
|
+
| Ai | Việc |
|
|
57
|
+
|----|------|
|
|
58
|
+
| 👤 **PO** | Lead: duyệt scope/terminology, accept/reject findings, đặt `Status: approved` |
|
|
59
|
+
| 👤 **SA** | Lăng kính SA trong `/refine-prd` — đọc PRD bằng mắt kiến trúc, viết lại bằng lời nghiệp vụ |
|
|
60
|
+
| 👤 **Dev** | Lăng kính DEV — bắt chỗ mơ hồ sẽ gây khó khi hiện thực |
|
|
61
|
+
| 🤖 **AI** | Draft PRD, fan-out mỗi UC/lăng kính một sub-agent, completeness-critic, sinh findings |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
66
|
+
|
|
67
|
+
- Scope/terminology đã đúng và nhất quán với business dictionary chưa?
|
|
68
|
+
- Có UC/BR/AC nào mơ hồ, mâu thuẫn, hay lạc tầng (altitude) không?
|
|
69
|
+
- PRD đã đủ cấu trúc để phân rã xuống BDD chưa?
|
|
70
|
+
- (Umbrella) PRD route về đúng service chưa?
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Framework xử lý thế nào (Mechanics)
|
|
75
|
+
|
|
76
|
+
**`/generate-prd`** — Round Q&A + confirm domain/terminology → sinh PRD draft đúng template, áp Business Language Guard.
|
|
77
|
+
|
|
78
|
+
**`/refine-prd`** — fan-out **mỗi UC × 3 lăng kính**:
|
|
79
|
+
- **DEV** — chỗ nào khó hiện thực / thiếu định nghĩa?
|
|
80
|
+
- **SA** — rủi ro kiến trúc, phụ thuộc, nhất quán hệ thống (nhưng viết bằng lời nghiệp vụ).
|
|
81
|
+
- **PO** — giá trị, scope, hoàn chỉnh nghiệp vụ.
|
|
82
|
+
- Rồi một vòng **completeness-critic**: "đã đủ chưa / có lộn tầng không". PO accept/reject từng finding qua **Review Board** (findings YAML), có thể **resume** để áp fix.
|
|
83
|
+
|
|
84
|
+
**`/review-context` (PRD)** — findings có mã, sạch **critical** mới cho qua:
|
|
85
|
+
|
|
86
|
+
| Mã | Check |
|
|
87
|
+
|----|-------|
|
|
88
|
+
| **P0** | Umbrella routing (chỉ mode umbrella) — chạy trước, là gate check |
|
|
89
|
+
| **P1** | Terminology (Business Dictionary) |
|
|
90
|
+
| **P2** | Ambiguity (mơ hồ) |
|
|
91
|
+
| **P3** | Domain conflict (xung đột cross-PRD) |
|
|
92
|
+
| **P4** | Structural completeness (đủ section/metadata) |
|
|
93
|
+
| **P5** | Custom criteria (tuỳ chọn) |
|
|
94
|
+
|
|
95
|
+
> P0 & P3 do orchestrator chạy (cần config/PRD khác); P1/P2/P4/P5 fan-out mỗi nhóm một sub-agent.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## HITL / Gate
|
|
100
|
+
|
|
101
|
+
- 🛑 `/refine-prd`: PO accept/reject **từng** finding — không auto-apply.
|
|
102
|
+
- 🔒 `/review-context`: phải **sạch critical**, sau đó **PO tự đặt** `| Status | approved |`. Không có lệnh `/approve-prd` — "duyệt" = người đặt field trạng thái.
|
|
103
|
+
- Downstream (`/generate-bdd`) đọc field này; `draft` → cảnh báo mềm.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Ví dụ (Example)
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
/generate-prd quen-mat-khau → PRD draft (4 UC, BR, AC)
|
|
111
|
+
/refine-prd → 12 findings (3 lăng kính)
|
|
112
|
+
→ PO accept 9, reject 3 → /refine-prd (resume) áp 9 fix
|
|
113
|
+
/review-context <PRD> → P2: "AC UC-02 mơ hồ 'nhanh chóng'"
|
|
114
|
+
→ PO sửa → chạy lại → sạch critical
|
|
115
|
+
→ PO đặt Status: approved 🔒 mở khoá BDD
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Anti-pattern
|
|
121
|
+
|
|
122
|
+
- ❌ Để chi tiết kỹ thuật (retry/timeout/API) trong PRD — lạc altitude; đẩy xuống Tech-Docs.
|
|
123
|
+
- ❌ Đặt `approved` khi còn finding critical — phá gate, hỏng downstream.
|
|
124
|
+
- ❌ Bỏ `/refine-prd` "vì PRD trông ổn" — 3 lăng kính bắt lỗi mắt thường bỏ sót.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Bước tiếp theo (Next step)
|
|
129
|
+
|
|
130
|
+
PRD `approved` → nếu là FE/App: [Design-Spec](03-design-spec.md); nếu không: thẳng tới [BDD](04-bdd.md).
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
[← Specification](02-specification.md) · [Pipeline Steps](README.md) · [Next: BDD →](04-bdd.md)
|
|
2
|
+
|
|
3
|
+
# Bước 3 · Design-Spec — Đặc tả thiết kế UI (chỉ FE/App)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Chốt **chi tiết visual bám Figma thật** trước khi sinh BDD giao diện — chỉ áp dụng cho service **Frontend / App**.
|
|
6
|
+
> **Command:** `/generate-design-spec`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Design (nhánh FE/App) |
|
|
11
|
+
| **Owner** | 👤 PO / PM (+ Designer) |
|
|
12
|
+
| **Đầu vào** | PRD `approved` + Figma/wireframe |
|
|
13
|
+
| **Đầu ra** | `design-spec/` — spec visual 2 tầng ngôn ngữ |
|
|
14
|
+
| **HITL** | 🟠 Vừa — checkpoint mềm nếu design-spec chưa `approved`/lỗi thời |
|
|
15
|
+
| **Bỏ qua khi** | Service là **backend/system** (không có UI) |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Mục đích (Purpose)
|
|
20
|
+
|
|
21
|
+
BDD giao diện (`bdd/web/`, `bdd/app/`) cần biết **màn hình có gì, trạng thái nào, tương tác ra sao**. Nếu để `/generate-bdd` tự đoán UI, coverage sẽ thiếu hoặc lệch Figma. Design-Spec:
|
|
22
|
+
|
|
23
|
+
- Ghi lại **chi tiết visual thật** (component, state, empty/error/loading, navigation) bám Figma.
|
|
24
|
+
- Dùng **2 tầng ngôn ngữ**: mô tả nghiệp vụ cho PO + tham chiếu component cho Dev/Designer.
|
|
25
|
+
- **Lái coverage UI** của BDD — mỗi trạng thái màn hình → scenario tương ứng.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Input (Đầu vào)
|
|
30
|
+
|
|
31
|
+
- **PRD `approved`** (bước 2).
|
|
32
|
+
- **Figma/wireframe thật** — nguồn chân lý về visual.
|
|
33
|
+
- `domain-knowledge/figma-components/{stack}.md` — quy ước map component theo stack (react, flutter, vue…).
|
|
34
|
+
|
|
35
|
+
## Output (Đầu ra)
|
|
36
|
+
|
|
37
|
+
| Artifact | Nội dung |
|
|
38
|
+
|----------|----------|
|
|
39
|
+
| `specs/{domain}/{prd-slug}/design-spec/{TICKET-ID}*.md` | Đặc tả từng màn hình: layout, component, state, interaction, navigation |
|
|
40
|
+
| Trạng thái `approved` | 🔒 Mềm — `/generate-bdd` cảnh báo nếu design-spec chưa duyệt/lỗi thời |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Ai làm gì (Roles & responsibilities)
|
|
45
|
+
|
|
46
|
+
| Ai | Việc |
|
|
47
|
+
|----|------|
|
|
48
|
+
| 👤 **PO / PM** | Duyệt design-spec bám đúng Figma & intent |
|
|
49
|
+
| 👤 **Designer** | Nguồn Figma; xác nhận component/state |
|
|
50
|
+
| 🤖 **AI** | Đọc Figma + PRD → sinh design-spec 2 tầng, map component theo stack |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
55
|
+
|
|
56
|
+
- Màn hình gồm những **component & trạng thái** nào (default/empty/loading/error)?
|
|
57
|
+
- Luồng **navigation** giữa các màn ra sao?
|
|
58
|
+
- Mỗi trạng thái ứng với **scenario UI** nào mà BDD phải phủ?
|
|
59
|
+
- Visual có **khớp Figma** không?
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Framework xử lý thế nào (Mechanics)
|
|
64
|
+
|
|
65
|
+
1. Gate chung + xác định service FE/App.
|
|
66
|
+
2. Đọc PRD `approved` + Figma + `figma-components/{stack}.md`.
|
|
67
|
+
3. Sinh design-spec **2 tầng ngôn ngữ**: mô tả nghiệp vụ (PO đọc) + tham chiếu component (Dev dùng).
|
|
68
|
+
4. Đánh dấu các **trạng thái màn hình** để `/generate-bdd` phủ đủ.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## HITL / Gate
|
|
73
|
+
|
|
74
|
+
- 🟠 Checkpoint **mềm**: nếu design-spec **chưa `approved`** hoặc **lỗi thời** so với PRD, `/generate-design-spec` và `/generate-bdd` cảnh báo, PO xác nhận trước khi tiếp.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Anti-pattern
|
|
79
|
+
|
|
80
|
+
- ❌ Sinh design-spec khi Figma chưa chốt — spec lệch, phải làm lại.
|
|
81
|
+
- ❌ Chạy bước này cho service backend — không có UI để đặc tả.
|
|
82
|
+
- ❌ Nhét business rule mới vào design-spec — rule thuộc PRD, đây chỉ visual.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Bước tiếp theo (Next step)
|
|
87
|
+
|
|
88
|
+
Design-spec chốt → sinh BDD giao diện:
|
|
89
|
+
|
|
90
|
+
➡️ [Bước 4 · BDD — `/generate-bdd`](04-bdd.md)
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
[← Design-Spec](03-design-spec.md) · [Pipeline Steps](README.md) · [Next: Tech-Docs →](05-tech-docs.md)
|
|
2
|
+
|
|
3
|
+
# Bước 4 · BDD — Kịch bản hành vi (Behavior Specification)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Phân rã PRD thành các file `.feature` (Gherkin) mang trace metadata — đây là **anchor cứng** mà mọi code/test sau này link về.
|
|
6
|
+
> **Commands:** `/generate-bdd` → `/review-context`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Design |
|
|
11
|
+
| **Owner** | 👤 PO (+ Dev review) |
|
|
12
|
+
| **Đầu vào** | PRD `approved` (+ design-spec nếu FE/App) |
|
|
13
|
+
| **Đầu ra** | `bdd/**/*.feature` với `@trace.*`; `@trace.status: approved` |
|
|
14
|
+
| **HITL** | 🔴 Cao — 🛑 UC decomposition + gate findings B1–B6 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
BDD là **trái tim của traceability**. Mỗi scenario là một đơn vị hành vi có thể kiểm chứng; mỗi dòng code sau này link `@trace.source` về một scenario. Cấu trúc UC/SC quyết ở đây **tác động tới mọi file code phía sau** — nên đây là checkpoint nặng.
|
|
21
|
+
|
|
22
|
+
- Phân rã PRD → **UC → Scenario** bằng Gherkin (Given/When/Then).
|
|
23
|
+
- Gắn **trace metadata** (`@trace.id/scenario/business_rules/bdd_version/prd_version`).
|
|
24
|
+
- Gate B1–B6 đảm bảo BDD phủ đủ PRD, đúng thuật ngữ, đúng luật Gherkin.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Input (Đầu vào)
|
|
29
|
+
|
|
30
|
+
- **PRD `approved`** (gate mềm — cảnh báo nếu `draft`, áp mọi mode).
|
|
31
|
+
- **Design-spec** (nếu FE/App) — lái coverage UI.
|
|
32
|
+
- `feature.template` (SoT skeleton) + `bdd-writing-guide.md`.
|
|
33
|
+
|
|
34
|
+
## Output (Đầu ra)
|
|
35
|
+
|
|
36
|
+
| Artifact | Nội dung |
|
|
37
|
+
|----------|----------|
|
|
38
|
+
| `specs/{domain}/{prd-slug}/bdd/{web\|app\|system}/{UC-ID}*.feature` | Scenario Gherkin + tag `@trace.*` + Coverage Matrix |
|
|
39
|
+
| `@trace.status: approved` (sau review) | 🔒 Mở khoá `/generate-tech-docs` |
|
|
40
|
+
|
|
41
|
+
> BDD chia theo **platform/scope**: `web/`, `app/`, `system/` (cross-service).
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Ai làm gì (Roles & responsibilities)
|
|
46
|
+
|
|
47
|
+
| Ai | Việc |
|
|
48
|
+
|----|------|
|
|
49
|
+
| 👤 **PO** | Quyết cấu trúc UC/SC; xác nhận decomposition đúng intent |
|
|
50
|
+
| 👤 **Dev** | Lăng kính review BDD (side-effect, khả thi) |
|
|
51
|
+
| 🤖 **AI** | Phân rã UC→SC; PRD lớn → orchestrator **spawn mỗi UC một sub-agent**; sinh Gherkin + trace |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
56
|
+
|
|
57
|
+
- PRD phân rã thành những **UC/Scenario** nào? Có thiếu/thừa không?
|
|
58
|
+
- Mỗi scenario có phủ một **AC/BR** cụ thể không (B1 coverage)?
|
|
59
|
+
- Gherkin có đúng luật (R1–R10), đúng thuật ngữ (business dictionary) không?
|
|
60
|
+
- Có **side-effect** nào chưa được scenario mô tả không (B6)?
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Framework xử lý thế nào (Mechanics)
|
|
65
|
+
|
|
66
|
+
**`/generate-bdd`**
|
|
67
|
+
1. Gate: kiểm PRD `Status: approved` (cảnh báo mềm mọi mode).
|
|
68
|
+
2. 🛑 **UC decomposition checkpoint** — trình danh sách UC/SC để PO chốt.
|
|
69
|
+
3. PRD lớn → **fan-out**: orchestrator giao mỗi UC cho một sub-agent (`_agent_mode`) sinh song song.
|
|
70
|
+
4. Sinh `.feature` theo `feature.template`, gắn `@trace.*`, dựng Coverage Matrix.
|
|
71
|
+
5. Có thể incorporate **scenario proposal** đã `accepted` từ tester (xem [Feedback Loop](10-feedback-loop.md)).
|
|
72
|
+
|
|
73
|
+
**`/review-context` (BDD)** — findings có mã, sạch critical mới `approved`:
|
|
74
|
+
|
|
75
|
+
| Mã | Check |
|
|
76
|
+
|----|-------|
|
|
77
|
+
| **B1** | PRD coverage — mọi AC/UC được phủ |
|
|
78
|
+
| **B2** | Terminology & entity (đúng dictionary) |
|
|
79
|
+
| **B3** | Gherkin rules (R1–R10) |
|
|
80
|
+
| **B4** | Compliance (C.1–C.5) |
|
|
81
|
+
| **B5** | Metadata & structural (đủ `@trace` header) |
|
|
82
|
+
| **B6** | Side-effect completeness |
|
|
83
|
+
|
|
84
|
+
> B1–B6 fan-out mỗi nhóm một sub-agent quét toàn file cho nhóm đó.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## HITL / Gate
|
|
89
|
+
|
|
90
|
+
- 🛑 **UC decomposition** — điểm dừng quan trọng nhất: cấu trúc sai ở đây nhân xuống mọi code.
|
|
91
|
+
- 🔒 `/review-context` sạch **critical** → đặt `@trace.status: approved` → mở khoá Tech-Docs.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Ví dụ (Example)
|
|
96
|
+
|
|
97
|
+
```gherkin
|
|
98
|
+
@trace.id=UC-02 @trace.scenario=SC-02.1
|
|
99
|
+
@trace.business_rules=BR-03 @trace.bdd_version=1.0 @trace.prd_version=1.2
|
|
100
|
+
Scenario: Đặt lại mật khẩu với link còn hạn
|
|
101
|
+
Given người dùng mở link reset còn hiệu lực
|
|
102
|
+
When nhập mật khẩu mới hợp lệ và xác nhận
|
|
103
|
+
Then hệ thống cập nhật mật khẩu và cho đăng nhập lại
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Anti-pattern
|
|
109
|
+
|
|
110
|
+
- ❌ Sinh code khi BDD còn `draft` (chưa `approved`).
|
|
111
|
+
- ❌ Nhét thuật ngữ kỹ thuật (selector, API, retry) vào step Gherkin — vi phạm B3/R3.
|
|
112
|
+
- ❌ Bỏ qua UC decomposition checkpoint — cấu trúc UC lệch kéo cả pipeline lệch.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Bước tiếp theo (Next step)
|
|
117
|
+
|
|
118
|
+
BDD `approved` → thiết kế kỹ thuật:
|
|
119
|
+
|
|
120
|
+
➡️ [Bước 5 · Tech-Docs — `/generate-tech-docs` · `/review-tech-docs`](05-tech-docs.md)
|