@educa-corp/sdd-framework 0.5.0 → 0.7.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.
Files changed (243) hide show
  1. package/bin/build.js +113 -19
  2. package/bin/gate-trace.js +487 -0
  3. package/bin/index.js +445 -146
  4. package/bin/lint-trace.js +643 -0
  5. package/bin/self-check.js +804 -2
  6. package/bin/trace-schema.json +621 -10
  7. package/core/FRAMEWORK_VERSION +1 -1
  8. package/core/README.md +20 -0
  9. package/core/commands/amend-prd.md +518 -0
  10. package/core/commands/debug.md +123 -511
  11. package/core/commands/define-product.md +86 -510
  12. package/core/commands/dev-gen-test.md +86 -510
  13. package/core/commands/dev-run-test.md +133 -519
  14. package/core/commands/dev-smoke-test.md +86 -510
  15. package/core/commands/extend-prd.md +128 -522
  16. package/core/commands/fix-bug.md +118 -509
  17. package/core/commands/generate-architecture.md +94 -515
  18. package/core/commands/generate-bdd.md +128 -513
  19. package/core/commands/generate-code.md +119 -510
  20. package/core/commands/generate-design-spec.md +86 -510
  21. package/core/commands/generate-prd.md +89 -510
  22. package/core/commands/generate-spec-manifest.md +86 -510
  23. package/core/commands/generate-tech-docs.md +120 -512
  24. package/core/commands/learn.md +172 -496
  25. package/core/commands/map-testids.md +86 -510
  26. package/core/commands/propose-scenario.md +86 -510
  27. package/core/commands/qc-analyze.md +86 -510
  28. package/core/commands/qc-design-test.md +86 -510
  29. package/core/commands/qc-plan.md +86 -510
  30. package/core/commands/qc-report.md +86 -510
  31. package/core/commands/qc-review.md +86 -510
  32. package/core/commands/qc-run-test.md +115 -513
  33. package/core/commands/refine-prd.md +112 -522
  34. package/core/commands/report-bug.md +86 -510
  35. package/core/commands/review-code.md +123 -511
  36. package/core/commands/review-context.md +136 -522
  37. package/core/commands/review-tech-docs.md +90 -511
  38. package/core/commands/setup-ai-first.md +166 -138
  39. package/core/commands/sync.md +155 -107
  40. package/core/commands/update-framework.md +16 -103
  41. package/core/commands/validate-traces.md +426 -511
  42. package/core/hooks/data-guard.js +174 -83
  43. package/core/hooks/settings.json +2 -1
  44. package/core/rules/workflow.md +64 -4
  45. package/core/steps/capture-lesson.md +34 -1
  46. package/core/steps/context-loader.md +50 -8
  47. package/core/steps/gate.md +92 -35
  48. package/core/steps/report-footer.md +23 -0
  49. package/core/templates/README.md +24 -1
  50. package/core/templates/ci/trace-gate.yml +146 -0
  51. package/core/templates/feature.template +1 -1
  52. package/core/templates/hooks/pre-push +61 -0
  53. package/docs/02-concepts/architecture.md +61 -6
  54. package/docs/02-concepts/traceability.md +57 -0
  55. package/docs/03-guides/architect.md +63 -0
  56. package/docs/04-reference/commands.md +148 -134
  57. package/docs/04-reference/model-selection.md +32 -19
  58. package/docs/04-reference/trace-schema.md +39 -0
  59. package/docs/explain/02b-extend-prd.md +1 -1
  60. package/docs/explain/02c-amend-prd.md +152 -0
  61. package/docs/explain/21-validate-traces.md +2 -1
  62. package/docs/explain/27-learn.md +5 -3
  63. package/docs/explain/28-sync.md +25 -0
  64. package/docs/explain/README.md +136 -135
  65. package/package.json +5 -9
  66. package/commands/debug.md +0 -917
  67. package/commands/debug.tmpl +0 -257
  68. package/commands/define-product.md +0 -862
  69. package/commands/define-product.tmpl +0 -225
  70. package/commands/dev-gen-test.md +0 -1124
  71. package/commands/dev-gen-test.tmpl +0 -490
  72. package/commands/dev-run-test.md +0 -859
  73. package/commands/dev-run-test.tmpl +0 -225
  74. package/commands/dev-smoke-test.md +0 -798
  75. package/commands/dev-smoke-test.tmpl +0 -217
  76. package/commands/extend-prd.md +0 -907
  77. package/commands/extend-prd.tmpl +0 -270
  78. package/commands/fix-bug.md +0 -910
  79. package/commands/fix-bug.tmpl +0 -197
  80. package/commands/generate-architecture.md +0 -775
  81. package/commands/generate-architecture.tmpl +0 -194
  82. package/commands/generate-bdd.md +0 -1347
  83. package/commands/generate-bdd.tmpl +0 -590
  84. package/commands/generate-code.md +0 -1283
  85. package/commands/generate-code.tmpl +0 -649
  86. package/commands/generate-design-spec.md +0 -1161
  87. package/commands/generate-design-spec.tmpl +0 -524
  88. package/commands/generate-prd.md +0 -1143
  89. package/commands/generate-prd.tmpl +0 -223
  90. package/commands/generate-spec-manifest.md +0 -745
  91. package/commands/generate-spec-manifest.tmpl +0 -164
  92. package/commands/generate-tech-docs.md +0 -1344
  93. package/commands/generate-tech-docs.tmpl +0 -273
  94. package/commands/learn.md +0 -723
  95. package/commands/learn.tmpl +0 -63
  96. package/commands/map-testids.md +0 -662
  97. package/commands/map-testids.tmpl +0 -81
  98. package/commands/propose-scenario.md +0 -783
  99. package/commands/propose-scenario.tmpl +0 -202
  100. package/commands/qc-analyze.md +0 -693
  101. package/commands/qc-analyze.tmpl +0 -112
  102. package/commands/qc-design-test.md +0 -650
  103. package/commands/qc-design-test.tmpl +0 -69
  104. package/commands/qc-plan.md +0 -630
  105. package/commands/qc-plan.tmpl +0 -49
  106. package/commands/qc-report.md +0 -641
  107. package/commands/qc-report.tmpl +0 -60
  108. package/commands/qc-review.md +0 -634
  109. package/commands/qc-review.tmpl +0 -53
  110. package/commands/qc-run-test.md +0 -750
  111. package/commands/qc-run-test.tmpl +0 -116
  112. package/commands/refine-prd.md +0 -1074
  113. package/commands/refine-prd.tmpl +0 -278
  114. package/commands/report-bug.md +0 -729
  115. package/commands/report-bug.tmpl +0 -148
  116. package/commands/review-code.md +0 -803
  117. package/commands/review-code.tmpl +0 -143
  118. package/commands/review-context.md +0 -1323
  119. package/commands/review-context.tmpl +0 -527
  120. package/commands/review-tech-docs.md +0 -982
  121. package/commands/review-tech-docs.tmpl +0 -401
  122. package/commands/setup-ai-first.md +0 -574
  123. package/commands/setup-ai-first.tmpl +0 -378
  124. package/commands/sync.md +0 -486
  125. package/commands/sync.tmpl +0 -384
  126. package/commands/update-framework.md +0 -290
  127. package/commands/update-framework.tmpl +0 -188
  128. package/commands/validate-traces.md +0 -1435
  129. package/commands/validate-traces.tmpl +0 -854
  130. package/hooks/data-guard.js +0 -141
  131. package/hooks/settings.json +0 -18
  132. package/modules/android-compose/module.yaml +0 -13
  133. package/modules/android-compose/stack-profile.yaml +0 -57
  134. package/modules/angular/architecture-snippets/component-patterns.md +0 -187
  135. package/modules/angular/module.yaml +0 -6
  136. package/modules/angular/stack-profile.yaml +0 -38
  137. package/modules/context-engineering/architecture-snippets/context-design.md +0 -119
  138. package/modules/context-engineering/module.yaml +0 -9
  139. package/modules/context-engineering/stack-profile.yaml +0 -61
  140. package/modules/dotnet/architecture-snippets/clean-arch.md +0 -160
  141. package/modules/dotnet/module.yaml +0 -6
  142. package/modules/dotnet/stack-profile.yaml +0 -50
  143. package/modules/flutter/module.yaml +0 -14
  144. package/modules/flutter/stack-profile.yaml +0 -59
  145. package/modules/golang/architecture-snippets/domain-layout.md +0 -283
  146. package/modules/golang/module.yaml +0 -6
  147. package/modules/golang/stack-profile.yaml +0 -40
  148. package/modules/ios-swiftui/module.yaml +0 -13
  149. package/modules/ios-swiftui/stack-profile.yaml +0 -55
  150. package/modules/java-spring/architecture-snippets/layered-arch.md +0 -201
  151. package/modules/java-spring/module.yaml +0 -15
  152. package/modules/java-spring/stack-profile.yaml +0 -28
  153. package/modules/nextjs/architecture-snippets/app-router-patterns.md +0 -269
  154. package/modules/nextjs/module.yaml +0 -14
  155. package/modules/nextjs/stack-profile.yaml +0 -74
  156. package/modules/nuxt/module.yaml +0 -14
  157. package/modules/nuxt/stack-profile.yaml +0 -58
  158. package/modules/phaser-game/architecture-snippets/phaser-scene-patterns.md +0 -646
  159. package/modules/phaser-game/module.yaml +0 -15
  160. package/modules/phaser-game/stack-profile.yaml +0 -90
  161. package/modules/php-laravel/architecture-snippets/service-repository.md +0 -302
  162. package/modules/php-laravel/module.yaml +0 -15
  163. package/modules/php-laravel/stack-profile.yaml +0 -56
  164. package/modules/qc-playwright/stack-profile.yaml +0 -66
  165. package/modules/react/architecture-snippets/hooks-query-patterns.md +0 -254
  166. package/modules/react/module.yaml +0 -14
  167. package/modules/react/stack-profile.yaml +0 -63
  168. package/modules/react-native/module.yaml +0 -14
  169. package/modules/react-native/stack-profile.yaml +0 -56
  170. package/modules/vue/module.yaml +0 -14
  171. package/modules/vue/stack-profile.yaml +0 -65
  172. package/rules/data-protection.md +0 -80
  173. package/rules/workflow.md +0 -73
  174. package/scripts/init.sh +0 -49
  175. package/scripts/upgrade.sh +0 -94
  176. package/skills/code/SKILL.md +0 -19
  177. package/skills/code/SKILL.tmpl +0 -19
  178. package/skills/debug/SKILL.md +0 -19
  179. package/skills/debug/SKILL.tmpl +0 -19
  180. package/skills/design-spec/SKILL.md +0 -11
  181. package/skills/design-spec/SKILL.tmpl +0 -11
  182. package/skills/discovery/SKILL.md +0 -14
  183. package/skills/discovery/SKILL.tmpl +0 -14
  184. package/skills/prd/SKILL.md +0 -19
  185. package/skills/prd/SKILL.tmpl +0 -19
  186. package/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
  187. package/skills/qc/qa-analyst/acceptance-criteria.md +0 -60
  188. package/skills/qc/qa-analyst/business-rules.md +0 -59
  189. package/skills/qc/qa-analyst/data-flow.md +0 -64
  190. package/skills/qc/qa-analyst/spec-breakdown.md +0 -61
  191. package/skills/qc/qa-designer/e2e/journey.md +0 -41
  192. package/skills/qc/qa-designer/exploratory/charter.md +0 -68
  193. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +0 -43
  194. package/skills/qc/qa-designer/functional/api.md +0 -45
  195. package/skills/qc/qa-designer/functional/gui-feature.md +0 -46
  196. package/skills/qc/qa-designer/functional/gui-screen.md +0 -52
  197. package/skills/qc/qa-designer/integration/api.md +0 -42
  198. package/skills/qc/qa-designer/integration/db.md +0 -39
  199. package/skills/qc/qa-designer/integration/gui.md +0 -40
  200. package/skills/qc/qa-designer/integration/kafka.md +0 -40
  201. package/skills/qc/qa-designer/non-functional.md +0 -40
  202. package/skills/qc/qa-planner/test-plan.md +0 -120
  203. package/skills/qc/qa-reviewer/script/e2e.md +0 -87
  204. package/skills/qc/qa-reviewer/script/exploratory.md +0 -45
  205. package/skills/qc/qa-reviewer/script/functional.md +0 -101
  206. package/skills/qc/qa-reviewer/script/integration.md +0 -91
  207. package/skills/qc/qa-reviewer/script/non-functional.md +0 -126
  208. package/skills/qc/qa-reviewer/test-case/e2e.md +0 -73
  209. package/skills/qc/qa-reviewer/test-case/exploratory.md +0 -43
  210. package/skills/qc/qa-reviewer/test-case/functional.md +0 -76
  211. package/skills/qc/qa-reviewer/test-case/integration.md +0 -69
  212. package/skills/qc/qa-reviewer/test-case/non-functional.md +0 -73
  213. package/skills/qc/qa-runner/e2e.md +0 -49
  214. package/skills/qc/qa-runner/exploratory/session.md +0 -36
  215. package/skills/qc/qa-runner/functional/api.md +0 -35
  216. package/skills/qc/qa-runner/functional/gui-feature.md +0 -51
  217. package/skills/qc/qa-runner/functional/gui-screen.md +0 -55
  218. package/skills/qc/qa-runner/integration.md +0 -47
  219. package/skills/qc/qa-runner/non-functional.md +0 -49
  220. package/skills/qc/qa-runner/report/report.md +0 -37
  221. package/skills/setup-ai-first/SKILL.md +0 -19
  222. package/skills/setup-ai-first/SKILL.tmpl +0 -19
  223. package/skills/spec/SKILL.md +0 -19
  224. package/skills/spec/SKILL.tmpl +0 -19
  225. package/skills/test/SKILL.md +0 -18
  226. package/skills/test/SKILL.tmpl +0 -18
  227. package/steps/business-language.md +0 -56
  228. package/steps/capture-lesson.md +0 -79
  229. package/steps/context-loader.md +0 -385
  230. package/steps/gate.md +0 -94
  231. package/steps/report-footer.md +0 -102
  232. package/steps/review-fanout.md +0 -159
  233. package/steps/spawn-agent.md +0 -129
  234. package/steps/trace-mirror.md +0 -53
  235. package/templates/README.md +0 -47
  236. package/templates/architecture.template.md +0 -394
  237. package/templates/design-spec.template.md +0 -217
  238. package/templates/feature.template +0 -123
  239. package/templates/platform-guide.template.md +0 -145
  240. package/templates/prd.template.md +0 -283
  241. package/templates/product-definition.template.md +0 -188
  242. package/templates/project-context.yaml +0 -212
  243. package/templates/tech-design.template.md +0 -490
