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-db-optimizer
4
- version: 9.1.0
4
+ version: 9.2.0
5
5
  status: stable
6
- description: "Tối ưu Database dựa trên bằng chứng: EXPLAIN phân tích index/joinkhông đoán mò."
6
+ description: "Tối ưu hiệu năng Database dựa trên bằng chứng kỹ thuật: phân tích EXPLAIN/ANALYZE, phát hiện N+1 queries, thiết kế Composite/Partial Index, refactor câu truy vấn chậm. Dùng skill này khi user nhắc đến: tối ưu query, query chậm, optimize db, thêm index, explain, slow query, n+1 query, lag database kể cả khi chỉ nói 'câu SQL này chạy mất 5 giây'."
7
7
  platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
8
8
 
9
9
  # ── V9: Classification ─────────────────────────────────────
@@ -17,15 +17,20 @@ complexity:
17
17
  level: high
18
18
  criteria:
19
19
  files_affected: "1-5"
20
- has_behavior_change: true
20
+ has_behavior_change: false
21
21
  has_external_dependency: true
22
22
  has_breaking_change: false
23
23
 
24
- triggers:
25
- - "tối ưu query"
26
- - "query chậm"
27
- - "optimize db"
28
- - "thêm index"
24
+ triggers:
25
+ - "tối ưu query"
26
+ - "query chậm"
27
+ - "optimize db"
28
+ - "thêm index"
29
+ - "explain"
30
+ - "slow query"
31
+ - "n+1 query"
32
+ - "lag database"
33
+
29
34
 
30
35
  # ── V8: References ─────────────────────────────────────────
31
36
  workflow: refactor
@@ -40,11 +45,13 @@ tools:
40
45
 
41
46
  related_skills:
42
47
  - qk-data-lifecycle
48
+ - qk-refactor
43
49
 
44
50
  knowledge_scope:
45
51
  owns:
46
52
  - database-performance
47
53
  - query-optimization
54
+ - index-engineering
48
55
  references:
49
56
  - architecture
50
57
  - anti-patterns
@@ -71,526 +78,133 @@ produces: [code, report]
71
78
  consumes: [query-log, source-code]
72
79
 
73
80
  token_budget:
74
- max_files_read: 3
75
- max_lines_per_read: 100
81
+ max_files_read: 5
82
+ max_lines_per_read: 150
76
83
  max_shell_commands: 2
77
84
  stop_early: true
78
85
 
79
- exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
86
+ exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
80
87
  ---
81
88
 
82
- # qk-db-optimizer — Database Performance Tuner
89
+ # qk-db-optimizer — Evidence-Based Database Performance Tuner
83
90
 
84
91
  > **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
85
92
 
93
+ Chịu trách nhiệm chẩn đoán và khắc phục điểm nghẽn hiệu năng cơ sở dữ liệu dựa trên **bằng chứng đo lường thực tế**: `EXPLAIN (ANALYZE, BUFFERS)` → tìm root cause → đề xuất Index / Query Rewrite — **tuyệt đối không đoán mò**.
94
+
86
95
  ---
87
96
 
