ai-developer-skill-os 9.1.2 → 9.3.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 (63) hide show
  1. package/.agents/AGENTS.md +139 -42
  2. package/.agents/DEV_PROFILE.md +95 -0
  3. package/.agents/registry/capability-graph.yml +171 -334
  4. package/.agents/registry/graph.json +37 -19
  5. package/.agents/registry/index.yaml +59 -13
  6. package/.agents/registry/skills-index.yml +204 -447
  7. package/.agents/rules/coding.md +23 -0
  8. package/.agents/rules/global.md +44 -30
  9. package/.agents/skills/_template/SKILL.md +2 -377
  10. package/.agents/skills/qk-access-policy/SKILL.md +98 -473
  11. package/.agents/skills/qk-agent-observability/SKILL.md +3 -439
  12. package/.agents/skills/qk-ai-builder/SKILL.md +132 -565
  13. package/.agents/skills/qk-api-consumer/SKILL.md +256 -0
  14. package/.agents/skills/qk-api-consumer/capability.yaml +21 -0
  15. package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +29 -0
  16. package/.agents/skills/qk-api-lifecycle/SKILL.md +133 -456
  17. package/.agents/skills/qk-bug-resolution/SKILL.md +128 -561
  18. package/.agents/skills/qk-code-review/SKILL.md +142 -420
  19. package/.agents/skills/qk-context-loader/SKILL.md +99 -471
  20. package/.agents/skills/qk-data-engineer/SKILL.md +119 -340
  21. package/.agents/skills/qk-data-lifecycle/SKILL.md +89 -488
  22. package/.agents/skills/qk-db-optimizer/SKILL.md +102 -488
  23. package/.agents/skills/qk-design-system-engineering/SKILL.md +76 -461
  24. package/.agents/skills/qk-devops-platform/SKILL.md +77 -463
  25. package/.agents/skills/qk-docs/SKILL.md +88 -494
  26. package/.agents/skills/qk-engineering-standard/SKILL.md +4 -588
  27. package/.agents/skills/qk-fe-api-integration/SKILL.md +343 -343
  28. package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +29 -29
  29. package/.agents/skills/qk-feature-delivery/SKILL.md +137 -445
  30. package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
  31. package/.agents/skills/qk-frontend-architecture/SKILL.md +5 -479
  32. package/.agents/skills/qk-help/evals/scorecard.yaml +13 -13
  33. package/.agents/skills/qk-orchestrator/SKILL.md +63 -502
  34. package/.agents/skills/qk-orchestrator/references/routing-table.md +10 -14
  35. package/.agents/skills/qk-product-specification/SKILL.md +70 -479
  36. package/.agents/skills/qk-production-release/SKILL.md +80 -537
  37. package/.agents/skills/qk-project-audit/SKILL.md +174 -0
  38. package/.agents/skills/qk-project-bootstrap/SKILL.md +243 -471
  39. package/.agents/skills/qk-project-health/SKILL.md +97 -496
  40. package/.agents/skills/qk-project-memory/SKILL.md +76 -21
  41. package/.agents/skills/qk-refactor/SKILL.md +167 -384
  42. package/.agents/skills/qk-security-audit/SKILL.md +141 -463
  43. package/.agents/skills/qk-security-audit/capability.yaml +1 -2
  44. package/.agents/skills/qk-system-evolution/SKILL.md +343 -343
  45. package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +26 -26
  46. package/.agents/skills/qk-test-engineering/SKILL.md +119 -509
  47. package/.agents/skills/qk-ui-audit/SKILL.md +73 -537
  48. package/.agents/skills/qk-ui-builder/SKILL.md +521 -482
  49. package/.agents/skills/qk-ui-system-builder/SKILL.md +68 -514
  50. package/.agents/skills/qk-upgrade/SKILL.md +301 -0
  51. package/.agents/skills/qk-upgrade/capability.yaml +24 -0
  52. package/.agents/skills/qk-upgrade/evals/scorecard.yaml +26 -0
  53. package/.agents/skills/qk-validation-gate/SKILL.md +4 -603
  54. package/.agents/skills/qk-web-quality-gate/SKILL.md +85 -463
  55. package/.agents/workflows/bug-resolution.yml +6 -6
  56. package/.agents/workflows/context-discovery.yml +94 -0
  57. package/.agents/workflows/feature-delivery.yml +8 -4
  58. package/.agents/workflows/refactor.yml +6 -3
  59. package/.agents/workflows/shared/quality-gate.yml +94 -0
  60. package/.agents/workflows/skin-governance.yml +115 -0
  61. package/README.md +152 -67
  62. package/package.json +2 -2
  63. package/tooling/build-registry.js +30 -8
