@educa-corp/sdd-framework 0.8.1 → 0.9.1
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/lint-trace.js +200 -1
- package/bin/self-check.js +0 -146
- package/bin/trace-schema.json +12 -3
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-code.md +45 -2
- package/core/commands/propose-scenario.md +1 -1
- package/core/commands/qc-analyze.md +22 -260
- package/core/commands/qc-design-test.md +1 -1
- package/core/commands/qc-plan.md +4 -7
- package/core/commands/qc-run-test.md +1 -1
- package/core/commands/refine-prd.md +20 -47
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-context.md +1 -27
- package/core/commands/validate-traces.md +178 -3
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +2 -4
- package/core/skills/qc/qa-analyst/business-rules.md +4 -38
- package/core/skills/qc/qa-analyst/data-flow.md +3 -5
- package/core/skills/qc/qa-analyst/spec-breakdown.md +7 -9
- package/core/skills/qc/qa-designer/e2e/journey.md +2 -2
- package/core/skills/qc/qa-designer/exploratory/charter.md +1 -1
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
- package/core/skills/qc/qa-designer/functional/api.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-feature.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-screen.md +2 -2
- package/core/skills/qc/qa-designer/integration/api.md +2 -2
- package/core/skills/qc/qa-designer/integration/db.md +2 -2
- package/core/skills/qc/qa-designer/integration/gui.md +2 -2
- package/core/skills/qc/qa-designer/integration/kafka.md +2 -2
- package/core/skills/qc/qa-designer/non-functional.md +2 -2
- package/core/skills/qc/qa-planner/test-plan.md +10 -13
- package/core/skills/qc/qa-reviewer/script/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/script/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/script/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/script/integration.md +1 -1
- package/core/skills/qc/qa-reviewer/script/non-functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/integration.md +2 -2
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/e2e.md +1 -1
- package/core/skills/qc/qa-runner/exploratory/session.md +1 -1
- package/core/skills/qc/qa-runner/functional/api.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-feature.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-screen.md +1 -1
- package/core/skills/qc/qa-runner/integration.md +1 -1
- package/core/skills/qc/qa-runner/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/report/report.md +1 -1
- package/core/steps/review-fanout.md +1 -27
- package/core/templates/project-context.yaml +2 -2
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +2 -2
- package/docs/04-reference/commands.md +1 -1
- package/docs/explain/03-refine-prd.md +6 -8
- package/docs/explain/15-qc-analyze.md +7 -10
- package/docs/explain/16-qc-plan.md +2 -2
- package/package.json +3 -2
- package/bin/qc-base-map.json +0 -595
- package/core/skills/qc/qa-analyst/DOC_GAP.template.md +0 -117
- package/core/skills/qc/qa-analyst/exhaustive-gap-scanner.md +0 -174
- package/core/skills/qc/qa-analyst/spec-issue-reporter.md +0 -100
- package/core/skills/qc/qa-planner/risk-model.md +0 -106
- package/core/steps/gap-verify.md +0 -231
- package/docs/plans/qc-implementation-log.md +0 -1446
- package/docs/plans/qc-merge-plan.md +0 -502
- package/docs/plans/qc-sync-command.md +0 -358
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Integration Kafka (Message/Event)
|
|
@@ -18,7 +18,7 @@ Skill **tự chứa** để viết TC tích hợp qua Kafka: producer phát even
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAPS.md)`.
|
|
22
22
|
- **Test Data** dạng list (payload) · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet nêu **topic + field payload / hành vi consumer**.
|
|
23
23
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
24
24
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Test Case — Non-Functional
|
|
@@ -18,7 +18,7 @@ Trọng tâm "hệ thống hoạt động TỐT thế nào". Chỉ cần load fi
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Format file TC (bắt buộc)
|
|
21
|
-
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](
|
|
21
|
+
- Metadata **list**: Title · Feature · Priority · Status(Draft) · Author(AI) · Tags · **Trace** `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)` (không có → `⚠️ Chưa có Business Rule`) · **🚫 Block** `[GAP-xx](DOC_GAPS.md)`.
|
|
22
22
|
- **Test Data** dạng list · **Steps** `[Action]`/`[Verify]` · **Expected** 1 bullet có **ngưỡng đo cụ thể** (không "nhanh/ổn định").
|
|
23
23
|
- Cuối file: Trace matrix + bảng TC block · bỏ nội dung gạch ngang.
|
|
24
24
|
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
5
|
-
upstream_path: skills/qa-tc-analyst/test-plan.md
|
|
6
|
-
upstream_sha: f259b4d123c565a42ba6c6ec96980a8e4c66284f
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
7
5
|
---
|
|
8
6
|
|
|
9
7
|
# Lập Test Plan
|
|
@@ -12,15 +10,15 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
12
10
|
|
|
13
11
|
**Đầu vào (bắt buộc, chỉ 2 nguồn — đúng 2 file qa-analyst trả ra):**
|
|
14
12
|
1. `{paths.qc_dir}/{UC-ID}/REQUIREMENT_ANALYSIS.md` — chức năng, BR-xx, AC-xx, data flow (qa-analyst).
|
|
15
|
-
2. `{paths.qc_dir}/{UC-ID}/
|
|
13
|
+
2. `{paths.qc_dir}/{UC-ID}/DOC_GAPS.md` — bảng gap GAP-xx, mức độ, gap Blocker (qa-analyst).
|
|
16
14
|
|
|
17
15
|
## Khi nào trigger
|
|
18
16
|
- "lập test plan cho [Feature]" / "viết test plan"
|
|
19
|
-
- Sau khi qa-analyst xong (đã có REQUIREMENT_ANALYSIS +
|
|
17
|
+
- Sau khi qa-analyst xong (đã có REQUIREMENT_ANALYSIS + DOC_GAPS)
|
|
20
18
|
- Trước khi qa-designer thiết kế chi tiết TC — test plan là khung định hướng
|
|
21
19
|
|
|
22
20
|
## Khi KHÔNG trigger
|
|
23
|
-
- Chưa có REQUIREMENT_ANALYSIS /
|
|
21
|
+
- Chưa có REQUIREMENT_ANALYSIS / DOC_GAPS → chạy qa-analyst trước
|
|
24
22
|
- Thiết kế test case chi tiết (.Test.md) → dùng qa-designer
|
|
25
23
|
- Bóc tách yêu cầu/spec, lập danh sách gap → dùng qa-analyst
|
|
26
24
|
|
|
@@ -30,7 +28,7 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
30
28
|
|
|
31
29
|
1. Đọc `REQUIREMENT_ANALYSIS.md`: nắm chức năng, các BR-xx và AC-xx, data flow,
|
|
32
30
|
integration/failure point.
|
|
33
|
-
2. Đọc `
|
|
31
|
+
2. Đọc `DOC_GAPS.md`: lấy danh sách gap, đặc biệt **gap Blocker còn Open** → đây là
|
|
34
32
|
nguồn cho cột "Phụ thuộc" và cho Entry criteria.
|
|
35
33
|
3. Map mỗi nhóm BR sang **layer test** của qa-designer: functional/gui-screen,
|
|
36
34
|
gui-feature, api, integration, e2e/journey, non-functional.
|
|
@@ -49,8 +47,7 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
49
47
|
criteria yêu cầu đóng các gap đó trước khi thiết kế TC.
|
|
50
48
|
- Liệt kê **E2E journey** đầy đủ (mỗi journey: tiền điều kiện, kết quả/định tuyến kỳ
|
|
51
49
|
vọng, BR, phụ thuộc, priority) + bộ **verify point chung** sau submit.
|
|
52
|
-
- Mục Rủi ro:
|
|
53
|
-
rồi dùng mức đó chia độ sâu test. Đừng chấm thẳng ra P0/P1 theo cảm tính.
|
|
50
|
+
- Mục Rủi ro: rút trực tiếp từ gap Blocker + các BR logic phức tạp.
|
|
54
51
|
|
|
55
52
|
---
|
|
56
53
|
|
|
@@ -66,7 +63,7 @@ Tổng hợp **output của qa-analyst** thành **Test Plan** cho một feature.
|
|
|
66
63
|
| Feature / Project / Module | … |
|
|
67
64
|
| Người lập | qa-planner |
|
|
68
65
|
| Ngày / Phiên bản | … |
|
|
69
|
-
| Nguồn | REQUIREMENT_ANALYSIS ·
|
|
66
|
+
| Nguồn | REQUIREMENT_ANALYSIS · DOC_GAPS |
|
|
70
67
|
|
|
71
68
|
## 1. Mục tiêu
|
|
72
69
|
Mục tiêu test của feature (1–3 câu).
|
|
@@ -98,12 +95,12 @@ Kỹ thuật áp dụng: EP+BVA, Decision Table (cho logic điều kiện), stat
|
|
|
98
95
|
integration, negative/exploratory; tự động hoá theo `CLAUDE.md` (Playwright + pytest-playwright + Trace + pytest-html).
|
|
99
96
|
|
|
100
97
|
## 5. Tiêu chí Vào / Ra
|
|
101
|
-
- **Entry:** gap Blocker (trong
|
|
98
|
+
- **Entry:** gap Blocker (trong DOC_GAPS) đã Answered; doc phụ thuộc sẵn sàng; môi trường + tài khoản role.
|
|
102
99
|
- **Exit:** pass P0=100%, P1≥95%; không còn defect Blocker/Critical; mọi BR/AC được trace; báo cáo pytest-html + Playwright Trace.
|
|
103
100
|
|
|
104
101
|
## 6. Rủi ro (risk-based)
|
|
105
|
-
| Rủi ro |
|
|
106
|
-
(
|
|
102
|
+
| Rủi ro | Ảnh hưởng | Mức | Giảm thiểu |
|
|
103
|
+
(rút từ gap Blocker + BR logic phức tạp)
|
|
107
104
|
|
|
108
105
|
## 7. Dữ liệu & Môi trường
|
|
109
106
|
Tài khoản các role, dữ liệu mẫu (biên/edge), môi trường staging.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
version: 1.0
|
|
3
3
|
updated: 2026-06-11
|
|
4
|
-
ported_from:
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Review Test Case — Integration
|
|
@@ -21,7 +21,7 @@ Review bộ TC tích hợp (GUI↔Backend, API, DB) và đánh giá chất lư
|
|
|
21
21
|
## Phase 1 — Clarify
|
|
22
22
|
|
|
23
23
|
1. Đọc tất cả TC integration trong folder chỉ định; xác định loại: GUI↔Backend / API / DB
|
|
24
|
-
2. Đọc REQUIREMENT_ANALYSIS +
|
|
24
|
+
2. Đọc REQUIREMENT_ANALYSIS + DOC_GAPS nếu có
|
|
25
25
|
3. Xác định chuỗi tích hợp (caller → component → downstream)
|
|
26
26
|
|
|
27
27
|
---
|
|
@@ -8,11 +8,10 @@ vòng không sinh thêm gì mới, *trước khi* ghi file findings.
|
|
|
8
8
|
|
|
9
9
|
Lệnh gọi cung cấp hai thứ bắt buộc + hai tuỳ chọn:
|
|
10
10
|
- **DIMENSIONS** — danh sách các chiều review để fan out
|
|
11
|
-
(`/refine-prd` →
|
|
11
|
+
(`/refine-prd` → 3 lăng kính; `/review-context` → các P-check hoặc B-check).
|
|
12
12
|
- **FINDINGS SCHEMA** — dạng YAML mà mỗi finding phải theo (định nghĩa trong lệnh).
|
|
13
13
|
- **GRANULARITY** *(tuỳ chọn, mặc định `auto`)* — `auto`: chọn độ mịn fan-out theo bảng ngưỡng kích thước ở Phase 1 (hành vi cũ). `per-uc`: **LUÔN** fan-out theo từng UC, **bỏ qua ngưỡng** — dùng cho review cần độ đầy đủ cao (`/refine-prd` truyền cái này để lần đầu đã quét sâu). Lệnh không truyền → `auto` → hành vi không đổi.
|
|
14
14
|
- **CHANGED_SCOPE** *(tuỳ chọn)* — danh sách UC/section đã thay đổi (review **delta**). Nếu được truyền, Phase 1 chỉ fan-out trên các phạm vi này + PRD-global; Phase 2 critic vẫn quét **toàn doc** làm lưới an toàn. Không truyền → quét toàn bộ như thường.
|
|
15
|
-
- **VERIFY** *(tuỳ chọn, mặc định `off`)* — `on` chèn **Phase 2.5** (`steps/gap-verify.md`) giữa critic và dedup: mỗi finding phải mở lại tài liệu nguồn tự chứng minh trước khi được giữ. Không truyền → hành vi không đổi.
|
|
16
15
|
|
|
17
16
|
> **Bỏ qua ở chế độ sub-agent:** Nếu Gate Bước 0 đã set `_agent_mode: true`, toàn bộ
|
|
18
17
|
> quy trình này bị **bỏ qua** — orchestrator đã chạy sẵn một dimension/UC cho mỗi
|
|
@@ -131,31 +130,6 @@ Ghi lại `convergence_rounds` (số vòng critic đã chạy) cho report.
|
|
|
131
130
|
|
|
132
131
|
---
|
|
133
132
|
|
|
134
|
-
## Phase 2.5 — Thẩm định *(chỉ chạy khi `VERIFY = on`)*
|
|
135
|
-
|
|
136
|
-
**Vì sao có bước này.** Phase 1 và Phase 2 chỉ có **một chiều lực**: fan-out mở rộng bề
|
|
137
|
-
ngang, critic lặp cho tới khi không còn gì mới — cả hai đều hỏi *"còn thiếu gì nữa?"*.
|
|
138
|
-
Không có gì hỏi ngược lại *"cái vừa tìm ra có thật không?"*. Nên quy trình này đẩy **recall**
|
|
139
|
-
lên mà **không có gì kéo precision lại**, và càng lặp critic thì tỉ lệ finding bịa càng cao —
|
|
140
|
-
đúng thứ nó tự sinh ra: khẳng định hành vi tài liệu không nêu, trích evidence sai, hoặc gắn
|
|
141
|
-
nhãn vấn đề cho thứ thực ra là chuyện làm-kỹ-hơn.
|
|
142
|
-
|
|
143
|
-
Chạy `steps/gap-verify.md` trên `ALL_FINDINGS` với:
|
|
144
|
-
- `FINDINGS` = `ALL_FINDINGS` (sau Phase 2)
|
|
145
|
-
- `EVIDENCE_ROOT` = `{paths.specs_dir}` — hoặc giá trị lệnh gọi chỉ định
|
|
146
|
-
- `VERDICT_FIELD` = trường trạng thái của FINDINGS SCHEMA mà lệnh định nghĩa
|
|
147
|
-
- `RERATE` = `on`
|
|
148
|
-
|
|
149
|
-
Finding bị `❌ INVALID` / `⚠️ RECLASSIFY` / `🔁 MERGE` **không đi tiếp sang Phase 3** — nhưng
|
|
150
|
-
**KHÔNG bị xoá**: chúng vào file findings với trạng thái đóng + lý do, để người đọc kiểm chứng
|
|
151
|
-
được vì sao chúng bị loại. Ghi lại số liệu verdict cho report.
|
|
152
|
-
|
|
153
|
-
> **Chạy TRƯỚC Phase 3, không phải sau.** Dedup và giải quyết xung đột là việc tốn suy luận;
|
|
154
|
-
> làm nó trên một tập còn lẫn finding bịa là vừa phí, vừa nguy hiểm — một finding ảo có thể
|
|
155
|
-
> "thắng" một finding thật ở bước giữ-cái-severity-cao-hơn.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
133
|
## Phase 3 — Dedup, giải quyết xung đột, merge
|
|
160
134
|
|
|
161
135
|
Các sub-agent chạy **mù với nhau** (độc lập = độ phủ đa dạng). Chúng không bao giờ
|
|
@@ -63,14 +63,14 @@ paths:
|
|
|
63
63
|
refinement_dir: ".agent/review"
|
|
64
64
|
|
|
65
65
|
# QC's OWN analysis/design working docs (qc-analyze/plan/design-test outputs:
|
|
66
|
-
# REQUIREMENT_ANALYSIS.md,
|
|
66
|
+
# REQUIREMENT_ANALYSIS.md, DOC_GAPS.md, TEST_PLAN.md, test-cases/*.Test.md).
|
|
67
67
|
# One subfolder per UC: {qc_dir}/{UC-ID}/. Default "docs" (the QC team's own
|
|
68
68
|
# convention), VISIBLE — not hidden under .agent/. NOTE: specs (PRD / .feature /
|
|
69
69
|
# design-spec) are NOT here — they come from the PO spec submodule (spec_source).
|
|
70
70
|
qc_dir: "docs"
|
|
71
71
|
|
|
72
72
|
# WHERE the qc-* commands LOAD their skills from (qa-analyst / qa-designer / qa-planner
|
|
73
|
-
# / qa-reviewer / qa-runner +
|
|
73
|
+
# / qa-reviewer / qa-runner + DOC_GAPS.template.md). Default = the framework-bundled
|
|
74
74
|
# copy at .agent/skills/qc (works standalone). The QC team OWNS these skills in their
|
|
75
75
|
# canonical repo (ai-automation-qc-base) — point this at that repo/submodule (e.g.
|
|
76
76
|
# "qc-base/.claude/skills") so the skills evolve INDEPENDENTLY and are NOT overwritten
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
| Artifact | Nội dung |
|
|
40
40
|
|----------|----------|
|
|
41
|
-
| `docs/{UC-ID}/…` | `REQUIREMENT_ANALYSIS.md`, `
|
|
41
|
+
| `docs/{UC-ID}/…` | `REQUIREMENT_ANALYSIS.md`, `DOC_GAPS.md`, `TEST_PLAN.md`, `test-cases/*.Test.md` |
|
|
42
42
|
| Script Python pytest-playwright | Sinh từ `.Test.md` đã review |
|
|
43
43
|
| Cột `qc_status` trong `.trace/…/{UC-ID}-{platform}.tsv` | Trạng thái QC **chính thức** |
|
|
44
44
|
| Evidence + report | `/qc-report` — kèm product-gap đẩy về PO/Dev |
|
|
@@ -70,7 +70,7 @@ Dây chuyền **6 trạm**, output trạm trước là input trạm sau:
|
|
|
70
70
|
|
|
71
71
|
| # | Trạm | Việc |
|
|
72
72
|
|---|------|------|
|
|
73
|
-
| 1 | `/qc-analyze` | Phân rã yêu cầu + phát hiện **gap tài liệu** (`
|
|
73
|
+
| 1 | `/qc-analyze` | Phân rã yêu cầu + phát hiện **gap tài liệu** (`DOC_GAPS.md`) |
|
|
74
74
|
| 2 | `/qc-plan` | Đánh giá **rủi ro** + câu hỏi cho dev (`TEST_PLAN.md`) |
|
|
75
75
|
| 3 | `/qc-design-test` | Thiết kế **test case** dạng Markdown (`*.Test.md`) |
|
|
76
76
|
| 4 | `/qc-review` | 🛑 **Cổng review** hai chiều: test case & script trước khi chạy |
|
|
@@ -89,7 +89,7 @@ Mọi lệnh chạy chung một **Gate** (model check → target → context-loa
|
|
|
89
89
|
|
|
90
90
|
| Lệnh | Input | Output | Owner |
|
|
91
91
|
|------|-------|--------|-------|
|
|
92
|
-
| `/qc-analyze` | UC + spec | `REQUIREMENT_ANALYSIS.md`, `
|
|
92
|
+
| `/qc-analyze` | UC + spec | `REQUIREMENT_ANALYSIS.md`, `DOC_GAPS.md` | QA |
|
|
93
93
|
| `/qc-plan` | Analysis | `TEST_PLAN.md` (rủi ro) | QA |
|
|
94
94
|
| `/qc-design-test` | Plan | `test-cases/*.Test.md` | QA |
|
|
95
95
|
| `/qc-review` | Test case/script | 🛑 Cổng review | QA |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[← /extend-prd](02b-extend-prd.md) · [Explain Home](README.md) · [Next: /review-context →](04-review-context.md)
|
|
2
2
|
|
|
3
|
-
# 03 · `/refine-prd` — Tinh chỉnh PRD qua
|
|
3
|
+
# 03 · `/refine-prd` — Tinh chỉnh PRD qua 3 lăng kính
|
|
4
4
|
|
|
5
|
-
> **Một câu.** Fan-out review PRD qua **
|
|
5
|
+
> **Một câu.** Fan-out review PRD qua **3 lăng kính DEV / SA / PO**, chạy **vòng lặp completeness-critic** để hội tụ đầy đủ trong một lần, rồi sinh file findings cho PO accept/reject ở Review Board.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -33,10 +33,9 @@ Một lượt review đơn không bao giờ liệt kê hết vấn đề — mod
|
|
|
33
33
|
Chạy qua step **review-fanout** với tham số `GRANULARITY = per-uc`:
|
|
34
34
|
|
|
35
35
|
### Phase 1 — Fan-out song song theo dimension
|
|
36
|
-
- **DIMENSIONS =
|
|
36
|
+
- **DIMENSIONS = 3 lăng kính** (mỗi lăng kính một sub-agent, context window mới, quét toàn PRD chỉ qua lăng kính đó):
|
|
37
37
|
| Lăng kính | Soi gì |
|
|
38
38
|
|-----------|--------|
|
|
39
|
-
| **QA** (tầng nghiệm thu) *(bật 2026-08-25)* | AC có nêu **outcome quan sát/kiểm được** chưa? AC có lặp nội dung BR (trùng tầng) không? — hỏi về **HÌNH THỨC**, KHÔNG về nội dung thiếu |
|
|
40
39
|
| **DEV** (cơ chế nghiệp vụ) | BR + Business Logic đã đủ & không mơ hồ để build không phải đoán chưa? Nhánh nghiệp vụ thiếu, điều kiện biên, đường lỗi bỏ ngỏ |
|
|
41
40
|
| **SA** (thông suốt & nhất quán) | Luồng nghiệp vụ thông suốt trên cả feature/domain? Tương tác UC, quan hệ entity, vòng đời trạng thái, ai-làm-gì |
|
|
42
41
|
| **PO** | Scope khoanh vùng? Priority? Success metric? Rủi ro scope creep? |
|
|
@@ -67,8 +66,7 @@ Chạy qua step **review-fanout** với tham số `GRANULARITY = per-uc`:
|
|
|
67
66
|
|
|
68
67
|
## Cơ chế đặc biệt
|
|
69
68
|
|
|
70
|
-
- **
|
|
71
|
-
- **Không có `--fix` mode** (khác `/review-context`) — finding 4 lăng kính là phán đoán QA/DEV/SA/PO, **bắt buộc qua người** ở Board; `auto_fixable` chỉ là gợi ý quick-accept.
|
|
69
|
+
- **Không có `--fix` mode** (khác `/review-context`) — finding 3 lăng kính là phán đoán DEV/SA/PO, **bắt buộc qua người** ở Board; `auto_fixable` chỉ là gợi ý quick-accept.
|
|
72
70
|
- **`resolution_edge_cases`** — phân tích bậc-hai (chỉ critical/major): "nếu chốt phương án này thì đẻ ra edge case gì?" → PO thấy trước khi accept (advisory, không chặn).
|
|
73
71
|
- **QA lens đang DISABLED** (comment trong file) — có hướng dẫn bật lại nếu cần.
|
|
74
72
|
|
|
@@ -76,10 +74,10 @@ Chạy qua step **review-fanout** với tham số `GRANULARITY = per-uc`:
|
|
|
76
74
|
|
|
77
75
|
## 👓 Góc nhìn tối ưu
|
|
78
76
|
|
|
79
|
-
- **Đây là command tốn agent/token nhất phía thượng nguồn** — `per-uc` ×
|
|
77
|
+
- **Đây là command tốn agent/token nhất phía thượng nguồn** — `per-uc` × 3 lăng kính × (UC+1) + tới 3 vòng critic. `AGENT_CAP=12` là núm chỉnh chính. Với PRD lớn, đây là điểm cần cân đối chi phí ↔ độ đầy đủ.
|
|
80
78
|
- **Completeness-critic tới 3 vòng** — điểm đáng đo: thực tế hội tụ ở vòng mấy? Nếu thường 1–2 vòng thì cap 3 hợp lý.
|
|
81
79
|
- **Full/delta logic phức tạp** (`applied_to_version` tracking) — mạnh nhưng nhiều nhánh; dễ rơi về FULL khi có actor khác sửa PRD (vd `/review-context` xen giữa).
|
|
82
|
-
- **Ranh giới với `/review-context`** — cả hai đều review PRD, dùng chung review-fanout. `/refine-prd` = phán đoán chất lượng nghiệp vụ (
|
|
80
|
+
- **Ranh giới với `/review-context`** — cả hai đều review PRD, dùng chung review-fanout. `/refine-prd` = phán đoán chất lượng nghiệp vụ (3 lăng kính); `/review-context` = check có mã P0–P5 + auto-fix. Chồng lấn có chủ đích hay có thể gộp?
|
|
83
81
|
|
|
84
82
|
---
|
|
85
83
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# 15 · `/qc-analyze` — Trạm 1: Phân rã yêu cầu + gap tài liệu
|
|
4
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 **
|
|
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
6
|
|
|
7
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
8
|
|
|
@@ -26,7 +26,7 @@ QC chính thức cần hiểu yêu cầu **testable** trước khi viết test.
|
|
|
26
26
|
|
|
27
27
|
**Input:** UC-ID + spec (PRD/BDD từ spec repo) + skill `qa-analyst`.
|
|
28
28
|
|
|
29
|
-
**Output (per UC):** `{qc_dir}/{UC-ID}/{platform}/REQUIREMENT_ANALYSIS.md` + `
|
|
29
|
+
**Output (per UC):** `{qc_dir}/{UC-ID}/{platform}/REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`.
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
@@ -36,17 +36,14 @@ QC chính thức cần hiểu yêu cầu **testable** trước khi viết test.
|
|
|
36
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
37
|
3. **Role qa-analyst** — nạp skill `{qc_skills_dir}/qa-analyst/`.
|
|
38
38
|
4. **Trace mapping (bắt buộc)** — map yêu cầu ↔ scenario ↔ SC.
|
|
39
|
-
5. **
|
|
40
|
-
6. **Output** REQUIREMENT_ANALYSIS.md +
|
|
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
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
44
|
## Checkpoint & Gate
|
|
45
45
|
|
|
46
|
-
-
|
|
47
|
-
- Guard mềm (BDD approved) — cảnh báo, không chặn cứng; `--yes` coi như Y nhưng **vẫn in cảnh báo**.
|
|
48
|
-
- **Platform Resolution chạy TRƯỚC Guard** (sửa 2026-08-25): UC đa nền có nhiều `.feature`, mỗi bản
|
|
49
|
-
mang `@trace.status` riêng — kiểm duyệt trước khi biết platform là kiểm nhầm bản.
|
|
46
|
+
- Guard mềm (BDD approved). Không gate chặn.
|
|
50
47
|
|
|
51
48
|
---
|
|
52
49
|
|
|
@@ -54,13 +51,13 @@ QC chính thức cần hiểu yêu cầu **testable** trước khi viết test.
|
|
|
54
51
|
|
|
55
52
|
- **QC skill từ repo riêng** (`qc_skills_dir`) — QC team sở hữu, không bị framework upgrade ghi đè.
|
|
56
53
|
- **Platform khoá một lần** cho cả pass → nhất quán sổ trace.
|
|
57
|
-
- **
|
|
54
|
+
- **DOC_GAPS** — kênh QC phản hồi ngược chất lượng tài liệu (song song `/report-bug`).
|
|
58
55
|
|
|
59
56
|
---
|
|
60
57
|
|
|
61
58
|
## 👓 Góc nhìn tối ưu
|
|
62
59
|
|
|
63
|
-
- **
|
|
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.
|
|
64
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.
|
|
65
62
|
- **Phụ thuộc QC skill ngoài** — nếu `qc_skills_dir` trỏ sai/thiếu, trạm hụt logic.
|
|
66
63
|
|
|
@@ -15,7 +15,7 @@ Không phải mọi scenario rủi ro ngang nhau. Trạm này xếp ưu tiên te
|
|
|
15
15
|
## Vị trí & tiền đề
|
|
16
16
|
|
|
17
17
|
- **Vị trí:** Phase QC (trạm 2), sau `/qc-analyze`.
|
|
18
|
-
- **Tiền đề:** REQUIREMENT_ANALYSIS.md +
|
|
18
|
+
- **Tiền đề:** REQUIREMENT_ANALYSIS.md + DOC_GAPS.md; nên xử blocker 🔴 trước.
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -52,7 +52,7 @@ Không phải mọi scenario rủi ro ngang nhau. Trạm này xếp ưu tiên te
|
|
|
52
52
|
## 👓 Góc nhìn tối ưu
|
|
53
53
|
|
|
54
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
|
|
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
56
|
|
|
57
57
|
---
|
|
58
58
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@educa-corp/sdd-framework",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Spec Driven Development workflow framework for Claude Code",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sdd-framework": "./bin/index.js"
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"bin/",
|
|
22
22
|
"core/",
|
|
23
23
|
"scripts/",
|
|
24
|
-
"docs/"
|
|
24
|
+
"docs/",
|
|
25
|
+
"!docs/update-framework-daily-logs.md"
|
|
25
26
|
],
|
|
26
27
|
"keywords": [
|
|
27
28
|
"claude-code",
|