@educa-corp/sdd-framework 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/bin/gate-trace.js +25 -2
  2. package/bin/index.js +32 -5
  3. package/bin/lint-trace.js +41 -0
  4. package/bin/self-check.js +430 -3
  5. package/bin/trace-schema.json +418 -31
  6. package/core/FRAMEWORK_VERSION +1 -1
  7. package/{commands/extend-prd.md → core/commands/amend-prd.md} +206 -173
  8. package/core/commands/dev-run-test.md +48 -10
  9. package/core/commands/extend-prd.md +39 -12
  10. package/core/commands/generate-bdd.md +52 -10
  11. package/core/commands/generate-code.md +35 -2
  12. package/core/commands/generate-tech-docs.md +36 -4
  13. package/core/commands/map-testids.md +1 -1
  14. package/core/commands/qc-run-test.md +29 -3
  15. package/core/commands/refine-prd.md +13 -2
  16. package/core/commands/review-context.md +43 -8
  17. package/core/commands/sync.md +105 -1
  18. package/core/commands/validate-traces.md +289 -16
  19. package/core/rules/workflow.md +34 -0
  20. package/core/steps/context-loader.md +27 -6
  21. package/core/templates/feature.template +1 -1
  22. package/core/templates/project-context.yaml +3 -3
  23. package/core/templates/tech-design.template.md +2 -2
  24. package/docs/02-concepts/architecture.md +37 -1
  25. package/docs/02-concepts/overview.md +1 -1
  26. package/docs/02-concepts/pipeline-steps/02-specification.md +13 -7
  27. package/docs/02-concepts/pipeline-steps/07-dev-selftest.md +2 -0
  28. package/docs/02-concepts/pipeline-steps/08-qc-automation.md +1 -0
  29. package/docs/02-concepts/pipeline-steps/09-validate-traces.md +34 -3
  30. package/docs/02-concepts/pipeline-steps/10-feedback-loop.md +10 -1
  31. package/docs/02-concepts/traceability.md +187 -183
  32. package/docs/03-guides/architect.md +13 -4
  33. package/docs/03-guides/developer.md +1 -0
  34. package/docs/03-guides/product-owner.md +89 -72
  35. package/docs/03-guides/tester-qa.md +81 -81
  36. package/docs/04-reference/commands.md +148 -134
  37. package/docs/04-reference/trace-schema.md +45 -1
  38. package/docs/explain/02b-extend-prd.md +1 -1
  39. package/docs/explain/02c-amend-prd.md +152 -0
  40. package/docs/explain/06-generate-bdd.md +1 -1
  41. package/docs/explain/13-dev-run-test.md +15 -1
  42. package/docs/explain/19-qc-run-test.md +91 -87
  43. package/docs/explain/21-validate-traces.md +79 -75
  44. package/docs/explain/28-sync.md +25 -0
  45. package/docs/explain/README.md +136 -135
  46. package/package.json +1 -8
  47. package/commands/debug.md +0 -529
  48. package/commands/debug.tmpl +0 -260
  49. package/commands/define-product.md +0 -438
  50. package/commands/define-product.tmpl +0 -225
  51. package/commands/dev-gen-test.md +0 -700
  52. package/commands/dev-gen-test.tmpl +0 -490
  53. package/commands/dev-run-test.md +0 -435
  54. package/commands/dev-run-test.tmpl +0 -225
  55. package/commands/dev-smoke-test.md +0 -374
  56. package/commands/dev-smoke-test.tmpl +0 -217
  57. package/commands/extend-prd.tmpl +0 -273
  58. package/commands/fix-bug.md +0 -519
  59. package/commands/fix-bug.tmpl +0 -197
  60. package/commands/generate-architecture.md +0 -354
  61. package/commands/generate-architecture.tmpl +0 -197
  62. package/commands/generate-bdd.md +0 -923
  63. package/commands/generate-bdd.tmpl +0 -590
  64. package/commands/generate-code.md +0 -859
  65. package/commands/generate-code.tmpl +0 -649
  66. package/commands/generate-design-spec.md +0 -737
  67. package/commands/generate-design-spec.tmpl +0 -524
  68. package/commands/generate-prd.md +0 -722
  69. package/commands/generate-prd.tmpl +0 -226
  70. package/commands/generate-spec-manifest.md +0 -321
  71. package/commands/generate-spec-manifest.tmpl +0 -164
  72. package/commands/generate-tech-docs.md +0 -920
  73. package/commands/generate-tech-docs.tmpl +0 -273
  74. package/commands/learn.md +0 -399
  75. package/commands/learn.tmpl +0 -130
  76. package/commands/map-testids.md +0 -238
  77. package/commands/map-testids.tmpl +0 -81
  78. package/commands/propose-scenario.md +0 -359
  79. package/commands/propose-scenario.tmpl +0 -202
  80. package/commands/qc-analyze.md +0 -269
  81. package/commands/qc-analyze.tmpl +0 -112
  82. package/commands/qc-design-test.md +0 -226
  83. package/commands/qc-design-test.tmpl +0 -69
  84. package/commands/qc-plan.md +0 -206
  85. package/commands/qc-plan.tmpl +0 -49
  86. package/commands/qc-report.md +0 -217
  87. package/commands/qc-report.tmpl +0 -60
  88. package/commands/qc-review.md +0 -210
  89. package/commands/qc-review.tmpl +0 -53
  90. package/commands/qc-run-test.md +0 -326
  91. package/commands/qc-run-test.tmpl +0 -116
  92. package/commands/refine-prd.md +0 -653
  93. package/commands/refine-prd.tmpl +0 -281
  94. package/commands/report-bug.md +0 -305
  95. package/commands/report-bug.tmpl +0 -148
  96. package/commands/review-code.md +0 -415
  97. package/commands/review-code.tmpl +0 -146
  98. package/commands/review-context.md +0 -902
  99. package/commands/review-context.tmpl +0 -530
  100. package/commands/review-tech-docs.md +0 -561
  101. package/commands/review-tech-docs.tmpl +0 -404
  102. package/commands/setup-ai-first.md +0 -602
  103. package/commands/setup-ai-first.tmpl +0 -450
  104. package/commands/sync.md +0 -430
  105. package/commands/sync.tmpl +0 -429
  106. package/commands/update-framework.md +0 -203
  107. package/commands/update-framework.tmpl +0 -202
  108. package/commands/validate-traces.md +0 -1077
  109. package/commands/validate-traces.tmpl +0 -920
  110. package/hooks/data-guard.js +0 -232
  111. package/hooks/settings.json +0 -19
  112. package/modules/android-compose/module.yaml +0 -13
  113. package/modules/android-compose/stack-profile.yaml +0 -57
  114. package/modules/angular/architecture-snippets/component-patterns.md +0 -187
  115. package/modules/angular/module.yaml +0 -6
  116. package/modules/angular/stack-profile.yaml +0 -38
  117. package/modules/context-engineering/architecture-snippets/context-design.md +0 -119
  118. package/modules/context-engineering/module.yaml +0 -9
  119. package/modules/context-engineering/stack-profile.yaml +0 -61
  120. package/modules/dotnet/architecture-snippets/clean-arch.md +0 -160
  121. package/modules/dotnet/module.yaml +0 -6
  122. package/modules/dotnet/stack-profile.yaml +0 -50
  123. package/modules/flutter/module.yaml +0 -14
  124. package/modules/flutter/stack-profile.yaml +0 -59
  125. package/modules/golang/architecture-snippets/domain-layout.md +0 -283
  126. package/modules/golang/module.yaml +0 -6
  127. package/modules/golang/stack-profile.yaml +0 -40
  128. package/modules/ios-swiftui/module.yaml +0 -13
  129. package/modules/ios-swiftui/stack-profile.yaml +0 -55
  130. package/modules/java-spring/architecture-snippets/layered-arch.md +0 -201
  131. package/modules/java-spring/module.yaml +0 -15
  132. package/modules/java-spring/stack-profile.yaml +0 -28
  133. package/modules/nextjs/architecture-snippets/app-router-patterns.md +0 -269
  134. package/modules/nextjs/module.yaml +0 -14
  135. package/modules/nextjs/stack-profile.yaml +0 -74
  136. package/modules/nuxt/module.yaml +0 -14
  137. package/modules/nuxt/stack-profile.yaml +0 -58
  138. package/modules/phaser-game/architecture-snippets/phaser-scene-patterns.md +0 -646
  139. package/modules/phaser-game/module.yaml +0 -15
  140. package/modules/phaser-game/stack-profile.yaml +0 -90
  141. package/modules/php-laravel/architecture-snippets/service-repository.md +0 -302
  142. package/modules/php-laravel/module.yaml +0 -15
  143. package/modules/php-laravel/stack-profile.yaml +0 -56
  144. package/modules/qc-playwright/stack-profile.yaml +0 -66
  145. package/modules/react/architecture-snippets/hooks-query-patterns.md +0 -254
  146. package/modules/react/module.yaml +0 -14
  147. package/modules/react/stack-profile.yaml +0 -63
  148. package/modules/react-native/module.yaml +0 -14
  149. package/modules/react-native/stack-profile.yaml +0 -56
  150. package/modules/vue/module.yaml +0 -14
  151. package/modules/vue/stack-profile.yaml +0 -65
  152. package/rules/data-protection.md +0 -80
  153. package/rules/workflow.md +0 -99
  154. package/skills/code/SKILL.md +0 -19
  155. package/skills/code/SKILL.tmpl +0 -19
  156. package/skills/debug/SKILL.md +0 -19
  157. package/skills/debug/SKILL.tmpl +0 -19
  158. package/skills/design-spec/SKILL.md +0 -11
  159. package/skills/design-spec/SKILL.tmpl +0 -11
  160. package/skills/discovery/SKILL.md +0 -14
  161. package/skills/discovery/SKILL.tmpl +0 -14
  162. package/skills/prd/SKILL.md +0 -19
  163. package/skills/prd/SKILL.tmpl +0 -19
  164. package/skills/qc/qa-analyst/DOC_GAPS.template.md +0 -63
  165. package/skills/qc/qa-analyst/acceptance-criteria.md +0 -60
  166. package/skills/qc/qa-analyst/business-rules.md +0 -59
  167. package/skills/qc/qa-analyst/data-flow.md +0 -64
  168. package/skills/qc/qa-analyst/spec-breakdown.md +0 -61
  169. package/skills/qc/qa-designer/e2e/journey.md +0 -41
  170. package/skills/qc/qa-designer/exploratory/charter.md +0 -68
  171. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +0 -43
  172. package/skills/qc/qa-designer/functional/api.md +0 -45
  173. package/skills/qc/qa-designer/functional/gui-feature.md +0 -46
  174. package/skills/qc/qa-designer/functional/gui-screen.md +0 -52
  175. package/skills/qc/qa-designer/integration/api.md +0 -42
  176. package/skills/qc/qa-designer/integration/db.md +0 -39
  177. package/skills/qc/qa-designer/integration/gui.md +0 -40
  178. package/skills/qc/qa-designer/integration/kafka.md +0 -40
  179. package/skills/qc/qa-designer/non-functional.md +0 -40
  180. package/skills/qc/qa-planner/test-plan.md +0 -120
  181. package/skills/qc/qa-reviewer/script/e2e.md +0 -87
  182. package/skills/qc/qa-reviewer/script/exploratory.md +0 -45
  183. package/skills/qc/qa-reviewer/script/functional.md +0 -101
  184. package/skills/qc/qa-reviewer/script/integration.md +0 -91
  185. package/skills/qc/qa-reviewer/script/non-functional.md +0 -126
  186. package/skills/qc/qa-reviewer/test-case/e2e.md +0 -73
  187. package/skills/qc/qa-reviewer/test-case/exploratory.md +0 -43
  188. package/skills/qc/qa-reviewer/test-case/functional.md +0 -76
  189. package/skills/qc/qa-reviewer/test-case/integration.md +0 -69
  190. package/skills/qc/qa-reviewer/test-case/non-functional.md +0 -73
  191. package/skills/qc/qa-runner/e2e.md +0 -49
  192. package/skills/qc/qa-runner/exploratory/session.md +0 -36
  193. package/skills/qc/qa-runner/functional/api.md +0 -35
  194. package/skills/qc/qa-runner/functional/gui-feature.md +0 -51
  195. package/skills/qc/qa-runner/functional/gui-screen.md +0 -55
  196. package/skills/qc/qa-runner/integration.md +0 -47
  197. package/skills/qc/qa-runner/non-functional.md +0 -49
  198. package/skills/qc/qa-runner/report/report.md +0 -37
  199. package/skills/setup-ai-first/SKILL.md +0 -19
  200. package/skills/setup-ai-first/SKILL.tmpl +0 -19
  201. package/skills/spec/SKILL.md +0 -19
  202. package/skills/spec/SKILL.tmpl +0 -19
  203. package/skills/test/SKILL.md +0 -18
  204. package/skills/test/SKILL.tmpl +0 -18
  205. package/steps/business-language.md +0 -56
  206. package/steps/capture-lesson.md +0 -112
  207. package/steps/context-loader.md +0 -406
  208. package/steps/gate.md +0 -151
  209. package/steps/report-footer.md +0 -125
  210. package/steps/review-fanout.md +0 -159
  211. package/steps/spawn-agent.md +0 -129
  212. package/steps/trace-mirror.md +0 -53
  213. package/templates/README.md +0 -70
  214. package/templates/architecture.template.md +0 -394
  215. package/templates/ci/trace-gate.yml +0 -146
  216. package/templates/design-spec.template.md +0 -217
  217. package/templates/feature.template +0 -123
  218. package/templates/hooks/pre-push +0 -61
  219. package/templates/platform-guide.template.md +0 -145
  220. package/templates/prd.template.md +0 -283
  221. package/templates/product-definition.template.md +0 -188
  222. package/templates/project-context.yaml +0 -212
  223. package/templates/tech-design.template.md +0 -490