@@ -1,9 +1,9 @@
1
- ---
1
+ ---
2
2
  # ── Identity ───────────────────────────────────────────────
3
3
  name: qk-test-engineering
4
- version: 9.1.0
5
- status: experimental
6
- description: "Công cụ quyết định chiến lược kiểm thử (Unit, Integration, E2E, Coverage, Regression, Mock)."
4
+ version: 9.2.0
5
+ status: stable
6
+ description: "Thiết kế chiến lược kiểm thử toàn diện và viết bộ test tự động: Test Pyramid (Unit, Integration, E2E), Mocking strategy, Edge-case coverage, Regression testing. Dùng skill này khi user nhắc đến: viết test, test strategy, unit test, coverage, e2e, integration test, mock data, pytest, vitest, playwright — kể cả khi chỉ nói 'viết test cho module này'."
7
7
  platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
8
8
 
9
9
  # ── V9: Classification ─────────────────────────────────────
@@ -11,11 +11,10 @@ type: capability
11
11
 
12
12
  intent:
13
13
  - testing-strategy
14
- - unit-test-strategy
15
- - integration-test-strategy
16
- - e2e-test-strategy
17
- - mock-strategy
18
- - test-coverage-planning
14
+ - unit-testing
15
+ - integration-testing
16
+ - e2e-testing
17
+ - test-automation
19
18
 
20
19
  complexity:
21
20
  level: high
@@ -25,11 +24,18 @@ complexity:
25
24
  has_external_dependency: true
26
25
  has_breaking_change: false
27
26
 
28
- triggers:
29
- - "chiến lược test"
30
- - "viết test"
31
- - "mock data"
32
- - "test coverage"
27
+ triggers:
28
+ - "viết test"
29
+ - "test strategy"
30
+ - "unit test"
31
+ - "coverage"
32
+ - "e2e"
33
+ - "integration test"
34
+ - "mock data"
35
+ - "pytest"
36
+ - "vitest"
37
+ - "playwright"
38
+
33
39
 
34
40
  # ── V8: References ─────────────────────────────────────────
35
41
  workflow: feature-delivery
@@ -43,7 +49,8 @@ tools:
43
49
  - terminal
44
50
 
45
51
  related_skills:
46
- - qk-engineering-standard
52
+ - qk-code-review
53
+ - qk-bug-resolution
47
54
 
48
55
  knowledge_scope:
49
56
  domain:
@@ -52,57 +59,24 @@ knowledge_scope:
52
59
  - unit-testing
53
60
  - integration-testing
54
61
  - e2e-testing
55
- - visual-regression
56
62
  concepts:
57
63
  - test-pyramid
58
64
  - mock-strategy
65
+ - arrange-act-assert
59
66
  references:
60
67
  - architecture
61
- - anti-patterns
62
- - playwright
63
68
  - vitest
64
- - storybook-testing
65
-
66
- decision_boundary:
67
- owns:
68
- - test pyramid
69
- - coverage strategy
70
- - regression planning
71
- does_not_own:
72
- - business logic implementation
73
- - writing tests
74
- conflicts_with: []
69
+ - pytest
70
+ - playwright
75
71
 
76
72
  # ── V8: Verification ───────────────────────────────────────
77
73
  verification:
78
74
  required: true
79
75
  strategy: feature
80
76
 
