ai-developer-skill-os 9.1.1 → 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 +52 -18
  5. package/.agents/registry/index.yaml +66 -12
  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 -300
  10. package/.agents/skills/qk-access-policy/SKILL.md +98 -393
  11. package/.agents/skills/qk-agent-observability/SKILL.md +3 -359
  12. package/.agents/skills/qk-ai-builder/SKILL.md +132 -485
  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 -376
  17. package/.agents/skills/qk-bug-resolution/SKILL.md +128 -481
  18. package/.agents/skills/qk-code-review/SKILL.md +142 -340
  19. package/.agents/skills/qk-context-loader/SKILL.md +99 -391
  20. package/.agents/skills/qk-data-engineer/SKILL.md +253 -0
  21. package/.agents/skills/qk-data-lifecycle/SKILL.md +89 -408
  22. package/.agents/skills/qk-db-optimizer/SKILL.md +102 -408
  23. package/.agents/skills/qk-design-system-engineering/SKILL.md +76 -381
  24. package/.agents/skills/qk-devops-platform/SKILL.md +77 -383
  25. package/.agents/skills/qk-docs/SKILL.md +88 -414
  26. package/.agents/skills/qk-engineering-standard/SKILL.md +4 -508
  27. package/.agents/skills/qk-fe-api-integration/SKILL.md +343 -263
  28. package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +29 -29
  29. package/.agents/skills/qk-feature-delivery/SKILL.md +137 -365
  30. package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
  31. package/.agents/skills/qk-frontend-architecture/SKILL.md +5 -399
  32. package/.agents/skills/qk-help/evals/scorecard.yaml +13 -13
  33. package/.agents/skills/qk-orchestrator/SKILL.md +63 -422
  34. package/.agents/skills/qk-orchestrator/references/routing-table.md +10 -14
  35. package/.agents/skills/qk-product-specification/SKILL.md +70 -399
  36. package/.agents/skills/qk-production-release/SKILL.md +80 -457
  37. package/.agents/skills/qk-project-audit/SKILL.md +174 -0
  38. package/.agents/skills/qk-project-bootstrap/SKILL.md +244 -392
  39. package/.agents/skills/qk-project-health/SKILL.md +97 -416
  40. package/.agents/skills/qk-project-memory/SKILL.md +76 -21
  41. package/.agents/skills/qk-refactor/SKILL.md +167 -304
  42. package/.agents/skills/qk-security-audit/SKILL.md +141 -383
  43. package/.agents/skills/qk-security-audit/capability.yaml +1 -2
  44. package/.agents/skills/qk-system-evolution/SKILL.md +343 -263
  45. package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +26 -26
  46. package/.agents/skills/qk-test-engineering/SKILL.md +119 -429
  47. package/.agents/skills/qk-ui-audit/SKILL.md +73 -457
  48. package/.agents/skills/qk-ui-builder/SKILL.md +521 -482
  49. package/.agents/skills/qk-ui-system-builder/SKILL.md +68 -434
  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 -523
  54. package/.agents/skills/qk-web-quality-gate/SKILL.md +85 -383
  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,26 +1,26 @@