88
- ## Memory Workflow
89
-
90
- ### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
91
- - 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:
92
- - **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.
93
- - **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.
94
-
95
- ---
96
-
97
- ### Pre-flight Retrieve (Trước khi thực thi)
98
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
99
- bắt buộc tra cứu:
100
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
101
-
102
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
103
- - Architecture
104
- - Hard Bug
105
- - Convention
106
- - Pattern
107
- - Tech Debt Pattern
108
- - 👉 *Domain Focus:* Pattern / Hard Bug (vd: lỗi slow query từng gặp, kế hoạch index đã duyệt).
109
-
110
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
111
- Không được xem Memory là Source of Truth.
112
- 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.
113
-
114
- ---
115
-
116
- ### Learning Flow (AI tự học có kiểm soát)
117
- - 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:
118
- - Hard Bug có khả năng tái diễn.
119
- - Pattern làm việc lặp lại trong dự án.
120
- - Convention hoặc quy tắc kiến trúc mới.
121
- - Quyết định Architecture quan trọng.
122
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
123
- - 👉 *Domain Harvest:* Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy).
124
-
125
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
126
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
127
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
128
-
129
- ---
130
-
131
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
132
- Sau khi hoàn thành task:
133
- - AI đánh giá các Candidate Memory đã tạo.
134
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
135
- - Đề xuất người dùng xem xét.
136
- - Gửi yêu cầu phê duyệt thông qua:
137
- - `/learn`
138
- - `qk-project-memory`
139
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
140
-
141
- ```
142
- .ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
143
- ```
144
-
145
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
146
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
147
-
148
- ---
149
-
150
- ### Ignore (Không đưa vào Memory)
151
- Không lưu:
152
- - Trace log của một session đơn lẻ.
153
- - Temporary debugging data.
154
- - Output của một lần chạy test/scan.
155
- - Report health tạm thời của một đợt kiểm tra.
156
- - Lỗi nhỏ chỉ xảy ra một lần.
157
- - Thông tin không có khả năng tái sử dụng.
158
- - 👉 *Domain Ignore:* Dữ liệu kết quả EXPLAIN tạm thời của 1 query.
159
-
160
- ---
161
-
162
- ### Golden Rule
163
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
164
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
165
-
166
- ---
167
-
168
-
169
-
170
- ### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
171
- - 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:
172
- - **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.
173
- - **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.
174
-
175
- ---
176
-
177
- ### Pre-flight Retrieve (Trước khi thực thi)
178
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
179
- bắt buộc tra cứu:
180
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
181
-
182
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
183
- - Architecture
184
- - Hard Bug
185
- - Convention
186
- - Pattern
187
- - Tech Debt Pattern
188
- - 👉 *Domain Focus:* Pattern / Hard Bug (vd: lỗi slow query từng gặp, kế hoạch index đã duyệt).
189
-
190
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
191
- Không được xem Memory là Source of Truth.
192
- 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.
193
-
194
- ---
195
-
196
- ### Learning Flow (AI tự học có kiểm soát)
197
- - 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:
198
- - Hard Bug có khả năng tái diễn.
199
- - Pattern làm việc lặp lại trong dự án.
200
- - Convention hoặc quy tắc kiến trúc mới.
201
- - Quyết định Architecture quan trọng.
202
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
203
- - 👉 *Domain Harvest:* Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy).
204
-
205
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
206
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
207
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
208
-
209
- ---
210
-
211
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
212
- Sau khi hoàn thành task:
213
- - AI đánh giá các Candidate Memory đã tạo.
214
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
215
- - Đề xuất người dùng xem xét.
216
- - Gửi yêu cầu phê duyệt thông qua:
217
- - `/learn`
218
- - `qk-project-memory`
219
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
220
-
221
- ```
222
- .ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
223
- ```
224
-
225
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
226
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
227
-
228
- ---
229
-
230
- ### Ignore (Không đưa vào Memory)
231
- Không lưu:
232
- - Trace log của một session đơn lẻ.
233
- - Temporary debugging data.
234
- - Output của một lần chạy test/scan.
235
- - Report health tạm thời của một đợt kiểm tra.
236
- - Lỗi nhỏ chỉ xảy ra một lần.
237
- - Thông tin không có khả năng tái sử dụng.
238
- - 👉 *Domain Ignore:* Dữ liệu kết quả EXPLAIN tạm thời của 1 query.
239
-
240
- ---
241
-
242
- ### Golden Rule
243
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
244
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
245
-
246
- ---
247
-
248
-
249
-
250
- ### Pre-flight Retrieve (Trước khi thực thi)
251
- - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
252
- bắt buộc tra cứu:
253
- - `.agents/knowledge/index.yaml` (Shared Project Knowledge)
254
- - `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
255
-
256
- - Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
257
- - Architecture
258
- - Hard Bug
259
- - Convention
260
- - Pattern
261
- - Tech Debt Pattern
262
- - 👉 *Domain Focus:* Pattern / Hard Bug (vd: lỗi slow query từng gặp, kế hoạch index đã duyệt).
263
-
264
- - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
265
- Không được xem Memory là Source of Truth.
266
- 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.
267
-
268
- ---
269
-
270
- ### Learning Flow (AI tự học có kiểm soát)
271
- - 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:
272
- - Hard Bug có khả năng tái diễn.
273
- - Pattern làm việc lặp lại trong dự án.
274
- - Convention hoặc quy tắc kiến trúc mới.
275
- - Quyết định Architecture quan trọng.
276
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
277
- - 👉 *Domain Harvest:* Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy).
278
-
279
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
280
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
281
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
282
-
283
- ---
284
-
285
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
286
- Sau khi hoàn thành task:
287
- - AI đánh giá các Candidate Memory đã tạo.
288
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
289
- - Đề xuất người dùng xem xét.
290
- - Gửi yêu cầu phê duyệt thông qua:
291
- - `/learn`
292
- - `qk-project-memory`
293
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
294
-
295
- ```
296
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
297
- ```
298
-
299
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
300
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
301
-
302
- ---
303
-
304
- ### Ignore (Không đưa vào Memory)
305
- Không lưu:
306
- - Trace log của một session đơn lẻ.
307
- - Temporary debugging data.
308
- - Output của một lần chạy test/scan.
309
- - Report health tạm thời của một đợt kiểm tra.
310
- - Lỗi nhỏ chỉ xảy ra một lần.
311
- - Thông tin không có khả năng tái sử dụng.
312
- - 👉 *Domain Ignore:* Dữ liệu kết quả EXPLAIN tạm thời của 1 query.
313
-
314
- ---
315
-
316
- ### Golden Rule
317
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
318
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
319
-
320
- ---
321
- ---
322
-
323
- ### Learning Flow (AI tự học có kiểm soát)
324
- - 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:
325
- - Hard Bug có khả năng tái diễn.
326
- - Pattern làm việc lặp lại trong dự án.
327
- - Convention hoặc quy tắc kiến trúc mới.
328
- - Quyết định Architecture quan trọng.
329
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
330
- - 👉 *Domain Harvest:* Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy).
331
-
332
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
333
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
334
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
335
-
336
- ---
337
-
338
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
339
- Sau khi hoàn thành task:
340
- - AI đánh giá các Candidate Memory đã tạo.
341
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
342
- - Đề xuất người dùng xem xét.
343
- - Gửi yêu cầu phê duyệt thông qua:
344
- - `/learn`
345
- - `qk-project-memory`
346
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
347
-
348
- ```
349
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
350
- ```
351
-
352
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
353
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
354
-
355
- ---
356
-
357
- ### Ignore (Không đưa vào Memory)
358
- Không lưu:
359
- - Trace log của một session đơn lẻ.
360
- - Temporary debugging data.
361
- - Output của một lần chạy test/scan.
362
- - Report health tạm thời của một đợt kiểm tra.
363
- - Lỗi nhỏ chỉ xảy ra một lần.
364
- - Thông tin không có khả năng tái sử dụng.
365
- - 👉 *Domain Ignore:* Dữ liệu kết quả EXPLAIN tạm thời của 1 query.
366
-
367
- ---
368
-
369
- ### Golden Rule
370
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
371
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
372
-
373
- ---
374
- ---
375
-
376
- ### Learning Flow (AI tự học có kiểm soát)
377
- - 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:
378
- - Hard Bug có khả năng tái diễn.
379
- - Pattern làm việc lặp lại trong dự án.
380
- - Convention hoặc quy tắc kiến trúc mới.
381
- - Quyết định Architecture quan trọng.
382
- - Tech Debt Pattern hoặc Code Smell có tính hệ thống.
383
- - 👉 *Domain Harvest:* Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy).
384
-
385
- - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
386
- - Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
387
- - AI không được tự động Promote Candidate Memory thành Project Knowledge.
388
-
389
- ---
390
-
391
- ### Post-flight Harvest (Đề xuất → Phê duyệt)
392
- Sau khi hoàn thành task:
393
- - AI đánh giá các Candidate Memory đã tạo.
394
- - Nếu phát hiện tri thức có giá trị tái sử dụng:
395
- - Đề xuất người dùng xem xét.
396
- - Gửi yêu cầu phê duyệt thông qua:
397
- - `/learn`
398
- - `qk-project-memory`
399
- - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
400
-
401
- ```
402
- .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
403
- ```
404
-
405
- - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
406
- - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
407
-
408
- ---
409
-
410
- ### Ignore (Không đưa vào Memory)
411
- Không lưu:
412
- - Trace log của một session đơn lẻ.
413
- - Temporary debugging data.
414
- - Output của một lần chạy test/scan.
415
- - Report health tạm thời của một đợt kiểm tra.
416
- - Lỗi nhỏ chỉ xảy ra một lần.
417
- - Thông tin không có khả năng tái sử dụng.
418
- - 👉 *Domain Ignore:* Dữ liệu kết quả EXPLAIN tạm thời của 1 query.
419
-
420
- ---
421
-
422
- ### Golden Rule
423
- > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
424
- > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
425
-
426
- ---
427
- ---
428
- ---
429
- ---
430
-
431
97
  ## Preconditions
432
- - [ ] Slow query log OR specific slow query is provided
433
- - [ ] Database schema/ORM models accessible
434
98
 
435
- ```
436
- On missing precondition:
437
- EXIT: BLOCKED
438
- Message: "Cần: slow query log hoặc query cụ thể cần tối ưu."
439
- ```
99
+ Trước khi đề xuất tối ưu, AI BẮT BUỘC xác nhận:
100
+
101
+ - [ ] Đoạn query cụ thể (SQL thô hoặc câu gọi ORM) đang bị chậm.
102
+ - [ ] Schema định nghĩa bảng **danh sách index hiện có** trên các cột liên quan.
103
+ - [ ] Output `EXPLAIN` hoặc `EXPLAIN ANALYZE` (nếu môi trường cho phép chạy query).
104
+ - [ ] Quy mô dữ liệu ước tính (e.g. bảng có 1.000 rows hay 50.000.000 rows).
105
+
106
+ *Nếu user yêu cầu "tối ưu database" mà không cung cấp query cụ thể hoặc slow log:*
107
+ → **EXIT: BLOCKED**
108
+ → Phản hồi: "Vui lòng cung cấp câu query bị chậm hoặc output log EXPLAIN để phân tích chính xác."
440
109
 
441
110
  ---
442
111
 
443
112
  ## Scope
444
- - ✅ Analyze EXPLAIN/query plans before adding indexes
445
- - ✅ Solve N+1 with Data Loaders or explicit Joins
446
- - ✅ Validate performance improvement
447
113
 
448
- ## Non-Goals
449
- - Add indexes without slow query evidence
450
- - Add overlapping or redundant indexes
451
- - Optimize queries not shown in slow query log
114
+ Skill này làm:
115
+ - Phân tích Execution Plan: Xác định `Seq Scan` trên bảng lớn, `Nested Loop` kém hiệu quả, `Temporary disk spill`, hoặc `Filter cost` cao.
116
+ - Phát hiện giải quyết triệt để **N+1 queries** trong ORM (Prisma, Drizzle, Hibernate, ActiveRecord).
117
+ - Thiết kế Index chính xác: Composite Index (tuân thủ quy tắc Left-to-Right prefix), Partial Index (lọc `WHERE is_deleted = false`), Covering Index (`INCLUDE`).
118
+ - Tái cấu trúc câu truy vấn (Query rewrite): Chuyển `OFFSET` lớn sang Keyset Pagination (Cursor-based), thay `NOT IN` bằng `NOT EXISTS` hoặc `LEFT JOIN ... IS NULL`.
119
+ - Báo cáo định lượng trước và sau (Before / After Cost & Execution Time).
452
120
 
453
- ---
454
-
455
- ## Priority Order
456
- | P | Issue Type | Action | Skip Threshold |
457
- |---|-----------|--------|----------------|
458
- | P1 | Sequential scan on large table (> 10k rows) | Add composite index | Never |
459
- | P2 | N+1 query pattern | Eager load / DataLoader (Ưu tiên theo chuẩn dự án, không tự chế query lồng) | Budget < 30% |
460
- | P3 | Missing JOIN (multiple queries for related data) | Rewrite with JOIN | Budget < 50% |
461
- | P4 | SELECT * (over-fetching) | Select specific columns | Budget < 60% |
121
+ ❌ Skill này KHÔNG làm:
122
+ - Thêm index bừa bãi vào mọi cột (làm chậm `INSERT`, `UPDATE`, tăng dung lượng đĩa).
123
+ - Tự ý thay đổi cấu trúc bảng hoặc drop cột (thuộc `qk-data-lifecycle`).
124
+ - Can thiệp phần cứng DB hoặc tune memory server nếu không có file cấu hình repo.
462
125
 
463
126
  ---
464
127
 
465
- ## EXPLAIN Decision Tree
128
+ ## Execution Steps
466
129
 
130
+ ### Step 1 — Thu thập Query & Phân tích EXPLAIN Plan
467
131
  ```