81
- lifecycle:
82
- promotion_gate:
83
- requirements:
84
- tests:
85
- minimum_pass_rate: 0.95
86
- usage:
87
- minimum_runs: 20
88
- conflicts:
89
- zero_boundary_violation: true
90
- evidence:
91
- required:
92
- - evaluation_report
93
- - usage_history
94
- - boundary_audit
95
- demotion_gate:
96
- triggers:
97
- - repeated_failure
98
- - boundary_violation
99
- - outdated_reference
100
- action:
101
- change_status: "stable -> experimental"
102
-
103
77
  selection:
104
- priority: medium
105
- confidence_threshold: 0.80
78
+ priority: high
79
+ confidence_threshold: 0.85
106
80
 
107
81
  examples: []
108
82
  learnings: []
@@ -112,494 +86,130 @@ execution_mode: deterministic
112
86
  cost: medium
113
87
  latency: medium
114
88
  risk: low
115
- side_effects: read_only
116
- produces: [report, test_plan]
117
- consumes: [user-description]
89
+ side_effects: edit_files
90
+ produces: [code, test_plan]
91
+ consumes: [source-code, user-description]
118
92
 
119
93
  token_budget:
120
- max_files_read: 5
94
+ max_files_read: 6
121
95
  max_lines_per_read: 150
122
- max_shell_commands: 0
96
+ max_shell_commands: 3
123
97
  stop_early: true
124
98
 
125
- exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
99
+ exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
126
100
  ---
127
101
 
128
- # qk-test-engineering — Test Engineering Strategist
102
+ # qk-test-engineering — Automated Testing & Quality Architect
129
103
 
130
104
  > **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
131
105
 