@@ -0,0 +1,152 @@
1
+ [← /extend-prd](02b-extend-prd.md) · [Explain Home](README.md) · [Next: /refine-prd →](03-refine-prd.md)
2
+
3
+ # 02c · `/amend-prd` — Đổi một yêu cầu đã duyệt
4
+
5
+ > **Một câu.** Sửa **tại chỗ** nội dung của một AC/BR/UC đã duyệt — PO khai tường minh ID, lệnh kiểm va chạm, ghi bằng `Edit` với guard **hai chiều**, bump version + `Status → draft`, và nói rõ UC nào phải làm lại.
6
+
7
+ ---
8
+
9
+ ## Vấn đề giải quyết
10
+
11
+ Có bốn tình huống PO chạm PRD. Trước GAPS-v4 G54 chỉ ba cái có lệnh.
12
+
13
+ | Tình huống | Lệnh | Có từ |
14
+ |---|---|---|
15
+ | PRD chưa có | `/generate-prd` | đầu |
16
+ | **Thêm** UC/AC/BR mới | `/extend-prd` | v0.4.3 |
17
+ | Sửa vấn đề **review chỉ ra** | `/refine-prd` | đầu |
18
+ | **Đổi một yêu cầu đang đúng cú pháp** | *(không có)* | — |
19
+
20
+ Nhánh thứ tư là *"BR8 nói tối đa 5 file, giờ đổi thành 20"*. Không thêm gì mới. Không phải AI phát hiện lỗi. Chỉ đổi một con số đã duyệt.
21
+
22
+ Ba lệnh có sẵn đều **từ chối đúng việc đó**:
23
+
24
+ | Lệnh | Vì sao không dùng được |
25
+ |---|---|
26
+ | `/generate-prd` | Chỉ có một cổng **chặn cứng** rồi vẫn ghi đè. Ghi đè mất changelog và **đánh số lại BR** ⇒ phá `@trace.business_rules` trong mọi `.feature` đã sinh. Đường có mìn, không phải đường dùng được |
27
+ | `/extend-prd` | **Add-only.** Bước 5 §3 đòi output là *"superset chặt"* của bản cũ. Có **một** cửa sửa nội dung cũ (Bước 3.2 case 1, "mâu thuẫn rule") nhưng nó **phái sinh** — chỉ mở khi phần THÊM làm BR cũ sai |
28
+ | `/refine-prd` | Resume Mode Phase 2 tự cấm đụng section nào không được một finding trỏ tới, và findings sinh từ việc soi PRD hiện có ⇒ **không có đường nào để một ý định MỚI của PO đi vào** |
29
+
30
+ Nên hành vi hợp lý duy nhất còn lại là **mở file `.md` ra gõ**.
31
+
32
+ ---
33
+
34
+ ## Vì sao nhánh thiếu này nặng hơn nó trông (GAPS-v4 G54)
35
+
36
+ Toàn bộ lưới an toàn của framework so **nhãn version**, không so **nội dung**. Kiểm bằng máy: `grep "content_hash|checksum|sha256|md5"` trên toàn bộ lệnh + schema + step → **0 kết quả**.
37
+
38
+ Nên khi PO sửa tay: bìa không đổi, trang changelog trắng, con dấu `approved` vẫn còn.
39
+
40
+ | Tầng canh | Nó hỏi gì | Trả lời | Kết quả |
41
+ |---|---|---|---|
42
+ | `/validate-traces` Step 4 | *"PRD Version == cột `prd_version`?"* | `1.3 == 1.3` | ✅ sạch |
43
+ | `gate-trace` G2 | *"report khớp sổ TSV?"* | khớp | ✅ PASS |
44
+ | `require-fresh-audit` | *"PR có chạm file mang tag trace?"* | PO chỉ sửa `.md` | ✅ không đòi audit |
45
+
46
+ **Ba tầng xanh, và ba tầng đều đúng theo định nghĩa của chính chúng.** Code vẫn chặn ở 5, test vẫn assert 5 và vẫn PASS — nó đang test đúng code, chỉ là code sai spec. Dashboard hiện `OK · ✅ 10 tests · qc pass`.
47
+
48
+ So với hai họ hàng gần:
49
+
50
+ | | Hỏng kiểu gì | Có gì để phát hiện? |
51
+ |---|---|---|
52
+ | G52 | **Ồn** — báo oan cho mọi UC | Có, quá nhiều |
53
+ | G53 | **Im lặng** — nhưng version vẫn lệch, vẫn còn cờ ⓘ để người tinh ý thấy | Có, một chút |
54
+ | **G54** | **Im lặng tuyệt đối** | **Không có gì** |
55
+
56
+ Và đây là nhánh **dùng nhiều nhất**: trên một sản phẩm đang sống, *"đổi một yêu cầu đã có"* xảy ra thường hơn *"thêm một UC hoàn toàn mới"* rất nhiều.
57
+
58
+ ---
59
+
60
+ ## Vị trí & tiền đề
61
+
62
+ - **Vị trí:** Phase Specification — nhánh *"PRD đã tồn tại, đổi nội dung"*.
63
+ - **Tiền đề:** có PRD. Không có → `/generate-prd`.
64
+ - **Mức chặn:** **CỨNG** (`--yes` không bỏ qua được). Đây là thao tác ghi **duy nhất** trong framework được phép làm output **không phải superset** của bản cũ.
65
+
66
+ ---
67
+
68
+ ## Nó làm gì, theo thứ tự
69
+
70
+ | Bước | Làm gì | Điểm đáng chú ý |
71
+ |---|---|---|
72
+ | **1** | Nạp PRD + **PO khai tường minh `amend_targets`** | Trình danh sách UC/BR/AC để PO chọn. **Không tự suy** target từ mô tả mơ hồ — đoán sai là sửa sai một yêu cầu đã duyệt. Mỗi ID được phân giải về **UC sở hữu** ngay |
73
+ | **2** | **Kiểm va chạm** (3 câu) | Tái dùng `/extend-prd` Bước 3.2, **đảo hướng**: ở đó là *"phần THÊM có làm cái cũ sai không"*, ở đây là *"cái SỬA có làm phần còn lại sai không"*. Mỗi "có" **mở rộng `amend_targets`** |
74
+ | **3** | Altitude | Cơ chế xuống BR/BL, AC chỉ giữ outcome + ref. Đây là chỗ dễ trôi nhất khi sửa tại chỗ |
75
+ | **4** | Ghi + **guard sau-ghi HAI CHIỀU** | Xem dưới — đây là phần cốt lõi |
76
+ | **5** | Bump version + `{changelog_scope}` + `Status → draft` | Đổi một giới hạn nghiệp vụ là **major**: code hiện tại đang sai so với spec mới |
77
+ | **6** | Report | Nêu **UC PHẢI làm lại** kèm lệnh, và **cấm tường minh** `--realign` cho chúng |
78
+
79
+ ### Guard hai chiều — chỗ lệnh này khác mọi thao tác ghi khác
80
+
81
+ `/extend-prd` guard bằng *"output là **superset chặt**"*. Ở đây output **cố ý không** phải superset, nên guard phải đảo:
82
+
83
+ | Chiều | Kiểm gì | Fail nghĩa là |
84
+ |---|---|---|
85
+ | **Bảo toàn** | Mọi UC/BR/AC-ID + row changelog cũ **vẫn còn** | Đã xoá thứ không được xoá |
86
+ | **Giới hạn** | **Mọi** nội dung đã đổi đều thuộc một ID trong `amend_targets` | Đã sửa **lan ra ngoài** phạm vi PO chốt |
87
+
88
+ Chiều **Giới hạn** quan trọng bằng chiều Bảo toàn, và vì một lý do cụ thể: `{changelog_scope}` dựng từ `amend_targets`. Nếu bản ghi lỡ sửa một UC không có trong danh sách đó thì changelog **không nêu** UC ấy ⇒ `/validate-traces` xếp nó vào ⓘ `PRD_STALE_REF` ⇒ `--realign-prd-version` **mở cửa** và dán nhãn version lại lên một thay đổi chưa ai implement. Đúng hình dạng **G53**, chỉ đến từ một hướng khác.
89
+
90
+ Fail chiều nào → **khôi phục file**, dừng, **không** sang Bước 5.
91
+
92
+ ---
93
+
94
+ ## Hai chế độ, và những gì nó **không** làm
95
+
96
+ | Chế độ | Cờ | Làm gì |
97
+ |---|---|---|
98
+ | Sửa nội dung | *(mặc định)* | Đổi nội dung của ID đã có. ID giữ nguyên |
99
+ | **Khai tử tại chỗ** | `--retire {ID}` | Đánh dấu ID không còn hiệu lực **nhưng GIỮ NGUYÊN row + ID** |
100
+
101
+ `--retire` tồn tại vì **xoá hẳn một BR là bẫy**: `@trace.business_rules` trong mọi `.feature` đã sinh đang trỏ vào ID đó, nên xoá row biến một liên kết hợp lệ thành `TRACE_ORPHAN` 🔴. Khai tử tại chỗ đạt cùng mục đích nghiệp vụ mà không phá liên kết.
102
+
103
+ | PO muốn | Lệnh đúng |
104
+ |---|---|
105
+ | Thêm UC/AC/BR mới | `/extend-prd` — lệnh này **không đánh số mới** bao giờ |
106
+ | **Xoá hẳn** một dòng | *(không có, có chủ ý)* → `--retire` |
107
+ | Sửa lỗi `/refine-prd` vừa chỉ ra | `/refine-prd --resume` |
108
+
109
+ ---
110
+
111
+ ## Cửa sau vẫn có chuông
112
+
113
+ Mở cửa chính không có nghĩa không ai đi cửa sau. `/validate-traces` **Step 3.9** canh:
114
+
115
+ - Đọc mốc `spec_baseline` (`prd_path` · `sha_at_audit` · `version_at_audit`) mà lần audit trước đã ghi.
116
+ - So bằng **hai nguồn**: `git diff` (sửa đã commit) **và** `git status` (sửa **chưa** commit — ca thường gặp nhất, vì PO đang gõ).
117
+ - Nội dung đổi **mà** `Version` không đổi → 🔴 **`PRD_UNTRACKED_EDIT`**.
118
+
119
+ **Không báo oan:** sửa **và** bump version ⇒ `version != version_at_audit` ⇒ im.
120
+
121
+ **Đường ra tự lành, cố ý không có `--accept-edit`:** cách sửa đúng là bump version + ghi row changelog nêu UC — tức đúng việc lệnh này làm hộ. Làm xong thì cờ tự tắt và logic `PRD_DRIFT` bình thường tiếp quản. Thêm một cờ escape sẽ là thêm một đường **dán nhãn lên thay đổi chưa ai xem**, đúng cái ba rào của `--realign` tồn tại để chặn.
122
+
123
+ **Vì sao cờ này không chặn PR:** `gate.blocking` nghĩa hẹp là *code đang hỏng*; cờ này nói về *spec*. Thêm nữa, mọi project đang chạy đều đã có PRD sửa tay ⇒ một cờ chặn mới sẽ đỏ khắp nơi ở lần đầu ⇒ người ta **tắt cổng** ⇒ mất luôn 4 cờ 🔴 thật. Đó đúng là thất bại mà `self-check` R9(e) được viết ra để chặn, chỉ đến bằng một cửa khác. Team đã dọn sạch nợ tồn thì tự thêm counter vào `gate.blocking`; R13(e) canh việc đó có kèm `why`.
124
+
125
+ ---
126
+
127
+ ## Sau đó chạy gì
128
+
129
+ ```
130
+ /amend-prd {prd-file} UC3-BR8
131
+ → /review-context {prd-file} ← kiểm chất lượng phần vừa sửa
132
+ → PO đặt Status: approved
133
+ → /generate-bdd {prd-file} ← CHỈ cho UC bị sửa
134
+ → /generate-code {UC-ID}
135
+ → /dev-gen-test → /dev-run-test ← test cũ đang assert giá trị cũ và vẫn PASS
136
+ ```
137
+
138
+ ❌ **Không** `--realign-prd-version` cho UC bị sửa — nội dung đổi thật.
139
+
140
+ ---
141
+
142
+ ## Máy canh gì
143
+
144
+ | Rule | Canh gì |
145
+ |---|---|
146
+ | `self-check` **R11** | Lệnh phải tự khai mức `chặn CỨNG`, khớp `gate.checkpoint_levels.hard` |
147
+ | `self-check` **R12** | Là producer dòng changelog → phải có **dòng template** mang `{changelog_scope}` |
148
+ | `self-check` **R13** | `spec_baseline` phải được **GHI** như một key trong `trace-report.json` — nếu không, cờ `PRD_UNTRACKED_EDIT` không bao giờ bật mà R6/R7 vẫn ✅ |
149
+
150
+ ---
151
+
152
+ [← /extend-prd](02b-extend-prd.md) · [Explain Home](README.md) · [Next: /refine-prd →](03-refine-prd.md)
@@ -39,7 +39,8 @@ Traceability chỉ có giá trị khi kiểm được. Command cho bức tranh t
39
39
  | 2 | DRIFT | có code + `spec_ver != gen_ver` |
