@educa-corp/sdd-framework 0.9.2 → 0.9.4

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.
Files changed (76) hide show
  1. package/bin/build.js +11 -0
  2. package/bin/qc-base-map.json +119 -49
  3. package/bin/self-check.js +30 -0
  4. package/core/FRAMEWORK_VERSION +1 -1
  5. package/core/commands/qc-analyze.md +85 -75
  6. package/core/commands/qc-design-test.md +144 -25
  7. package/core/commands/qc-plan.md +40 -7
  8. package/core/commands/qc-review.md +74 -7
  9. package/core/commands/qc-run-test.md +21 -1
  10. package/core/commands/setup-ai-first.md +5 -5
  11. package/core/commands/update-framework.md +1 -1
  12. package/core/commands/validate-traces.md +1 -1
  13. package/core/modules/qc-playwright/stack-profile.yaml +3 -3
  14. package/core/rules/workflow.md +1 -1
  15. package/core/skills/qc/qa-analyst/DOC_GAP.template.md +47 -17
  16. package/core/skills/qc/qa-analyst/acceptance-criteria.md +1 -1
  17. package/core/skills/qc/qa-analyst/business-rules.md +2 -2
  18. package/core/skills/qc/qa-analyst/data-flow.md +2 -2
  19. package/core/skills/qc/qa-analyst/spec-breakdown.md +4 -4
  20. package/core/skills/qc/qa-analyst/spec-issue-reporter.md +14 -2
  21. package/core/skills/qc/qa-designer/api/auth-chain.md +155 -0
  22. package/core/skills/qc/qa-designer/api/auth-sequence.md +75 -0
  23. package/core/skills/qc/qa-designer/api/common-headers.md +61 -0
  24. package/core/skills/qc/qa-designer/api/crud-sequence.md +122 -0
  25. package/core/skills/qc/qa-designer/api/endpoint.md +231 -0
  26. package/core/skills/qc/qa-designer/api/http-status-codes.md +102 -0
  27. package/core/skills/qc/qa-designer/e2e/journey.md +13 -8
  28. package/core/skills/qc/qa-designer/exploratory/charter.md +2 -0
  29. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +7 -4
  30. package/core/skills/qc/qa-designer/functional/api.md +87 -18
  31. package/core/skills/qc/qa-designer/functional/gui-feature.md +12 -9
  32. package/core/skills/qc/qa-designer/functional/gui-screen.md +12 -10
  33. package/core/skills/qc/qa-designer/integration/api.md +12 -5
  34. package/core/skills/qc/qa-designer/integration/db.md +12 -6
  35. package/core/skills/qc/qa-designer/integration/gui.md +12 -5
  36. package/core/skills/qc/qa-designer/integration/kafka.md +12 -5
  37. package/core/skills/qc/qa-designer/non-functional.md +12 -5
  38. package/core/skills/qc/qa-designer/shared/action-keywords-glossary.md +91 -0
  39. package/core/skills/qc/qa-designer/shared/duplicate-check-procedure.md +105 -0
  40. package/core/skills/qc/qa-designer/shared/implicit-scenarios.md +22 -0
  41. package/core/skills/qc/qa-designer/shared/precision-rules.md +198 -0
  42. package/core/skills/qc/qa-designer/shared/read-doc-gap-inputs.md +25 -0
  43. package/core/skills/qc/qa-designer/shared/skill-decision-tree.md +93 -0
  44. package/core/skills/qc/qa-designer/shared/tc-metadata-format.md +243 -0
  45. package/core/skills/qc/qa-planner/risk-model.md +1 -1
  46. package/core/skills/qc/qa-planner/test-plan.md +24 -13
  47. package/core/skills/qc/qa-reviewer/script/e2e.md +9 -1
  48. package/core/skills/qc/qa-reviewer/script/exploratory.md +9 -1
  49. package/core/skills/qc/qa-reviewer/script/functional.md +9 -1
  50. package/core/skills/qc/qa-reviewer/script/integration.md +9 -1
  51. package/core/skills/qc/qa-reviewer/script/non-functional.md +9 -1
  52. package/core/skills/qc/qa-reviewer/shared/read-doc-gap-inputs.md +26 -0
  53. package/core/skills/qc/qa-reviewer/shared/review-check-groups.md +207 -0
  54. package/core/skills/qc/qa-reviewer/shared/review-file-template.md +228 -0
  55. package/core/skills/qc/qa-reviewer/test-case/e2e.md +71 -13
  56. package/core/skills/qc/qa-reviewer/test-case/exploratory.md +53 -4
  57. package/core/skills/qc/qa-reviewer/test-case/functional.md +63 -15
  58. package/core/skills/qc/qa-reviewer/test-case/integration.md +64 -12
  59. package/core/skills/qc/qa-reviewer/test-case/non-functional.md +72 -13
  60. package/core/skills/qc/qa-runner/e2e.md +1 -1
  61. package/core/skills/qc/qa-runner/exploratory/session.md +1 -1
  62. package/core/steps/context-loader.md +1 -1
  63. package/core/steps/qc-scope.md +119 -0
  64. package/core/templates/project-context.yaml +3 -1
  65. package/docs/02-concepts/pipeline-steps/08-qc-automation.md +1 -1
  66. package/docs/02-concepts/pipeline-steps/09-validate-traces.md +1 -1
  67. package/docs/04-reference/configuration.md +146 -146
  68. package/docs/04-reference/trace-schema.md +1 -1
  69. package/docs/explain/00-setup-ai-first.md +1 -1
  70. package/docs/explain/15-qc-analyze.md +1 -1
  71. package/docs/explain/16-qc-plan.md +1 -1
  72. package/docs/explain/17-qc-design-test.md +1 -1
  73. package/docs/plans/qc-implementation-log.md +288 -5
  74. package/docs/plans/qc-sync-command.md +2 -1
  75. package/package.json +1 -1
  76. package/scripts/migrate-qc-docs.js +261 -0