132
- ## Memory Workflow
133
-
134
- ### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
135
- - Trước khi tra cứu hoặc lưu trữ tri thức, BẮT BUỘC kiểm tra sự tồn tại của thư mục `.ai-local/` tại gốc dự án:
136
- - **Tự động tạo mới:** Nếu `.ai-local/` chưa tồn tại, AI phải tự động tạo cấu trúc thư mục `.ai-local/knowledge/` (và file `index.yaml` nếu cần thiết) cùng `.ai-local/candidates/`. Tuyệt đối không ngưng chạy hay hỏi ý kiến người dùng về thao tác khởi tạo tiêu chuẩn này.
137
- - **Bảo mật Gitignore:** BẮT BUỘC kiểm tra file `.gitignore` của dự án, nếu chưa có dòng `.ai-local/` thì phải tự động thêm vào để tuyệt đối bảo mật tri thức cá nhân và tránh lộ lọt lên Git.
138
-
139
- ---
140
-
141
- ### Pre-flight Retrieve (Trước khi thực thi)
142
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
143
- bắt buộc tra cứu:
144
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
145
-
146
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
147
- - Architecture
148
- - Hard Bug
149
- - Convention
150
- - Pattern
151
- - Tech Debt Pattern
152
- - 👉 *Domain Focus:* Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test).
153
-
154
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
155
- Không được xem Memory là Source of Truth.
156
- Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
157
-
158
- ---
159
-
160
- ### Learning Flow (AI tự học có kiểm soát)
161
- - Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
162
- - Hard Bug có khả năng tái diễn.
163
- - Pattern làm việc lặp lại trong dự án.
164
- - Convention hoặc quy tắc kiến trúc mới.
165
- - Quyết định Architecture quan trọng.
166
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
167
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
168
-
169
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
170
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
171
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
172
-
173
- ---
174
-
175
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
176
- Sau khi hoàn thành task:
177
- - AI đánh giá các Candidate Memory đã tạo.
178
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
179
- - Đề xuất người dùng xem xét.
180
- - Gửi yêu cầu phê duyệt thông qua:
181
- - `/learn`
182
- - `qk-project-memory`
183
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
184
-
185
- ```
186
- .ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
187
- ```
188
-
189
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
190
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
191
-
192
- ---
193
-
194
- ### Ignore (Không đưa vào Memory)
195
- Không lưu:
196
- - Trace log của một session đơn lẻ.
197
- - Temporary debugging data.
198
- - Output của một lần chạy test/scan.
199
- - Report health tạm thời của một đợt kiểm tra.
200
- - Lỗi nhỏ chỉ xảy ra một lần.
201
- - Thông tin không có khả năng tái sử dụng.
202
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
203
-
204
- ---
205
-
206
- ### Golden Rule
207
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
208
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
209
-
210
- ---
211
-
212
-
213
-
214
- ### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
215
- - Trước khi tra cứu hoặc lưu trữ tri thức, BẮT BUỘC kiểm tra sự tồn tại của thư mục `.ai-local/` tại gốc dự án:
216
- - **Tự động tạo mới:** Nếu `.ai-local/` chưa tồn tại, AI phải tự động tạo cấu trúc thư mục `.ai-local/knowledge/` (và file `index.yaml` nếu cần thiết) cùng `.ai-local/candidates/`. Tuyệt đối không ngưng chạy hay hỏi ý kiến người dùng về thao tác khởi tạo tiêu chuẩn này.
217
- - **Bảo mật Gitignore:** BẮT BUỘC kiểm tra file `.gitignore` của dự án, nếu chưa có dòng `.ai-local/` thì phải tự động thêm vào để tuyệt đối bảo mật tri thức cá nhân và tránh lộ lọt lên Git.
218
-
219
- ---
220
-
221
- ### Pre-flight Retrieve (Trước khi thực thi)
222
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
223
- bắt buộc tra cứu:
224
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
225
-
226
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
227
- - Architecture
228
- - Hard Bug
229
- - Convention
230
- - Pattern
231
- - Tech Debt Pattern
232
- - 👉 *Domain Focus:* Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test).
233
-
234
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
235
- Không được xem Memory là Source of Truth.
236
- Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
237
-
238
- ---
239
-
240
- ### Learning Flow (AI tự học có kiểm soát)
241
- - Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
242
- - Hard Bug có khả năng tái diễn.
243
- - Pattern làm việc lặp lại trong dự án.
244
- - Convention hoặc quy tắc kiến trúc mới.
245
- - Quyết định Architecture quan trọng.
246
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
247
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
248
-
249
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
250
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
251
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
252
-
253
- ---
254
-
255
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
256
- Sau khi hoàn thành task:
257
- - AI đánh giá các Candidate Memory đã tạo.
258
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
259
- - Đề xuất người dùng xem xét.
260
- - Gửi yêu cầu phê duyệt thông qua:
261
- - `/learn`
262
- - `qk-project-memory`
263
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
264
-
265
- ```
266
- .ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
267
- ```
268
-
269
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
270
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
271
-
272
- ---
273
-
274
- ### Ignore (Không đưa vào Memory)
275
- Không lưu:
276
- - Trace log của một session đơn lẻ.
277
- - Temporary debugging data.
278
- - Output của một lần chạy test/scan.
279
- - Report health tạm thời của một đợt kiểm tra.
280
- - Lỗi nhỏ chỉ xảy ra một lần.
281
- - Thông tin không có khả năng tái sử dụng.
282
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
283
-
284
- ---
285
-
286
- ### Golden Rule
287
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
288
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
289
-
290
- ---
291
-
292
-
293
-
294
- ### Pre-flight Retrieve (Trước khi thực thi)
295
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
296
- bắt buộc tra cứu:
297
- - `.agents/knowledge/index.yaml` (Shared Project Knowledge)
298
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
299
-
300
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
301
- - Architecture
302
- - Hard Bug
303
- - Convention
304
- - Pattern
305
- - Tech Debt Pattern
306
- - 👉 *Domain Focus:* Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test).
307
-
308
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
309
- Không được xem Memory là Source of Truth.
310
- Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
311
-
312
- ---
313
-
314
- ### Learning Flow (AI tự học có kiểm soát)
315
- - Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
316
- - Hard Bug có khả năng tái diễn.
317
- - Pattern làm việc lặp lại trong dự án.
318
- - Convention hoặc quy tắc kiến trúc mới.
319
- - Quyết định Architecture quan trọng.
320
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
321
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
322
-
323
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
324
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
325
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
326
-
327
- ---
328
-
329
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
330
- Sau khi hoàn thành task:
331
- - AI đánh giá các Candidate Memory đã tạo.
332
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
333
- - Đề xuất người dùng xem xét.
334
- - Gửi yêu cầu phê duyệt thông qua:
335
- - `/learn`
336
- - `qk-project-memory`
337
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
338
-
339
- ```
340
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
341
- ```
342
-
343
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
344
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
345
-
346
- ---
347
-
348
- ### Ignore (Không đưa vào Memory)
349
- Không lưu:
350
- - Trace log của một session đơn lẻ.
351
- - Temporary debugging data.
352
- - Output của một lần chạy test/scan.
353
- - Report health tạm thời của một đợt kiểm tra.
354
- - Lỗi nhỏ chỉ xảy ra một lần.
355
- - Thông tin không có khả năng tái sử dụng.
356
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
357
-
358
- ---
359
-
360
- ### Golden Rule
361
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
362
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
363
-
364
- ---
365
- ---
366
-
367
- ### Learning Flow (AI tự học có kiểm soát)
368
- - Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
369
- - Hard Bug có khả năng tái diễn.
370
- - Pattern làm việc lặp lại trong dự án.
371
- - Convention hoặc quy tắc kiến trúc mới.
372
- - Quyết định Architecture quan trọng.
373
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
374
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
375
-
376
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
377
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
378
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
379
-
380
- ---
381
-
382
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
383
- Sau khi hoàn thành task:
384
- - AI đánh giá các Candidate Memory đã tạo.
385
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
386
- - Đề xuất người dùng xem xét.
387
- - Gửi yêu cầu phê duyệt thông qua:
388
- - `/learn`
389
- - `qk-project-memory`
390
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
391
-
392
- ```
393
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
394
- ```
395
-
396
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
397
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
398
-
399
- ---
400
-
401
- ### Ignore (Không đưa vào Memory)
402
- Không lưu:
403
- - Trace log của một session đơn lẻ.
404
- - Temporary debugging data.
405
- - Output của một lần chạy test/scan.
406
- - Report health tạm thời của một đợt kiểm tra.
407
- - Lỗi nhỏ chỉ xảy ra một lần.
408
- - Thông tin không có khả năng tái sử dụng.
409
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
410
-
411
- ---
412
-
413
- ### Golden Rule
414
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
415
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
416
-
417
- ---
418
- ---
419
-
420
- ### Learning Flow (AI tự học có kiểm soát)
421
- - Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
422
- - Hard Bug có khả năng tái diễn.
423
- - Pattern làm việc lặp lại trong dự án.
424
- - Convention hoặc quy tắc kiến trúc mới.
425
- - Quyết định Architecture quan trọng.
426
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
427
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
428
-
429
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
430
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
431
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
432
-
433
- ---
434
-
435
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
436
- Sau khi hoàn thành task:
437
- - AI đánh giá các Candidate Memory đã tạo.
438
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
439
- - Đề xuất người dùng xem xét.
440
- - Gửi yêu cầu phê duyệt thông qua:
441
- - `/learn`
442
- - `qk-project-memory`
443
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
444
-
445
- ```
446
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
447
- ```
448
-
449
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
450
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
451
-
452
- ---
453
-
454
- ### Ignore (Không đưa vào Memory)
455
- Không lưu:
456
- - Trace log của một session đơn lẻ.
457
- - Temporary debugging data.
458
- - Output của một lần chạy test/scan.
459
- - Report health tạm thời của một đợt kiểm tra.
460
- - Lỗi nhỏ chỉ xảy ra một lần.
461
- - Thông tin không có khả năng tái sử dụng.
462
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
463
-
464
- ---
465
-
466
- ### Golden Rule
467
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
468
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
469
-
470
- ---
471
- ---
472
- ---
473
- ---
474
-
475
- ## Preconditions
476
- - [ ] Có code hoặc requirement rõ ràng cần kiểm thử.
106
+ Chịu trách nhiệm thiết kế chiến lược kiểm thử cân bằng (Test Pyramid) và trực tiếp cài đặt các bộ test tự động đáng tin cậy: **Unit Tests nhanh & cô lập, Integration Tests kiểm chứng hợp đồng kết nối, và E2E Tests bảo vệ luồng nghiệp vụ sống còn.**
477
107
 