40
40
  | 3 | GAP | có code + `test_count == —/0` |
41
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`).
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"); **hai trục chia nhóm**: **`by_service`** (coverage theo từng đội — cột `service`) · **`by_platform`** (coverage theo `web`/`app`/`system`).
43
+ > `by_platform` trả lời *"web xong bao nhiêu %, system xong bao nhiêu %"* — câu thường ngày khi làm FE và BE song song. Trước v0.5.1 không trả lời được **từ `summary`**: `by_service` là bảng chia nhóm duy nhất, mà cột `service` là `—` ở mọi row của dự án single-service ⇒ nó gộp tất cả vào một ô.
43
44
  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
45
  5. **Step 5d — design-spec drift** *(chỉ FE/App)*: 2 chiều, design-spec→BDD và design-spec→code.
45
46
  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,17 +46,19 @@
46
46
 
47
47
  ## Cơ chế đặc biệt
48
48
 
49
- - **Lesson là ràng buộc cứng** — context-loader Bước 6.7 nạp mọi lesson khớp `category`+`scope`; output vi phạm → AI sửa trước khi trình + ghi `L-NNN` đã áp.
49
+ - **Lesson là ràng buộc cứng** — context-loader Bước 6.7 nạp lesson `Status: active` có `category` khớp lệnh (+ `general`); output vi phạm → AI sửa trước khi trình + ghi `L-NNN` đã áp.
50
50
  - **Dùng chung `capture-lesson`** với `/review-code`, `/fix-bug`, `/debug` — lesson sinh tự nhiên từ chỗ phát hiện.
51
+ - **`/learn --review` — đường RA** *(từ v0.5.1, GAPS-v3 G46)*. Retire = đổi `Status` + ghi lý do, **không xoá** (lesson retired ở lại làm lịch sử). Tiêu chí 🔴 **kiểm được bằng máy**: `Scope` là file glob mà glob không còn khớp file nào ⇒ code lesson canh đã không tồn tại. `Scope` là `all`/domain thì không tự kiểm được — chỉ liệt kê theo tuổi để người quyết.
51
52
 
52
53
  ---
53
54
 
54
55
  ## 👓 Góc nhìn tối ưu
55
56
 
56
57
  - **Bộ nhớ dự án cốt lõi** — nhưng phụ thuộc con người chủ động `/learn`. Lesson không ghi = không nhớ.
57
- - **Dedup L3 phụ thuộc AI so khớp** — lesson gần giống có thể lọt thành trùng, phình file → tốn context mọi lệnh.
58
+ - **Dedup L3 phụ thuộc AI so khớp** — lesson gần giống có thể lọt thành trùng.
58
59
  - **Scope/category filtering** quyết định lesson nào nạp — nếu gắn sai, guardrail không kích hoạt đúng lúc.
59
- - **Không có cơ chế "retire" lesson lỗi thời** — file chỉ lớn dần. Đáng cân nhắc vòng đời lesson.
60
+ - ~~**Không có cơ chế "retire" lesson lỗi thời** — file chỉ lớn dần.~~ ✅ **Đã có từ v0.5.1** (`/learn --review`). *Ghi chú này từng đứng ở đây trước khi GAPS-v3 rà tới — nó đã đúng, chỉ chưa ai làm.*
61
+ - **Vẫn phụ thuộc con người chạy `--review`** — không gì tự retire. Cố ý: tự bỏ một guardrail trong im lặng là đúng thứ framework này tồn tại để chống. Recap cảnh báo khi ≥40 lesson active.
60
62
 
61
63
  ---
62
64
 
@@ -68,3 +68,28 @@ Umbrella nhiều submodule + một spec repo dùng chung dễ lệch nhau. `/syn
68
68
  ## Kết nối
