@educa-corp/sdd-framework 0.4.2 → 0.5.0
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/bin/self-check.js +124 -6
- package/bin/trace-schema.json +1199 -692
- package/commands/debug.md +3 -2
- package/commands/define-product.md +3 -2
- package/commands/dev-gen-test.md +37 -9
- package/commands/dev-run-test.md +37 -9
- package/commands/dev-smoke-test.md +3 -2
- package/commands/extend-prd.md +907 -0
- package/commands/extend-prd.tmpl +270 -0
- package/commands/fix-bug.md +37 -9
- package/commands/generate-architecture.md +3 -2
- package/commands/generate-bdd.md +56 -13
- package/commands/generate-bdd.tmpl +18 -3
- package/commands/generate-code.md +73 -16
- package/commands/generate-code.tmpl +36 -7
- package/commands/generate-design-spec.md +3 -2
- package/commands/generate-prd.md +28 -2
- package/commands/generate-prd.tmpl +25 -0
- package/commands/generate-spec-manifest.md +3 -2
- package/commands/generate-tech-docs.md +3 -2
- package/commands/learn.md +3 -2
- package/commands/map-testids.md +3 -2
- package/commands/propose-scenario.md +55 -3
- package/commands/propose-scenario.tmpl +52 -1
- package/commands/qc-analyze.md +3 -2
- package/commands/qc-design-test.md +4 -2
- package/commands/qc-design-test.tmpl +1 -0
- package/commands/qc-plan.md +3 -2
- package/commands/qc-report.md +3 -2
- package/commands/qc-review.md +3 -2
- package/commands/qc-run-test.md +50 -10
- package/commands/qc-run-test.tmpl +13 -1
- package/commands/refine-prd.md +3 -2
- package/commands/report-bug.md +3 -2
- package/commands/review-code.md +7 -5
- package/commands/review-code.tmpl +4 -3
- package/commands/review-context.md +6 -4
- package/commands/review-context.tmpl +3 -2
- package/commands/review-tech-docs.md +3 -2
- package/commands/setup-ai-first.md +3 -2
- package/commands/sync.md +40 -16
- package/commands/sync.tmpl +37 -14
- package/commands/update-framework.md +3 -2
- package/commands/validate-traces.md +318 -33
- package/commands/validate-traces.tmpl +315 -31
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +3 -2
- package/core/commands/define-product.md +3 -2
- package/core/commands/dev-gen-test.md +37 -9
- package/core/commands/dev-run-test.md +37 -9
- package/core/commands/dev-smoke-test.md +3 -2
- package/core/commands/extend-prd.md +907 -0
- package/core/commands/fix-bug.md +37 -9
- package/core/commands/generate-architecture.md +3 -2
- package/core/commands/generate-bdd.md +56 -13
- package/core/commands/generate-code.md +73 -16
- package/core/commands/generate-design-spec.md +3 -2
- package/core/commands/generate-prd.md +28 -2
- package/core/commands/generate-spec-manifest.md +3 -2
- package/core/commands/generate-tech-docs.md +3 -2
- package/core/commands/learn.md +3 -2
- package/core/commands/map-testids.md +3 -2
- package/core/commands/propose-scenario.md +55 -3
- package/core/commands/qc-analyze.md +3 -2
- package/core/commands/qc-design-test.md +4 -2
- package/core/commands/qc-plan.md +3 -2
- package/core/commands/qc-report.md +3 -2
- package/core/commands/qc-review.md +3 -2
- package/core/commands/qc-run-test.md +50 -10
- package/core/commands/refine-prd.md +3 -2
- package/core/commands/report-bug.md +3 -2
- package/core/commands/review-code.md +7 -5
- package/core/commands/review-context.md +6 -4
- package/core/commands/review-tech-docs.md +3 -2
- package/core/commands/setup-ai-first.md +3 -2
- package/core/commands/sync.md +40 -16
- package/core/commands/update-framework.md +3 -2
- package/core/commands/validate-traces.md +318 -33
- package/core/rules/workflow.md +18 -0
- package/core/steps/report-footer.md +3 -2
- package/core/steps/trace-mirror.md +34 -7
- package/core/templates/feature.template +1 -1
- package/docs/01-getting-started/installation.md +18 -1
- package/docs/01-getting-started/what-is-sdd.md +4 -2
- package/docs/02-concepts/architecture.md +27 -3
- package/docs/02-concepts/pipeline-steps/02-specification.md +39 -3
- package/docs/02-concepts/pipeline-steps/04-bdd.md +24 -2
- package/docs/02-concepts/pipeline-steps/05-tech-docs.md +18 -1
- package/docs/02-concepts/pipeline-steps/06-code.md +35 -4
- package/docs/02-concepts/pipeline-steps/09-validate-traces.md +137 -12
- package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +59 -3
- package/docs/02-concepts/roles-and-hitl.md +1 -1
- package/docs/02-concepts/traceability.md +126 -117
- package/docs/03-guides/developer.md +20 -4
- package/docs/03-guides/product-owner.md +72 -68
- package/docs/03-guides/tester-qa.md +81 -70
- package/docs/04-reference/commands.md +134 -105
- package/docs/04-reference/configuration.md +146 -94
- package/docs/04-reference/trace-schema.md +26 -9
- package/docs/explain/02-generate-prd.md +80 -78
- package/docs/explain/02b-extend-prd.md +125 -0
- package/docs/explain/03-refine-prd.md +86 -86
- package/docs/explain/04-review-context.md +18 -1
- package/docs/explain/06-generate-bdd.md +23 -0
- package/docs/explain/08-review-tech-docs.md +20 -5
- package/docs/explain/10-review-code.md +36 -2
- package/docs/explain/19-qc-run-test.md +87 -67
- package/docs/explain/21-validate-traces.md +74 -68
- package/docs/explain/23-fix-bug.md +19 -3
- package/docs/explain/26-propose-scenario.md +70 -63
- package/docs/explain/README.md +135 -134
- package/package.json +50 -50
- package/rules/workflow.md +18 -0
- package/steps/report-footer.md +3 -2
- package/steps/trace-mirror.md +34 -7
- package/templates/feature.template +1 -1
|
@@ -1,68 +1,74 @@
|
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
3
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- **
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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`; `trace-report.json` (ghi đè) + **`trace-history.jsonl`** (append 1 dòng delta — **phải commit**, không regenerate được); làm mới Living Docs dashboard.
|
|
27
|
+
|
|
28
|
+
**Flag:** `--realign-prd-version {UC-ID}` · `--realign-techdoc-revision {UC-ID}` — ngoại lệ có kiểm soát của "read-only": chỉ sửa **dòng `@trace.*`** trong code, **từ chối chạy** nếu UC đang `DRIFT`/`ORPHANED`.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Các bước xử lý (chi tiết)
|
|
33
|
+
|
|
34
|
+
1. Quét trace `.tsv` + đối chiếu spec/code/test.
|
|
35
|
+
2. Phân loại mỗi SC theo **thứ tự ưu tiên** (rule sớm thắng):
|
|
36
|
+
| # | Trạng thái | Điều kiện |
|
|
37
|
+
|---|-----------|-----------|
|
|
38
|
+
| 1 | UNTRACKED | `gen_ver == —` |
|
|
39
|
+
| 2 | DRIFT | có code + `spec_ver != gen_ver` |
|
|
40
|
+
| 3 | GAP | có code + `test_count == —/0` |
|
|
41
|
+
| 4 | OK | version khớp + có code + có test |
|
|
42
|
+
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"); map **`by_service`** (coverage theo từng đội — cột `service`).
|
|
43
|
+
4. **Lọc báo động oan (Step 4/5).** PRD và tech-doc là tài liệu **gộp** nhiều UC nhưng chỉ **một** số version — thêm UC7 làm mọi UC cũ lệch số dù không đổi một chữ. Đọc **scope của row changelog**: UC có trong danh sách → `PRD_DRIFT` 🟠 · không có → `PRD_STALE_REF` ⓘ (sạch bằng `--realign-*`) · row **mơ hồ** → 🟠 cho mọi UC (lưới an toàn).
|
|
44
|
+
5. **Step 5d — design-spec drift** *(chỉ FE/App)*: 2 chiều, design-spec→BDD và design-spec→code.
|
|
45
|
+
6. **Step 7b — hàng đợi**: đếm PRD change request còn `Open` kèm **số ngày chờ** (hàng đợi duy nhất không có lệnh nào quét lại mỗi lần chạy).
|
|
46
|
+
7. **Step 8c — nhật ký**: append delta vào `trace-history.jsonl` → in khối `📈 So lần chạy trước` (đo **tốc độ**, không chỉ trạng thái).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Checkpoint & Gate
|
|
51
|
+
|
|
52
|
+
- ⚪ Read-only, không gate.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Cơ chế đặc biệt
|
|
57
|
+
|
|
58
|
+
- **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.
|
|
59
|
+
- **`dev_selftest` ≠ `qc_status`** — hai cột riêng, không trộn.
|
|
60
|
+
- **"Waiting on" column** — `qc_owner`/`qc_blocked_by` trả lời "case nào chờ ai".
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 👓 Góc nhìn tối ưu
|
|
65
|
+
|
|
66
|
+
- **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.
|
|
67
|
+
- **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.
|
|
68
|
+
- **Là "single pane" để PM/PO nhìn trạng thái** — ứng viên tốt cho UI viewer (blueprint có gợi ý).
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Kết nối
|
|
73
|
+
|
|
74
|
+
**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.
|
|
@@ -33,9 +33,25 @@ Sửa bug ad-hoc dễ tái phát và mất truy vết. Command áp một quy tr
|
|
|
33
33
|
2. **Phase 2 · Root Cause Analysis** — truy nguyên nhân gốc (không vá triệu chứng).
|
|
34
34
|
3. **Phase 3 · Fix** — sửa; tag `@trace.fixes` / `@trace.root_cause` / `@trace.regression`.
|
|
35
35
|
4. **Phase 4 · Regression Test** — thêm test tái hiện bug để chống tái phát.
|
|
36
|
-
5. **Phase 5 ·
|
|
37
|
-
6. **Phase 5
|
|
38
|
-
7. **Phase
|
|
36
|
+
5. **Phase 4.5 · Cập nhật sổ trace** — regression test phải hiện lên coverage (xem dưới).
|
|
37
|
+
6. **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).
|
|
38
|
+
7. **Phase 5.5 · Đặt `🟡 Fixed`** — nếu fix một `{BUG-ID}` đã file. **Không** đặt `Closed` — bước đó thuộc `/qc-run-test`.
|
|
39
|
+
8. **Phase 6 · Đề xuất Lesson** — nếu lỗi tái diễn → `capture-lesson` (L1–L5).
|
|
40
|
+
|
|
41
|
+
### Phase 4.5 — vì sao `/fix-bug` phải ghi sổ trace
|
|
42
|
+
|
|
43
|
+
Đây từng là lệnh **duy nhất** sinh test mà không ghi `.tsv`. Hệ quả: `test_count` under-report vĩnh viễn → SC đứng `GAP` dù vừa có regression test → `/validate-traces` khuyên `/dev-gen-test` → dev sinh test **trùng**. Và `dev_selftest` giữ `pass` **cũ trên code đã đổi**.
|
|
44
|
+
|
|
45
|
+
| Cột | Ghi gì |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `test_count` | **+=** số test regression (cộng dồn, không ghi đè) |
|
|
48
|
+
| `test_classes` | **append** tên class mới, giữ tên cũ |
|
|
49
|
+
| `dev_selftest` → `not_run` · `dev_selftest_at` → `—` | code vừa đổi nên tín hiệu self-test cũ hết hiệu lực |
|
|
50
|
+
| `last_updated` | hôm nay |
|
|
51
|
+
|
|
52
|
+
**Hai nhóm cột cấm đụng:** `qc_*` (QC sở hữu — `/qc-run-test` flip khi re-verify **và** chính nó đóng bug) · `spec_ver`/`gen_ver` (**fix bug không đổi spec** — đụng vào là tạo `DRIFT` giả).
|
|
53
|
+
|
|
54
|
+
Vì `dev_selftest` bị reset, Next của lệnh là **`/dev-run-test`** để lấy lại tín hiệu xanh, rồi mới tạo PR.
|
|
39
55
|
|
|
40
56
|
---
|
|
41
57
|
|
|
@@ -1,63 +1,70 @@
|
|
|
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
|
|
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.
|
|
64
|
+
|
|
65
|
+
| Case | Đi đâu | Ai lấy ra |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| **A** — thiếu scenario cho AC đã có | `feedback/bdd-proposals/` | [`/generate-bdd`](06-generate-bdd.md) quét thư mục **mỗi lần chạy**, chèn khi `Status: accepted` |
|
|
68
|
+
| **B** — requirement MỚI | `feedback/prd-change-requests/` | [`/extend-prd`](02b-extend-prd.md) — **không** phải `/refine-prd` (lệnh đó không thêm được AC mới) |
|
|
69
|
+
|
|
70
|
+
> Case B **không tự vào BDD được**: scenario chưa có AC để trace tới. Nó chỉ xuất hiện sau khi PO đưa requirement vào PRD rồi chạy lại `/generate-bdd`. Và vì chưa có AC, **không cờ trace nào bắt được** thiếu sót này — theo mọi thước đo coverage thì hành vi đó *không tồn tại*. Đó là lý do [`/validate-traces`](21-validate-traces.md) Step 7b phải đếm và nhắc lại kèm số ngày chờ.
|
package/docs/explain/README.md
CHANGED
|
@@ -1,134 +1,135 @@
|
|
|
1
|
-
# 🔬 Explain — Giải phẫu từng command (Command Deep-Dive)
|
|
2
|
-
|
|
3
|
-
> Tài liệu **đi sâu vào bên trong** từng command của pipeline, theo đúng thứ tự thực thi. Mục tiêu: làm **cơ sở review, phân tích và tối ưu** các bước trong pipeline.
|
|
4
|
-
>
|
|
5
|
-
> Khác với [Pipeline Steps](../02-concepts/pipeline-steps/) (tầng khái niệm, gom theo phase), thư mục này bám **logic thực tế trong command file** (`commands/*.md`) — từng bước command làm gì, giải quyết vấn đề gì, và **điểm nào đáng cân nhắc tối ưu**.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Cách đọc (How to read)
|
|
10
|
-
|
|
11
|
-
Mỗi trang command theo cùng một khuôn:
|
|
12
|
-
|
|
13
|
-
| Mục | Nội dung |
|
|
14
|
-
|-----|----------|
|
|
15
|
-
| **Một câu** | Command làm gì |
|
|
16
|
-
| **Vấn đề giải quyết** | Tại sao command này tồn tại |
|
|
17
|
-
| **Vị trí & tiền đề** | Chạy sau gì, cần gì mở khoá |
|
|
18
|
-
| **Input / Output** | Đầu vào & sản phẩm cụ thể |
|
|
19
|
-
| **Các bước xử lý** | ⭐ Đi từng bước bên trong, dễ hiểu |
|
|
20
|
-
| **Checkpoint & Gate** | Điểm dừng con người |
|
|
21
|
-
| **Cơ chế đặc biệt** | Phần logic riêng đáng chú ý |
|
|
22
|
-
| **👓 Góc nhìn tối ưu** | Điểm review/optimize: chi phí, rủi ro, phụ thuộc |
|
|
23
|
-
| **Kết nối** | Bước trước ← → bước sau |
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## ⭐ Bộ khung chung mọi command (Shared Skeleton)
|
|
28
|
-
|
|
29
|
-
**Đọc phần này trước.** Mọi command file được build từ `.tmpl` + `{{include:steps/*.md}}`, nên đều có **cùng một bộ khung** bao quanh logic riêng. Hiểu bộ khung một lần → các trang command chỉ cần nói phần **riêng**.
|
|
30
|
-
|
|
31
|
-
Cấu trúc một command file:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
┌─ Gate (steps/gate) ──────────── chung, giống hệt mọi lệnh
|
|
35
|
-
├─ Context Loader (steps/context-loader) ── chung, 7 bước
|
|
36
|
-
├─ Business Language Guard (steps/business-language) ── chung, chỉ lệnh viết doc nghiệp vụ
|
|
37
|
-
├─ ★ LOGIC RIÊNG CỦA LỆNH ★ ──── phần mỗi trang explain tập trung
|
|
38
|
-
└─ Report Footer (steps/report-footer) ── chung
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 1 · Gate — Cổng vào chuẩn (5 bước con)
|
|
42
|
-
|
|
43
|
-
Chạy **trước** mọi logic riêng:
|
|
44
|
-
|
|
45
|
-
| Bước | Tên | Việc | Ý nghĩa tối ưu |
|
|
46
|
-
|------|-----|------|----------------|
|
|
47
|
-
| 0 | **Sub-agent mode** | Nếu `$ARGUMENTS` là JSON có `_agent_mode` → bỏ Gate 1/2/3, chạy đúng phạm vi orchestrator giao (target_file, uc_id, uc_section, dimension) | Cơ chế fan-out per-UC dùng chính lệnh này làm "worker" |
|
|
48
|
-
| 0-B | **Model check** | Khuyến nghị Opus. `Y`=tiếp · `S`=bỏ qua (⚠️ report) · khác=DỪNG | Checkpoint mềm; sub-agent bỏ qua (orchestrator đã check) |
|
|
49
|
-
| 1 | **Target file** | Phân giải file mục tiêu từ path / UC-ID / ticket bằng glob theo bố cục feature-package; nhiều kết quả → hỏi | Điểm hay tốn 1 vòng hỏi khi `$ARGUMENTS` rỗng |
|
|
50
|
-
| 2 | **Context loader** | Chạy 7 bước nạp context (mục 2 dưới) | Nơi quyết định "đúng-đủ-gọn" — trọng tâm tối ưu |
|
|
51
|
-
| 3 | **CHECKPOINT** | Trình target + scope → chờ `Y` | Read-only command bỏ qua |
|
|
52
|
-
|
|
53
|
-
### 2 · Context Loader — "Thủ thư" (7 bước)
|
|
54
|
-
|
|
55
|
-
Nạp context theo thứ tự chống Lost-in-the-Middle (đầu = "build gì", giữa = ràng buộc, cuối = "follow style này"):
|
|
56
|
-
|
|
57
|
-
| Bước | Nạp gì | Ghi chú |
|
|
58
|
-
|------|--------|---------|
|
|
59
|
-
| 1 | **project-context.yaml** | tech_stack, conventions, domains, paths; trích `domain`/`prd_slug` từ path target |
|
|
60
|
-
| 1.5 | **Service routing** (umbrella) | Khớp domain → service; dạng phẳng (2a) hay map-theo-platform (2b); override paths sang `spec_source` |
|
|
61
|
-
| 1.6 | **Service conventions** (umbrella) | Nạp `build_command`/`test_command` riêng của service; set `service_root` |
|
|
62
|
-
| 2 | **Module stack-profile** | `.agent/modules/{module}/stack-profile.yaml` — layer/test pattern |
|
|
63
|
-
| 3 | **CLAUDE.md phân tầng** | root (BASE) + service overlay (stack) — **overlay thắng**; §2 layer/package, §3 naming, §5 error |
|
|
64
|
-
| 4 | **data-protection** | Pattern file nhạy cảm — cấm truy cập cả phiên |
|
|
65
|
-
| 5 | **Business dictionary** | Canonical + **banned terms** (thực thi chủ động) + enum registry |
|
|
66
|
-
| 6 | **Core entities** | Entity catalog + field registry + relationship map |
|
|
67
|
-
| 6.5 | **platform_type** | Suy `backend`/`web-frontend`/`mobile` từ module |
|
|
68
|
-
| 6.7 | **Project lessons** | Guardrail từ `/learn` — ràng buộc cứng ngang coding standards |
|
|
69
|
-
| 7 | **Recap** | In khối `[CTX LOADED]` — đẩy sự thật quan trọng lên cuối bộ nhớ |
|
|
70
|
-
|
|
71
|
-
> 👓 **Đây là component quyết định 80% chất lượng.** Khi review tối ưu: chú ý `required` vs `optional`, filter theo domain, và budget context (~50% window).
|
|
72
|
-
|
|
73
|
-
### 3 · Business Language Guard (chỉ lệnh viết doc nghiệp vụ)
|
|
74
|
-
|
|
75
|
-
Chặn thuật ngữ kỹ thuật rò vào PRD/BDD/product-definition. 4 nhóm xử lý: (1) tương tác/UI → diễn đạt lại nghiệp vụ · (2) visual thuần → chuyển Design Spec · (3) backend/contract → bỏ về Tech Docs · (4) ẩn dụ dữ liệu → xét ngữ cảnh (không thay máy móc). Áp cho `/define-product`, `/generate-prd`, `/refine-prd`, `/review-context`, `/generate-bdd`.
|
|
76
|
-
|
|
77
|
-
### 4 · Report Footer (mọi lệnh)
|
|
78
|
-
|
|
79
|
-
Kết thúc bằng: **Status badge** (✅/❌/⚠️) · **Output Artifacts** (file tạo/sửa) · **Pipeline Position** (`◀ bạn ở đây`) · **Next command** (gợi ý lệnh kế + tham số).
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Danh sách command theo thứ tự pipeline (Pipeline Order)
|
|
84
|
-
|
|
85
|
-
### Phase Setup & Discovery
|
|
86
|
-
- [00 · `/setup-ai-first`](00-setup-ai-first.md)
|
|
87
|
-
- [00b · `/generate-architecture`](00b-generate-architecture.md)
|
|
88
|
-
- [01 · `/define-product`](01-define-product.md)
|
|
89
|
-
|
|
90
|
-
### Phase Specification (PRD)
|
|
91
|
-
- [02 · `/generate-prd`](02-generate-prd.md)
|
|
92
|
-
- [
|
|
93
|
-
- [
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- [
|
|
98
|
-
- [
|
|
99
|
-
- [
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- [
|
|
104
|
-
- [
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- [
|
|
109
|
-
- [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
- [
|
|
114
|
-
- [
|
|
115
|
-
- [
|
|
116
|
-
- [
|
|
117
|
-
- [
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
- [
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- [
|
|
126
|
-
- [
|
|
127
|
-
- [
|
|
128
|
-
- [
|
|
129
|
-
- [
|
|
130
|
-
- [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
1
|
+
# 🔬 Explain — Giải phẫu từng command (Command Deep-Dive)
|
|
2
|
+
|
|
3
|
+
> Tài liệu **đi sâu vào bên trong** từng command của pipeline, theo đúng thứ tự thực thi. Mục tiêu: làm **cơ sở review, phân tích và tối ưu** các bước trong pipeline.
|
|
4
|
+
>
|
|
5
|
+
> Khác với [Pipeline Steps](../02-concepts/pipeline-steps/) (tầng khái niệm, gom theo phase), thư mục này bám **logic thực tế trong command file** (`commands/*.md`) — từng bước command làm gì, giải quyết vấn đề gì, và **điểm nào đáng cân nhắc tối ưu**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Cách đọc (How to read)
|
|
10
|
+
|
|
11
|
+
Mỗi trang command theo cùng một khuôn:
|
|
12
|
+
|
|
13
|
+
| Mục | Nội dung |
|
|
14
|
+
|-----|----------|
|
|
15
|
+
| **Một câu** | Command làm gì |
|
|
16
|
+
| **Vấn đề giải quyết** | Tại sao command này tồn tại |
|
|
17
|
+
| **Vị trí & tiền đề** | Chạy sau gì, cần gì mở khoá |
|
|
18
|
+
| **Input / Output** | Đầu vào & sản phẩm cụ thể |
|
|
19
|
+
| **Các bước xử lý** | ⭐ Đi từng bước bên trong, dễ hiểu |
|
|
20
|
+
| **Checkpoint & Gate** | Điểm dừng con người |
|
|
21
|
+
| **Cơ chế đặc biệt** | Phần logic riêng đáng chú ý |
|
|
22
|
+
| **👓 Góc nhìn tối ưu** | Điểm review/optimize: chi phí, rủi ro, phụ thuộc |
|
|
23
|
+
| **Kết nối** | Bước trước ← → bước sau |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## ⭐ Bộ khung chung mọi command (Shared Skeleton)
|
|
28
|
+
|
|
29
|
+
**Đọc phần này trước.** Mọi command file được build từ `.tmpl` + `{{include:steps/*.md}}`, nên đều có **cùng một bộ khung** bao quanh logic riêng. Hiểu bộ khung một lần → các trang command chỉ cần nói phần **riêng**.
|
|
30
|
+
|
|
31
|
+
Cấu trúc một command file:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
┌─ Gate (steps/gate) ──────────── chung, giống hệt mọi lệnh
|
|
35
|
+
├─ Context Loader (steps/context-loader) ── chung, 7 bước
|
|
36
|
+
├─ Business Language Guard (steps/business-language) ── chung, chỉ lệnh viết doc nghiệp vụ
|
|
37
|
+
├─ ★ LOGIC RIÊNG CỦA LỆNH ★ ──── phần mỗi trang explain tập trung
|
|
38
|
+
└─ Report Footer (steps/report-footer) ── chung
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 1 · Gate — Cổng vào chuẩn (5 bước con)
|
|
42
|
+
|
|
43
|
+
Chạy **trước** mọi logic riêng:
|
|
44
|
+
|
|
45
|
+
| Bước | Tên | Việc | Ý nghĩa tối ưu |
|
|
46
|
+
|------|-----|------|----------------|
|
|
47
|
+
| 0 | **Sub-agent mode** | Nếu `$ARGUMENTS` là JSON có `_agent_mode` → bỏ Gate 1/2/3, chạy đúng phạm vi orchestrator giao (target_file, uc_id, uc_section, dimension) | Cơ chế fan-out per-UC dùng chính lệnh này làm "worker" |
|
|
48
|
+
| 0-B | **Model check** | Khuyến nghị Opus. `Y`=tiếp · `S`=bỏ qua (⚠️ report) · khác=DỪNG | Checkpoint mềm; sub-agent bỏ qua (orchestrator đã check) |
|
|
49
|
+
| 1 | **Target file** | Phân giải file mục tiêu từ path / UC-ID / ticket bằng glob theo bố cục feature-package; nhiều kết quả → hỏi | Điểm hay tốn 1 vòng hỏi khi `$ARGUMENTS` rỗng |
|
|
50
|
+
| 2 | **Context loader** | Chạy 7 bước nạp context (mục 2 dưới) | Nơi quyết định "đúng-đủ-gọn" — trọng tâm tối ưu |
|
|
51
|
+
| 3 | **CHECKPOINT** | Trình target + scope → chờ `Y` | Read-only command bỏ qua |
|
|
52
|
+
|
|
53
|
+
### 2 · Context Loader — "Thủ thư" (7 bước)
|
|
54
|
+
|
|
55
|
+
Nạp context theo thứ tự chống Lost-in-the-Middle (đầu = "build gì", giữa = ràng buộc, cuối = "follow style này"):
|
|
56
|
+
|
|
57
|
+
| Bước | Nạp gì | Ghi chú |
|
|
58
|
+
|------|--------|---------|
|
|
59
|
+
| 1 | **project-context.yaml** | tech_stack, conventions, domains, paths; trích `domain`/`prd_slug` từ path target |
|
|
60
|
+
| 1.5 | **Service routing** (umbrella) | Khớp domain → service; dạng phẳng (2a) hay map-theo-platform (2b); override paths sang `spec_source` |
|
|
61
|
+
| 1.6 | **Service conventions** (umbrella) | Nạp `build_command`/`test_command` riêng của service; set `service_root` |
|
|
62
|
+
| 2 | **Module stack-profile** | `.agent/modules/{module}/stack-profile.yaml` — layer/test pattern |
|
|
63
|
+
| 3 | **CLAUDE.md phân tầng** | root (BASE) + service overlay (stack) — **overlay thắng**; §2 layer/package, §3 naming, §5 error |
|
|
64
|
+
| 4 | **data-protection** | Pattern file nhạy cảm — cấm truy cập cả phiên |
|
|
65
|
+
| 5 | **Business dictionary** | Canonical + **banned terms** (thực thi chủ động) + enum registry |
|
|
66
|
+
| 6 | **Core entities** | Entity catalog + field registry + relationship map |
|
|
67
|
+
| 6.5 | **platform_type** | Suy `backend`/`web-frontend`/`mobile` từ module |
|
|
68
|
+
| 6.7 | **Project lessons** | Guardrail từ `/learn` — ràng buộc cứng ngang coding standards |
|
|
69
|
+
| 7 | **Recap** | In khối `[CTX LOADED]` — đẩy sự thật quan trọng lên cuối bộ nhớ |
|
|
70
|
+
|
|
71
|
+
> 👓 **Đây là component quyết định 80% chất lượng.** Khi review tối ưu: chú ý `required` vs `optional`, filter theo domain, và budget context (~50% window).
|
|
72
|
+
|
|
73
|
+
### 3 · Business Language Guard (chỉ lệnh viết doc nghiệp vụ)
|
|
74
|
+
|
|
75
|
+
Chặn thuật ngữ kỹ thuật rò vào PRD/BDD/product-definition. 4 nhóm xử lý: (1) tương tác/UI → diễn đạt lại nghiệp vụ · (2) visual thuần → chuyển Design Spec · (3) backend/contract → bỏ về Tech Docs · (4) ẩn dụ dữ liệu → xét ngữ cảnh (không thay máy móc). Áp cho `/define-product`, `/generate-prd`, `/refine-prd`, `/review-context`, `/generate-bdd`.
|
|
76
|
+
|
|
77
|
+
### 4 · Report Footer (mọi lệnh)
|
|
78
|
+
|
|
79
|
+
Kết thúc bằng: **Status badge** (✅/❌/⚠️) · **Output Artifacts** (file tạo/sửa) · **Pipeline Position** (`◀ bạn ở đây`) · **Next command** (gợi ý lệnh kế + tham số).
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Danh sách command theo thứ tự pipeline (Pipeline Order)
|
|
84
|
+
|
|
85
|
+
### Phase Setup & Discovery
|
|
86
|
+
- [00 · `/setup-ai-first`](00-setup-ai-first.md)
|
|
87
|
+
- [00b · `/generate-architecture`](00b-generate-architecture.md)
|
|
88
|
+
- [01 · `/define-product`](01-define-product.md)
|
|
89
|
+
|
|
90
|
+
### Phase Specification (PRD)
|
|
91
|
+
- [02 · `/generate-prd`](02-generate-prd.md)
|
|
92
|
+
- [02b · `/extend-prd`](02b-extend-prd.md) — thêm yêu cầu vào PRD **đã duyệt**
|
|
93
|
+
- [03 · `/refine-prd`](03-refine-prd.md)
|
|
94
|
+
- [04 · `/review-context`](04-review-context.md) *(dùng cho cả PRD & BDD)*
|
|
95
|
+
|
|
96
|
+
### Phase Design
|
|
97
|
+
- [05 · `/generate-design-spec`](05-generate-design-spec.md)
|
|
98
|
+
- [06 · `/generate-bdd`](06-generate-bdd.md)
|
|
99
|
+
- [07 · `/generate-tech-docs`](07-generate-tech-docs.md)
|
|
100
|
+
- [08 · `/review-tech-docs`](08-review-tech-docs.md)
|
|
101
|
+
|
|
102
|
+
### Phase Implementation
|
|
103
|
+
- [09 · `/generate-code`](09-generate-code.md)
|
|
104
|
+
- [10 · `/review-code`](10-review-code.md)
|
|
105
|
+
- [11 · `/map-testids`](11-map-testids.md)
|
|
106
|
+
|
|
107
|
+
### Phase Dev Self-Test
|
|
108
|
+
- [12 · `/dev-gen-test`](12-dev-gen-test.md)
|
|
109
|
+
- [13 · `/dev-run-test`](13-dev-run-test.md)
|
|
110
|
+
- [14 · `/dev-smoke-test`](14-dev-smoke-test.md)
|
|
111
|
+
|
|
112
|
+
### Phase QC Automation
|
|
113
|
+
- [15 · `/qc-analyze`](15-qc-analyze.md)
|
|
114
|
+
- [16 · `/qc-plan`](16-qc-plan.md)
|
|
115
|
+
- [17 · `/qc-design-test`](17-qc-design-test.md)
|
|
116
|
+
- [18 · `/qc-review`](18-qc-review.md)
|
|
117
|
+
- [19 · `/qc-run-test`](19-qc-run-test.md)
|
|
118
|
+
- [20 · `/qc-report`](20-qc-report.md)
|
|
119
|
+
|
|
120
|
+
### Phase Trace & Quality
|
|
121
|
+
- [21 · `/validate-traces`](21-validate-traces.md)
|
|
122
|
+
- [22 · `/generate-spec-manifest`](22-generate-spec-manifest.md)
|
|
123
|
+
|
|
124
|
+
### Lệnh xuyên suốt (Cross-cutting)
|
|
125
|
+
- [23 · `/fix-bug`](23-fix-bug.md)
|
|
126
|
+
- [24 · `/debug`](24-debug.md)
|
|
127
|
+
- [25 · `/report-bug`](25-report-bug.md)
|
|
128
|
+
- [26 · `/propose-scenario`](26-propose-scenario.md)
|
|
129
|
+
- [27 · `/learn`](27-learn.md)
|
|
130
|
+
- [28 · `/sync`](28-sync.md)
|
|
131
|
+
- [29 · `/update-framework`](29-update-framework.md)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
*Nguồn: `commands/*.md` (build từ `.tmpl` + `steps/`). Khi command đổi, cập nhật trang tương ứng ở đây.*
|