478
- ## Scope
479
- - Đưa ra quyết định chọn loại test (Unit, Integration, E2E) theo Test Pyramid.
480
- - Thiết kế chiến lược Mock (Mocking vs Stubbing vs Faking).
481
- - Đánh giá Test Coverage hiện tại và đưa ra target.
482
- - Quyết định Regression analysis (những phần nào cần test lại khi file A thay đổi).
483
- - **Bắt buộc thiết kế test case cho ranh giới dữ liệu (Negative Testing / Boundary Testing) để đảm bảo tuân thủ R-SEC-04.**
484
- - Không tự động sinh test trừ khi user yêu cầu implement, skill này chủ yếu tư vấn architecture và strategy cho QA/Testing.
485
-
486
- ## Non-Goals
487
- - ❌ Provide implementation outside of Testing Strategy scope
488
- - ❌ Override explicit user directives without explanation
489
- - ❌ Guess ambiguous requirements without asking
490
-
491
- ## Priority Order
492
-
493
- | Priority | Task | Skip Threshold |
494
- |----------|------|----------------|
495
- | P1 | Core Testing Strategy analysis and decision making | Never |
496
- | P2 | Validation of existing patterns | Budget < 30% |
497
- | P3 | Detailed documentation generation | Budget < 50% |
498
- | P4 | Edge case exploration | Budget < 70% |
499
-
500
- ## Workflow
501
-
502
- ### Phase 1 — Context Loading
503
- **Steps:**
504
- 1. Read existing configuration and requirements related to Testing Strategy.
505
- 2. Check for missing preconditions.
506
-
507
- **Decision:**
508
- ```
509
- IF context is clear
510
- → Confidence: HIGH → go to Phase 2
511
- ELSE
512
- → EXIT: BLOCKED — ask user
513
- ```
108
+ ---
514
109
 