69
69
 
70
70
  **Trước:** bất kỳ (vận hành) · **Sau:** [`/validate-traces`](21-validate-traces.md); xử lý `📥 tester feedback` nổi lên → [`/fix-bug`](23-fix-bug.md)/[`/generate-bdd`](06-generate-bdd.md).
71
+
72
+ ---
73
+
74
+ ## Step 1e — "tài liệu nào vừa đổi" *(mới, GAPS-v4 G56)*
75
+
76
+ Câu hỏi số **một** của dev sau mỗi lần sync. Trước đó `/sync` **không** trả lời: nó diff đúng ba đường dẫn `feedback/*` và **bỏ qua `specs/`** — tức hỏi *"có góp ý gì mới"* rồi bỏ qua chính tài liệu mà mọi lệnh downstream đọc (PRD · BDD · tech-doc · design-spec). Range `{old_sha}..{new_sha}` đã có sẵn từ Step 1c, nên thêm nó là thêm **một tham số đường dẫn**.
77
+
78
+ Step này trả lời **hai câu khác nhau**, bằng **hai mốc khác nhau**:
79
+
80
+ | | Mốc | Trả lời | Vấn đề nếu chỉ có cái này |
81
+ |---|---|---|---|
82
+ | **1e-A** | `{old_sha}..{new_sha}` | *"đổi gì kể từ lần **PULL** trước"* | Mốc **reset mỗi lần pull**. Pull 4 ngày liền không audit → ngày thứ 5 chỉ thấy delta của **một ngày** |
83
+ | **1e-B** | `spec_baseline.sha_at_audit` | *"đổi gì kể từ lần **AUDIT** gần nhất"* | — con số này **tích luỹ đúng** |
84
+
85
+ 1e-B đọc khối `spec_baseline` mà `/validate-traces` Step 6b ghi (cùng khối dùng cho cờ `PRD_UNTRACKED_EDIT` của G54). `/sync` **chỉ đọc, không bao giờ ghi** — nếu nó cũng ghi thì mốc audit trượt theo mỗi lần pull, tức phá đúng thứ 1e-B tồn tại để cung cấp. `self-check` R13 canh cả lời khai này.
86
+
87
+ ### Và dòng `Next` không còn là hằng số
88
+
89
+ Bản cũ in cứng `/validate-traces (full coverage check) | /generate-code {UC-ID}` — **y hệt nhau** dù 0 file đổi hay 12 file đổi. Một lời nhắc không bao giờ thay đổi thì không mang thông tin nên bị lướt; cộng thêm việc lệnh duy nhất nó gợi ý là lệnh **đắt nhất** (quét cả repo), nên con đường duy nhất được chỉ là con đường người ta sẽ không đi.
90
+
91
+ Giờ nó rẽ nhánh: có nợ audit → `/validate-traces {các PRD đó}` · chỉ 1e-A có đổi → `/generate-code` cho phần đó · cả hai sạch → `✅ Spec khớp audit — không cần audit lại`.
92
+
93
+ > Đây là nguyên tắc `gate.md` Bước 3b đã áp cho CHECKPOINT (*"cổng luôn in ra một bảng giống hệt nhau … nên `Y` thành phản xạ và cổng hỏng âm thầm"*) — G56 là chỗ nó còn thiếu.
94
+ >
95
+ > **Lưu ý về bản chất:** G56 **không** phải một detector bị hỏng. Mọi detector đều đúng. Đây là một **công tắc bị thiếu** — không ai biết là cần bật.
@@ -1,135 +1,136 @@
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.*
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
+ - [02c · `/amend-prd`](02c-amend-prd.md) — **đổi** một yêu cầu đã duyệt (sửa tại chỗ)
94
+ - [03 · `/refine-prd`](03-refine-prd.md)
95
+ - [04 · `/review-context`](04-review-context.md) *(dùng cho cả PRD & BDD)*
96
+
97
+ ### Phase Design
98
+ - [05 · `/generate-design-spec`](05-generate-design-spec.md)
99
+ - [06 · `/generate-bdd`](06-generate-bdd.md)
100
+ - [07 · `/generate-tech-docs`](07-generate-tech-docs.md)
101
+ - [08 · `/review-tech-docs`](08-review-tech-docs.md)
102
+
103
+ ### Phase Implementation
104
+ - [09 · `/generate-code`](09-generate-code.md)
105
+ - [10 · `/review-code`](10-review-code.md)
106
+ - [11 · `/map-testids`](11-map-testids.md)
107
+
108
+ ### Phase Dev Self-Test
109
+ - [12 · `/dev-gen-test`](12-dev-gen-test.md)
110
+ - [13 · `/dev-run-test`](13-dev-run-test.md)
111
+ - [14 · `/dev-smoke-test`](14-dev-smoke-test.md)
112
+
113
+ ### Phase QC Automation
114
+ - [15 · `/qc-analyze`](15-qc-analyze.md)
115
+ - [16 · `/qc-plan`](16-qc-plan.md)
116
+ - [17 · `/qc-design-test`](17-qc-design-test.md)
117
+ - [18 · `/qc-review`](18-qc-review.md)
118
+ - [19 · `/qc-run-test`](19-qc-run-test.md)
119
+ - [20 · `/qc-report`](20-qc-report.md)
120
+
121
+ ### Phase Trace & Quality
122
+ - [21 · `/validate-traces`](21-validate-traces.md)
123
+ - [22 · `/generate-spec-manifest`](22-generate-spec-manifest.md)
124
+
125
+ ### Lệnh xuyên suốt (Cross-cutting)
126
+ - [23 · `/fix-bug`](23-fix-bug.md)
127
+ - [24 · `/debug`](24-debug.md)
128
+ - [25 · `/report-bug`](25-report-bug.md)
129
+ - [26 · `/propose-scenario`](26-propose-scenario.md)
130
+ - [27 · `/learn`](27-learn.md)
131
+ - [28 · `/sync`](28-sync.md)
132
+ - [29 · `/update-framework`](29-update-framework.md)
133
+
134
+ ---
135
+
136
+ *Nguồn: `commands/*.md` (build từ `.tmpl` + `steps/`). Khi command đổi, cập nhật trang tương ứng ở đây.*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@educa-corp/sdd-framework",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Spec Driven Development workflow framework for Claude Code",
5
5
  "bin": {
6
6
  "sdd-framework": "./bin/index.js"
@@ -12,19 +12,15 @@
12
12
  "dev": "node bin/build.js && node bin/index.js --init",
13
13
  "prepack": "node -e \"const fs=require('fs'); ['README.md','PUBLISHING.md','SETUP_GUIDE.md'].forEach(f=>{ if(fs.existsSync(f)) fs.renameSync(f,'__'+f); });\"",
14
14
  "postpack": "node -e \"const fs=require('fs'); ['README.md','PUBLISHING.md','SETUP_GUIDE.md'].forEach(f=>{ if(fs.existsSync('__'+f)) fs.renameSync('__'+f,f); });\"",
15
- "self-check": "node bin/self-check.js"
15
+ "self-check": "node bin/self-check.js",
16
+ "test": "node test/run.js",
17
+ "lint-trace": "node bin/lint-trace.js",
18
+ "gate-trace": "node bin/gate-trace.js"
16
19
  },
17
20
  "files": [
18
21
  "bin/",
19
- "commands/",
20
22
  "core/",
21
- "hooks/",
22
- "modules/",
23
- "rules/",
24
23
  "scripts/",
25
- "skills/",
26
- "steps/",
27
- "templates/",
28
24
  "docs/"
29
25
  ],
30
26
  "keywords": [