@educa-corp/sdd-framework 0.9.1 → 0.9.3
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/qc-base-map.json +595 -0
- package/bin/self-check.js +146 -0
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/propose-scenario.md +1 -1
- package/core/commands/qc-analyze.md +398 -37
- package/core/commands/qc-design-test.md +141 -2
- package/core/commands/qc-plan.md +159 -10
- package/core/commands/qc-review.md +134 -1
- package/core/commands/qc-run-test.md +135 -2
- package/core/commands/refine-prd.md +47 -20
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-context.md +27 -1
- package/core/modules/qc-playwright/stack-profile.yaml +3 -3
- package/core/skills/qc/qa-analyst/DOC_GAP.template.md +147 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +5 -3
- package/core/skills/qc/qa-analyst/business-rules.md +39 -5
- package/core/skills/qc/qa-analyst/data-flow.md +6 -4
- package/core/skills/qc/qa-analyst/exhaustive-gap-scanner.md +174 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +10 -8
- package/core/skills/qc/qa-analyst/spec-issue-reporter.md +112 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +3 -3
- package/core/skills/qc/qa-designer/exploratory/charter.md +1 -1
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +2 -2
- package/core/skills/qc/qa-designer/functional/api.md +3 -3
- package/core/skills/qc/qa-designer/functional/gui-feature.md +3 -3
- package/core/skills/qc/qa-designer/functional/gui-screen.md +3 -3
- package/core/skills/qc/qa-designer/integration/api.md +3 -3
- package/core/skills/qc/qa-designer/integration/db.md +3 -3
- package/core/skills/qc/qa-designer/integration/gui.md +3 -3
- package/core/skills/qc/qa-designer/integration/kafka.md +3 -3
- package/core/skills/qc/qa-designer/non-functional.md +3 -3
- package/core/skills/qc/qa-planner/risk-model.md +106 -0
- package/core/skills/qc/qa-planner/test-plan.md +35 -21
- 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 +2 -2
- 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/context-loader.md +1 -1
- package/core/steps/gap-verify.md +231 -0
- package/core/steps/qc-scope.md +119 -0
- package/core/steps/review-fanout.md +27 -1
- package/core/templates/project-context.yaml +5 -3
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +2 -2
- package/docs/04-reference/commands.md +1 -1
- package/docs/04-reference/configuration.md +146 -146
- package/docs/explain/03-refine-prd.md +8 -6
- package/docs/explain/15-qc-analyze.md +10 -7
- package/docs/explain/16-qc-plan.md +3 -3
- package/docs/explain/17-qc-design-test.md +1 -1
- package/docs/plans/qc-implementation-log.md +1587 -0
- package/docs/plans/qc-merge-plan.md +502 -0
- package/docs/plans/qc-sync-command.md +359 -0
- package/package.json +1 -1
- package/scripts/migrate-qc-docs.js +261 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
[← Reference](./) · [Concepts › Architecture](../02-concepts/architecture.md)
|
|
2
|
-
|
|
3
|
-
# Reference · Configuration
|
|
4
|
-
|
|
5
|
-
> Hai file cấu hình chính. `/update-framework` **không** đụng chúng — đây là nội dung của bạn.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. `project-context.yaml`
|
|
10
|
-
|
|
11
|
-
**Single source of truth** cho paths/mode/routing. Nằm ở `.agent/project-context.yaml`, sinh từ `templates/project-context.yaml` qua token substitution khi init. Mọi workflow đọc file này để biết **WHERE** tìm mọi thứ.
|
|
12
|
-
|
|
13
|
-
### Cấu trúc chính
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
project:
|
|
17
|
-
name: "..."
|
|
18
|
-
description: "..."
|
|
19
|
-
|
|
20
|
-
paths:
|
|
21
|
-
specs_dir: "specs" # gốc mọi spec artifact
|
|
22
|
-
trace_dir: ".trace" # trace state .tsv
|
|
23
|
-
qc_dir: "docs" # working docs của QC
|
|
24
|
-
qc_skills_dir: ".agent/skills/qc" # nơi qc-* nạp skill (override sang repo QC riêng)
|
|
25
|
-
refinement_dir: ".agent/review" # findings review
|
|
26
|
-
|
|
27
|
-
setup:
|
|
28
|
-
mode: single | umbrella
|
|
29
|
-
spec_source: "..." # (umbrella) spec repo dùng chung
|
|
30
|
-
|
|
31
|
-
services: # (multi/umbrella) map domain → service
|
|
32
|
-
# dạng phẳng: {domain}: { path, module }
|
|
33
|
-
# dạng map-theo-platform: {domain}: { web: {path,module}, app: {...}, system: {...} }
|
|
34
|
-
|
|
35
|
-
conventions:
|
|
36
|
-
build_command: "..." # lệnh build verify (≤3 retry)
|
|
37
|
-
test_command: "..."
|
|
38
|
-
|
|
39
|
-
tech_stack:
|
|
40
|
-
database: "..." # vd PostgreSQL
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Bố cục feature-package (path resolution)
|
|
44
|
-
|
|
45
|
-
Mọi artifact của một feature nằm chung `specs/{domain}/{prd-slug}/`:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
specs/{domain}/{prd-slug}/
|
|
49
|
-
├── {TICKET-ID}-{prd-slug}.md # PRD (file .md duy nhất ở gốc)
|
|
50
|
-
├── bdd/{web|app|system}/*.feature # BDD — subfolder platform LUÔN có
|
|
51
|
-
├── tech-docs/{TICKET-ID}-tech-design.md # MỘT doc gộp cho cả PRD
|
|
52
|
-
├── design-spec/{TICKET-ID}*.md # FE/App
|
|
53
|
-
└── changelog/{TICKET-ID}-{prd-slug}.changelog.md # chỉ tạo khi changelog vượt 5 version
|
|
54
|
-
.trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv # MỘT sổ / UC × platform (24 cột)
|
|
55
|
-
.trace/{domain}/{prd-slug}/_seams.tsv # sổ seam/stub — nguồn 2 cờ 🔴 chặn PR
|
|
56
|
-
.trace/trace-report.json # snapshot cho panel — GHI ĐÈ mỗi lần chạy
|
|
57
|
-
.trace/trace-history.jsonl # nhật ký append-only — PHẢI commit
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
- `{domain}` = segment đầu sau `specs_dir`.
|
|
61
|
-
- `{prd-slug}` = segment kế tiếp (folder feature-package) — **không** phải folder cha trực tiếp của file lồng sâu.
|
|
62
|
-
- **Segment `{platform}` không optional** — mọi mode, kể cả umbrella. `web` và `system` của cùng một UC là hai file khác nhau; bỏ segment thì chúng va tên và **ghi đè nhau**. Trace tách theo platform nên bố cục spec phải khớp.
|
|
63
|
-
*Project còn ở bố cục phẳng: `npx @educa-corp/sdd-framework --migrate-bdd-platform` (dry-run mặc định).*
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 2. `CLAUDE.md` (phân tầng)
|
|
68
|
-
|
|
69
|
-
Instruction cho AI agent — AI *follow* file này thay vì *invent*.
|
|
70
|
-
|
|
71
|
-
| Tầng | Nội dung |
|
|
72
|
-
|------|----------|
|
|
73
|
-
| **root** `CLAUDE.md` | Luật chung dự án/umbrella |
|
|
74
|
-
| **overlay** `{service}/CLAUDE.md` | §2 kiến trúc & thứ tự layer & package strategy · §3 coding standards · §5 error handling — **theo stack** |
|
|
75
|
-
|
|
76
|
-
> Service overlay **thắng** root khi mâu thuẫn. context-loader nạp cả hai, đặt ở **cuối** context (Lost-in-the-Middle: "follow style này").
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 3. Single vs Umbrella
|
|
81
|
-
|
|
82
|
-
| | Single | Umbrella |
|
|
83
|
-
|---|--------|----------|
|
|
84
|
-
| `setup.mode` | `single` | `umbrella` |
|
|
85
|
-
| Spec ở đâu | Cùng repo | **Spec repo dùng chung** (`spec_source`) |
|
|
86
|
-
| Code ở đâu | Cùng repo | Service submodule (chỉ code + tooling) |
|
|
87
|
-
| Trace/feedback/findings | Cùng repo | Trong spec repo (một nơi authoritative) |
|
|
88
|
-
| Đồng bộ | — | `/sync` (pull + submodule + nổi feedback + Living Docs) |
|
|
89
|
-
|
|
90
|
-
Khi `spec_source` được đặt, **mọi** PRD/BDD/tech-doc/design-spec/`.trace`/`.agent/review`/`feedback` route về spec repo — vì đều là **artifact liên team**.
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Vùng nào bị ghi đè khi update
|
|
95
|
-
|
|
96
|
-
`.agent/` là **mirror sinh ra**: `/update-framework` chạy `npx … --init`, và `--init` copy `core/` → `.agent/` **vô điều kiện**.
|
|
97
|
-
|
|
98
|
-
| Đường dẫn | Sửa được? | Vì sao |
|
|
99
|
-
|---|:---:|---|
|
|
100
|
-
| `CLAUDE.md` | ✅ | ngoài `.agent/` |
|
|
101
|
-
| `.agent/project-context.yaml` | ✅ | file **duy nhất trong `.agent/`** có guard: chỉ tạo nếu chưa tồn tại |
|
|
102
|
-
| `.agent/project-lessons.md` · `.agent/review/` | ✅ | không nằm trong `core/` nên nâng cấp không đụng |
|
|
103
|
-
| `specs/domain-knowledge/` · `.trace/` · `feedback/` | ✅ | ngoài `.agent/` |
|
|
104
|
-
| `.agent/commands` `steps` `rules` `skills` `hooks` `templates` `modules` | ❌ | copy từ repo framework, **ghi đè mỗi lần nâng cấp** |
|
|
105
|
-
|
|
106
|
-
**Nếu bạn đã sửa gì trong vùng ❌** — từ v0.4.2 `--init` tự cứu:
|
|
107
|
-
|
|
108
|
-
- bản cũ copy sang `.agent/.overwritten-{version}-{YYYYMMDD}/` (giữ nguyên cây thư mục)
|
|
109
|
-
- danh sách file bị ghi đè in ra ngay sau bước cài
|
|
110
|
-
- `.agent/.install-manifest.json` ghi hash của **đúng những gì lần cài trước đã viết** — nhờ đó lệnh phân biệt được *bạn sửa file* với *framework tự đổi file giữa hai version* (một phép so nội dung thuần sẽ flag cả hai và báo oan hàng chục file mỗi lần nâng cấp)
|
|
111
|
-
|
|
112
|
-
Thêm vào `.gitignore` của project:
|
|
113
|
-
|
|
114
|
-
```gitignore
|
|
115
|
-
.agent/.overwritten-*/
|
|
116
|
-
.agent/.install-manifest.json
|
|
117
|
-
.trace-mirror/ # bản sao cho panel VS Code — sinh lại được
|
|
118
|
-
.living-docs/ # report gộp — sinh lại được (đặt trong .gitignore của spec repo)
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
> ### ⚠️ `.trace/` **KHÔNG** được gitignore
|
|
122
|
-
>
|
|
123
|
-
> Đây là chỗ dễ mất dữ liệu nhất trong toàn framework.
|
|
124
|
-
>
|
|
125
|
-
> | Đường dẫn | Vai trò | Git |
|
|
126
|
-
> |---|---|---|
|
|
127
|
-
> | `{paths.trace_dir}` (`.trace/`) | **AUTHORITATIVE** — `.tsv` + `trace-history.jsonl`. **Không regenerate được** | **PHẢI commit** |
|
|
128
|
-
> | `.trace-mirror/` | bản sao cho panel VS Code | gitignore |
|
|
129
|
-
> | `.living-docs/` | report gộp | gitignore |
|
|
130
|
-
>
|
|
131
|
-
> **Trước v0.4.3 cả hai cùng tên `.trace`.** Khi dev mở thẳng spec repo làm workspace thì hai đường dẫn **bằng nhau** — và `/sync` (bản cũ) gợi ý gitignore theo **tên**, không theo vai trò. Làm theo là **mất sổ gốc, im lặng**: máy vẫn chạy, dashboard vẫn có số; chỉ người thứ hai clone về mới phát hiện, và lúc đó lịch sử đã mất vĩnh viễn.
|
|
132
|
-
>
|
|
133
|
-
> **Kiểm dự án đang chạy:**
|
|
134
|
-
> ```bash
|
|
135
|
-
> git -C {spec_source} check-ignore .trace # trả về kết quả = ĐANG DÍNH
|
|
136
|
-
> ```
|
|
137
|
-
> Dính thì gỡ dòng khớp `.trace` khỏi `.gitignore` rồi `git add -f .trace && git commit`.
|
|
138
|
-
> Từ v0.4.3 `/sync` Step 4b tự kiểm và báo động 🔴 nếu phát hiện.
|
|
139
|
-
|
|
140
|
-
> Muốn thay đổi **bền vững** thì sửa trong repo framework rồi phát hành. Tuỳ biến riêng của một project thuộc về `CLAUDE.md`, `.agent/project-context.yaml`, hoặc `.agent/project-lessons.md` — cả ba đều không bị ghi đè. Ranh giới đầy đủ: `.agent/README.md`.
|
|
141
|
-
>
|
|
142
|
-
> **Template `.feature`/PRD không cấu hình được.** Skeleton được `{{include}}` nướng cứng vào file lệnh lúc build, nên sửa `.agent/templates/` **không có tác dụng** (và sẽ bị ghi đè). Đổi cấu trúc artifact = sửa `templates/*` trong repo framework rồi `npm run build`. Chi tiết: `.agent/templates/README.md`.
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
→ [Architecture › Configuration](../02-concepts/architecture.md#configuration-2-file) · [Modules](modules.md)
|
|
1
|
+
[← Reference](./) · [Concepts › Architecture](../02-concepts/architecture.md)
|
|
2
|
+
|
|
3
|
+
# Reference · Configuration
|
|
4
|
+
|
|
5
|
+
> Hai file cấu hình chính. `/update-framework` **không** đụng chúng — đây là nội dung của bạn.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. `project-context.yaml`
|
|
10
|
+
|
|
11
|
+
**Single source of truth** cho paths/mode/routing. Nằm ở `.agent/project-context.yaml`, sinh từ `templates/project-context.yaml` qua token substitution khi init. Mọi workflow đọc file này để biết **WHERE** tìm mọi thứ.
|
|
12
|
+
|
|
13
|
+
### Cấu trúc chính
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
project:
|
|
17
|
+
name: "..."
|
|
18
|
+
description: "..."
|
|
19
|
+
|
|
20
|
+
paths:
|
|
21
|
+
specs_dir: "specs" # gốc mọi spec artifact
|
|
22
|
+
trace_dir: ".trace" # trace state .tsv
|
|
23
|
+
qc_dir: "docs" # working docs của QC — {qc_dir}/{TICKET-ID}/{platform}/
|
|
24
|
+
qc_skills_dir: ".agent/skills/qc" # nơi qc-* nạp skill (override sang repo QC riêng)
|
|
25
|
+
refinement_dir: ".agent/review" # findings review
|
|
26
|
+
|
|
27
|
+
setup:
|
|
28
|
+
mode: single | umbrella
|
|
29
|
+
spec_source: "..." # (umbrella) spec repo dùng chung
|
|
30
|
+
|
|
31
|
+
services: # (multi/umbrella) map domain → service
|
|
32
|
+
# dạng phẳng: {domain}: { path, module }
|
|
33
|
+
# dạng map-theo-platform: {domain}: { web: {path,module}, app: {...}, system: {...} }
|
|
34
|
+
|
|
35
|
+
conventions:
|
|
36
|
+
build_command: "..." # lệnh build verify (≤3 retry)
|
|
37
|
+
test_command: "..."
|
|
38
|
+
|
|
39
|
+
tech_stack:
|
|
40
|
+
database: "..." # vd PostgreSQL
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Bố cục feature-package (path resolution)
|
|
44
|
+
|
|
45
|
+
Mọi artifact của một feature nằm chung `specs/{domain}/{prd-slug}/`:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
specs/{domain}/{prd-slug}/
|
|
49
|
+
├── {TICKET-ID}-{prd-slug}.md # PRD (file .md duy nhất ở gốc)
|
|
50
|
+
├── bdd/{web|app|system}/*.feature # BDD — subfolder platform LUÔN có
|
|
51
|
+
├── tech-docs/{TICKET-ID}-tech-design.md # MỘT doc gộp cho cả PRD
|
|
52
|
+
├── design-spec/{TICKET-ID}*.md # FE/App
|
|
53
|
+
└── changelog/{TICKET-ID}-{prd-slug}.changelog.md # chỉ tạo khi changelog vượt 5 version
|
|
54
|
+
.trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv # MỘT sổ / UC × platform (24 cột)
|
|
55
|
+
.trace/{domain}/{prd-slug}/_seams.tsv # sổ seam/stub — nguồn 2 cờ 🔴 chặn PR
|
|
56
|
+
.trace/trace-report.json # snapshot cho panel — GHI ĐÈ mỗi lần chạy
|
|
57
|
+
.trace/trace-history.jsonl # nhật ký append-only — PHẢI commit
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- `{domain}` = segment đầu sau `specs_dir`.
|
|
61
|
+
- `{prd-slug}` = segment kế tiếp (folder feature-package) — **không** phải folder cha trực tiếp của file lồng sâu.
|
|
62
|
+
- **Segment `{platform}` không optional** — mọi mode, kể cả umbrella. `web` và `system` của cùng một UC là hai file khác nhau; bỏ segment thì chúng va tên và **ghi đè nhau**. Trace tách theo platform nên bố cục spec phải khớp.
|
|
63
|
+
*Project còn ở bố cục phẳng: `npx @educa-corp/sdd-framework --migrate-bdd-platform` (dry-run mặc định).*
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 2. `CLAUDE.md` (phân tầng)
|
|
68
|
+
|
|
69
|
+
Instruction cho AI agent — AI *follow* file này thay vì *invent*.
|
|
70
|
+
|
|
71
|
+
| Tầng | Nội dung |
|
|
72
|
+
|------|----------|
|
|
73
|
+
| **root** `CLAUDE.md` | Luật chung dự án/umbrella |
|
|
74
|
+
| **overlay** `{service}/CLAUDE.md` | §2 kiến trúc & thứ tự layer & package strategy · §3 coding standards · §5 error handling — **theo stack** |
|
|
75
|
+
|
|
76
|
+
> Service overlay **thắng** root khi mâu thuẫn. context-loader nạp cả hai, đặt ở **cuối** context (Lost-in-the-Middle: "follow style này").
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3. Single vs Umbrella
|
|
81
|
+
|
|
82
|
+
| | Single | Umbrella |
|
|
83
|
+
|---|--------|----------|
|
|
84
|
+
| `setup.mode` | `single` | `umbrella` |
|
|
85
|
+
| Spec ở đâu | Cùng repo | **Spec repo dùng chung** (`spec_source`) |
|
|
86
|
+
| Code ở đâu | Cùng repo | Service submodule (chỉ code + tooling) |
|
|
87
|
+
| Trace/feedback/findings | Cùng repo | Trong spec repo (một nơi authoritative) |
|
|
88
|
+
| Đồng bộ | — | `/sync` (pull + submodule + nổi feedback + Living Docs) |
|
|
89
|
+
|
|
90
|
+
Khi `spec_source` được đặt, **mọi** PRD/BDD/tech-doc/design-spec/`.trace`/`.agent/review`/`feedback` route về spec repo — vì đều là **artifact liên team**.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Vùng nào bị ghi đè khi update
|
|
95
|
+
|
|
96
|
+
`.agent/` là **mirror sinh ra**: `/update-framework` chạy `npx … --init`, và `--init` copy `core/` → `.agent/` **vô điều kiện**.
|
|
97
|
+
|
|
98
|
+
| Đường dẫn | Sửa được? | Vì sao |
|
|
99
|
+
|---|:---:|---|
|
|
100
|
+
| `CLAUDE.md` | ✅ | ngoài `.agent/` |
|
|
101
|
+
| `.agent/project-context.yaml` | ✅ | file **duy nhất trong `.agent/`** có guard: chỉ tạo nếu chưa tồn tại |
|
|
102
|
+
| `.agent/project-lessons.md` · `.agent/review/` | ✅ | không nằm trong `core/` nên nâng cấp không đụng |
|
|
103
|
+
| `specs/domain-knowledge/` · `.trace/` · `feedback/` | ✅ | ngoài `.agent/` |
|
|
104
|
+
| `.agent/commands` `steps` `rules` `skills` `hooks` `templates` `modules` | ❌ | copy từ repo framework, **ghi đè mỗi lần nâng cấp** |
|
|
105
|
+
|
|
106
|
+
**Nếu bạn đã sửa gì trong vùng ❌** — từ v0.4.2 `--init` tự cứu:
|
|
107
|
+
|
|
108
|
+
- bản cũ copy sang `.agent/.overwritten-{version}-{YYYYMMDD}/` (giữ nguyên cây thư mục)
|
|
109
|
+
- danh sách file bị ghi đè in ra ngay sau bước cài
|
|
110
|
+
- `.agent/.install-manifest.json` ghi hash của **đúng những gì lần cài trước đã viết** — nhờ đó lệnh phân biệt được *bạn sửa file* với *framework tự đổi file giữa hai version* (một phép so nội dung thuần sẽ flag cả hai và báo oan hàng chục file mỗi lần nâng cấp)
|
|
111
|
+
|
|
112
|
+
Thêm vào `.gitignore` của project:
|
|
113
|
+
|
|
114
|
+
```gitignore
|
|
115
|
+
.agent/.overwritten-*/
|
|
116
|
+
.agent/.install-manifest.json
|
|
117
|
+
.trace-mirror/ # bản sao cho panel VS Code — sinh lại được
|
|
118
|
+
.living-docs/ # report gộp — sinh lại được (đặt trong .gitignore của spec repo)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
> ### ⚠️ `.trace/` **KHÔNG** được gitignore
|
|
122
|
+
>
|
|
123
|
+
> Đây là chỗ dễ mất dữ liệu nhất trong toàn framework.
|
|
124
|
+
>
|
|
125
|
+
> | Đường dẫn | Vai trò | Git |
|
|
126
|
+
> |---|---|---|
|
|
127
|
+
> | `{paths.trace_dir}` (`.trace/`) | **AUTHORITATIVE** — `.tsv` + `trace-history.jsonl`. **Không regenerate được** | **PHẢI commit** |
|
|
128
|
+
> | `.trace-mirror/` | bản sao cho panel VS Code | gitignore |
|
|
129
|
+
> | `.living-docs/` | report gộp | gitignore |
|
|
130
|
+
>
|
|
131
|
+
> **Trước v0.4.3 cả hai cùng tên `.trace`.** Khi dev mở thẳng spec repo làm workspace thì hai đường dẫn **bằng nhau** — và `/sync` (bản cũ) gợi ý gitignore theo **tên**, không theo vai trò. Làm theo là **mất sổ gốc, im lặng**: máy vẫn chạy, dashboard vẫn có số; chỉ người thứ hai clone về mới phát hiện, và lúc đó lịch sử đã mất vĩnh viễn.
|
|
132
|
+
>
|
|
133
|
+
> **Kiểm dự án đang chạy:**
|
|
134
|
+
> ```bash
|
|
135
|
+
> git -C {spec_source} check-ignore .trace # trả về kết quả = ĐANG DÍNH
|
|
136
|
+
> ```
|
|
137
|
+
> Dính thì gỡ dòng khớp `.trace` khỏi `.gitignore` rồi `git add -f .trace && git commit`.
|
|
138
|
+
> Từ v0.4.3 `/sync` Step 4b tự kiểm và báo động 🔴 nếu phát hiện.
|
|
139
|
+
|
|
140
|
+
> Muốn thay đổi **bền vững** thì sửa trong repo framework rồi phát hành. Tuỳ biến riêng của một project thuộc về `CLAUDE.md`, `.agent/project-context.yaml`, hoặc `.agent/project-lessons.md` — cả ba đều không bị ghi đè. Ranh giới đầy đủ: `.agent/README.md`.
|
|
141
|
+
>
|
|
142
|
+
> **Template `.feature`/PRD không cấu hình được.** Skeleton được `{{include}}` nướng cứng vào file lệnh lúc build, nên sửa `.agent/templates/` **không có tác dụng** (và sẽ bị ghi đè). Đổi cấu trúc artifact = sửa `templates/*` trong repo framework rồi `npm run build`. Chi tiết: `.agent/templates/README.md`.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
→ [Architecture › Configuration](../02-concepts/architecture.md#configuration-2-file) · [Modules](modules.md)
|
|
@@ -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 4 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 **4 lăng kính QA / 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,9 +33,10 @@ 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 = 4 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 |
|
|
39
40
|
| **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ỏ |
|
|
40
41
|
| **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ì |
|
|
41
42
|
| **PO** | Scope khoanh vùng? Priority? Success metric? Rủi ro scope creep? |
|
|
@@ -66,7 +67,8 @@ Chạy qua step **review-fanout** với tham số `GRANULARITY = per-uc`:
|
|
|
66
67
|
|
|
67
68
|
## Cơ chế đặc biệt
|
|
68
69
|
|
|
69
|
-
- **
|
|
70
|
+
- **Lăng kính QA hẹp có chủ ý** — nó hỏi *"phát biểu này kiểm chứng được không?"*, KHÔNG hỏi *"còn thiếu gì?"*. Ở thời điểm PRD chỉ có PRD (design-spec/BDD/tech-doc chưa tồn tại), nên không phân biệt được *"PRD thiếu X"* với *"PRD để X cho design-spec"*. Câu hỏi nội dung thuộc `/qc-analyze`. Số liệu: review chỉ-PRD ra ~14 gap, review đủ 4 nguồn ra ~9,4 — chênh lệch là câu tài liệu sau trả lời hộ.
|
|
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.
|
|
70
72
|
- **`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).
|
|
71
73
|
- **QA lens đang DISABLED** (comment trong file) — có hướng dẫn bật lại nếu cần.
|
|
72
74
|
|
|
@@ -74,10 +76,10 @@ Chạy qua step **review-fanout** với tham số `GRANULARITY = per-uc`:
|
|
|
74
76
|
|
|
75
77
|
## 👓 Góc nhìn tối ưu
|
|
76
78
|
|
|
77
|
-
- **Đây là command tốn agent/token nhất phía thượng nguồn** — `per-uc` ×
|
|
79
|
+
- **Đây là command tốn agent/token nhất phía thượng nguồn** — `per-uc` × 4 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 đủ.
|
|
78
80
|
- **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ý.
|
|
79
81
|
- **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).
|
|
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ụ (
|
|
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ụ (4 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?
|
|
81
83
|
|
|
82
84
|
---
|
|
83
85
|
|
|
@@ -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_GAP** (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
|
|
29
|
+
**Output (per PRD × nền):** `{qc_dir}/{TICKET-ID}/{platform}/REQUIREMENT_ANALYSIS.md` + `DOC_GAP.md` (11 cột, cột 2 là `UC`) + `{refinement_dir}/{TICKET-ID}-qa-findings.yaml`. Một lần chạy phủ **mọi UC có BDD `approved`** của PRD; UC còn nháp vào bảng *Phạm vi phân tích* với dấu `⏸ Chưa xét` (`--include-draft` để xét luôn).
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
@@ -36,14 +36,17 @@ 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_GAP (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_GAP.md.
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
44
|
## Checkpoint & Gate
|
|
45
45
|
|
|
46
|
-
-
|
|
46
|
+
- **CHECKPOINT: chặn thường** — lệnh ghi 2 file artifact. `--yes` bỏ qua được.
|
|
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.
|
|
47
50
|
|
|
48
51
|
---
|
|
49
52
|
|
|
@@ -51,13 +54,13 @@ QC chính thức cần hiểu yêu cầu **testable** trước khi viết test.
|
|
|
51
54
|
|
|
52
55
|
- **QC skill từ repo riêng** (`qc_skills_dir`) — QC team sở hữu, không bị framework upgrade ghi đè.
|
|
53
56
|
- **Platform khoá một lần** cho cả pass → nhất quán sổ trace.
|
|
54
|
-
- **
|
|
57
|
+
- **DOC_GAP** — kênh QC phản hồi ngược chất lượng tài liệu (song song `/report-bug`).
|
|
55
58
|
|
|
56
59
|
---
|
|
57
60
|
|
|
58
61
|
## 👓 Góc nhìn tối ưu
|
|
59
62
|
|
|
60
|
-
- **
|
|
63
|
+
- **DOC_GAP trùng vai với review-context B-check?** — cả hai bắt gap tài liệu, nhưng QC nhìn từ góc "test được không". Đáng xem có nối được feedback này về spec.
|
|
61
64
|
- **Platform một pass** — feature multi-platform phải chạy QC pass nhiều lần. Chi phí lặp phân tích.
|
|
62
65
|
- **Phụ thuộc QC skill ngoài** — nếu `qc_skills_dir` trỏ sai/thiếu, trạm hụt logic.
|
|
63
66
|
|
|
@@ -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_GAP.md; nên xử blocker 🔴 trước.
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -23,7 +23,7 @@ Không phải mọi scenario rủi ro ngang nhau. Trạm này xếp ưu tiên te
|
|
|
23
23
|
|
|
24
24
|
**Input:** analysis từ trạm 1 + skill `qa-planner`.
|
|
25
25
|
|
|
26
|
-
**Output:** `{qc_dir}/{
|
|
26
|
+
**Output:** `{qc_dir}/{TICKET-ID}/{platform}/TEST_PLAN.md` — **một plan cho cả PRD** (rủi ro + câu hỏi cho dev), `Ready`/`Blocked` chấm theo từng UC.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -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_GAP/feedback.
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
|
|
@@ -22,7 +22,7 @@ Tách "thiết kế test case" (con người đọc/review được) khỏi "cod
|
|
|
22
22
|
|
|
23
23
|
**Input:** TEST_PLAN.md + skill `qa-designer` (chọn layer, nạp MỘT file).
|
|
24
24
|
|
|
25
|
-
**Output:** `{qc_dir}/{
|
|
25
|
+
**Output:** `{qc_dir}/{TICKET-ID}/{platform}/test-cases/*.Test.md` (trace mapping bắt buộc). Gọi theo **từng UC**, ghi vào thư mục test-case dùng chung cấp PRD.
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|