515
- ### Phase 2 — Analysis & Strategy
516
- **Steps:**
517
- 1. Analyze the current state against Testing Strategy best practices.
518
- 2. Formulate strategy or audit report based on findings.
110
+ ## Preconditions
519
111
 
520
- **Decision:**
521
- ```
522
- IF strategy/audit is complete
523
- → Confidence: HIGH → go to Phase 3
524
- ELSE IF minor gaps exist
525
- → Confidence: MEDIUM → proceed with assumptions noted
526
- ```
112
+ Trước khi viết test, AI BẮT BUỘC xác nhận:
527
113
 
528
- ### Phase 3 Finalization
529
- **Steps:**
530
- 1. Generate final report or configuration.
531
- 2. Prepare handoff data for subsequent skills.
114
+ - [ ] Xác định Test Framework từ `DEV_PROFILE.md` hoặc manifest (Vitest, Jest, Pytest, Go `testing`, Playwright).
115
+ - [ ] Xác định code mục tiêu cần test (function, class, API endpoint, hoặc user journey).
116
+ - [ ] Xác định phụ thuộc ngoại vi (Database, External API, File system, Third-party service) để chọn phương án Mock phù hợp.
532
117
 
533
- ## Confidence Model
118
+ *Nếu chưa có code mục tiêu và user không yêu cầu TDD (Test-Driven Development):*
119
+ → **EXIT: BLOCKED**
120
+ → Yêu cầu: "Vui lòng chỉ định hàm, module hoặc file cần viết test."
534
121
 