468
- Run EXPLAIN ANALYZE on slow query
469
-
470
- IF "Seq Scan" on table > 10k rows
471
- Check cardinality of filter column
472
- IF cardinality > 100 add B-tree index
473
- IF low cardinality add partial index or reconsider query
474
-
475
- IF "Nested Loop" with many iterations
476
- → Check: is this N+1?
477
- → IF yes → rewrite as single JOIN or use DataLoader
478
-
479
- IF "Sort" without index
480
- → Add index on ORDER BY column
481
-
482
- IF index exists but not used ("Index Scan" missing)
483
- → Check: is WHERE clause using non-leading column of composite index?
484
- → Reorder composite index columns
132
+ Inputs: Slow query SQL/ORM, Schema & Existing Indexes
133
+ Actions:
134
+ - Đọc câu query: xác định predicates (WHERE, JOIN, ORDER BY, GROUP BY).
135
+ - Đọc EXPLAIN output (nếu có):
136
+ - Tìm Node `Cost` cao nhất.
137
+ - Kiểm tra `Rows Removed by Filter` (dấu hiệu thiếu index).
138
+ - Kiểm tra Sort method (in-memory quicksort hay external merge on disk).
485
139
  ```
486
140
 
487
- ---
488
-
489
- ## Workflow
490
-
491
- ### Phase 1 — Evidence Collection
492
- 1. Read slow query log or provided query
493
- 2. Run EXPLAIN ANALYZE (1 command) — or analyze ORM-generated SQL
494
- 3. Identify bottleneck pattern (seq scan / N+1 / sort / over-fetch)
495
-
496
- ### Phase 2 — Solution Design
497
- 1. Apply Decision Tree above
498
- 2. Design minimal index or query rewrite
499
-
500
- ### Phase 3 — Apply & Verify
501
- 1. Apply change (add index migration OR rewrite query via `replace_file_content`)
502
- 2. (Optional) Re-run EXPLAIN to verify improvement (2nd command)
503
-
504
- **Decision:**
141
+ ### Step 2 — Chẩn đoán Root Cause
505
142
  ```