1
- name: qk-system-evolution-eval
2
- description: Đánh giá độ an toàn của quy trình nâng cấp System & Framework
3
- version: 9.1.0
4
- threshold: 90 # Việc nâng cấp framework mang rủi ro sập hệ thống rất cao
5
-
6
- metrics:
7
- - id: rollback_safety
8
- name: Cơ chế Rollback bắt buộc
9
- description: Agent có thiết lập và ghi chép lại lệnh rollback trước khi nâng cấp không?
10
- weight: 40
11
- criteria:
12
- - Phải yêu cầu/lưu lại Rollback command (git tag / version trước đó) trước khi sửa code (40đ)
13
-
14
- - id: changelog_awareness
15
- name: Phân tích Breaking Changes
16
- description: Agent có đọc Changelog thay vì nhắm mắt upgrade không?
17
- weight: 35
18
- criteria:
19
- - Quét và liệt kê các Breaking Changes từ Changelog/Migration Guide trước khi chạy (35đ)
20
-
21
- - id: incremental_upgrade
22
- name: Nâng cấp gia tăng (Incremental)
23
- description: Có nâng cấp từng phần và chạy test xác minh thay vì Big-bang không?
24
- weight: 25
25
- criteria:
26
- - Chạy test ngay sau khi nâng cấp 1 package thay vì update hàng loạt (25đ)
1
+ name: qk-system-evolution-eval
2
+ description: Đánh giá độ an toàn của quy trình nâng cấp System & Framework
3
+ version: 9.1.0
4
+ threshold: 90 # Việc nâng cấp framework mang rủi ro sập hệ thống rất cao
5
+
6
+ metrics:
7
+ - id: rollback_safety
8
+ name: Cơ chế Rollback bắt buộc
9
+ description: Agent có thiết lập và ghi chép lại lệnh rollback trước khi nâng cấp không?
10
+ weight: 40
11
+ criteria:
12
+ - Phải yêu cầu/lưu lại Rollback command (git tag / version trước đó) trước khi sửa code (40đ)
13
+
14
+ - id: changelog_awareness
15
+ name: Phân tích Breaking Changes
16
+ description: Agent có đọc Changelog thay vì nhắm mắt upgrade không?
17
+ weight: 35
18
+ criteria:
19
+ - Quét và liệt kê các Breaking Changes từ Changelog/Migration Guide trước khi chạy (35đ)
20
+
21
+ - id: incremental_upgrade
22
+ name: Nâng cấp gia tăng (Incremental)
23
+ description: Có nâng cấp từng phần và chạy test xác minh thay vì Big-bang không?
24
+ weight: 25
25
+ criteria:
26
+ - Chạy test ngay sau khi nâng cấp 1 package thay vì update hàng loạt (25đ)
@@ -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,414 +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
- ### Pre-flight Retrieve (Trước khi thực thi)
215
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
216
- bắt buộc tra cứu:
217
- - `.agents/knowledge/index.yaml` (Shared Project Knowledge)
218
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
219
-
220
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
221
- - Architecture
222
- - Hard Bug
223
- - Convention
224
- - Pattern
225
- - Tech Debt Pattern
226
- - 👉 *Domain Focus:* Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test).
227
-
228
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
229
- Không được xem Memory là Source of Truth.
230
- 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.
231
-
232
- ---
233
-
234
- ### Learning Flow (AI tự học có kiểm soát)
235
- - 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:
236
- - Hard Bug có khả năng tái diễn.
237
- - Pattern làm việc lặp lại trong dự án.
238
- - Convention hoặc quy tắc kiến trúc mới.
239
- - Quyết định Architecture quan trọng.
240
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
241
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
242
-
243
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
244
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
245
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
246
-
247
- ---
248
-
249
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
250
- Sau khi hoàn thành task:
251
- - AI đánh giá các Candidate Memory đã tạo.
252
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
253
- - Đề xuất người dùng xem xét.
254
- - Gửi yêu cầu phê duyệt thông qua:
255
- - `/learn`
256
- - `qk-project-memory`
257
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
258
-
259
- ```
260
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
261
- ```
262
-
263
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
264
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
265
-
266
- ---
267
-
268
- ### Ignore (Không đưa vào Memory)
269
- Không lưu:
270
- - Trace log của một session đơn lẻ.
271
- - Temporary debugging data.
272
- - Output của một lần chạy test/scan.
273
- - Report health tạm thời của một đợt kiểm tra.
274
- - Lỗi nhỏ chỉ xảy ra một lần.
275
- - Thông tin không có khả năng tái sử dụng.
276
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
277
-
278
- ---
279
-
280
- ### Golden Rule
281
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
282
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
283
-
284
- ---
285
- ---
286
-
287
- ### Learning Flow (AI tự học có kiểm soát)
288
- - 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:
289
- - Hard Bug có khả năng tái diễn.
290
- - Pattern làm việc lặp lại trong dự án.
291
- - Convention hoặc quy tắc kiến trúc mới.
292
- - Quyết định Architecture quan trọng.
293
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
294
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
295
-
296
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
297
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
298
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
299
-
300
- ---
301
-
302
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
303
- Sau khi hoàn thành task:
304
- - AI đánh giá các Candidate Memory đã tạo.
305
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
306
- - Đề xuất người dùng xem xét.
307
- - Gửi yêu cầu phê duyệt thông qua:
308
- - `/learn`
309
- - `qk-project-memory`
310
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
311
-
312
- ```
313
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
314
- ```
315
-
316
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
317
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
318
-
319
- ---
320
-
321
- ### Ignore (Không đưa vào Memory)
322
- Không lưu:
323
- - Trace log của một session đơn lẻ.
324
- - Temporary debugging data.
325
- - Output của một lần chạy test/scan.
326
- - Report health tạm thời của một đợt kiểm tra.
327
- - Lỗi nhỏ chỉ xảy ra một lần.
328
- - Thông tin không có khả năng tái sử dụng.
329
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
330
-
331
- ---
332
-
333
- ### Golden Rule
334
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
335
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
336
-
337
- ---
338
- ---
339
-
340
- ### Learning Flow (AI tự học có kiểm soát)
341
- - 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:
342
- - Hard Bug có khả năng tái diễn.
343
- - Pattern làm việc lặp lại trong dự án.
344
- - Convention hoặc quy tắc kiến trúc mới.
345
- - Quyết định Architecture quan trọng.
346
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
347
- - 👉 *Domain Harvest:* Pattern viết mock/stub mới hoặc chiến lược fixture dự án.
348
-
349
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
350
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
351
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
352
-
353
- ---
354
-
355
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
356
- Sau khi hoàn thành task:
357
- - AI đánh giá các Candidate Memory đã tạo.
358
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
359
- - Đề xuất người dùng xem xét.
360
- - Gửi yêu cầu phê duyệt thông qua:
361
- - `/learn`
362
- - `qk-project-memory`
363
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
364
-
365
- ```
366
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
367
- ```
368
-
369
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
370
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
371
-
372
- ---
373
-
374
- ### Ignore (Không đưa vào Memory)
375
- Không lưu:
376
- - Trace log của một session đơn lẻ.
377
- - Temporary debugging data.
378
- - Output của một lần chạy test/scan.
379
- - Report health tạm thời của một đợt kiểm tra.
380
- - Lỗi nhỏ chỉ xảy ra một lần.
381
- - Thông tin không có khả năng tái sử dụng.
382
- - 👉 *Domain Ignore:* File coverage nháp sinh ra trong quá trình chạy test.
383
-
384
- ---
385
-
386
- ### Golden Rule
387
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
388
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
389
-
390
- ---
391
- ---
392
- ---
393
- ---
394
-
395
- ## Preconditions
396
- - [ ] 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.**
397
107
 