@@ -1,164 +0,0 @@
1
- # /generate-spec-manifest — Sinh Spec Manifest cho External Agent
2
-
3
- Quét tất cả file spec và ghi một `spec-manifest.yaml` ở project root.
4
- File này dành cho **external agent** (vd agent của tester) — nó không commit vào git.
5
-
6
- ## Gate
7
-
8
- {{include:steps/gate.md}}
9
-
10
- *Lưu ý: Với lệnh này, không có target file — nó quét cả dự án. Bỏ qua `$ARGUMENTS` trừ khi truyền domain filter.*
11
-
12
- ## Context
13
-
14
- {{include:steps/context-loader.md}}
15
-
16
- ---
17
-
18
- ## Process
19
-
20
- ### Step 1 — Xác định scan root
21
-
22
- Đọc `project-context.yaml` để xác định mode và path:
23
-
24
- **Umbrella mode** (`setup.mode: umbrella`):
25
- ```
26
- spec_root = {setup.spec_source} ← spec submodule của PO
27
- prd_glob = {spec_root}/specs/*/*/*.md ← file .md ở gốc feature folder = PRD ({TICKET-ID}-{prd-slug}.md)
28
- pdd_glob = {spec_root}/specs/product-definition/**/*.md
29
- services = {services} ← map domain → paths
30
- ```
31
-
32
- **Single-service mode** (không có `setup.mode`):
33
- ```
34
- spec_root = .
35
- prd_glob = {paths.specs_dir}/*/*/*.md ← file .md ở gốc feature folder = PRD ({TICKET-ID}-{prd-slug}.md)
36
- pdd_glob = {paths.product_definitions_dir}/**/*.md
37
- services = { default: { specs_dir: {paths.specs_dir}, tech_docs_dir: {paths.tech_docs_dir} } }
38
- ```
39
-
40
- Nếu truyền domain filter trong `$ARGUMENTS` → chỉ quét PRD khớp domain đó.
41
-
42
- ---
43
-
44
- ### Step 2 — Quét file PRD
45
-
46
- Với mỗi file `.md` khớp `prd_glob`:
47
-
48
- 1. Đọc bảng metadata của file:
49
- - `TICKET-ID` từ `| **PRD ID** |`
50
- - `domain` từ `| **Domain** |`
51
- - `status` từ `| **Status** |`
52
- - `version` từ `| **Version** |`
53
- 2. Cũng đọc frontmatter `@trace.domain` nếu có (dùng cái này thay vì domain bảng metadata nếu cả hai tồn tại)
54
- 3. Ghi: `{ ticket_id, domain, status, version, prd_path }` — path tương đối với manifest root
55
-
56
- Skip file không xác định được `TICKET-ID`.
57
-
58
- ---
59
-
60
- ### Step 3 — Khớp file PDD
61
-
62
- Với mỗi TICKET-ID tìm thấy ở Step 2:
63
-
64
- Tìm `pdd_glob` một file có tên chứa TICKET-ID (vd `FT-001-*.md`).
65
- - Tìm thấy → ghi `pdd_path` (tương đối với manifest root)
66
- - Không thấy → ghi `pdd: null`
67
-
68
- ---
69
-
70
- ### Step 4 — Khớp file BDD và Tech-Doc theo từng service
71
-
72
- Với mỗi TICKET-ID, với mỗi service trong map `services`:
73
-
74
- **BDD:**
75
- - Glob `{service.specs_dir}/**/{TICKET-ID}*.feature`
76
- - Cũng kiểm tra file chứa `@trace.prd: {TICKET-ID}` trong frontmatter nếu glob không trả gì
77
- - Tìm thấy → ghi path dưới `bdd.{service_key}`
78
- - Không thấy → bỏ key (đừng ghi `null` cho service chưa có BDD)
79
-
80
- **Tech-docs:**
81
- - Glob `{service.tech_docs_dir}/**/{TICKET-ID}*.md`
82
- - Cũng kiểm tra file chứa `@trace.prd: {TICKET-ID}` nếu glob không trả gì
83
- - Tìm thấy → ghi path dưới `tech_docs.{service_key}`
84
- - Không thấy → bỏ key
85
-
86
- Mọi path tương đối với manifest root (umbrella root hoặc project root).
87
-
88
- ---
89
-
90
- ### Step 5 — Ghi spec-manifest.yaml
91
-
92
- Ghi vào `{manifest_root}/spec-manifest.yaml` (ghi đè nếu tồn tại).
93
-
94
- Format:
95
-
96
- ```yaml
97
- # Auto-generated by /generate-spec-manifest — DO NOT edit manually
98
- # To regenerate: /generate-spec-manifest
99
- # This file is excluded from git — see .gitignore
100
-
101
- version: "1.0"
102
- generated_at: "{YYYY-MM-DD}"
103
- project_mode: "{umbrella | single}"
104
-
105
- features:
106
- {TICKET-ID}:
107
- domain: {domain}
108
- status: {status}
109
- prd_version: "{version}"
110
- prd: "{prd_path}"
111
- pdd: "{pdd_path}" # omit if null
112
- tech_docs:
113
- {service_key}: "{path}" # only include services where file was found
114
- bdd:
115
- {service_key}: "{path}" # only include services where file was found
116
- ```
117
-
118
- Sort features theo TICKET-ID alphabet.
119
- Bỏ hẳn block `tech_docs` nếu không tìm thấy tech-doc cho service nào.
120
- Bỏ hẳn block `bdd` nếu không tìm thấy BDD cho service nào.
121
-
122
- ---
123
-
124
- ### Step 6 — Đảm bảo .gitignore
125
-
126
- Kiểm tra `{manifest_root}/.gitignore`:
127
- - Nếu `spec-manifest.yaml` đã được liệt kê → không làm gì
128
- - Nếu chưa → append vào `.gitignore`:
129
-
130
- ```
131
- # Auto-generated — do not commit
132
- spec-manifest.yaml
133
- ```
134
-
135
- In: `✅ spec-manifest.yaml added to .gitignore`
136
-
137
- ---
138
-
139
- ## Output
140
-
141
- {{include:steps/report-footer.md}}
142
-
143
- ```
144
- /generate-spec-manifest Hoàn tất
145
- ---
146
- Status : ✅ Complete
147
- Output : spec-manifest.yaml ({N} features)
148
- Mode : {umbrella | single}
149
- .gitignore : ✅ spec-manifest.yaml excluded
150
-
151
- Summary:
152
- {N} PRD scanned ({A} approved, {D} draft)
153
- {N} PDD matched
154
- {N} BDD file matched (across {S} services)
155
- {N} Tech-doc file matched (across {S} services)
156
-
157
- ⚠️ {N} PRD không có BDD khớp:
158
- - {TICKET-ID} ({domain}) — chạy /generate-bdd trước
159
- ⚠️ {N} PRD không có tech-docs khớp:
160
- - {TICKET-ID} ({domain}) — chạy /generate-tech-docs trước
161
-
162
- Next : Chia sẻ path spec-manifest.yaml với tester agent
163
- Sinh lại bất cứ lúc nào: /generate-spec-manifest
164
- ```