506
- IF improvement verified EXIT: SUCCESS
507
- IF improvement not measurable EXIT: PARTIAL, note "verify in production"
143
+ Xác định vấn đề cốt lõi:
144
+ - Missing Index: Cột lọc không index dẫn tới Full Table Scan.
145
+ - Sub-optimal Index: Có index nhưng sai thứ tự cột trong Composite Index.
146
+ - Implicit Type Casting: So sánh varchar với int làm database vô hiệu hóa index.
147
+ - N+1 Query: Gọi loop query con thay vì batch load.
148
+ - Expensive Pagination: `OFFSET 100000` quét qua 100.000 dòng rồi vứt bỏ.
508
149
  ```
509
150
 
510
- ---
511
-
512
- ## Evidence Format
151
+ ### Step 3 — Thiết kế Giải pháp Tối ưu
513
152
  ```
514
- [SEVERITY] query in src/repositories/[name].ts:LINE
515
- Pattern: [SEQ_SCAN | N+1 | MISSING_JOIN | OVER_FETCH | UNUSED_INDEX]
516
- Table: [table_name] (~N rows estimated)
517
- Confidence: HIGH
518
- Fix: [specific index or rewrite]
519
- Estimated improvement: [X% reduction in scan rows]
153
+ Actions:
154
+ - Chiến lược Index:
155
+ - Composite Index: Đặt cột equality (`=`) trước, cột range (`<`, `>`, `BETWEEN`) sau.
156
+ - Partial Index: Khi chỉ query tập con dữ liệu (VD: `WHERE status = 'PENDING'`).
157
+ - Chiến lược Query Rewrite:
158
+ - Viết lại sang Cursor Pagination (`WHERE id > :last_id LIMIT 20`).
159
+ - Dùng CTE hoặc Window functions thay cho multiple subqueries lặp lại.
160
+ - Chiến lược ORM: Thêm `include`/`select` cụ thể, tránh `SELECT *`, áp dụng batch loader.
520
161
  ```
521
162
 
522
- ---
523
-
524
- ## Exit Codes
525
- | Code | Meaning | When |
526
- |------|---------|------|
527
- | SUCCESS | Index added or query rewritten, improvement verified | Post-optimization |
528
- | PARTIAL | Optimization applied but could not verify via EXPLAIN | DB access blocked |
529
- | BLOCKED | Log not provided or DB engine unknown | Missing inputs |
530
- | FAILED | Optimization breaks existing test or query syntax | Logic error |
531
-
532
- ---
533
-
534
- ## Confidence Model
535
- | Level | Condition | Action |
536
- |-------|-----------|--------|
537
- | HIGH | EXPLAIN plan shows SEQ SCAN, user confirms index is missing | Add index / rewrite |
538
- | MEDIUM | Query looks inefficient but no EXPLAIN available | Ask to run EXPLAIN |
539
- | LOW | "Make DB faster" with no slow query log | EXIT: BLOCKED |
163
+ ### Step 4 — Verification & So sánh định lượng
164
+ ```
165
+ Actions:
166
+ - Đối chiếu Expected Cost trước và sau tối ưu:
167
+ Before: Seq Scan on orders (cost=0.00..45210.00 rows=1200000)
168
+ After: Index Scan using idx_orders_customer_created (cost=0.43..8.45 rows=20)
169
+ - Đảm bảo câu query sau khi rewrite trả về đúng 100% dữ liệu như câu query cũ.
170
+ ```
540
171
 
541
172
  ---
542
173
 
543
- ## Severity
544
- | Level | Definition | Example |
545
- |-------|-----------|---------|
546
- | CRITICAL | Query locking table in production | Long running UPDATE |
547
- | HIGH | Missing index on frequently joined table | Full scan on million rows |
548
- | MEDIUM | N+1 queries due to missing JOIN | ORM fetching relations in loop |
549
- | LOW | Over-fetching columns | `SELECT *` instead of specific |
174
+ ## Prompt Template
550
175
 
551
- ---
552
-
553
- ## Retry Policy
554
176
  ```
