@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,61 @@
|
|
|
1
|
+
[← /qc-plan](16-qc-plan.md) · [Explain Home](README.md) · [Next: /qc-review →](18-qc-review.md)
|
|
2
|
+
|
|
3
|
+
# 17 · `/qc-design-test` — Trạm 3: Thiết kế test case (Markdown)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Thiết kế **test case dạng Markdown** (`.Test.md`) từ plan — chưa sinh Python; script đến sau ở `/qc-run-test`.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Tách "thiết kế test case" (con người đọc/review được) khỏi "code test" (máy chạy). `.Test.md` là bản thiết kế mà `/qc-review` duyệt và `/qc-run-test` biến thành script.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase QC (trạm 3), sau `/qc-plan`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Input / Output
|
|
22
|
+
|
|
23
|
+
**Input:** TEST_PLAN.md + skill `qa-designer` (chọn layer, nạp MỘT file).
|
|
24
|
+
|
|
25
|
+
**Output:** `{qc_dir}/{UC-ID}/{platform}/test-cases/*.Test.md` (trace mapping bắt buộc).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Các bước xử lý (chi tiết)
|
|
30
|
+
|
|
31
|
+
1. **Role qa-designer** — chọn layer, nạp một file skill (không nạp cả bộ → tiết kiệm context).
|
|
32
|
+
2. **Conventions** — theo quy ước test-case của QC team.
|
|
33
|
+
3. **Trace mapping (bắt buộc)** — mỗi test case ↔ SC.
|
|
34
|
+
4. **Output** `.Test.md`.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Checkpoint & Gate
|
|
39
|
+
|
|
40
|
+
- Không gate ở đây; gate là `/qc-review` kế tiếp.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Cơ chế đặc biệt
|
|
45
|
+
|
|
46
|
+
- **Markdown-first** — test case là tài liệu review được trước khi thành code.
|
|
47
|
+
- **Nạp MỘT file skill theo layer** — tối ưu context (chỉ layer cần).
|
|
48
|
+
- **Trace mapping** — giữ test case gắn SC để về sau ghi `qc_status` đúng.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 👓 Góc nhìn tối ưu
|
|
53
|
+
|
|
54
|
+
- **Tách design ↔ script** thêm một trạm nhưng cho phép review sớm — đánh đổi giữa số bước và chất lượng gate.
|
|
55
|
+
- **Phụ thuộc convention QC team** — cần đồng bộ khi convention đổi.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Kết nối
|
|
60
|
+
|
|
61
|
+
**Trước:** [`/qc-plan`](16-qc-plan.md) · **Sau:** [`/qc-review`](18-qc-review.md) (review test case).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
[← /qc-design-test](17-qc-design-test.md) · [Explain Home](README.md) · [Next: /qc-run-test →](19-qc-run-test.md)
|
|
2
|
+
|
|
3
|
+
# 18 · `/qc-review` — Trạm 4: Cổng review hai chiều (test case & script)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Gate chất lượng của QC: review **test case** (sau design-test) VÀ **script** (sau run-test) — chạy ở hai thời điểm trong dây chuyền.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Không chạy test kém. Trạm này chặn: (1) test case chưa đủ tốt trước khi biến thành script; (2) script chưa đúng trước khi coi kết quả là chính thức.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase QC (trạm 4) — **hai lần**: sau `/qc-design-test` (review case) và sau `/qc-run-test` (review script).
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Input / Output
|
|
22
|
+
|
|
23
|
+
**Input:** `.Test.md` (case) hoặc script Python (script) + skill `qa-reviewer`.
|
|
24
|
+
|
|
25
|
+
**Output:** verdict APPROVED / NEEDS_FIX + findings review.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Các bước xử lý (chi tiết)
|
|
30
|
+
|
|
31
|
+
1. **Role qa-reviewer** — nạp `{qc_skills_dir}/qa-reviewer/`.
|
|
32
|
+
2. **Review focus** — kiểm test case (đủ phủ, đúng SC) hoặc script (đúng logic, selector, không fake-pass).
|
|
33
|
+
3. Verdict: APPROVED → đi tiếp; NEEDS_FIX → sửa rồi review lại.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Checkpoint & Gate
|
|
38
|
+
|
|
39
|
+
- 🛑 **Cổng hai chiều** — chặn `/qc-run-test` (nếu case chưa duyệt) và chặn tạo PR (nếu script chưa duyệt).
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Cơ chế đặc biệt
|
|
44
|
+
|
|
45
|
+
- **Một lệnh, hai vai** — review case và review script dùng chung skill, khác focus.
|
|
46
|
+
- **Gate thật của QC** — điểm HITL chính trong dây chuyền tự động.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 👓 Góc nhìn tối ưu
|
|
51
|
+
|
|
52
|
+
- **Chạy 2 lần cùng một lệnh** — người dùng phải nhớ gọi đúng thời điểm. Footer "Next" hướng dẫn, nhưng dễ nhầm. Cân nhắc tách rõ hoặc auto-detect giai đoạn.
|
|
53
|
+
- **Verdict thủ công** — phụ thuộc reviewer; không có findings-file có mã như review-context. Đáng xem có nên chuẩn hoá.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Kết nối
|
|
58
|
+
|
|
59
|
+
**Trước:** [`/qc-design-test`](17-qc-design-test.md) (case) / [`/qc-run-test`](19-qc-run-test.md) (script) · **Sau:** case APPROVED → [`/qc-run-test`](19-qc-run-test.md); script APPROVED → [`/qc-report`](20-qc-report.md) / PR.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
[← /qc-review](18-qc-review.md) · [Explain Home](README.md) · [Next: /qc-report →](20-qc-report.md)
|
|
2
|
+
|
|
3
|
+
# 19 · `/qc-run-test` — Trạm 5: Sinh & chạy Playwright, ghi `qc_status`
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Biến `.Test.md` đã review thành **Python pytest-playwright**, chạy thật, rồi ghi **`qc_status` chính thức** (có evidence) vào trace TSV.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Đây là nơi QC trở thành **chính thức**: chạy test thật trên Playwright, phân loại FAIL (script-bug vs product-gap, **không fake-pass**), và đóng dấu `qc_status` — trạng thái QC authoritative.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase QC (trạm 5), sau `/qc-review` (case APPROVED).
|
|
18
|
+
- **Stack:** module `qc-playwright` (Python + pytest-playwright + Page Object) — **độc lập** module dev.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** `.Test.md` đã review + skill `qa-runner` + selector (từ `/map-testids`).
|
|
25
|
+
|
|
26
|
+
**Output:** script Python + kết quả + cột `qc_status` trong `.trace/…/{UC-ID}-{platform}.tsv` + Panel Mirror.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Role & stack** — qc-playwright (`stack-profile.yaml`): Python, pytest-playwright fixture, Page Object; mỗi test độc lập; gom theo (role, account) để auth không xen kẽ.
|
|
33
|
+
2. **Skills** — nạp một file skill `qa-runner` theo layer.
|
|
34
|
+
3. **Sinh script** từ `.Test.md`; tag `@trace.verifies={UC-ID}-SC{N}`.
|
|
35
|
+
4. **Chạy** — phân loại mỗi FAIL: **script-bug** (fix selector/logic) vs **product-gap** (giữ FAIL + evidence, **không bao giờ fake-pass**).
|
|
36
|
+
5. **Write Trace State — `qc_status`** (kết quả QC chính thức).
|
|
37
|
+
6. **Refresh Panel Mirror** — Living Docs local.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Checkpoint & Gate
|
|
42
|
+
|
|
43
|
+
- Tiền đề: case đã APPROVED ở `/qc-review`. Script sinh ra → review lại ở `/qc-review` (script) trước PR.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Cơ chế đặc biệt
|
|
48
|
+
|
|
49
|
+
- **`qc_status` là trục authoritative** — khác `dev_selftest`; có evidence.
|
|
50
|
+
- **Không fake-pass** — product-gap giữ nguyên FAIL, đẩy về PO/Dev.
|
|
51
|
+
- **Stack QC tách hẳn dev** — `@trace.verifies` nối script ↔ SC.
|
|
52
|
+
- **`active_platform` khoá sổ trace** — `qc_status` ghi đúng `{UC-ID}-{platform}.tsv`.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 👓 Góc nhìn tối ưu
|
|
57
|
+
|
|
58
|
+
- **Trạm nặng nhất của QC** — sinh + chạy + phân loại + ghi trace. Chạy thật phụ thuộc môi trường (browser, data, service lên).
|
|
59
|
+
- **Phân loại script-bug vs product-gap phụ thuộc AI/reviewer** — sai loại → hoặc giấu lỗi sản phẩm hoặc báo nhầm. Đáng có tiêu chí rõ.
|
|
60
|
+
- **Selector phụ thuộc `/map-testids`** — nếu chưa map, script giòn.
|
|
61
|
+
- **Chạy lại tốn tài nguyên** — cân nhắc scoped run như dev-run-test.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Kết nối
|
|
66
|
+
|
|
67
|
+
**Trước:** [`/qc-review`](18-qc-review.md) (case) · **Sau:** [`/qc-report`](20-qc-report.md) rồi [`/qc-review`](18-qc-review.md) (script).
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
[← /qc-run-test](19-qc-run-test.md) · [Explain Home](README.md) · [Next: /validate-traces →](21-validate-traces.md)
|
|
2
|
+
|
|
3
|
+
# 20 · `/qc-report` — Trạm 6: Report + evidence + product-gap
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Trạm cuối QC: tổng hợp **report + evidence**, và đẩy **product-gap** (lỗi sản phẩm, không phải script) ngược về PO/Dev.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Kết quả chạy cần được trình bày có bằng chứng và **định tuyến đúng**: script-bug thì QC tự sửa, còn **product-gap** phải về tay PO/Dev. Trạm này đóng gói kết quả QC pass thành báo cáo.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase QC (trạm 6, cuối), sau `/qc-run-test`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Input / Output
|
|
22
|
+
|
|
23
|
+
**Input:** kết quả run + evidence + skill `qa-runner/report`.
|
|
24
|
+
|
|
25
|
+
**Output:** QC report + evidence; product-gap đẩy về PO/Dev.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Các bước xử lý (chi tiết)
|
|
30
|
+
|
|
31
|
+
1. **Role qa-runner/report** — nạp skill report.
|
|
32
|
+
2. **Procedure** — tổng hợp kết quả run (pass/fail per SC), đính evidence.
|
|
33
|
+
3. Tách **product-gap** → định tuyến về PO/Dev (có thể thành `/report-bug`).
|
|
34
|
+
4. **Output** report.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Checkpoint & Gate
|
|
39
|
+
|
|
40
|
+
- Không gate chặn — báo cáo + định tuyến.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Cơ chế đặc biệt
|
|
45
|
+
|
|
46
|
+
- **Product-gap routing** — khép vòng feedback: lỗi sản phẩm từ QC về đúng người quyết.
|
|
47
|
+
- **Evidence-first** — báo cáo kèm bằng chứng (khác dev smoke).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 👓 Góc nhìn tối ưu
|
|
52
|
+
|
|
53
|
+
- **Product-gap → PO/Dev** nhưng cơ chế nối với `/report-bug` không tự động — dễ đứt. Đáng tích hợp để gap thành bug spec-anchored có hồ sơ.
|
|
54
|
+
- **Report tách khỏi run** (trạm riêng) — linh hoạt nhưng thêm một lệnh phải nhớ gọi.
|
|
55
|
+
- **Sau report → `/validate-traces`** để làm mới Living Docs (`qc_status`) — chuỗi này phụ thuộc người chạy đủ.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Kết nối
|
|
60
|
+
|
|
61
|
+
**Trước:** [`/qc-run-test`](19-qc-run-test.md) · **Sau:** [`/validate-traces`](21-validate-traces.md) (làm mới Living Docs); product-gap → [`/report-bug`](25-report-bug.md).
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[← /qc-report](20-qc-report.md) · [Explain Home](README.md) · [Next: /generate-spec-manifest →](22-generate-spec-manifest.md)
|
|
2
|
+
|
|
3
|
+
# 21 · `/validate-traces` — Ma trận độ phủ spec ↔ code ↔ test
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Check **read-only** độ phủ giữa spec, code, test (gồm PRD version drift); phân loại mỗi SC và làm mới Living Docs. Không sửa gì.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Traceability chỉ có giá trị khi kiểm được. Command cho bức tranh toàn cục: SC nào có code, có test, hay còn hở — để không "tưởng xong mà chưa xong".
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** Phase Trace Audit (xuyên suốt).
|
|
18
|
+
- **Đặc biệt:** read-only — an toàn chạy bất kỳ lúc nào.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** `.trace/…/{UC-ID}-{platform}.tsv` + spec + code + test.
|
|
25
|
+
|
|
26
|
+
**Output:** ma trận coverage + `code_coverage`; làm mới Living Docs dashboard.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. Quét trace `.tsv` + đối chiếu spec/code/test.
|
|
33
|
+
2. Phân loại mỗi SC theo **thứ tự ưu tiên** (rule sớm thắng):
|
|
34
|
+
| # | Trạng thái | Điều kiện |
|
|
35
|
+
|---|-----------|-----------|
|
|
36
|
+
| 1 | UNTRACKED | `gen_ver == —` |
|
|
37
|
+
| 2 | DRIFT | có code + `spec_ver != gen_ver` |
|
|
38
|
+
| 3 | GAP | có code + `test_count == —/0` |
|
|
39
|
+
| 4 | OK | version khớp + có code + có test |
|
|
40
|
+
3. Dựng dashboard: `dev_selftest` (DEV smoke) **và** `qc_status` (QC chính thức) hiển thị cạnh nhau — **không merge**; cột `qc_owner` + `qc_blocked_by` ("Waiting on").
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Checkpoint & Gate
|
|
45
|
+
|
|
46
|
+
- ⚪ Read-only, không gate.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Cơ chế đặc biệt
|
|
51
|
+
|
|
52
|
+
- **DRIFT xét trước GAP** — code lỗi thời chưa test phải hiện DRIFT (regen) không phải GAP.
|
|
53
|
+
- **`dev_selftest` ≠ `qc_status`** — hai cột riêng, không trộn.
|
|
54
|
+
- **"Waiting on" column** — `qc_owner`/`qc_blocked_by` trả lời "case nào chờ ai".
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 👓 Góc nhìn tối ưu
|
|
59
|
+
|
|
60
|
+
- **Chỉ báo cáo, không hành động** — hành động ở `/generate-code` (regen DRIFT) & QC (bù GAP). Chuỗi phụ thuộc người chạy tiếp.
|
|
61
|
+
- **Nguồn sự thật của Living Docs** — chất lượng dashboard phụ thuộc `.tsv` được các lệnh code/test ghi đúng.
|
|
62
|
+
- **Là "single pane" để PM/PO nhìn trạng thái** — ứng viên tốt cho UI viewer (blueprint có gợi ý).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Kết nối
|
|
67
|
+
|
|
68
|
+
**Trước:** bất kỳ (đặc biệt sau [`/qc-report`](20-qc-report.md)) · **Sau:** DRIFT/UNTRACKED → [`/generate-code`](09-generate-code.md); GAP → [`/dev-gen-test`](12-dev-gen-test.md); OK → PR.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[← /validate-traces](21-validate-traces.md) · [Explain Home](README.md) · [Next: /fix-bug →](23-fix-bug.md)
|
|
2
|
+
|
|
3
|
+
# 22 · `/generate-spec-manifest` — Mục lục spec cho agent ngoài
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Sinh một **manifest** (mục lục máy-đọc) của mọi spec trong dự án, để agent/công cụ bên ngoài định vị PRD/BDD/tech-docs mà không phải quét cả repo.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Agent ngoài (hoặc lệnh khác) cần biết "có những spec nào, ở đâu, trạng thái gì" mà không đọc toàn bộ. Manifest là index tự sinh, luôn cập nhật khi chạy lại.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** xuyên suốt (thường sau `/sync`).
|
|
18
|
+
- **Đặc biệt:** file manifest **gitignored** (auto-generated, không commit).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** cây spec (`specs/{domain}/{prd-slug}/…`).
|
|
25
|
+
|
|
26
|
+
**Output:** `spec-manifest.yaml` (auto-generated, DO NOT edit; regenerate bằng chính lệnh này).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. Quét `specs/` theo bố cục feature-package.
|
|
33
|
+
2. Với mỗi feature: ghi domain, prd-slug, TICKET-ID, các artifact (PRD/BDD/tech-docs/design-spec), trạng thái.
|
|
34
|
+
3. Ghi `spec-manifest.yaml` với header "Auto-generated — do not commit".
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Checkpoint & Gate
|
|
39
|
+
|
|
40
|
+
- Không gate.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Cơ chế đặc biệt
|
|
45
|
+
|
|
46
|
+
- **Máy-đọc, gitignored** — index tái sinh, không phải nguồn chân lý (spec mới là nguồn).
|
|
47
|
+
- **Cho agent ngoài** — điểm tích hợp với công cụ/agent khác.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 👓 Góc nhìn tối ưu
|
|
52
|
+
|
|
53
|
+
- **Phải chạy lại để cập nhật** — dễ stale nếu quên. `/sync` Step 6 làm mới cho umbrella; single-service phải nhớ chạy tay.
|
|
54
|
+
- **Trùng vai với `/validate-traces`?** — validate-traces là trạng thái coverage; manifest là index vị trí. Khác mục đích nhưng cùng "bản đồ spec".
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Kết nối
|
|
59
|
+
|
|
60
|
+
**Trước:** [`/sync`](28-sync.md) hoặc bất kỳ · **Sau:** agent ngoài dùng manifest để định vị spec.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
[← /generate-spec-manifest](22-generate-spec-manifest.md) · [Explain Home](README.md) · [Next: /debug →](24-debug.md)
|
|
2
|
+
|
|
3
|
+
# 23 · `/fix-bug` — Workflow sửa bug đầy đủ
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Sửa bug **có kỷ luật**: truy root cause → fix (tag `@trace.fixes/root_cause/regression`) → regression test → build → commit (2 tầng ở umbrella) → đóng bug report → đề xuất lesson.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Sửa bug ad-hoc dễ tái phát và mất truy vết. Command áp một quy trình: hiểu gốc rễ, sửa có tag, thêm regression test để không lặp, và ghi lesson nếu là lỗi tái diễn.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** xuyên suốt (ngoài pipeline tuyến tính).
|
|
18
|
+
- **Đặc biệt:** một trong số ít lệnh được sinh code **không cần `.feature` backing** (bug fix).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** bug report spec-anchored (`{BUG-ID}`) hoặc mô tả lỗi + code liên quan.
|
|
25
|
+
|
|
26
|
+
**Output:** code fix (tag trace) + regression test + commit + bug report đóng.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Gate** — xác định service & code liên quan; tạo branch `fix/{TICKET}-{slug}`.
|
|
33
|
+
2. **Phase 2 · Root Cause Analysis** — truy nguyên nhân gốc (không vá triệu chứng).
|
|
34
|
+
3. **Phase 3 · Fix** — sửa; tag `@trace.fixes` / `@trace.root_cause` / `@trace.regression`.
|
|
35
|
+
4. **Phase 4 · Regression Test** — thêm test tái hiện bug để chống tái phát.
|
|
36
|
+
5. **Phase 5 · Build & Commit** — build verify; umbrella **push 2 tầng** (Tầng 1: fix branch trong service submodule nơi code sống; Tầng 2: umbrella pointer).
|
|
37
|
+
6. **Phase 5.5 · Đóng bug report** — nếu fix một `{BUG-ID}` đã file → cập nhật trạng thái.
|
|
38
|
+
7. **Phase 6 · Đề xuất Lesson** — nếu lỗi tái diễn → `capture-lesson` (L1–L5).
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Checkpoint & Gate
|
|
43
|
+
|
|
44
|
+
- Commit **sau khi user duyệt**.
|
|
45
|
+
- Build phải pass.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Cơ chế đặc biệt
|
|
50
|
+
|
|
51
|
+
- **Root cause bắt buộc** trước fix — chống vá triệu chứng.
|
|
52
|
+
- **Regression test bắt buộc** — mỗi bug fix để lại "bằng chứng chống tái phát".
|
|
53
|
+
- **Push 2 tầng umbrella** — code ở submodule, pointer ở umbrella.
|
|
54
|
+
- **Đóng bug report + đề xuất lesson** — khép vòng feedback.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 👓 Góc nhìn tối ưu
|
|
59
|
+
|
|
60
|
+
- **Sinh code không cần `.feature`** — ngoại lệ có chủ đích cho bug, nhưng nghĩa là fix có thể lệch spec. Đáng cân nhắc có nên yêu cầu cập nhật BDD nếu fix đổi hành vi.
|
|
61
|
+
- **Root cause phụ thuộc AI phân tích** — với bug phức tạp có thể cần `/debug` trước.
|
|
62
|
+
- **Push 2 tầng** dễ sai thứ tự (submodule trước, pointer sau) — điểm nhạy cảm.
|
|
63
|
+
- **Regression test có gắn `@trace.verifies` không?** — đáng đảm bảo để validate-traces thấy.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Kết nối
|
|
68
|
+
|
|
69
|
+
**Trước:** [`/report-bug`](25-report-bug.md) / [`/debug`](24-debug.md) / [`/dev-run-test`](13-dev-run-test.md) (fail) · **Sau:** tạo PR + link ticket; lỗi lặp → [`/learn`](27-learn.md).
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
[← /fix-bug](23-fix-bug.md) · [Explain Home](README.md) · [Next: /report-bug →](25-report-bug.md)
|
|
2
|
+
|
|
3
|
+
# 24 · `/debug` — Phân tích debug nhanh (read-only)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Phân tích lỗi (stack trace, error pattern, test failure) và đề xuất hướng sửa — **không sửa code**, chỉ chẩn đoán.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Trước khi sửa, cần hiểu lỗi. `/debug` phân tích nhanh nguyên nhân + vị trí + hướng fix, tách "hiểu lỗi" khỏi "sửa lỗi" (`/fix-bug`).
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** xuyên suốt.
|
|
18
|
+
- **Đặc biệt:** **read-only** — không sửa, không commit.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Input / Output
|
|
23
|
+
|
|
24
|
+
**Input:** mô tả lỗi / stack trace / test failure + `platform_type` + project lessons.
|
|
25
|
+
|
|
26
|
+
**Output:** báo cáo — Error · Root Cause · Location · Suggested Fix · Related Rule (`Output Artifacts: none (read-only)`).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Các bước xử lý (chi tiết)
|
|
31
|
+
|
|
32
|
+
1. **Stack Trace Analysis** — đọc stack trace, định vị.
|
|
33
|
+
2. **Common Error Patterns** — đối chiếu pattern lỗi quen thuộc theo platform.
|
|
34
|
+
3. **Test Failure Analysis** — nếu là test fail, phân tích nguyên nhân.
|
|
35
|
+
4. **Output** cấu trúc: Error / Root Cause / Location / Suggested Fix / Related Rule (trỏ rule/lesson liên quan).
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Checkpoint & Gate
|
|
40
|
+
|
|
41
|
+
- Read-only, không gate.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Cơ chế đặc biệt
|
|
46
|
+
|
|
47
|
+
- **Chẩn đoán theo platform** (`platform_type`) + đối chiếu **project lessons**.
|
|
48
|
+
- **Related Rule** — nối lỗi với rule/lesson đã có → học từ lịch sử.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 👓 Góc nhìn tối ưu
|
|
53
|
+
|
|
54
|
+
- **Read-only tách khỏi fix** — sạch về vai, nhưng người dùng phải chuyển sang `/fix-bug` thủ công. Có thể chuyển giao mượt hơn (truyền root cause sang fix-bug).
|
|
55
|
+
- **Common Error Patterns** — độ hữu ích phụ thuộc pattern có bám stack thực tế của dự án không.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Kết nối
|
|
60
|
+
|
|
61
|
+
**Trước:** lỗi bất kỳ / [`/dev-run-test`](13-dev-run-test.md) (fail) · **Sau:** cần sửa → [`/fix-bug`](23-fix-bug.md).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[← /debug](24-debug.md) · [Explain Home](README.md) · [Next: /propose-scenario →](26-propose-scenario.md)
|
|
2
|
+
|
|
3
|
+
# 25 · `/report-bug` — File bug có trace-spec (cho Tester & QC)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Ghi một bug **gắn spec** (AC bị vi phạm, layer khả nghi), backfill trace, và handoff để PO/Dev thực sự thấy.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Bug không gắn spec khó truy vết & regression. Command ép bug được neo vào UC/SC/AC cụ thể, phân loại layer khả nghi, và nổi lên đúng người — làm input chất lượng cho `/fix-bug`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** xuyên suốt (kênh feedback tester/QC), gồm cả product-gap từ `/qc-*`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Input / Output
|
|
22
|
+
|
|
23
|
+
**Input:** mô tả bug + UC/platform + spec context.
|
|
24
|
+
|
|
25
|
+
**Output:** `{bug_reports_dir}/{BUG-ID}.md` (spec-anchored) + backfill trace + handoff.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Các bước xử lý (chi tiết)
|
|
30
|
+
|
|
31
|
+
1. **Step 1 · Phân giải Spec Context** — định vị UC/SC/PRD liên quan.
|
|
32
|
+
2. **Step 2 · Thu thập chi tiết Bug** — hiện tượng, bước tái hiện, môi trường.
|
|
33
|
+
3. **Step 3 · Xác định AC bị vi phạm** — bug này vi phạm AC nào (neo nghiệp vụ).
|
|
34
|
+
4. **Step 4 · Phân loại Layer khả nghi (BUG_FLOW)** — đoán layer gây lỗi (FE/BE/data…).
|
|
35
|
+
5. **Step 5 · Ghi Report** — file `{BUG-ID}.md`.
|
|
36
|
+
6. **Step 5.5 · Backfill trace** — link pending-view (nối bug vào trace).
|
|
37
|
+
7. **Step 6 · Handoff** — nổi lên để PO/Dev thấy (qua `/sync`).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Checkpoint & Gate
|
|
42
|
+
|
|
43
|
+
- Không gate — kênh có hồ sơ.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Cơ chế đặc biệt
|
|
48
|
+
|
|
49
|
+
- **Spec-anchored** — bug neo AC/SC → `/fix-bug` có ngữ cảnh, regression đúng chỗ.
|
|
50
|
+
- **BUG_FLOW layer classification** — hướng dev tới layer khả nghi.
|
|
51
|
+
- **Backfill trace pending-view** — bug hiện trong dashboard trace.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 👓 Góc nhìn tối ưu
|
|
56
|
+
|
|
57
|
+
- **Product-gap từ `/qc-report` → `/report-bug`** không tự động — nối tay. Đáng tích hợp để gap thành bug spec-anchored liền mạch.
|
|
58
|
+
- **Handoff qua `/sync`** — nếu không chạy sync, feedback nằm im. Phụ thuộc nhịp vận hành.
|
|
59
|
+
- **Phân loại layer là phỏng đoán** — có thể sai; `/debug`/`/fix-bug` xác nhận lại.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Kết nối
|
|
64
|
+
|
|
65
|
+
**Trước:** QC/test phát hiện lỗi · **Sau:** [`/fix-bug {BUG-ID}`](23-fix-bug.md); thiếu coverage → [`/propose-scenario`](26-propose-scenario.md); nổi lên qua [`/sync`](28-sync.md).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
[← /report-bug](25-report-bug.md) · [Explain Home](README.md) · [Next: /learn →](27-learn.md)
|
|
2
|
+
|
|
3
|
+
# 26 · `/propose-scenario` — Đề xuất BDD scenario mới (cho Tester & QC)
|
|
4
|
+
|
|
5
|
+
> **Một câu.** Tester đề xuất một scenario còn thiếu; command quyết đây là **scenario mới** (draft) hay **thay đổi PRD** (change request), rồi ghi proposal để PO/Dev duyệt.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vấn đề giải quyết
|
|
10
|
+
|
|
11
|
+
Tester thấy coverage thủng nhưng không được sửa spec trực tiếp. Command cho họ kênh **đề xuất có hồ sơ**: nếu là scenario mới trong scope → draft; nếu chạm yêu cầu nghiệp vụ → PRD change request.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Vị trí & tiền đề
|
|
16
|
+
|
|
17
|
+
- **Vị trí:** xuyên suốt (kênh feedback tester/QC).
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Input / Output
|
|
22
|
+
|
|
23
|
+
**Input:** UC + platform + mô tả scenario thiếu.
|
|
24
|
+
|
|
25
|
+
**Output:** `{bdd_proposals_dir}/…` (Case A: scenario draft) hoặc PRD change request (Case B).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Các bước xử lý (chi tiết)
|
|
30
|
+
|
|
31
|
+
1. **Step 1 · Phân giải UC + Platform.**
|
|
32
|
+
2. **Step 2 · Quyết định Coverage (CRITICAL)** — phân loại:
|
|
33
|
+
- **Case A** — scenario mới **trong scope** UC hiện tại → draft scenario.
|
|
34
|
+
- **Case B** — đòi hỏi **thay đổi yêu cầu nghiệp vụ** → **PRD Change Request** (không tự draft, đẩy về PO).
|
|
35
|
+
3. **Step 3 · Draft Scenario** (chỉ Case A) — viết Gherkin đề xuất.
|
|
36
|
+
4. **Step 4 · Ghi Proposal.**
|
|
37
|
+
5. **Step 5 · Handoff** — để PO/Dev thấy; `/generate-bdd` có thể incorporate proposal `accepted`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Checkpoint & Gate
|
|
42
|
+
|
|
43
|
+
- Không gate — đề xuất, PO/Dev quyết.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Cơ chế đặc biệt
|
|
48
|
+
|
|
49
|
+
- **Phân biệt scenario-gap vs PRD-change** — giữ ranh giới ai được đổi gì (tester không tự đổi yêu cầu nghiệp vụ).
|
|
50
|
+
- **Proposal `accepted` chảy ngược vào `/generate-bdd`** — khép vòng.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 👓 Góc nhìn tối ưu
|
|
55
|
+
|
|
56
|
+
- **Quyết định Case A/B là điểm phán đoán** — sai hướng thì hoặc phình scope BDD hoặc bỏ sót đổi PRD. Tiêu chí rõ quan trọng.
|
|
57
|
+
- **Nối với `/generate-bdd` incorporate** phụ thuộc trạng thái `accepted` được cập nhật — quy trình duyệt cần rõ.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Kết nối
|
|
62
|
+
|
|
63
|
+
**Trước:** tester thấy coverage thiếu · **Sau:** PO/Dev review proposal; Case A accepted → [`/generate-bdd`](06-generate-bdd.md); Case B → [`/refine-prd`](03-refine-prd.md)/PRD.
|