@educa-corp/sdd-framework 0.2.4 → 0.2.5
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 +16 -2
- package/commands/generate-code.tmpl +16 -2
- package/commands/generate-tech-docs.md +19 -0
- package/commands/generate-tech-docs.tmpl +19 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-architecture.md +706 -0
- package/core/commands/generate-code.md +16 -2
- package/core/commands/generate-tech-docs.md +19 -0
- package/core/skills/setup-ai-first/SKILL.md +12 -4
- package/core/templates/architecture.template.md +392 -111
- 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/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,101 @@
|
|
|
1
|
+
[← BDD](04-bdd.md) · [Pipeline Steps](README.md) · [Next: Code →](06-code.md)
|
|
2
|
+
|
|
3
|
+
# Bước 5 · Tech-Docs — Thiết kế kỹ thuật (Technical Design)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Từ BDD `approved`, sinh **một tech-design full-stack gộp cho cả PRD** — API contract, entity, data, dependency — rồi review đa chiều + **cổng ký liên team** cho contract cross-service.
|
|
6
|
+
> **Commands:** `/generate-tech-docs` → `/review-tech-docs`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Design (đầu ra kỹ thuật) |
|
|
11
|
+
| **Owner** | 👤 SA / Tech Lead |
|
|
12
|
+
| **Đầu vào** | BDD `approved` + entity catalog + CLAUDE.md |
|
|
13
|
+
| **Đầu ra** | `tech-docs/{TICKET-ID}-tech-design.md` (một doc full-stack/PRD) |
|
|
14
|
+
| **HITL** | 🟠 Vừa — review đa chiều + cổng ký T7 cho contract liên team |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Đây là nơi **chuyển từ ngôn ngữ nghiệp vụ sang ngôn ngữ kỹ thuật** — ranh giới cuối cùng của Business Language Guard. Tech-design là **API contract** giữa các team: BE viết, FE/App đọc. Chốt sai contract ở đây = đốt budget code cho cả hai phía. Bước này:
|
|
21
|
+
|
|
22
|
+
- Sinh **một** blueprint full-stack gộp cho cả PRD (BE API/data/DB **và** client), phủ mọi UC.
|
|
23
|
+
- Chuẩn hoá **entity catalog, relationship map, enum registry** làm nguồn chân lý cho code.
|
|
24
|
+
- **Reverse-document** khi API đã tồn tại (mô tả as-is thay vì thiết kế mới).
|
|
25
|
+
- Với dependency cross-service → có thể sinh **System BDD**.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Input (Đầu vào)
|
|
30
|
+
|
|
31
|
+
- **BDD `approved`** của mọi platform trong PRD.
|
|
32
|
+
- **Entity catalog** + relationship map + enum registry (domain-knowledge).
|
|
33
|
+
- `CLAUDE.md` (§2 kiến trúc) để bám layer/convention của stack.
|
|
34
|
+
- (Nếu reverse-document) mã nguồn API hiện có.
|
|
35
|
+
|
|
36
|
+
## Output (Đầu ra)
|
|
37
|
+
|
|
38
|
+
| Artifact | Nội dung |
|
|
39
|
+
|----------|----------|
|
|
40
|
+
| `specs/{domain}/{prd-slug}/tech-docs/{TICKET-ID}-tech-design.md` | **Một doc full-stack** phủ mọi UC: API endpoint, DTO, data model, DB, dependency, §10 UC Coverage |
|
|
41
|
+
| `@trace.status: approved` | 🔒 Mở khoá `/generate-code` |
|
|
42
|
+
| (Tuỳ chọn) System BDD | Cho dependency cross-service |
|
|
43
|
+
|
|
44
|
+
> Contract này là **artifact liên team**: BE viết → FE/App đọc ở `/generate-code --phase=integration`. Trong umbrella, nó nằm ở **spec repo dùng chung**.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Ai làm gì (Roles & responsibilities)
|
|
49
|
+
|
|
50
|
+
| Ai | Việc |
|
|
51
|
+
|----|------|
|
|
52
|
+
| 👤 **SA / Lead** | Lead: quyết trade-off thiết kế, duyệt contract, **ký** cổng liên team (T7) |
|
|
53
|
+
| 👤 **Dev các team** | Review contract phần mình tiêu thụ/cung cấp |
|
|
54
|
+
| 🤖 **AI** | Sinh tech-design từ BDD + entity catalog; reverse-document API as-is; review đa chiều |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
59
|
+
|
|
60
|
+
- Mỗi UC hiện thực bằng **API/endpoint/DTO** nào?
|
|
61
|
+
- **Entity/field/quan hệ/enum** chuẩn là gì (nguồn chân lý cho code)?
|
|
62
|
+
- Contract giữa BE ↔ FE/App có **khớp** và **đủ** cho mọi scenario không?
|
|
63
|
+
- Dependency **cross-service** nào cần System BDD + ký liên team?
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Framework xử lý thế nào (Mechanics)
|
|
68
|
+
|
|
69
|
+
**`/generate-tech-docs`**
|
|
70
|
+
1. Đọc mọi `.feature approved` của PRD + entity catalog.
|
|
71
|
+
2. Sinh **một** tech-design gộp full-stack, mục **§10 UC Coverage** ánh xạ finding/section về từng UC.
|
|
72
|
+
3. Nếu API đã tồn tại → **reverse-document** (mô tả as-is, không tự chế shape).
|
|
73
|
+
4. Chuẩn hoá entity/DTO/endpoint theo catalog để nhất quán với PRD/BDD.
|
|
74
|
+
|
|
75
|
+
**`/review-tech-docs`** — review **đa chiều**, findings gom theo từng UC (đọc §10 UC Coverage):
|
|
76
|
+
- Kiểm tính đủ/đúng của contract, entity, error, dependency.
|
|
77
|
+
- **T7 — cổng ký liên team**: contract cross-service phải được các team liên quan **ký** trước khi code.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## HITL / Gate
|
|
82
|
+
|
|
83
|
+
- 🟠 SA duyệt tech-design; **read-only** review — chỉ báo findings, không tự sửa.
|
|
84
|
+
- 🔒 **T7 sign-off**: contract liên team chưa ký → không mở khoá code phía tiêu thụ.
|
|
85
|
+
- `@trace.status: approved` trên tech-design → `/generate-code` dùng §4 làm nguồn contract; `draft/in-review` hoặc còn blocker-GAP → chỉ WARN (không chặn).
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Anti-pattern
|
|
90
|
+
|
|
91
|
+
- ❌ Tự "chế" shape DTO/endpoint khi API đã tồn tại — phải reverse-document as-is.
|
|
92
|
+
- ❌ Bỏ cổng ký T7 rồi để hai team hiểu contract khác nhau → rework tốn kém.
|
|
93
|
+
- ❌ Sinh code khi tech-design còn `draft` với contract chưa chốt.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Bước tiếp theo (Next step)
|
|
98
|
+
|
|
99
|
+
Tech-design `approved` (+ ký T7) → sinh code:
|
|
100
|
+
|
|
101
|
+
➡️ [Bước 6 · Code — `/generate-code`](06-code.md)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
[← Tech-Docs](05-tech-docs.md) · [Pipeline Steps](README.md) · [Next: Dev self-test →](07-dev-selftest.md)
|
|
2
|
+
|
|
3
|
+
# Bước 6 · Code — Sinh mã nguồn (Code Generation)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Sinh code từ `.feature approved` + tech-design, gắn `@trace` ở boundary, verify build, cập nhật trace state — với checkpoint "AI đã hiểu đúng chưa" trước khi chạy.
|
|
6
|
+
> **Commands:** `/generate-code` · `/review-code` · `/fix-bug`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Implementation |
|
|
11
|
+
| **Owner** | 👤 Developer |
|
|
12
|
+
| **Đầu vào** | `.feature approved` + tech-design + CLAUDE.md |
|
|
13
|
+
| **Đầu ra** | Code có `@trace` + trace row trong `.tsv` |
|
|
14
|
+
| **HITL** | 🟡 Mỏng — 🛑 comprehension checkpoint |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Code là **hệ quả của spec, không phải nguồn**. Bước này biến scenario thành code sao cho:
|
|
21
|
+
|
|
22
|
+
- Mỗi boundary mang **`@trace`** → đọc code biết ngay phục vụ scenario nào.
|
|
23
|
+
- **Drift per-UC** → không đập code refactor mù; chỉ chạm phần lệch.
|
|
24
|
+
- **Build verify** sẵn (≤3 retry) → không nhận code không build được.
|
|
25
|
+
- Không sinh code cho file **không** có `.feature` backing (trừ `/fix-bug`, `/debug`).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Input (Đầu vào)
|
|
30
|
+
|
|
31
|
+
- **`.feature approved`** (hoặc UC-ID) — target.
|
|
32
|
+
- **Tech-design** `approved` (§4 làm nguồn contract cho shape DTO/endpoint/error).
|
|
33
|
+
- `CLAUDE.md` §2 (thứ tự layer, package strategy) + §3 (coding standards) + §5 (error handling) — **service overlay thắng**.
|
|
34
|
+
- `.trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv` — để so drift.
|
|
35
|
+
|
|
36
|
+
## Output (Đầu ra)
|
|
37
|
+
|
|
38
|
+
| Artifact | Nội dung |
|
|
39
|
+
|----------|----------|
|
|
40
|
+
| File code | Theo thứ tự layer của stack, tag `@trace.implements/source` ở boundary |
|
|
41
|
+
| `.trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv` | Trace row cập nhật: `status`, `implemented_by`, `bdd_version`… |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Ai làm gì (Roles & responsibilities)
|
|
46
|
+
|
|
47
|
+
| Ai | Việc |
|
|
48
|
+
|----|------|
|
|
49
|
+
| 👤 **Dev** | Xác nhận comprehension checkpoint; xem report; gọi `/review-code` nếu cần |
|
|
50
|
+
| 🤖 **AI** | Phát hiện drift, sinh code theo layer, tag trace, build verify, ghi `.tsv` |
|
|
51
|
+
| 👤 **Lead** | `/review-code` (read-only) khi cần soát kỹ |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
56
|
+
|
|
57
|
+
- So với lần sinh trước: SC nào **mới**, **drifted**, hay **synced** (bỏ qua)?
|
|
58
|
+
- Code phải theo **layer/package/convention** nào của stack này?
|
|
59
|
+
- Contract (DTO/endpoint/error) lấy từ đâu — tech-design §4 hay System BDD?
|
|
60
|
+
- Build có **pass** không?
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Framework xử lý thế nào (Mechanics)
|
|
65
|
+
|
|
66
|
+
1. **Drift detection** — so `bdd_version`/spec với `.tsv`: phân loại **new (UNTRACKED)** / **DRIFT** / **OK (synced-skip)**.
|
|
67
|
+
2. 🛑 **Comprehension checkpoint** (mềm): *"{X} new, {Y} drifted, {Z} synced-skip — Proceed?"* → tránh AI hiểu sai mà vẫn chạy.
|
|
68
|
+
3. **Scope Lock** — chỉ implement UC target; code của UC khác trong file dùng chung là **bất khả xâm phạm** (đọc `@trace.implements` để bảo toàn, không xoá).
|
|
69
|
+
4. **Generate** theo **thứ tự layer** (vd Controller → Facade → Service → Repository) từ CLAUDE.md §2; tag `@trace` chỉ ở **boundary** (controller/handler), shared code dò qua import chain.
|
|
70
|
+
5. **Build verify** — chạy `{conventions.build_command}`, ≤3 retry.
|
|
71
|
+
6. **Ghi trace row** vào `.tsv` (trong spec repo nếu umbrella — thao tác ghi liên-repo).
|
|
72
|
+
|
|
73
|
+
**Phase cho Frontend:**
|
|
74
|
+
| Phase | Ý nghĩa |
|
|
75
|
+
|-------|---------|
|
|
76
|
+
| `--phase=ui` | FE Phase 1 — sinh UI + layer **mock API** từ System BDD contract |
|
|
77
|
+
| `--phase=integration` | FE nối vào **BE contract thật** (đọc tech-design từ spec repo) |
|
|
78
|
+
| *(default)* | Backend — sinh từ tech-design §4 |
|
|
79
|
+
|
|
80
|
+
**`/review-code`** — read-only, chỉ báo findings (không tự sửa: "AI tự fix tự review" = lặp lỗi).
|
|
81
|
+
**`/fix-bug`** — sửa lỗi có root-cause + regression test; xem [Feedback Loop](10-feedback-loop.md).
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## HITL / Gate
|
|
86
|
+
|
|
87
|
+
- 🛑 **Comprehension checkpoint** — điểm dừng chính: Dev xác nhận phân loại drift đúng trước khi sinh.
|
|
88
|
+
- Build phải **pass** trước khi commit.
|
|
89
|
+
- `/review-code` là gate read-only tuỳ chọn — không auto-apply fix.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Ví dụ (Example)
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
/generate-code UC-02
|
|
97
|
+
Drift: 1 new (SC-02.3), 1 drifted (SC-02.1 bdd_version 1.0→1.1), 2 synced-skip
|
|
98
|
+
🛑 Proceed? (Y/N) → Y
|
|
99
|
+
→ sinh/patch code, @trace.implements ở PasswordResetController
|
|
100
|
+
→ build verify ✅ (attempt 1)
|
|
101
|
+
→ cập nhật .trace/auth/quen-mat-khau/UC-02-web.tsv
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Anti-pattern
|
|
107
|
+
|
|
108
|
+
- ❌ Sinh code cho file không có `.feature` backing (ngoài fix-bug/debug).
|
|
109
|
+
- ❌ Tái tạo file dùng chung "chỉ gồm scenario UC này" → xoá nhầm nghiệp vụ UC khác.
|
|
110
|
+
- ❌ Tag `@trace` mọi file → tag explosion; chỉ tag boundary.
|
|
111
|
+
- ❌ Lưu version trong code — version chỉ ở spec; code dùng `.tsv`.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Bước tiếp theo (Next step)
|
|
116
|
+
|
|
117
|
+
Code build được → dev tự kiểm nhanh:
|
|
118
|
+
|
|
119
|
+
➡️ [Bước 7 · Dev self-test — `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test`](07-dev-selftest.md)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
[← Code](06-code.md) · [Pipeline Steps](README.md) · [Next: QC Automation →](08-qc-automation.md)
|
|
2
|
+
|
|
3
|
+
# Bước 7 · Dev Self-test — Tự kiểm nhanh của Dev (Developer Smoke)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Dev tự sinh & chạy bộ **smoke test nhanh** ngay sau khi code, đặt cột `dev_selftest`. Đây là smoke của **dev**, độc lập với QC chính thức.
|
|
6
|
+
> **Commands:** `/dev-gen-test` → `/dev-run-test` → `/dev-smoke-test`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Dev self-check |
|
|
11
|
+
| **Owner** | 👤 Developer |
|
|
12
|
+
| **Đầu vào** | Code vừa sinh (bước 6) + `.feature` |
|
|
13
|
+
| **Đầu ra** | Test smoke + cột `dev_selftest` trong `.tsv` |
|
|
14
|
+
| **HITL** | 🟡 Mỏng |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Trước khi đẩy sang QC chính thức, Dev cần một vòng **kiểm nhanh tại chỗ** để bắt lỗi hiển nhiên — không phải bộ test đầy đủ. Bước này:
|
|
21
|
+
|
|
22
|
+
- Sinh bộ **self-test** bám scenario, chạy nhanh theo platform.
|
|
23
|
+
- Đặt cột **`dev_selftest`** để biết SC nào đã qua smoke của dev.
|
|
24
|
+
- Cho phép **thử tại chỗ** trên service/app đang chạy (`/dev-smoke-test`).
|
|
25
|
+
|
|
26
|
+
> **`dev_selftest` ≠ `qc_status`.** Hai trục **độc lập**: dev smoke (nhanh, tự kiểm) vs QC chính thức (Playwright, evidence). Không lấn quyền nhau.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Input (Đầu vào)
|
|
31
|
+
|
|
32
|
+
- Code đã sinh + build được (bước 6).
|
|
33
|
+
- `.feature` target (UC-ID / platform).
|
|
34
|
+
- `active_module` + `platform_type` (chẩn lỗi theo stack).
|
|
35
|
+
|
|
36
|
+
## Output (Đầu ra)
|
|
37
|
+
|
|
38
|
+
| Artifact | Nội dung |
|
|
39
|
+
|----------|----------|
|
|
40
|
+
| File test smoke | Bộ tự-kiểm nhanh do `/dev-gen-test` sinh |
|
|
41
|
+
| Cột `dev_selftest` trong `.trace/…/{UC-ID}-{platform}.tsv` | Kết quả smoke của dev |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Ai làm gì (Roles & responsibilities)
|
|
46
|
+
|
|
47
|
+
| Ai | Việc |
|
|
48
|
+
|----|------|
|
|
49
|
+
| 👤 **Dev** | Chạy self-test, đọc chẩn lỗi, sửa code nếu fail |
|
|
50
|
+
| 🤖 **AI** | Sinh test smoke, chạy + chẩn lỗi theo platform, set `dev_selftest`, thử tại chỗ |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
55
|
+
|
|
56
|
+
- Code vừa sinh có **chạy được / pass smoke** không?
|
|
57
|
+
- Lỗi (nếu có) nằm ở đâu, do platform gì?
|
|
58
|
+
- SC nào đã qua vòng tự kiểm của dev (`dev_selftest`)?
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Framework xử lý thế nào (Mechanics)
|
|
63
|
+
|
|
64
|
+
| Lệnh | Việc |
|
|
65
|
+
|------|------|
|
|
66
|
+
| `/dev-gen-test` | Sinh bộ self-test nhanh bám scenario |
|
|
67
|
+
| `/dev-run-test` | Chạy + **chẩn lỗi theo platform**, set cột `dev_selftest` |
|
|
68
|
+
| `/dev-smoke-test` | Thử **tại chỗ** trên service/app đang chạy |
|
|
69
|
+
|
|
70
|
+
- Route theo `active_platform` (flat hoặc map-theo-platform) để chạy đúng service.
|
|
71
|
+
- Trace ghi vào `.tsv` (spec repo nếu umbrella).
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## HITL / Gate
|
|
76
|
+
|
|
77
|
+
- 🟡 Mỏng — Dev chủ động chạy; không có gate chặn downstream. Đây là bước *tự tin trước khi giao QC*.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Anti-pattern
|
|
82
|
+
|
|
83
|
+
- ❌ Coi `dev_selftest` là thay QC chính thức — nó chỉ smoke, không có evidence.
|
|
84
|
+
- ❌ Bỏ qua vì "build đã pass" — build pass ≠ hành vi đúng.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Bước tiếp theo (Next step)
|
|
89
|
+
|
|
90
|
+
Smoke ổn → chuyển sang dây chuyền QC chính thức:
|
|
91
|
+
|
|
92
|
+
➡️ [Bước 8 · QC Automation — `/qc-analyze` … `/qc-report`](08-qc-automation.md)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
[← Dev self-test](07-dev-selftest.md) · [Pipeline Steps](README.md) · [Next: Validate Traces →](09-validate-traces.md)
|
|
2
|
+
|
|
3
|
+
# Bước 8 · QC Automation — Dây chuyền kiểm thử 6 trạm (QC Pipeline)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Dây chuyền QC tự động 6 trạm: phân rã yêu cầu → lập kế hoạch → thiết kế test case → review → chạy Playwright → report. Ghi `qc_status` **chính thức** + evidence.
|
|
6
|
+
> **Commands:** `/qc-analyze` → `/qc-plan` → `/qc-design-test` → `/qc-review` → `/qc-run-test` → `/qc-report`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | QC Automation |
|
|
11
|
+
| **Owner** | 👤 QA / Tester |
|
|
12
|
+
| **Đầu vào** | UC-ID + spec (PRD/BDD) + code đã chạy |
|
|
13
|
+
| **Đầu ra** | Test case, script Playwright, `qc_status`, evidence, product-gap |
|
|
14
|
+
| **HITL** | 🟠 Vừa — cổng review case & script trước khi chạy |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Đây là **kiểm thử chính thức** (khác với dev smoke). Dùng module **`qc-playwright`** (Python + pytest-playwright + Page Object) — độc lập với module implementation của dev. Bước này:
|
|
21
|
+
|
|
22
|
+
- Phân rã yêu cầu thành test case bám scenario, phát hiện **gap tài liệu**.
|
|
23
|
+
- Chạy test thật, ghi **`qc_status` chính thức** + **evidence**.
|
|
24
|
+
- Phân loại FAIL: **script-bug** (sửa script) vs **product-gap** (giữ FAIL + evidence, **không bao giờ fake-pass**).
|
|
25
|
+
- Đẩy **product-gap** ngược về PO/Dev.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Input (Đầu vào)
|
|
30
|
+
|
|
31
|
+
- **UC-ID** + platform (QC pass khoá 1 platform).
|
|
32
|
+
- Spec: PRD / `.feature` (từ spec repo, qua `spec_source`).
|
|
33
|
+
- Code đã sinh & chạy được.
|
|
34
|
+
- `qc_dir` (working docs của QC) + module `qc-playwright`.
|
|
35
|
+
|
|
36
|
+
## Output (Đầu ra)
|
|
37
|
+
|
|
38
|
+
| Artifact | Nội dung |
|
|
39
|
+
|----------|----------|
|
|
40
|
+
| `docs/{UC-ID}/…` | `REQUIREMENT_ANALYSIS.md`, `DOC_GAPS.md`, `TEST_PLAN.md`, `test-cases/*.Test.md` |
|
|
41
|
+
| Script Python pytest-playwright | Sinh từ `.Test.md` đã review |
|
|
42
|
+
| Cột `qc_status` trong `.trace/…/{UC-ID}-{platform}.tsv` | Trạng thái QC **chính thức** |
|
|
43
|
+
| Evidence + report | `/qc-report` — kèm product-gap đẩy về PO/Dev |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Ai làm gì (Roles & responsibilities)
|
|
48
|
+
|
|
49
|
+
| Ai | Việc |
|
|
50
|
+
|----|------|
|
|
51
|
+
| 👤 **QA/Tester** | Lead: duyệt cổng review case & script; đọc report; phân loại gap |
|
|
52
|
+
| 🤖 **AI** | Phân rã yêu cầu, sinh test case + script Playwright, chạy, phân loại FAIL, ghi `qc_status` |
|
|
53
|
+
| 👤 **PO/Dev** | Nhận **product-gap** để xử lý (không phải lỗi script) |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
58
|
+
|
|
59
|
+
- Yêu cầu phân rã thành những **test case** nào? Tài liệu có **gap** gì?
|
|
60
|
+
- Rủi ro nào cao? Cần hỏi dev điều gì trước khi test?
|
|
61
|
+
- Test case & script đã đủ tốt để **chạy** chưa (cổng review)?
|
|
62
|
+
- SC nào **PASS/FAIL** chính thức (`qc_status`)? FAIL là **script-bug** hay **product-gap**?
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Framework xử lý thế nào (Mechanics)
|
|
67
|
+
|
|
68
|
+
Dây chuyền **6 trạm**, output trạm trước là input trạm sau:
|
|
69
|
+
|
|
70
|
+
| # | Trạm | Việc |
|
|
71
|
+
|---|------|------|
|
|
72
|
+
| 1 | `/qc-analyze` | Phân rã yêu cầu + phát hiện **gap tài liệu** (`DOC_GAPS.md`) |
|
|
73
|
+
| 2 | `/qc-plan` | Đánh giá **rủi ro** + câu hỏi cho dev (`TEST_PLAN.md`) |
|
|
74
|
+
| 3 | `/qc-design-test` | Thiết kế **test case** dạng Markdown (`*.Test.md`) |
|
|
75
|
+
| 4 | `/qc-review` | 🛑 **Cổng review** hai chiều: test case & script trước khi chạy |
|
|
76
|
+
| 5 | `/qc-run-test` | Sinh & chạy **pytest-playwright**, ghi **`qc_status`** chính thức |
|
|
77
|
+
| 6 | `/qc-report` | Report + **evidence**, đẩy **product-gap** về PO/Dev |
|
|
78
|
+
|
|
79
|
+
- Stack QC bắt buộc theo `modules/qc-playwright/stack-profile.yaml`: Python + pytest-playwright + Page Object; mỗi test độc lập; gom theo (role, account) để auth không xen kẽ.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## HITL / Gate
|
|
84
|
+
|
|
85
|
+
- 🛑 `/qc-review` — **cổng review** case & script: không chạy test kém.
|
|
86
|
+
- **Không fake-pass**: FAIL là product-gap → giữ nguyên FAIL + evidence, đẩy về PO/Dev.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Anti-pattern
|
|
91
|
+
|
|
92
|
+
- ❌ Lẫn `qc_status` với `dev_selftest` — hai trục độc lập.
|
|
93
|
+
- ❌ Sửa script cho "xanh" khi thực chất là product-gap → giấu lỗi sản phẩm.
|
|
94
|
+
- ❌ Chạy `/qc-run-test` khi chưa qua cổng `/qc-review`.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Bước tiếp theo (Next step)
|
|
99
|
+
|
|
100
|
+
Có `qc_status` → soát độ phủ toàn cục:
|
|
101
|
+
|
|
102
|
+
➡️ [Bước 9 · Validate Traces — `/validate-traces`](09-validate-traces.md)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
[← QC Automation](08-qc-automation.md) · [Pipeline Steps](README.md) · [Next: Feedback Loop →](10-feedback-loop.md)
|
|
2
|
+
|
|
3
|
+
# Bước 9 · Validate Traces — Ma trận độ phủ (Coverage Matrix)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Check **read-only** độ phủ giữa **spec ↔ code ↔ test**, gồm cả PRD version drift. Chỉ ra chỗ chưa phủ — không sửa gì.
|
|
6
|
+
> **Command:** `/validate-traces`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Quality (xuyên suốt) |
|
|
11
|
+
| **Owner** | 👤 Dev / QA / Lead |
|
|
12
|
+
| **Đầu vào** | `.trace/*.tsv` + spec + code + test |
|
|
13
|
+
| **Đầu ra** | Ma trận coverage + phân loại từng SC |
|
|
14
|
+
| **HITL** | ⚪ Read-only |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Traceability chỉ có giá trị khi **kiểm được**. Bước này cho một **bức tranh toàn cục**: scenario nào đã có code, có test, hay còn hở — để không "tưởng xong mà chưa xong". Vì là **read-only**, chạy lúc nào cũng an toàn.
|
|
21
|
+
|
|
22
|
+
- Đối chiếu spec ↔ code ↔ test cho từng SC.
|
|
23
|
+
- Phát hiện **PRD version drift** (spec đổi mà code chưa regen).
|
|
24
|
+
- Chỉ ra **gap** chưa phủ để lên kế hoạch bù.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Input (Đầu vào)
|
|
29
|
+
|
|
30
|
+
- `.trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv` (mọi UC × platform).
|
|
31
|
+
- Spec (`.feature`), code (`@trace.implements`), test (`@trace.verifies`).
|
|
32
|
+
|
|
33
|
+
## Output (Đầu ra)
|
|
34
|
+
|
|
35
|
+
| Artifact | Nội dung |
|
|
36
|
+
|----------|----------|
|
|
37
|
+
| Ma trận coverage spec ↔ code ↔ test | Trạng thái từng SC + `code_coverage` tổng |
|
|
38
|
+
| (Tuỳ chọn) `trace-report.md` | Báo cáo tổng hợp |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Ai làm gì (Roles & responsibilities)
|
|
43
|
+
|
|
44
|
+
| Ai | Việc |
|
|
45
|
+
|----|------|
|
|
46
|
+
| 👤 **Dev/QA/Lead** | Đọc ma trận, quyết bù gap / regen drift |
|
|
47
|
+
| 🤖 **AI** | Quét trace, phân loại SC, dựng ma trận (không sửa file) |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
52
|
+
|
|
53
|
+
- Scenario nào **chưa có code** (UNTRACKED)? Chưa có test (GAP)?
|
|
54
|
+
- Code nào **lỗi thời** so với spec (DRIFT)?
|
|
55
|
+
- Độ phủ tổng thể (`code_coverage`) bao nhiêu?
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Framework xử lý thế nào (Mechanics)
|
|
60
|
+
|
|
61
|
+
Phân loại mỗi SC theo **thứ tự ưu tiên** (rule sớm thắng):
|
|
62
|
+
|
|
63
|
+
| # | Trạng thái | Điều kiện |
|
|
64
|
+
|---|-----------|-----------|
|
|
65
|
+
| 1 | **UNTRACKED** | `gen_ver == —` — scenario chưa từng sinh code |
|
|
66
|
+
| 2 | **DRIFT** | có `implemented_by` **và** `spec_ver != gen_ver` — spec đổi sau codegen → **regen trước khi test** |
|
|
67
|
+
| 3 | **GAP** | có `implemented_by` **và** (`test_count == — / 0`) — có code, chưa test |
|
|
68
|
+
| 4 | **OK** | `spec_ver == gen_ver`, có `implemented_by`, `test_count > 0` |
|
|
69
|
+
|
|
70
|
+
> **Vì sao DRIFT xét trước GAP:** một SC đã có code, chưa test, **và** spec vừa drift phải hiện `DRIFT` (không phải `GAP`) — vì `/generate-code` xử `GAP` = "skip codegen" còn `DRIFT` = "regenerate". Nếu GAP thắng, code lỗi thời bị bỏ qua và test sinh trên code cũ.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## HITL / Gate
|
|
75
|
+
|
|
76
|
+
- ⚪ **Read-only** — bỏ qua checkpoint ghi-file. Đây là công cụ *quan sát*, không phải *hành động*.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Ví dụ (Example)
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
/validate-traces auth
|
|
84
|
+
UC-01 SC-01.1 OK
|
|
85
|
+
UC-01 SC-01.2 GAP (có code, chưa test)
|
|
86
|
+
UC-02 SC-02.1 DRIFT (spec_ver 1.1 ≠ gen_ver 1.0 → regen)
|
|
87
|
+
UC-02 SC-02.3 UNTRACKED (chưa sinh code)
|
|
88
|
+
code_coverage = 7/9 (78%)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Anti-pattern
|
|
94
|
+
|
|
95
|
+
- ❌ Coi validate-traces là "chạy xong là fix xong" — nó chỉ báo cáo; hành động ở `/generate-code` (regen DRIFT) và QC (bù GAP).
|
|
96
|
+
- ❌ Bỏ qua DRIFT rồi test trên code cũ.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Bước tiếp theo (Next step)
|
|
101
|
+
|
|
102
|
+
Gap/drift phát hiện → quay lại `/generate-code` (regen) hoặc bù test; lỗi/thiếu từ QC → vòng phản hồi:
|
|
103
|
+
|
|
104
|
+
➡️ [Bước 10 · Feedback Loop — `/report-bug` · `/propose-scenario` · `/learn` · `/sync`](10-feedback-loop.md)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
[← Validate Traces](09-validate-traces.md) · [Pipeline Steps](README.md) · [Overview →](../overview.md)
|
|
2
|
+
|
|
3
|
+
# Bước 10 · Feedback Loop — Vòng phản hồi & tự học (Feedback & Learning)
|
|
4
|
+
|
|
5
|
+
> **Tóm tắt.** Bug, đề xuất scenario và bài học được đưa vào các **kênh có hồ sơ**, nổi lên qua `/sync`, và nạp lại vào context — **không tạo loop ngầm** mà cải tiến spec & tri thức dự án.
|
|
6
|
+
> **Commands:** `/report-bug` · `/propose-scenario` · `/learn` · `/sync` · `/fix-bug`
|
|
7
|
+
|
|
8
|
+
| | |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Giai đoạn** | Cross-cutting (xuyên suốt) |
|
|
11
|
+
| **Owner** | 👤 Tester / QA (và tất cả) |
|
|
12
|
+
| **Đầu vào** | Bug, gap, định hướng lặp lại |
|
|
13
|
+
| **Đầu ra** | `feedback/*`, `project-lessons.md`, Living Docs |
|
|
14
|
+
| **HITL** | ⚪ Kênh có hồ sơ |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Mục đích (Purpose)
|
|
19
|
+
|
|
20
|
+
Framework là pipeline **một chiều** — nhưng vẫn cần đường **phản hồi ngược có kiểm soát** để hệ thống *học* qua thời gian. Nguyên tắc: định hướng/guardrail lặp lại **phải được ghi**, đừng để nằm trong đầu vài senior. Bước này:
|
|
21
|
+
|
|
22
|
+
- Cho tester/QC một **kênh feedback có hồ sơ spec** (bug, scenario proposal).
|
|
23
|
+
- Biến bài học thành **lesson dán tường** (`project-lessons.md`) — nạp lại để không sai lại.
|
|
24
|
+
- **Nổi** feedback lên PO/Dev qua `/sync`.
|
|
25
|
+
|
|
26
|
+
> Đây **không phải loop** để chạy vòng vòng — mỗi phản hồi đi vào spec hoặc tri thức rồi pipeline lại chảy một chiều.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các kênh (Channels)
|
|
31
|
+
|
|
32
|
+
| Lệnh | Ai dùng | Kết quả | Đi về đâu |
|
|
33
|
+
|------|---------|---------|-----------|
|
|
34
|
+
| `/report-bug` | Tester / QC | Bug **spec-anchored** (gồm product-gap từ `/qc-*`) | `feedback/bug-reports/` |
|
|
35
|
+
| `/propose-scenario` | Tester / QC | Đề xuất BDD scenario mới | `feedback/bdd-proposals/` |
|
|
36
|
+
| `/learn` | Tất cả | Guardrail lesson | `project-lessons.md` (qua step `capture-lesson`) |
|
|
37
|
+
| `/fix-bug` | Dev | Sửa lỗi có root-cause + regression test | Code + `@trace.fixes/root_cause/regression` |
|
|
38
|
+
| `/sync` | Lead (umbrella) | Pull + submodule + **nổi feedback** + làm mới Living Docs | Chạy hằng ngày |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Ai làm gì (Roles & responsibilities)
|
|
43
|
+
|
|
44
|
+
| Ai | Việc |
|
|
45
|
+
|----|------|
|
|
46
|
+
| 👤 **Tester/QC** | `/report-bug`, `/propose-scenario` — feedback có hồ sơ |
|
|
47
|
+
| 👤 **Tất cả** | `/learn` khi thấy định hướng lặp lại |
|
|
48
|
+
| 👤 **Dev** | `/fix-bug` — truy gốc → sửa → regression test |
|
|
49
|
+
| 👤 **Lead** | `/sync` — đồng bộ umbrella, nổi feedback |
|
|
50
|
+
| 🤖 **AI** | Ghi feedback đúng schema, incorporate proposal `accepted` vào `/generate-bdd`, nạp lại lessons |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Câu hỏi cần trả lời (Questions this step answers)
|
|
55
|
+
|
|
56
|
+
- Bug này gắn với **scenario/spec** nào (spec-anchored)?
|
|
57
|
+
- Scenario còn thiếu nào cần đề xuất bổ sung?
|
|
58
|
+
- Định hướng nào **lặp lại** đủ để thành lesson dán tường?
|
|
59
|
+
- (Umbrella) feedback nào cần **nổi lên** cho PO/Dev?
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Framework xử lý thế nào (Mechanics)
|
|
64
|
+
|
|
65
|
+
1. **`/report-bug` / `/propose-scenario`** — ghi feedback kèm tham chiếu spec vào `feedback/` (spec repo nếu umbrella).
|
|
66
|
+
2. **`/learn`** — qua step `capture-lesson`, ghi guardrail vào `project-lessons.md`; các workflow sau **nạp lại** vào context → hệ thống *nhớ*.
|
|
67
|
+
3. **`/generate-bdd`** — có thể incorporate scenario proposal đã `accepted`.
|
|
68
|
+
4. **`/fix-bug`** — đọc bug spec-anchored → tạo branch `fix/{TICKET}-<slug>` → root cause → sửa (tag `@trace.fixes/root_cause/regression`) → regression test + build verify → commit sau khi user duyệt.
|
|
69
|
+
5. **`/sync`** — pull, init submodule, **nổi feedback** lên PO/Dev, bootstrap config service, làm mới Living Docs. An toàn chạy lặp lại.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## HITL / Gate
|
|
74
|
+
|
|
75
|
+
- ⚪ Không gate chặn — nhưng là nơi **con người quyết** điều gì đáng thành spec/lesson.
|
|
76
|
+
- `/fix-bug` commit **sau khi user duyệt**.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Ví dụ (Example)
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
QC phát hiện: link reset vẫn dùng được sau khi đổi mật khẩu
|
|
84
|
+
/report-bug → feedback/bug-reports/BUG-217.md (@trace tới UC-02/SC-02.1)
|
|
85
|
+
/sync → nổi lên cho Dev
|
|
86
|
+
/fix-bug BUG-217 → branch fix/BUG-217-invalidate-link
|
|
87
|
+
→ root cause: thiếu invalidate token
|
|
88
|
+
→ fix + regression test + build ✅
|
|
89
|
+
/learn "luôn invalidate one-time token sau khi dùng"
|
|
90
|
+
→ project-lessons.md (nạp lại lần sau)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Anti-pattern
|
|
96
|
+
|
|
97
|
+
- ❌ Sửa định hướng bằng miệng rồi để AI "quên" — phải `/learn`.
|
|
98
|
+
- ❌ Bug không gắn spec → khó truy vết, khó regression.
|
|
99
|
+
- ❌ Coi feedback loop là "chạy vòng lặp" — nó cải tiến spec/tri thức, pipeline vẫn một chiều.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Hết pipeline (End of pipeline)
|
|
104
|
+
|
|
105
|
+
Bạn đã đi hết 11 bước (0→10). Xem lại bức tranh lớn ở [Overview](../overview.md), hoặc quay về [danh sách các bước](README.md).
|