@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
@@ -1,257 +0,0 @@
1
- # /debug — Phân tích Debug nhanh
2
-
3
- Dùng cho: lỗi IDE, test fail, hành vi lạ, hoặc "tại sao code này làm X?"
4
- Khác `/fix-bug`: chỉ phân tích, không full workflow, không cần ticket.
5
-
6
- ## Gate
7
- {{include:steps/gate.md}}
8
-
9
- *Lưu ý: Với lệnh này, target ở Bước 1 là input người dùng cung cấp (stack trace, output test fail, file path + mô tả, hoặc câu hỏi code). Không cần tìm file — đi thẳng sang context loading.*
10
-
11
- ## Context
12
- {{include:steps/context-loader.md}}
13
-
14
- ---
15
-
16
- ## Step 1 — Phân loại loại debug
17
-
18
- Sau khi nạp context, hiện prompt này và chờ user chọn:
19
-
20
- ```
21
- DEBUG SESSION
22
- ──────────────────────────────────────────────────────────────
23
- Tình huống của bạn?
24
-
25
- 1 Tôi đã có stack trace / error log → dán nó
26
- 2 Tôi cần reproduce lỗi trước → chỉ tôi lệnh run
27
- 3 Một test đang fail → tôi sẽ chạy test, rồi dán output
28
- 4 Câu hỏi về code (không cần runtime) → hỏi luôn
29
- ──────────────────────────────────────────────────────────────
30
- Nhập 1 / 2 / 3 / 4:
31
- ```
32
-
33
- Chờ user chọn, rồi theo path tương ứng bên dưới.
34
-
35
- ---
36
-
37
- ### Path 1 — Đã có error output
38
-
39
- Hỏi:
40
- ```
41
- Dán stack trace / error log của bạn bên dưới:
42
- ```
43
-
44
- Chờ input, rồi sang [Stack Trace Analysis](#stack-trace-analysis).
45
-
46
- ---
47
-
48
- ### Path 2 — Cần reproduce trước
49
-
50
- Hiện lệnh run từ `conventions.service_run` trong `project-context.yaml`:
51
-
52
- ```
53
- Khởi động service trước:
54
-
55
- {conventions.service_run}
56
-
57
- (Nếu dùng Docker: `docker compose up -d`, rồi verify với `docker compose ps`)
58
-
59
- Khi service đang chạy:
60
- 1. Trigger hành vi gây lỗi
61
- 2. Copy full stack trace hoặc error log
62
- 3. Dán vào đây
63
-
64
- Đang chờ error output của bạn...
65
- ```
66
-
67
- Chờ user dán lỗi, rồi sang [Stack Trace Analysis](#stack-trace-analysis).
68
-
69
- Nếu `conventions.service_run` chưa set → hiện:
70
- ```
71
- ⚠️ service_run chưa được cấu hình trong .agent/project-context.yaml.
72
- Thêm nó để lệnh này hiện đúng lệnh khởi động:
73
-
74
- conventions:
75
- service_run: "mvn spring-boot:run" # or: npm run dev / go run . / etc.
76
- ```
77
- Rồi nhờ user khởi động service thủ công và dán lỗi khi sẵn sàng.
78
-
79
- ---
80
-
81
- ### Path 3 — Test đang fail
82
-
83
- Hiện lệnh test từ `conventions.test_command` trong `project-context.yaml`:
84
-
85
- ```
86
- Chạy test của bạn trước:
87
-
88
- {conventions.test_command}
89
-
90
- Khi chạy xong, dán full output test fail vào đây.
91
-
92
- Đang chờ...
93
- ```
94
-
95
- Chờ user dán output fail, rồi sang [Test Failure Analysis](#test-failure-analysis).
96
-
97
- Nếu `conventions.test_command` chưa set → hiện:
98
- ```
99
- ⚠️ test_command chưa được cấu hình trong .agent/project-context.yaml.
100
- Thêm nó để lệnh này hiện đúng lệnh test:
101
-
102
- conventions:
103
- test_command: "mvn test" # or: npm test / go test ./... / etc.
104
- ```
105
- Rồi nhờ user chạy test thủ công và dán output khi sẵn sàng.
106
-
107
- ---
108
-
109
- ### Path 4 — Câu hỏi code
110
-
111
- Hỏi:
112
- ```
113
- Mô tả câu hỏi của bạn hoặc dán code snippet bạn đang hỏi:
114
- ```
115
-
116
- Chờ input, rồi trả lời trực tiếp dùng project context đã nạp (quy tắc kiến trúc, thứ tự layer, coding standards từ CLAUDE.md).
117
-
118
- ---
119
-
120
- ## Stack Trace Analysis
121
-
122
- Đọc từ **dưới lên** — `Caused by:` là root cause thật:
123
- ```
124
- Caused by: {RealException} ← bắt đầu ở đây
125
- at {class}.{method}({file}:{line})
126
- ```
127
-
128
- ## Common Error Patterns
129
-
130
- Dùng `active_module` từ context để chọn bảng liên quan.
131
-
132
- ### Nếu `platform_type = backend`
133
-
134
- #### java-spring / golang / dotnet / php-laravel
135
-
136
- | Error | Nguyên nhân khả nghi | Hướng fix |
137
- |-------|-------------|---------------|
138
- | NullPointerException | Truy cập object null; Optional chưa xử lý | Kiểm tra Optional.orElseThrow, null guard |
139
- | ClassCastException | Giả định sai kiểu | Kiểm tra type ở assignment/return |
140
- | OutOfMemoryError | Load quá nhiều data | Thêm pagination |
141
- | StackOverflowError | Đệ quy vô hạn | Tìm recursive call không có base case |
142
- | Connection refused | Dependency chưa chạy | Kiểm tra config URL / khởi động service |
143
- | 401 Unauthorized | Token hết hạn, sai config | Verify token, kiểm tra auth config |
144
- | 403 Forbidden | Sai role | Kiểm tra auth annotation |
145
- | DB constraint violation | Trùng key, null trong NOT NULL | Kiểm tra data và constraint |
146
- | Serialization error | Circular reference | Kiểm tra config DTO/mapper |
147
- | Test assertion mismatch | Sai mock hoặc sai expected | Đọc lại setup mock |
148
-
149
- #### context-engineering (AI/LLM pipelines)
150
-
151
- | Error | Nguyên nhân khả nghi | Hướng fix |
152
- |-------|-------------|---------------|
153
- | `APIError` / `RateLimitError` | Vượt quota LLM hoặc service down | Kiểm tra API key, rate limit; thêm exponential backoff |
154
- | `TokenLimitError` / `context_length_exceeded` | Prompt input quá dài | Truncate/chunk input; review kích thước prompt template |
155
- | `AuthenticationError` | API key không hợp lệ hoặc hết hạn | Kiểm tra env var; rotate key |
156
- | Response validation / schema mismatch | Output LLM không khớp format kỳ vọng | Thêm output parser; retry với prompt chặt hơn |
157
- | `JSONDecodeError` trên output LLM | Model trả về text non-JSON | Thêm post-processing trích JSON hoặc system prompt chặt hơn |
158
- | Test treo / chậm | LLM thật bị gọi trong test thay vì mock | Verify `patch('...')` được áp; thêm timeout guard |
159
- | Kết quả flaky giữa các lần chạy | Response LLM non-deterministic | Dùng mock cố định trong test; check temperature = 0 cho determinism |
160
-
161
- ### Nếu `platform_type = web-frontend`
162
-
163
- | Error | Nguyên nhân khả nghi | Hướng fix |
164
- |-------|-------------|---------------|
165
- | `Cannot read properties of undefined` | Data chưa load | Thêm loading guard / optional chaining `?.` |
166
- | `useEffect` infinite loop | Dependency array sai | Review deps, dùng stable ref / `useCallback` |
167
- | `Cannot update state on unmounted component` | Async resolve sau unmount | Cancel trong cleanup / dùng AbortController |
168
- | CORS error | API chưa cấu hình | Kiểm tra CORS config backend hoặc dev proxy |
169
- | 401 Unauthorized | Token hết hạn hoặc thiếu | Refresh token / kiểm tra header Authorization |
170
- | White screen / no output | Render error chưa xử lý | Kiểm tra console browser, thêm ErrorBoundary |
171
- | Type error (Zod / TypeScript) | Shape response API mismatch | So response thực tế vs type definition |
172
- | `act(...)` warning trong test | Async state update | Bọc trong `act(async () => {...})` |
173
- | Module not found | Sai import path | Kiểm tra relative path / tsconfig alias |
174
-
175
- ### Nếu `platform_type = mobile`
176
-
177
- #### Flutter
178
- | Error | Nguyên nhân khả nghi | Hướng fix |
179
- |-------|-------------|---------------|
180
- | `Null check operator on null value` | Nullable chưa guard | Thêm `?` hoặc null check trước `!` |
181
- | `pumpAndSettle timed out` | Async chưa hoàn thành trong test | Dùng `pump(Duration(...))` |
182
- | `setState called after dispose` | Async tiếp tục sau khi widget bị bỏ | Cancel trong `dispose()` |
183
- | `RenderFlex overflow` | Widget quá rộng so với màn | Bọc `Flexible`, `Expanded`, hoặc `SingleChildScrollView` |
184
- | BLoC state không update | Event chưa dispatch | Verify `bloc.add(Event())` được gọi |
185
- | `MissingPluginException` | Native plugin chưa link | Chạy `flutter clean && flutter pub get` |
186
-
187
- #### React Native
188
- | Error | Nguyên nhân khả nghi | Hướng fix |
189
- |-------|-------------|---------------|
190
- | `undefined is not an object` | Truy cập prop null | Thêm null check / optional chaining |
191
- | Metro bundler error | Cache stale | `npx react-native start --reset-cache` |
192
- | `VirtualizedLists nested` | FlatList trong ScrollView | Dùng `nestedScrollEnabled` hoặc tái cấu trúc |
193
- | Navigation `undefined` | `useNavigation` ngoài navigator | Bọc component trong đúng navigator |
194
- | `act(...)` warning | Async state update trong test | Bọc trong `act(async () => {...})` |
195
-
196
- #### iOS / Android
197
- | Error | Nguyên nhân khả nghi | Hướng fix |
198
- |-------|-------------|---------------|
199
- | `SIGABRT` / `EXC_BAD_ACCESS` (iOS) | Nil dereference | Thêm optional binding `if let` / `guard let` |
200
- | `IllegalStateException` (Android) | Vi phạm lifecycle | Kiểm tra fragment/activity còn attached không |
201
- | `NetworkOnMainThreadException` | Network call trên UI thread | Chuyển sang coroutine / background thread |
202
- | Build fail sau pod install | Pod cache stale | `pod deintegrate && pod install` |
203
- | `Hilt injection failed` | Thiếu `@AndroidEntryPoint` | Thêm annotation vào Activity/Fragment |
204
-
205
- ## Test Failure Analysis
206
-
207
- ```
208
- Expected: {value}
209
- Actual : {value}
210
- at {test}.{method}(line {N})
211
- ```
212
- 1. Gap là gì? 2. Mock setup đúng chưa? 3. Assertion có đúng logic không?
213
-
214
- ---
215
-
216
- ## Output
217
-
218
- {{include:steps/report-footer.md}}
219
-
220
- ```
221
- /debug Analysis
222
-
223
- ## Error
224
- {description}
225
-
226
- ## Root Cause
227
- {giải thích kỹ thuật}
228
-
229
- ## Location
230
- File: {path} | Line: {N} | Layer: {Controller/Service/Repository/Test}
231
-
232
- ## Suggested Fix
233
- {thay đổi code cụ thể}
234
-
235
- ## Related Rule
236
- Xem CLAUDE.md §{section}
237
-
238
- ## Next Step
239
- - Để fix hoàn toàn → /fix-bug {TICKET_ID}
240
- - Chỉ cần phân tích → xong
241
- ```
242
-
243
- ---
244
-
245
- ## Đề xuất ghi Lesson (tuỳ chọn)
246
-
247
- Nếu root cause là một **lỗi AI gây ra khi sinh code và có thể lặp lại**
248
- (không phải vấn đề env/config hay nguyên nhân bên ngoài), hỏi:
249
-
250
- ```
251
- Cái này trông như một lỗi AI lặp lại. Ghi nó thành project lesson? (Y/N)
252
- ```
253
-
254
- Nếu `Y` → chạy quy trình capture bên dưới với `source=/debug`, một `category` phù hợp
255
- (thường `code-gen`), và `scope` = domain hoặc file glob bị ảnh hưởng.
256
-
257
- {{include:steps/capture-lesson.md}}