535
- | Level | Condition | Action |
536
- |-------|-----------|--------|
537
- | HIGH | All preconditions met, context fully understood | Proceed directly |
538
- | MEDIUM | Some context missing but safe defaults exist | Proceed and note assumptions |
539
- | LOW | Core requirements missing | EXIT: BLOCKED |
122
+ ---
123
+
124
+ ## Scope
540
125
 
541
- ## Severity (for findings)
126
+ Skill này làm:
127
+ - Thiết lập **Test Cases Matrix** bao phủ:
128
+ - **Happy path:** Dữ liệu hợp lệ, kết quả mong đợi.
129
+ - **Edge cases:** Giới hạn biên (0, -1, max int, chuỗi rỗng, mảng rỗng, ký tự đặc biệt UTF-8).
130
+ - **Error boundaries:** Ném lỗi đúng loại (Custom Error / HTTP Status) khi đầu vào sai.
131
+ - **Async / Timeout:** Xử lý promise reject, network delay.
132
+ - Viết Unit Tests theo cấu trúc kinh điển **AAA (Arrange - Act - Assert)** hoặc **Given - When - Then**.
133
+ - Viết Integration Tests kiểm chứng sự phối hợp giữa Service và Database (dùng in-memory DB hoặc Testcontainers).
134
+ - Viết E2E Tests (Playwright) cho các User Flows quan trọng nhất (Sign up → Checkout → Payment).
135
+ - Xây dựng Mocking Strategy đúng mực: Mock ở ranh giới hệ thống (HTTP client, Message queue), **không bao giờ mock implementation details nội bộ**.
136
+
137
+ ❌ Skill này KHÔNG làm:
138
+ - Viết tests rỗng không có `expect` / `assert` chỉ để farm chỉ số coverage.
139
+ - Mock quá mức khiến test luôn pass dù code thật bị hỏng (Tautological tests).
140
+ - Viết E2E test cho mọi biến thể nhỏ (vi phạm kim tự tháp kiểm thử, gây chậm CI và flaky test).
542
141
 
543
- | Level | Definition |
544
- |-------|-----------|
545
- | CRITICAL | Severe violation of Testing Strategy principles |
546
- | HIGH | Significant risk or technical debt |
547
- | MEDIUM | Suboptimal pattern but functional |
548
- | LOW | Minor style or documentation issue |
142
+ ---
549
143
 
550
- ## Evidence Format
144
+ ## Execution Steps
551
145
 
146
+ ### Step 1 — Phân tầng Kiểm thử (Pyramid Placement)
552
147
  ```
553
- [SEVERITY] Context/File
554
- Issue: [what was found]
555
- Confidence: HIGH
556
- Recommendation: [actionable advice]
148
+ Quyết định tầng test phù hợp:
149
+ - Pure function, domain logic, utils → 70% Unit Tests (Chạy < 10ms/test).
150
+ - Database queries, API routes, middleware → 20% Integration Tests (Mock external API).
151
+ - Critical checkout / login flow → 10% E2E Tests (Playwright / Cypress).
557
152
  ```
558
153
 
559
- ## Retry Policy
154
+ ### Step 2 — Lập Ma trận Kịch bản (Test Scenario Matrix)
560
155
  ```
561
- Task fails due to missing context
562
- └─ Ask user for clarification
563
- ├─ Provided Retry Phase 1
564
- └─ Not provided EXIT: BLOCKED
156
+ dụ với hàm transferMoney(fromId, toId, amount):
157
+ 1. TC-01 (Happy): Chuyển tiền thành công khi số dư đủ, trừ tài khoản A, cộng tài khoản B.
158
+ 2. TC-02 (Edge): Chuyển đúng bằng số dư hiện có (số dư về 0).
159
+ 3. TC-03 (Error): Chuyển số tiền âm hoặc = 0 -> Ném ValidationError.
160
+ 4. TC-04 (Error): Số dư không đủ -> Ném InsufficientFundsError.
161
+ 5. TC-05 (Edge): fromId trùng toId -> Ném SelfTransferError.
162
+ 6. TC-06 (Concur): 2 giao dịch đồng thời -> Xử lý lock/transaction an toàn.
565
163
  ```