398
- ## Scope
399
- - Đưa ra quyết định chọn loại test (Unit, Integration, E2E) theo Test Pyramid.
400
- - Thiết kế chiến lược Mock (Mocking vs Stubbing vs Faking).
401
- - Đánh giá Test Coverage hiện tại và đưa ra target.
402
- - Quyết định Regression analysis (những phần nào cần test lại khi file A thay đổi).
403
- - **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.**
404
- - 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.
405
-
406
- ## Non-Goals
407
- - ❌ Provide implementation outside of Testing Strategy scope
408
- - ❌ Override explicit user directives without explanation
409
- - ❌ Guess ambiguous requirements without asking
410
-
411
- ## Priority Order
412
-
413
- | Priority | Task | Skip Threshold |
414
- |----------|------|----------------|
415
- | P1 | Core Testing Strategy analysis and decision making | Never |
416
- | P2 | Validation of existing patterns | Budget < 30% |
417
- | P3 | Detailed documentation generation | Budget < 50% |
418
- | P4 | Edge case exploration | Budget < 70% |
419
-
420
- ## Workflow
421
-
422
- ### Phase 1 — Context Loading
423
- **Steps:**
424
- 1. Read existing configuration and requirements related to Testing Strategy.
425
- 2. Check for missing preconditions.
426
-
427
- **Decision:**
428
- ```
429
- IF context is clear
430
- → Confidence: HIGH → go to Phase 2
431
- ELSE
432
- → EXIT: BLOCKED — ask user
433
- ```
108
+ ---
109
+
110
+ ## Preconditions
434
111
 