@@ -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)
@@ -240,7 +240,7 @@ Ca thứ hai là lý do consumer **phải** chuẩn hoá tập bị ảnh hưở
240
240
 
241
241
  ## Xuất JSON cho panel
242
242
 
243
- `trace-report.json` giữ enum `status` **đúng 4 giá trị** `OK`/`DRIFT`/`GAP`/`UNTRACKED` — VS Code extension "Spec Driven Docs Tools" sống ngoài repo framework và switch trên field này. Row `ORPHANED` xuất ra là `"status": "DRIFT"` + `"orphaned": true`; panel cũ hiện nó như DRIFT (đúng nghĩa, không im lặng), panel mới đọc `orphaned` để hiện nhãn riêng. **TSV giữ nguyên chữ `ORPHANED`** — TSV là nguồn-sự-thật.
243
+ `trace-report.json` giữ enum `status` **đúng 4 giá trị** `OK`/`DRIFT`/`GAP`/`UNTRACKED` — VS Code extension "SDD Board" sống ngoài repo framework và switch trên field này. Row `ORPHANED` xuất ra là `"status": "DRIFT"` + `"orphaned": true`; panel cũ hiện nó như DRIFT (đúng nghĩa, không im lặng), panel mới đọc `orphaned` để hiện nhãn riêng. **TSV giữ nguyên chữ `ORPHANED`** — TSV là nguồn-sự-thật.
244
244
 
245
245
  ---
246
246
 
@@ -44,7 +44,7 @@ Mọi command sau đều đọc `project-context.yaml` + `CLAUDE.md` + `domain-k
44
44
  5. **Step 3 · project-context.yaml** — copy từ `templates/project-context.yaml`, điền `{{PLACEHOLDER}}`. Umbrella: verify/sửa `services` (path phải khớp tên submodule thật — generator để placeholder `TODO-…`).
45
45
  6. **Step 4 · business-dictionary.md** — Canonical Terms / Banned Terms / Enum Registry. *(Umbrella skip — sống trong spec submodule.)*
46
46
  7. **Step 5 · core-entities.md** — entity catalog máy-đọc-được (field, invariant, relationship). *(Umbrella skip.)*
47
- 8. **Step 6 · VS Code extension** — khuyến nghị cài "Spec Driven Docs Tools" (Review Board + Living Docs UI).
47
+ 8. **Step 6 · VS Code extension** — khuyến nghị cài "SDD Board" (Review Board + Living Docs UI).
48
48
  9. **Step 7 · Verify** — checklist theo `project_type` (file/folder tồn tại; umbrella check submodule init).
49
49
 
50
50
  ---
@@ -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` + `DOC_GAP.md`.
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
 
@@ -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}/{UC-ID}/{platform}/TEST_PLAN.md` (rủi ro + câu hỏi cho dev).
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
 
@@ -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}/{UC-ID}/{platform}/test-cases/*.Test.md` (trace mapping bắt buộc).
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