566
164
 
567
- ## Escalation Rules
165
+ ### Step 3 — Viết Code Kiểm thử (Test Implementation)
166
+ ```
167
+ Tuân thủ cấu trúc AAA:
168
+ // 1. Arrange: Chuẩn bị dữ liệu mẫu và mock
169
+ const user = createMockUser({ balance: 100 });
170
+
171
+ // 2. Act: Gọi hàm cần test
172
+ const result = await transferMoney(user.id, recipient.id, 50);
173
+
174
+ // 3. Assert: Kiểm tra kết quả
175
+ expect(result.status).toBe('SUCCESS');
176
+ expect(user.balance).toBe(50);
177
+ ```
568
178
 
179
+ ### Step 4 — Verification & Chạy Test Thực Tế
569
180
  ```
570
- BLOCKED: Missing critical context for Testing Strategy
571
- Missing:
572
- - [Specific requirement]
573
- Questions:
574
- 1. Bạn có thể cung cấp thêm thông tin về yêu cầu này không?
575
- 2. Mục tiêu chính của bạn là gì?
576
- Recommended Assumptions: none
181
+ Actions:
182
+ - Chạy lệnh test thật qua terminal (`npm test -- run`, `pytest -v`, `go test ./...`).
183
+ - Đảm bảo toàn bộ test cases đều PASS (Màu xanh).
184
+ - Đảm bảo test chạy độc lập (Isolated), không phụ thuộc vào thứ tự thực thi.
577
185
  ```
578
186
 
579
- ## Handoff Contract
187
+ ---
188
+
189
+ ## Prompt Template
580
190
 
581
- ### Consumes
582
- ```json
583
- {
584
- "from": "user or qk-orchestrator",
585
- "required_fields": ["context"],
586
- "optional_fields": ["existing_config"]
587
- }
588
191
  ```
589
-
590
- ### Produces
591
- ```json
592
- {
593
- "to": "user or downstream skill",
594
- "output_fields": ["strategy_report", "exit_code"]
595
- }
192
+ Target: [File hoặc Function cần viết test: vd: src/services/PaymentService.ts]
193
+ Framework: [Vitest / Jest / Pytest / Playwright]
194
+ Level: [Unit / Integration / E2E]
195
+ Phụ thuộc: [Cần mock Stripe API, PostgreSQL DB]
196
+ Yêu cầu: [Cover các trường hợp lỗi mạng, thẻ hết hạn, concurrency]
596
197
  ```
597
198
 
598
- ## Exit Codes
199
+ ### dụ theo Stack:
599
200
 
600
- | Code | Meaning | When |
601
- |------|---------|------|
602
- | SUCCESS | Testing Strategy task completed successfully | Strategy/audit generated |
603
- | PARTIAL | Task completed with assumptions | Medium confidence |
604
- | BLOCKED | Missing context | Cannot proceed |
605
- | FAILED | Critical conflict or error | Unresolvable constraint |
201
+ **Vitest (Unit Test cho Business Logic)**
202
+ ```
203
+ Target: calculateDiscount(cart, coupon)
204
+ Framework: Vitest + TypeScript
205
+ Yêu cầu: Test giảm giá phần trăm, giảm giá cố định, mã hết hạn, coupon vượt quá tổng giá trị đơn hàng.
206
+ ```
207
+ → AI tạo: `tests/unit/calculateDiscount.test.ts` với đầy đủ 6 test cases, kiểm tra boundary condition `Math.max(0, total - discount)`.
208
+
209
+ **Pytest (Integration Test cho FastAPI Endpoint)**
210
+ ```
211
+ Target: POST /api/v1/items
212
+ Framework: Pytest + httpx AsyncClient
213
+ Yêu cầu: Test tạo item thành công (201), validate body thiếu trường bắt buộc (422), unauthenticated (401).
214
+ ```
215
+ → AI tạo: `tests/test_items_api.py`, sử dụng pytest fixture cho test DB session và test client.