@educa-corp/sdd-framework 0.2.3 → 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,79 @@
|
|
|
1
|
+
[← /generate-tech-docs](07-generate-tech-docs.md) · [Explain Home](README.md) · [Next: /generate-code →](09-generate-code.md)
|
|
2
|
+
|
|
3
|
+
# 08 · `/review-tech-docs` — Review Technical Design (7 dimension + ký T7)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Review tech-design qua **7 dimension T1–T7** (kiến trúc, entity, BDD trace, cross-PRD conflict, nội bộ, cấu trúc, và cổng ký liên team), sinh findings + `--resume`.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Chốt sai contract kỹ thuật = rework tốn kém cho nhiều team. `/review-tech-docs` soát tech-design đa chiều **trước khi đốt budget code**, và đảm bảo FE/App/BE **đồng thuận contract** qua sign-off T7.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Design, sau `/generate-tech-docs`.
|
|
18
|
+
- **Đặc biệt:** read-only (chỉ báo findings); có **Resume Mode** áp finding accepted.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** tech-design (một doc full-stack) + CLAUDE.md §2 + core-entities + mọi BDD của PRD (system/web/app).
|
|
25
|
+
|
|
26
|
+
**Output:** findings file + cập nhật `@trace.sign_off` khi đủ.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
Chạy 7 dimension (mỗi cái phân loại severity + auto-fixable):
|
|
33
|
+
|
|
34
|
+
| Dim | Tên | Soi gì | Auto-fix |
|
|
35
|
+
|-----|-----|--------|----------|
|
|
36
|
+
| **T1** | Architecture Alignment | Vi phạm CLAUDE.md §2 (controller gọi repo, logic trong controller, pattern cấm) — **luôn critical** | ❌ người quyết |
|
|
37
|
+
| **T2** | Entity Consistency | Đối chiếu core-entities (entity thiếu, tên field lệch, quan hệ khác) | một phần (field → canonical) |
|
|
38
|
+
| **T3** | BDD Traceability | 2 chiều design ↔ scenario, **theo đúng lane platform** (system/web/app SC không so chéo) | một phần |
|
|
39
|
+
| **T4** | Cross-PRD Endpoint Conflict | grep endpoint/entity ở doc PRD khác, **load-on-hit**; va chạm shape/behavior → critical | ❌ |
|
|
40
|
+
| **T5** | Internal Consistency | Sequence vs mô tả, API spec vs code sketch, ref không định nghĩa | một phần |
|
|
41
|
+
| **T6** | Structural Completeness | Section chuẩn có mặt & không rỗng | ✅ thêm skeleton |
|
|
42
|
+
| **T7** | Cross-Team API Contract | **Cổng ký liên team** — chỉ khi doc có backend (system) + không phải `api_source: existing` | sign-off block auto-fix |
|
|
43
|
+
|
|
44
|
+
**T7 chi tiết:**
|
|
45
|
+
- Đọc block `@trace.sign_off` (be_team / fe_team / app_team / sa); vắng → thêm skeleton.
|
|
46
|
+
- Cross-check contract §4 vs web & app BDD → đảm bảo mọi team đồng thuận trước khi implement.
|
|
47
|
+
|
|
48
|
+
Sau phân tích → ghi findings; **Resume Mode** áp finding `accepted`/`modified`.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Checkpoint & Gate
|
|
53
|
+
|
|
54
|
+
- 🔒 **T7 sign-off** — contract liên team chưa ký đủ (be/fe/app/sa) → chưa mở khoá code phía tiêu thụ.
|
|
55
|
+
- Read-only — không tự sửa; findings qua Board → `--resume`.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Cơ chế đặc biệt
|
|
60
|
+
|
|
61
|
+
- **T4 load-on-hit** — không nạp full doc PRD khác, chỉ grep path/entity rồi đọc đoạn khớp → rẻ.
|
|
62
|
+
- **SC scope theo platform** — `system UC1-SC1` ≠ `web UC1-SC1`; match trong đúng lane.
|
|
63
|
+
- **T7 skip khi brownfield** (`api_source: existing`) — contract đã do PO chốt, không có design mới để đồng thuận.
|
|
64
|
+
- **T1 luôn critical** — vi phạm kiến trúc chặn cứng.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 👓 Góc nhìn tối ưu
|
|
69
|
+
|
|
70
|
+
- **7 dimension trong một lệnh** — nặng; T4 (cross-PRD) và T7 (sign-off) là hai phần đắt nhất. T4 dùng grep khéo để rẻ; T7 phụ thuộc con người ký.
|
|
71
|
+
- **T7 sign-off là quy trình đa người** — dễ nghẽn nếu một team chậm ký. Đáng có cơ chế nhắc/timeout.
|
|
72
|
+
- **Chồng lấn với conflict resolution ở generate-bdd (system)** — cả hai lo contract cross-platform. Ranh giới: BDD-system chốt *hành vi contract*, T7 chốt *shape API + đồng thuận team*.
|
|
73
|
+
- **Không dùng review-fanout** (khác `/review-context`/`/refine-prd`) — 7 dimension chạy tuần tự trong một session. Với doc lớn có thể lost-in-the-middle; cân nhắc fan-out.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Kết nối
|
|
78
|
+
|
|
79
|
+
**Trước:** [`/generate-tech-docs`](07-generate-tech-docs.md) · **Sau:** đủ ký T7 → [`/generate-code {feature}`](09-generate-code.md).
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
[← /review-tech-docs](08-review-tech-docs.md) · [Explain Home](README.md) · [Next: /review-code →](10-review-code.md)
|
|
2
|
+
|
|
3
|
+
# 09 · `/generate-code` — Sinh mã nguồn từ BDD
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Sinh code từ một `.feature` approved + tech-design, phát hiện **drift per-UC**, gắn `@trace` ở boundary, nối/lấp **seam & stub** (chống mồ côi), verify build, ghi trace state — với comprehension checkpoint.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Code là **hệ quả của spec**. Command biến scenario thành code sao cho: mỗi boundary có trace, chỉ chạm phần drift (không đập refactor mù), không sinh code không có `.feature` backing, và build được trước khi commit.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Implementation, sau BDD + tech-docs.
|
|
18
|
+
- **Gate vào:** cảnh báo mềm DS1 (BDD chưa approved), DS2 (design-spec), DS3 (tech-doc contract).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** `.feature` (hoặc UC-ID) + tech-design §4 + CLAUDE.md §2/§3/§5 + `.trace/…/{UC-ID}-{platform}.tsv` + `_seams.tsv`.
|
|
25
|
+
|
|
26
|
+
**Output:** file code (tag `@trace` boundary) + trace row `.tsv` + cập nhật `_seams.tsv`.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Guard BDD & Design Spec** — DS1/DS2/DS3 cảnh báo mềm nếu nguồn chưa chốt.
|
|
33
|
+
2. **Phase Detection** — `--phase=ui` (FE Phase 1: UI + mock API; **mock source hybrid** = ưu tiên tech-doc §4 contract, fallback System BDD) · `--phase=integration` (thay mock bằng API thật) · default (BE/full-stack). `system` → bỏ flag.
|
|
34
|
+
3. **Figma Dev Mode MCP Check** (sinh UI) — đọc frame Figma độ trung thực cao cho codegen.
|
|
35
|
+
4. **Read Trace State** — so `bdd_version`/spec với `.tsv` → phân loại **new / drifted / synced-skip**.
|
|
36
|
+
5. **Package Placement** — đặt code đúng `code_base_package` + strategy (by-layer/by-feature), chống phân mảnh.
|
|
37
|
+
6. **Seam & Stub Ledger** (`_seams.tsv`) — trước khi tạo chỗ giả lập, ghi sổ:
|
|
38
|
+
- `seam` = gọi ra port cross-UC (UC khác sở hữu) · `stub` = method trắng nội-feature (logic thuộc BDD khác của chính feature).
|
|
39
|
+
- Trạng thái: `PENDING` (chưa có hàng thật) · `READY` 🔴 (hàng thật đã có nhưng chưa nối) · `RESOLVED`.
|
|
40
|
+
- Vá 2 lỗi kinh điển: **hàm trắng mồ côi** (no-op khi ghép luồng) và **hàm thật mồ côi** (đẻ hàm mới thay vì lấp stub cũ).
|
|
41
|
+
7. **File Scan** — quét file hiện có để quyết CREATE/EXTEND/FILL/SKIP.
|
|
42
|
+
8. **CHECKPOINT — Code Generation Plan** — 🛑 trình: scenarios (X new, Y drifted, Z synced-skip) · CREATE (mới) · **EXTEND (ADD-ONLY, cấm full Write)** · **FILL** (lấp stub tại chỗ, không đẻ method song song) · SKIP + danh sách member GIỮ NGUYÊN (UC khác). **Scope Lock**: chỉ đọc/implement UC target.
|
|
43
|
+
9. **Branch** `feature/{TICKET}-{slug}`.
|
|
44
|
+
10. **Generate** theo **thứ tự layer từ CLAUDE.md §2**; tag `@trace.implements/source` ở boundary.
|
|
45
|
+
11. **Mock/Integration** — layer mock (`--phase=ui`) hoặc thay adapter thật (`--phase=integration`).
|
|
46
|
+
12. **Self-Review (3 vòng)** → **Build Verify** (`{build_command}`, ≤3 retry) → **Write Trace State** → **Refresh Panel Mirror** (Living Docs umbrella) → **Commit** (sau khi duyệt).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Checkpoint & Gate
|
|
51
|
+
|
|
52
|
+
- 🛑 **Comprehension checkpoint** (Code Generation Plan) — điểm dừng chính; Dev xác nhận drift + scope đúng.
|
|
53
|
+
- Build phải pass trước commit.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Cơ chế đặc biệt
|
|
58
|
+
|
|
59
|
+
- **Seam & Stub Ledger** — cơ chế tinh vi nhất: giải quyết vấn đề "sinh code từng BDD rời tạo hàm mồ côi". `READY` là cờ 🔴 để lần sau nối hàng thật vào.
|
|
60
|
+
- **Scope Lock + ADD-ONLY + FILL** — bảo toàn code UC khác trong file dùng chung; EXTEND chỉ Edit thêm, FILL lấp stub tại chỗ.
|
|
61
|
+
- **Mock source hybrid** — mock shape ưu tiên contract thật để đỡ rework lúc integration.
|
|
62
|
+
- **3 vòng self-review + build ≤3 retry** — hai lớp tự kiểm trước khi giao.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 👓 Góc nhìn tối ưu
|
|
67
|
+
|
|
68
|
+
- **Command nặng nhất về logic thực thi** — 12 bước, nhiều nhánh (phase, drift, seam, scope lock). Đây là nơi bug/tối ưu tác động trực tiếp code chất lượng.
|
|
69
|
+
- **Seam ledger phụ thuộc kỷ luật ghi sổ** — nếu một lần gen quên ghi `_seams.tsv`, cơ chế chống mồ côi thủng. Đáng có validate.
|
|
70
|
+
- **`--phase=ui` với mock từ System BDD (không contract)** → shape có thể lệch → rework ở integration. Chi phí này giảm nếu BE publish tech-doc §4 trước.
|
|
71
|
+
- **Build verify ≤3 retry** — nếu 3 lần fail thì sao? Đáng làm rõ hành vi khi vượt retry.
|
|
72
|
+
- **Refresh Panel Mirror** chỉ local umbrella — trạng thái Living Docs phụ thuộc `/sync` để lan.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Kết nối
|
|
77
|
+
|
|
78
|
+
**Trước:** [`/review-tech-docs`](08-review-tech-docs.md) · **Sau:** lần đầu → [`/review-code`](10-review-code.md); gen lại → [`/dev-gen-test`](12-dev-gen-test.md).
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
[← /generate-code](09-generate-code.md) · [Explain Home](README.md) · [Next: /map-testids →](11-map-testids.md)
|
|
2
|
+
|
|
3
|
+
# 10 · `/review-code` — Review code (read-only, 4 dimension)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Soát code vừa sinh qua **4 dimension** (traceability, layer, coding standards, spec compliance) — **chỉ báo findings, không tự sửa** — và có thể đề xuất ghi lesson.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
"AI tự fix tự review" = lặp lỗi. `/review-code` tách vai review khỏi generate: một vòng đọc độc lập đối chiếu code với spec + CLAUDE.md, báo cáo để Dev/Lead quyết.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Implementation, sau `/generate-code` (lần đầu).
|
|
18
|
+
- **Đặc biệt:** **read-only** — bỏ qua checkpoint ghi-file, không commit, không auto-fix.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** code của UC + `.feature` + CLAUDE.md §2/§3 + trace `.tsv`.
|
|
25
|
+
|
|
26
|
+
**Output:** báo cáo findings (`Output Artifacts: none (read-only)`) + tuỳ chọn đề xuất lesson.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
Chạy checklist 4 dimension:
|
|
33
|
+
|
|
34
|
+
| # | Dimension | Kiểm gì |
|
|
35
|
+
|---|-----------|---------|
|
|
36
|
+
| 1 | **Traceability** | Mỗi controller endpoint có `@trace.implements`? Test có `@trace.verifies`? Tag đúng layer? `.tsv` cập nhật chưa (stale → chạy `/validate-traces` trước)? |
|
|
37
|
+
| 2 | **Layer Architecture** (CLAUDE.md §2) | Class đúng layer? Phụ thuộc đúng chiều? Không bypass layer? |
|
|
38
|
+
| 3 | **Coding Standards** (CLAUDE.md §3) | Naming? Response wrapper nhất quán? Exception không bị nuốt? Không magic number / log dữ liệu nhạy cảm? Transaction đúng? |
|
|
39
|
+
| 4 | **Spec Compliance** | Mỗi scenario có implementation? Không endpoint không tài liệu (code không có spec backing)? |
|
|
40
|
+
|
|
41
|
+
Sau review → **Đề xuất ghi Lessons** (tuỳ chọn) qua step `capture-lesson`: nếu phát hiện lỗi lặp lại → đề xuất ghi guardrail vào `project-lessons.md` (L1 phân giải file → L2 dựng lesson → L3 dedup → L4 ghi → L5 xác nhận).
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Checkpoint & Gate
|
|
46
|
+
|
|
47
|
+
- Không gate chặn — báo cáo tư vấn. Dev tự sửa (không phải AI auto-fix).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Cơ chế đặc biệt
|
|
52
|
+
|
|
53
|
+
- **Read-only nghiêm ngặt** — thể hiện nguyên tắc "review tách khỏi generate".
|
|
54
|
+
- **Tự phát hiện trace stale** → nhắc chạy `/validate-traces` trước để review chính xác.
|
|
55
|
+
- **Cầu nối với `/learn`** — review là nơi tự nhiên phát hiện pattern lặp → đề xuất lesson.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 👓 Góc nhìn tối ưu
|
|
60
|
+
|
|
61
|
+
- **Không auto-fix có chủ đích** — nhưng nghĩa là mọi finding cần vòng người sửa. Với lỗi cơ học (thiếu tag `@trace`), cân nhắc một `--fix` an toàn giống `/review-context`?
|
|
62
|
+
- **Checklist tĩnh 4 dimension** (không fan-out) — với file code lớn có thể sót. Nhẹ hơn review tài liệu vì scope hẹp (1 UC).
|
|
63
|
+
- **Phụ thuộc `.tsv` không stale** — nếu stale, dimension 1 kém tin cậy; đã có cơ chế nhắc validate-traces.
|
|
64
|
+
- **Đề xuất lesson là điểm mạnh** — biến review thành tích luỹ tri thức; nhưng phụ thuộc người xác nhận L5.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Kết nối
|
|
69
|
+
|
|
70
|
+
**Trước:** [`/generate-code`](09-generate-code.md) · **Sau:** pass → [`/dev-smoke-test`](14-dev-smoke-test.md) hoặc tạo PR; lỗi lặp → [`/learn`](27-learn.md).
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
[← /review-code](10-review-code.md) · [Explain Home](README.md) · [Next: /dev-gen-test →](12-dev-gen-test.md)
|
|
2
|
+
|
|
3
|
+
# 11 · `/map-testids` — Dán test-id ổn định cho UI (FE)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Gắn **test-id ổn định** vào các element có hành động trên UI FE và ghi bản đồ selector vào tech-doc §4.5.6 — làm cầu nối để QC Playwright bám selector không vỡ.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Test tự động (Playwright) vỡ khi selector đổi (class/text thay đổi). `/map-testids` chuẩn hoá **test-id ổn định** cho mọi element tương tác, đảm bảo component tái dùng forward được test-id, và ghi map để QC dùng — tách concern "làm UI test được" khỏi "viết test".
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Tech Design / Implementation (FE), giữa code FE và QC.
|
|
18
|
+
- **Chặn cứng:** chỉ FE/App (platform guard) — BE không có UI.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** UI code FE (element có action) + catalog component tái dùng + tech-doc §4.5.
|
|
25
|
+
|
|
26
|
+
**Output:** code FE được patch test-id + map §4.5.6 Test Selectors trong tech-doc.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
| Step | Việc |
|
|
33
|
+
|------|------|
|
|
34
|
+
| **0 · Platform guard** | Chỉ FE/App; else STOP |
|
|
35
|
+
| **1 · Thu thập element có action** | Quét UI tìm element người dùng tương tác (nút, ô nhập, link…) |
|
|
36
|
+
| **2 · Phân giải test-id ổn định** | Đặt test-id ổn định (không phụ thuộc text/class dễ đổi) cho mỗi element |
|
|
37
|
+
| **3 · Đảm bảo component tái dùng forward test-id** | Component dùng lại (catalog) phải cho phép truyền test-id xuống — sửa component nếu chưa |
|
|
38
|
+
| **4 · Patch usage site** (chỉ EXTEND) | Gắn test-id vào nơi dùng, chỉ thêm (không viết đè) |
|
|
39
|
+
| **5 · Ghi/làm mới map §4.5.6** | Ghi bảng Test Selectors vào tech-doc để QC bám |
|
|
40
|
+
| **6 · Handoff** | Bàn giao cho QC (`/qc-*`) |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Checkpoint & Gate
|
|
45
|
+
|
|
46
|
+
- Không gate chặn; EXTEND-only khi patch (an toàn).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Cơ chế đặc biệt
|
|
51
|
+
|
|
52
|
+
- **Test-id ổn định** — chống test vỡ do đổi visual; nguyên tắc "selector là contract QC↔FE".
|
|
53
|
+
- **Forward test-id qua component tái dùng** — sửa gốc component để test-id lan xuống, không hardcode từng chỗ.
|
|
54
|
+
- **Map ở §4.5.6 tech-doc** — QC đọc từ một nguồn, không tự dò.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 👓 Góc nhìn tối ưu
|
|
59
|
+
|
|
60
|
+
- **Lệnh cầu nối FE→QC** — vị trí pipeline hơi mờ (giữa Tech Design & Code). Chạy sớm quá thì UI chưa xong, muộn quá thì QC phải chờ. Đáng làm rõ thời điểm tối ưu.
|
|
61
|
+
- **Phụ thuộc catalog component tái dùng** — nếu component không forward được prop test-id, Step 3 phát sinh sửa lan rộng.
|
|
62
|
+
- **EXTEND-only** an toàn nhưng nếu test-id cũ sai thì không tự sửa.
|
|
63
|
+
- **Không bắt buộc trong golden path** — dễ bị bỏ qua, khiến QC selector giòn. Cân nhắc tích hợp vào `/generate-code --phase=ui`.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Kết nối
|
|
68
|
+
|
|
69
|
+
**Trước:** [`/generate-code`](09-generate-code.md) (UI FE) · **Sau:** [`/qc-*`](15-qc-analyze.md) dùng selector đã map.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
[← /map-testids](11-map-testids.md) · [Explain Home](README.md) · [Next: /dev-run-test →](13-dev-run-test.md)
|
|
2
|
+
|
|
3
|
+
# 12 · `/dev-gen-test` — Sinh bộ tự-kiểm của Dev
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Sinh bộ **self-test nhanh** (unit/integration theo platform) bám scenario, gắn `@trace.verifies`, để Dev tự kiểm code vừa sinh — trước QC chính thức.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Sau `/generate-code`, Dev cần một lớp test nhanh để bắt lỗi hiển nhiên tại chỗ. Đây **không** phải bộ test chính thức (đó là QC) — mà là smoke của dev, gắn với cột `dev_selftest`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Dev Self-Test, sau `/generate-code`.
|
|
18
|
+
- **Tiền đề:** code build được + `.feature`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** code UC + `.feature` + `active_module`/`platform_type` + stack-profile (test pattern).
|
|
25
|
+
|
|
26
|
+
**Output:** file test (tag `@trace.verifies={UC-ID}`, `@trace.test_type=unit|integration`) + cập nhật trace + Panel Mirror.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Service Detection** — route service (umbrella) / single.
|
|
33
|
+
2. **CHECKPOINT — Test Plan** — 🛑 trình kế hoạch test (loại test, scenario phủ) → chờ Y.
|
|
34
|
+
3. **Generate** — sinh test theo test pattern của stack (từ stack-profile): unit test cho logic, integration cho boundary; mỗi test tag `@trace.verifies` + `@trace.test_type`.
|
|
35
|
+
4. **Checklist** — tự kiểm bộ test đủ phủ scenario.
|
|
36
|
+
5. **Write Trace State** — cập nhật `.tsv` (`test_count`).
|
|
37
|
+
6. **Refresh Panel Mirror** — làm mới Living Docs local (umbrella).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Checkpoint & Gate
|
|
42
|
+
|
|
43
|
+
- 🛑 CHECKPOINT Test Plan trước generate.
|
|
44
|
+
- Không gate chặn downstream.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Cơ chế đặc biệt
|
|
49
|
+
|
|
50
|
+
- **Theo test pattern của stack** — đọc stack-profile thay vì hardcode → cùng lệnh chạy cho java-spring/react/flutter…
|
|
51
|
+
- **Tag test_type** phân biệt unit/integration.
|
|
52
|
+
- **Orthogonal với QC** — bộ này phục vụ `dev_selftest`, không phải `qc_status`.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 👓 Góc nhìn tối ưu
|
|
57
|
+
|
|
58
|
+
- **Ranh giới với QC** — dev-gen-test sinh test "nhanh", qc-design-test sinh test-case "chính thức". Có thể trùng công sức viết test 2 lần. Đáng xem có tái dùng được không.
|
|
59
|
+
- **Phụ thuộc stack-profile `test_types`** — stack thiếu khai báo → test kém định hình.
|
|
60
|
+
- **CHECKPOINT cho mọi lần** — với thay đổi nhỏ có thể là ma sát; cân nhắc short-circuit.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Kết nối
|
|
65
|
+
|
|
66
|
+
**Trước:** [`/generate-code`](09-generate-code.md) · **Sau:** [`/dev-run-test`](13-dev-run-test.md).
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
[← /dev-gen-test](12-dev-gen-test.md) · [Explain Home](README.md) · [Next: /dev-smoke-test →](14-dev-smoke-test.md)
|
|
2
|
+
|
|
3
|
+
# 13 · `/dev-run-test` — Chạy self-test + chẩn lỗi, ghi `dev_selftest`
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Chạy bộ self-test theo lệnh test của platform, chẩn đoán lỗi, và ghi kết quả vào cột **`dev_selftest`** của trace.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Sinh test chưa đủ — phải chạy và biết pass/fail. Command chạy test đúng service/platform, phân tích lỗi, và ghi trạng thái smoke của dev vào trace (độc lập với QC).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Dev Self-Test, sau `/dev-gen-test`.
|
|
18
|
+
- **Đặc biệt:** chạy lệnh shell **bên trong** `service_root` (umbrella).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** bộ self-test + `conventions.test_command` (theo service) + `platform_type`.
|
|
25
|
+
|
|
26
|
+
**Output:** cột `dev_selftest` trong `.tsv` + Panel Mirror; nếu fail → chẩn đoán.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Service Detection** + **Submodule Working Directory** — xác định thư mục chạy.
|
|
33
|
+
2. **Run** — chạy test theo platform (scoped để feedback nhanh):
|
|
34
|
+
| platform_type | Lệnh (ví dụ) |
|
|
35
|
+
|---------------|--------------|
|
|
36
|
+
| backend | java-spring (mvn), golang (go test), dotnet, php-laravel, pytest |
|
|
37
|
+
| web-frontend | Vitest / Jest; E2E Playwright / Cypress |
|
|
38
|
+
| mobile | Flutter test, React Native, iOS (xcodebuild), Android |
|
|
39
|
+
3. **Analyze Failures** — chẩn lỗi theo platform (điều gì fail, tại sao).
|
|
40
|
+
4. **Write Trace State** — set `dev_selftest` (pass/fail) trong `.tsv`.
|
|
41
|
+
5. **Refresh Panel Mirror** — Living Docs local (umbrella).
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Checkpoint & Gate
|
|
46
|
+
|
|
47
|
+
- Không gate chặn. Fail → gợi ý `/fix-bug` hoặc `/debug`.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Cơ chế đặc biệt
|
|
52
|
+
|
|
53
|
+
- **Scoped run** — chạy hẹp (theo class) cho feedback nhanh thay vì toàn bộ suite.
|
|
54
|
+
- **`dev_selftest` là trục riêng** — không đụng `qc_status`.
|
|
55
|
+
- **Chẩn lỗi theo platform** — dùng `platform_type` để đọc lỗi đúng ngữ cảnh stack.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 👓 Góc nhìn tối ưu
|
|
60
|
+
|
|
61
|
+
- **Bảng lệnh test theo stack lớn** — mỗi stack một dòng; thêm stack mới phải sửa ở đây (dù stack-profile đã có `test_command`). Có thể đọc hoàn toàn từ profile.
|
|
62
|
+
- **Kết quả `dev_selftest`** không chặn pipeline — dev có thể bỏ qua fail và đi tiếp. Đáng cân nhắc có nên cảnh báo mạnh hơn trước QC.
|
|
63
|
+
- **Chẩn lỗi phụ thuộc AI đọc log** — với lỗi mơ hồ có thể cần `/debug`.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Kết nối
|
|
68
|
+
|
|
69
|
+
**Trước:** [`/dev-gen-test`](12-dev-gen-test.md) · **Sau:** pass → [`/review-code`](10-review-code.md) / [`/dev-smoke-test`](14-dev-smoke-test.md); fail → [`/fix-bug`](23-fix-bug.md) / [`/debug`](24-debug.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
[← /dev-run-test](13-dev-run-test.md) · [Explain Home](README.md) · [Next: /qc-analyze →](15-qc-analyze.md)
|
|
2
|
+
|
|
3
|
+
# 14 · `/dev-smoke-test` — Thử tại chỗ trên service/app đang chạy
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Kiểm tra nhanh feature **trên service/app đang chạy thật** (health endpoint, curl, chạy app trên simulator) — smoke cuối của dev trước khi giao.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Test đơn vị pass ≠ chạy thật OK. `/dev-smoke-test` xác nhận feature hoạt động trên runtime thật (server lên, endpoint trả 200, app chạy không crash) — lớp kiểm cuối trước PR/QC.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Dev Self-Test (cuối), sau `/dev-run-test`.
|
|
18
|
+
- **Tiền đề:** service/app khởi động được (`conventions.service_run`).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** service/app đang chạy + `.feature` + `platform_type`.
|
|
25
|
+
|
|
26
|
+
**Output:** kết quả smoke tại chỗ (báo cáo), chẩn crash nếu có.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
Rẽ nhánh theo `platform_type`:
|
|
33
|
+
|
|
34
|
+
| platform_type | Việc |
|
|
35
|
+
|---------------|------|
|
|
36
|
+
| **backend** | Thử health endpoint; gọi GET/POST thật (curl); hoặc pytest smoke marker |
|
|
37
|
+
| **web-frontend** | curl kiểm 200 (Linux/mac/Windows); nếu không → khởi động bằng `service_run`; chạy Playwright/Cypress scenario gắn UC |
|
|
38
|
+
| **mobile** | Chạy app trên simulator (Flutter/React Native/Android Compose/iOS SwiftUI); đọc crash log nếu lỗi |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Checkpoint & Gate
|
|
43
|
+
|
|
44
|
+
- Không gate chặn — smoke tư vấn. Pass → tạo PR.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Cơ chế đặc biệt
|
|
49
|
+
|
|
50
|
+
- **Chạy trên runtime thật** — khác dev-run-test (chạy test suite); đây là "bấm thử" thực tế.
|
|
51
|
+
- **Rẽ nhánh 3 platform_type** với lệnh cụ thể cho từng stack + đọc crash log mobile.
|
|
52
|
+
- **Bắc cầu sang QC E2E** — web dùng chính Playwright/Cypress mà QC sẽ dùng.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 👓 Góc nhìn tối ưu
|
|
57
|
+
|
|
58
|
+
- **Chồng lấn QC E2E** — web smoke đã chạy Playwright scenario; QC cũng Playwright. Ranh giới: dev-smoke = nhanh/thủ công, QC = đầy đủ/evidence. Đáng làm rõ.
|
|
59
|
+
- **Phụ thuộc service chạy được** — nếu môi trường local chưa dựng, smoke không chạy → giá trị giảm.
|
|
60
|
+
- **Không ghi trace** (khác dev-run-test) — kết quả smoke không lưu trạng thái; chỉ báo cáo. Cân nhắc có nên lưu.
|
|
61
|
+
- **Ba nhánh platform** với nhiều biến thể lệnh — chi phí bảo trì theo số stack.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Kết nối
|
|
66
|
+
|
|
67
|
+
**Trước:** [`/dev-run-test`](13-dev-run-test.md) · **Sau:** tạo PR, hoặc chuyển QC chính thức → [`/qc-analyze`](15-qc-analyze.md).
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[← /dev-smoke-test](14-dev-smoke-test.md) · [Explain Home](README.md) · [Next: /qc-plan →](16-qc-plan.md)
|
|
2
|
+
|
|
3
|
+
# 15 · `/qc-analyze` — Trạm 1: Phân rã yêu cầu + gap tài liệu
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Trạm đầu của dây chuyền QC: phân rã yêu cầu từ spec, map trace, và ghi **DOC_GAPS** (chỗ tài liệu thiếu để test được). Markdown-first, chưa có script.
|
|
6
|
+
|
|
7
|
+
> 🏭 **Dây chuyền QC 6 trạm** dùng module `qc-playwright` và **QC skill** nạp từ `paths.qc_skills_dir` — mặc định bundled `.agent/skills/qc`, **override sang repo riêng của team QC** để nâng cấp framework không ghi đè (QC skill tiến hoá độc lập).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Vấn đề giải quyết
|
|
12
|
+
|
|
13
|
+
QC chính thức cần hiểu yêu cầu **testable** trước khi viết test. Trạm này phân rã spec thành phân tích yêu cầu + phát hiện **gap tài liệu** (thiếu gì để test được) → tránh viết test trên hiểu lầm.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Vị trí & tiền đề
|
|
18
|
+
|
|
19
|
+
- **Vị trí:** Phase QC (trạm 1), sau code chạy được.
|
|
20
|
+
- **Gate vào:** Guard — cảnh báo nếu BDD chưa approved.
|
|
21
|
+
- **Đặc biệt:** **Platform Resolution** ở đây khoá platform cho **cả QC pass** — mọi trạm sau kế thừa.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Input / Output
|
|
26
|
+
|
|
27
|
+
**Input:** UC-ID + spec (PRD/BDD từ spec repo) + skill `qa-analyst`.
|
|
28
|
+
|
|
29
|
+
**Output (per UC):** `{qc_dir}/{UC-ID}/{platform}/REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Các bước xử lý (chi tiết)
|
|
34
|
+
|
|
35
|
+
1. **Guard — BDD approved?** — cảnh báo mềm nếu chưa.
|
|
36
|
+
2. **Platform Resolution** — chốt 1 platform cho toàn QC pass (sổ trace ghi `qc_status` sẽ là `{UC-ID}-{platform}.tsv`).
|
|
37
|
+
3. **Role qa-analyst** — nạp skill `{qc_skills_dir}/qa-analyst/`.
|
|
38
|
+
4. **Trace mapping (bắt buộc)** — map yêu cầu ↔ scenario ↔ SC.
|
|
39
|
+
5. **DOC_GAPS (bắt buộc)** — ghi chỗ tài liệu thiếu/mơ hồ chặn test (blocker 🔴 xử trước ở `/qc-plan`).
|
|
40
|
+
6. **Output** REQUIREMENT_ANALYSIS.md + DOC_GAPS.md.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Checkpoint & Gate
|
|
45
|
+
|
|
46
|
+
- Guard mềm (BDD approved). Không gate chặn.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Cơ chế đặc biệt
|
|
51
|
+
|
|
52
|
+
- **QC skill từ repo riêng** (`qc_skills_dir`) — QC team sở hữu, không bị framework upgrade ghi đè.
|
|
53
|
+
- **Platform khoá một lần** cho cả pass → nhất quán sổ trace.
|
|
54
|
+
- **DOC_GAPS** — kênh QC phản hồi ngược chất lượng tài liệu (song song `/report-bug`).
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 👓 Góc nhìn tối ưu
|
|
59
|
+
|
|
60
|
+
- **DOC_GAPS trùng vai với review-context B-check?** — cả hai bắt gap tài liệu, nhưng QC nhìn từ góc "test được không". Đáng xem có nối được feedback này về spec.
|
|
61
|
+
- **Platform một pass** — feature multi-platform phải chạy QC pass nhiều lần. Chi phí lặp phân tích.
|
|
62
|
+
- **Phụ thuộc QC skill ngoài** — nếu `qc_skills_dir` trỏ sai/thiếu, trạm hụt logic.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Kết nối
|
|
67
|
+
|
|
68
|
+
**Trước:** code + [`/validate-traces`](21-validate-traces.md) · **Sau:** xử gap blocker 🔴 → [`/qc-plan`](16-qc-plan.md).
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
[← /qc-analyze](15-qc-analyze.md) · [Explain Home](README.md) · [Next: /qc-design-test →](17-qc-design-test.md)
|
|
2
|
+
|
|
3
|
+
# 16 · `/qc-plan` — Trạm 2: Kế hoạch test theo rủi ro
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Từ phân tích yêu cầu, lập **TEST_PLAN** ưu tiên theo rủi ro và nêu câu hỏi cần dev làm rõ.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Không phải mọi scenario rủi ro ngang nhau. Trạm này xếp ưu tiên test theo rủi ro (tránh dàn trải) và gom câu hỏi cho dev trước khi thiết kế test.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase QC (trạm 2), sau `/qc-analyze`.
|
|
18
|
+
- **Tiền đề:** REQUIREMENT_ANALYSIS.md + DOC_GAPS.md; nên xử blocker 🔴 trước.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** analysis từ trạm 1 + skill `qa-planner`.
|
|
25
|
+
|
|
26
|
+
**Output:** `{qc_dir}/{UC-ID}/{platform}/TEST_PLAN.md` (rủi ro + câu hỏi cho dev).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Role qa-planner** — nạp `{qc_skills_dir}/qa-planner/`.
|
|
33
|
+
2. Đọc analysis + gap → **đánh giá rủi ro** từng vùng.
|
|
34
|
+
3. Nêu **câu hỏi cho dev** (điểm chưa rõ để test đúng).
|
|
35
|
+
4. **Output** TEST_PLAN.md.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Checkpoint & Gate
|
|
40
|
+
|
|
41
|
+
- Không gate chặn.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Cơ chế đặc biệt
|
|
46
|
+
|
|
47
|
+
- **Risk-based** — kế hoạch bám rủi ro, không phủ đều.
|
|
48
|
+
- **Câu hỏi cho dev** — kênh QC ↔ Dev có hồ sơ trước khi viết test.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 👓 Góc nhìn tối ưu
|
|
53
|
+
|
|
54
|
+
- **Trạm mỏng nhất** (~thin orchestrator + skill). Giá trị phụ thuộc chất lượng skill qa-planner.
|
|
55
|
+
- **Câu hỏi cho dev** không có cơ chế theo dõi trả lời — dễ rơi. Cân nhắc gắn vào DOC_GAPS/feedback.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Kết nối
|
|
60
|
+
|
|
61
|
+
**Trước:** [`/qc-analyze`](15-qc-analyze.md) · **Sau:** [`/qc-design-test`](17-qc-design-test.md).
|