435
- ### Phase 2 Analysis & Strategy
436
- **Steps:**
437
- 1. Analyze the current state against Testing Strategy best practices.
438
- 2. Formulate strategy or audit report based on findings.
112
+ Trước khi viết test, AI BẮT BUỘC xác nhận:
439
113
 
440
- **Decision:**
441
- ```
442
- IF strategy/audit is complete
443
- → Confidence: HIGH → go to Phase 3
444
- ELSE IF minor gaps exist
445
- → Confidence: MEDIUM → proceed with assumptions noted
446
- ```
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.
447
117
 
448
- ### Phase 3 Finalization
449
- **Steps:**
450
- 1. Generate final report or configuration.
451
- 2. Prepare handoff data for subsequent skills.
118
+ *Nếu chưa 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."
452
121
 
453
- ## Confidence Model
122
+ ---
454
123
 
455
- | Level | Condition | Action |
456
- |-------|-----------|--------|
457
- | HIGH | All preconditions met, context fully understood | Proceed directly |
458
- | MEDIUM | Some context missing but safe defaults exist | Proceed and note assumptions |
459
- | LOW | Core requirements missing | EXIT: BLOCKED |
124
+ ## Scope
460
125
 
461
- ## 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).
462
141
 
463
- | Level | Definition |
464
- |-------|-----------|
465
- | CRITICAL | Severe violation of Testing Strategy principles |
466
- | HIGH | Significant risk or technical debt |
467
- | MEDIUM | Suboptimal pattern but functional |
468
- | LOW | Minor style or documentation issue |
142
+ ---
469
143
 
470
- ## Evidence Format
144
+ ## Execution Steps
471
145
 
146
+ ### Step 1 — Phân tầng Kiểm thử (Pyramid Placement)
472
147
  ```
473
- [SEVERITY] Context/File
474
- Issue: [what was found]
475
- Confidence: HIGH
476
- 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).
477
152
  ```
478
153
 
479
- ## Retry Policy
154
+ ### Step 2 — Lập Ma trận Kịch bản (Test Scenario Matrix)
480
155
  ```
481
- Task fails due to missing context
482
- └─ Ask user for clarification
483
- ├─ Provided Retry Phase 1
484
- └─ 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.
485
163
  ```
486
164
 
487
- ## 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
+ ```
488
178
 
179
+ ### Step 4 — Verification & Chạy Test Thực Tế
489
180
  ```
490
- BLOCKED: Missing critical context for Testing Strategy
491
- Missing:
492
- - [Specific requirement]
493
- Questions:
494
- 1. Bạn có thể cung cấp thêm thông tin về yêu cầu này không?
495
- 2. Mục tiêu chính của bạn là gì?
496
- 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.
497
185
  ```
498
186
 
499
- ## Handoff Contract
187
+ ---
500
188
 
501
- ### Consumes
502
- ```json
503
- {
504
- "from": "user or qk-orchestrator",
505
- "required_fields": ["context"],
506
- "optional_fields": ["existing_config"]
507
- }
508
- ```
189
+ ## Prompt Template
509
190
 
510
- ### Produces
511
- ```json
512
- {
513
- "to": "user or downstream skill",
514
- "output_fields": ["strategy_report", "exit_code"]
515
- }
516
191
  ```
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]
197
+ ```
198
+
199
+ ### Ví dụ theo Stack:
517
200
 
518
- ## Exit Codes
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)`.
519
208
 
520
- | Code | Meaning | When |
521
- |------|---------|------|
522
- | SUCCESS | Testing Strategy task completed successfully | Strategy/audit generated |
523
- | PARTIAL | Task completed with assumptions | Medium confidence |
524
- | BLOCKED | Missing context | Cannot proceed |
525
- | FAILED | Critical conflict or error | Unresolvable constraint |
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.