555
- EXPLAIN query fails
556
- └─ Check SQL syntax error vs connection error
557
- ├─ Syntax error correct SQL → retry EXPLAIN
558
- └─ Do NOT retry more than 1 time risk of locking
177
+ DB Engine: [PostgreSQL / MySQL / SQLite / MongoDB]
178
+ Slow Query: [Câu SQL hoặc đoạn code ORM cần tối ưu]
179
+ Schema: [Định nghĩa bảng index hiện tại]
180
+ Triệu chứng: [Chạy mất bao lâu / Execution Plan nếu có]
181
+ Volume: [Số lượng bản ghi trong các bảng liên quan]
559
182
  ```
560
183
 
561
- ---
184
+ ### Ví dụ theo Stack:
562
185
 
563
- ## Escalation Rules
186
+ **PostgreSQL (Composite Index & Keyset Pagination)**
564
187
  ```
565
- BLOCKED: Slow query log not provided
566
- Missing:
567
- - The actual slow query SQL
568
- - Current schema of the involved tables
569
- Questions:
570
- 1. Câu query nào đang bị chậm? (Xin SQL / ORM log)
571
- 2. Bảng này hiện đang có những index nào?
572
- Recommended Assumptions:
573
- - Do NOT assume table size or indexes blindly
188
+ DB Engine: PostgreSQL 15
189
+ Slow Query: SELECT * FROM orders WHERE customer_id = 123 AND status = 'COMPLETED' ORDER BY created_at DESC LIMIT 20 OFFSET 50000;
190
+ Volume: Bảng orders 10 triệu records. Hiện có index trên (customer_id).
574
191
  ```
575
-
576
- ---
577
-
578
- ## Handoff Contract
579
- ### Consumes
580
- ```json
581
- {
582
- "from": "user",
583
- "required_fields": ["slow_query"],
584
- "optional_fields": ["schema", "explain_plan", "db_engine"]
585
- }
192
+ → AI chẩn đoán:
193
+ 1. Offset 50.000 buộc engine quét qua 50.000 index entries.
194
+ 2. Index hiện tại thiếu `status` và `created_at`.
195
+ AI giải pháp:
196
+ 1. Đề xuất Composite Index: `CREATE INDEX CONCURRENTLY idx_orders_cust_stat_created ON orders (customer_id, status, created_at DESC);`
197
+ 2. Rewrite sang Cursor Pagination: `SELECT id, total, created_at FROM orders WHERE customer_id = 123 AND status = 'COMPLETED' AND created_at < :last_created_at ORDER BY created_at DESC LIMIT 20;`
198
+
199
+ **Prisma ORM (Khắc phục N+1 Query)**
586
200
  ```
587
- ### Produces
588
- ```json
589
- {
590
- "to": "user",
591
- "output_fields": ["optimized_query", "migration_file", "explain_diff", "exit_code"]
592
- }
201
+ ORM: Prisma
202
+ Code:
203
+ const users = await prisma.user.findMany({ take: 50 });
204
+ for (const user of users) {
205
+ user.posts = await prisma.post.findMany({ where: { authorId: user.id } });
206
+ }
593
207
  ```
594
-
595
- ---
208
+ → AI sửa thành single query batching với eager load:
209
+ `const users = await prisma.user.findMany({ take: 50, include: { posts: { select: { id: true, title: true } } } });`
596
210