ai-developer-skill-os 9.3.0 → 10.1.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.
- package/.agents/AGENTS.md +60 -40
- package/.agents/DEV_PROFILE.md +36 -2
- package/.agents/registry/graph.json +95 -342
- package/.agents/registry/index.yaml +61 -237
- package/.agents/rules/coding.md +30 -12
- package/.agents/rules/command-safety.md +19 -8
- package/.agents/rules/global.md +234 -28
- package/.agents/rules/prompt-compiler.md +170 -0
- package/.agents/skills/qk-api-data-discovery/SKILL.md +470 -0
- package/.agents/skills/qk-backend-data/SKILL.md +190 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +176 -248
- package/.agents/skills/qk-code-cleaner/SKILL.md +250 -0
- package/.agents/skills/qk-code-review/SKILL.md +126 -247
- package/.agents/skills/qk-devops-release/SKILL.md +145 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +179 -247
- package/.agents/skills/qk-orchestrator/SKILL.md +100 -151
- package/.agents/skills/qk-product-spec/SKILL.md +113 -0
- package/.agents/skills/qk-prompt-compiler/SKILL.md +321 -0
- package/.agents/skills/qk-ui-engineer/SKILL.md +137 -0
- package/.agents/workflows/feature-delivery.yml +1 -1
- package/.agents/workflows/production-release.yml +1 -1
- package/.agents/workflows/spec-driven-development.yml +109 -87
- package/CHANGELOG.md +54 -0
- package/README.md +125 -184
- package/bin/install.js +337 -329
- package/package.json +2 -2
- package/.agents/README.md +0 -90
- package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
- package/.agents/docs/MIGRATION-STATUS.md +0 -35
- package/.agents/docs/MIGRATION-V8.md +0 -10
- package/.agents/docs/ROADMAP-V8.2.md +0 -78
- package/.agents/docs/V8-CERTIFICATION.md +0 -27
- package/.agents/skills/qk-access-policy/SKILL.md +0 -206
- package/.agents/skills/qk-access-policy/capability.yaml +0 -23
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
- package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
- package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
- package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
- package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
- package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
- package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
- package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
- package/.agents/skills/qk-code-review/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/SKILL.md +0 -198
- package/.agents/skills/qk-context-loader/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
- package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
- package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
- package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
- package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
- package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-docs/SKILL.md +0 -193
- package/.agents/skills/qk-docs/capability.yaml +0 -23
- package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
- package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
- package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
- package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
- package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
- package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-help/SKILL.md +0 -107
- package/.agents/skills/qk-help/capability.yaml +0 -20
- package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
- package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
- package/.agents/skills/qk-product-specification/SKILL.md +0 -187
- package/.agents/skills/qk-product-specification/capability.yaml +0 -27
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-production-release/SKILL.md +0 -188
- package/.agents/skills/qk-production-release/capability.yaml +0 -27
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-audit/SKILL.md +0 -174
- package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
- package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-health/SKILL.md +0 -202
- package/.agents/skills/qk-project-health/capability.yaml +0 -23
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-project-memory/SKILL.md +0 -303
- package/.agents/skills/qk-project-memory/capability.yaml +0 -23
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-refactor/SKILL.md +0 -243
- package/.agents/skills/qk-refactor/capability.yaml +0 -26
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-security-audit/SKILL.md +0 -280
- package/.agents/skills/qk-security-audit/capability.yaml +0 -29
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
- package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
- package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
- package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
- package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/.agents/skills/qk-ui-builder/references/color.md +0 -115
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
- package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
- package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
- package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
- package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
- package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-upgrade/SKILL.md +0 -301
- package/.agents/skills/qk-upgrade/capability.yaml +0 -24
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
- package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
- package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
- package/.agents/workflows/research.yml +0 -75
- package/.agents/workflows/skill-evolution.yml +0 -97
- package/tooling/fix-refactor.js +0 -8
|
@@ -1,257 +1,185 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
description: "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
- error-resolution
|
|
16
|
-
|
|
17
|
-
complexity:
|
|
18
|
-
level: medium
|
|
19
|
-
criteria:
|
|
20
|
-
files_affected: "2-5"
|
|
21
|
-
has_behavior_change: true
|
|
22
|
-
has_external_dependency: false
|
|
23
|
-
has_breaking_change: false
|
|
24
|
-
|
|
2
|
+
name: qk-bug-resolution
|
|
3
|
+
version: 10.1.0
|
|
4
|
+
status: stable
|
|
5
|
+
subtitle: "Debug & Fix Bug"
|
|
6
|
+
description: "Chẩn đoán nguyên nhân gốc rễ và khắc phục lỗi mã nguồn theo chu trình khép kín 4 bước (Triangulate → Root-Cause → Surgical Fix → Regression Shield). Dùng khi: fix bug, sửa lỗi, crash, error, exception, trace lỗi, điều tra nguyên nhân bug, not working, màn hình trắng, lỗi logic — TUYỆT ĐỐI KHÔNG dùng khi cần tái cấu trúc lớn (dùng qk-code-cleaner) hoặc làm tính năng mới (dùng qk-feature-delivery)."
|
|
7
|
+
tools:
|
|
8
|
+
- filesystem
|
|
9
|
+
- terminal
|
|
10
|
+
rules:
|
|
11
|
+
- global
|
|
12
|
+
- coding-standards
|
|
13
|
+
- safety
|
|
14
|
+
workflow: bug-resolution
|
|
25
15
|
triggers:
|
|
26
16
|
- "fix bug"
|
|
27
17
|
- "sửa lỗi"
|
|
28
18
|
- "crash"
|
|
29
19
|
- "error"
|
|
30
20
|
- "exception"
|
|
21
|
+
- "trace lỗi"
|
|
22
|
+
- "điều tra nguyên nhân bug"
|
|
23
|
+
- "debug lỗi"
|
|
31
24
|
- "not working"
|
|
32
25
|
- "bị lỗi"
|
|
33
|
-
- "
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
##
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
File nghi ngờ: src/components/ProfileCard.tsx, src/store/authStore.ts
|
|
194
|
-
Đã thử: Thêm null check ở line 47 nhưng lỗi chuyển sang line 52
|
|
195
|
-
```
|
|
196
|
-
→ AI điều tra: stale state trong Zustand/Redux khi re-login, component lifecycle
|
|
197
|
-
vs store reset timing, race condition giữa auth state và component render.
|
|
198
|
-
|
|
199
|
-
**role: be**
|
|
200
|
-
```
|
|
201
|
-
Lỗi: PrismaClientKnownRequestError: Unique constraint failed on field `email`
|
|
202
|
-
at POST /api/auth/register — status 500 thay vì 409
|
|
203
|
-
Xảy ra khi: Register với email đã tồn tại
|
|
204
|
-
Tần suất: Luôn luôn
|
|
205
|
-
File nghi ngờ: src/routes/auth/register.ts
|
|
206
|
-
Đã thử: Chưa thử gì, mới phát hiện
|
|
207
|
-
```
|
|
208
|
-
→ AI điều tra: missing error type guard cho Prisma errors, HTTP status code mapping,
|
|
209
|
-
idempotency của endpoint, có nên check trước (findUnique) hay catch lỗi.
|
|
210
|
-
|
|
211
|
-
**role: fullstack**
|
|
212
|
-
```
|
|
213
|
-
Lỗi: Optimistic update trên FE hiện sai data, sau 2s mới sync về đúng
|
|
214
|
-
Xảy ra khi: Xóa item trong danh sách → item biến mất → reload lại → item vẫn còn
|
|
215
|
-
Tần suất: Chỉ xảy ra khi network chậm (> 1s)
|
|
216
|
-
File nghi ngờ: FE: useDeleteItem.ts / BE: DELETE /api/items/:id
|
|
217
|
-
Đã thử: Đã kiểm tra BE trả 200 đúng
|
|
218
|
-
```
|
|
219
|
-
→ AI điều tra: React Query mutation onMutate/onError/onSettled sequence,
|
|
220
|
-
cache invalidation timing, BE rollback khi constraint violation,
|
|
221
|
-
contract mismatch giữa FE optimistic state và BE response.
|
|
222
|
-
|
|
223
|
-
**role: data**
|
|
224
|
-
```
|
|
225
|
-
Lỗi: DuplicateKeyError trên BigQuery sau khi re-run DAG ngày 2024-01-15
|
|
226
|
-
Job: daily_sales_load — task: load_to_bq
|
|
227
|
-
Xảy ra khi: Manual re-run sau khi pipeline fail giữa chừng
|
|
228
|
-
Tần suất: Mỗi lần re-run partial load
|
|
229
|
-
File nghi ngờ: dags/daily_sales_load.py, transforms/sales_transform.sql
|
|
230
|
-
Đã thử: Xóa data ngày đó trên BQ rồi re-run — OK, nhưng không scalable
|
|
231
|
-
```
|
|
232
|
-
→ AI điều tra: idempotency gap (thiếu MERGE/UPSERT), partition-based delete trước load,
|
|
233
|
-
task atomicity design, watermark checkpoint bị reset sai.
|
|
234
|
-
|
|
235
|
-
**role: ai-engineer**
|
|
236
|
-
```
|
|
237
|
-
Lỗi: RAG trả lời sai — cite đúng document nhưng nội dung không liên quan
|
|
238
|
-
Xảy ra khi: Câu hỏi có nhiều từ khóa overlap với nhiều document khác nhau
|
|
239
|
-
Tần suất: ~30% queries liên quan đến chủ đề "pricing"
|
|
240
|
-
File nghi ngờ: retrieval/vector_search.py, prompts/rag_system.txt
|
|
241
|
-
Đã thử: Tăng top_k từ 3 lên 5 — không cải thiện
|
|
242
|
-
```
|
|
243
|
-
→ AI điều tra: embedding model semantic mismatch, chunk boundary cắt mất context,
|
|
244
|
-
thiếu reranking layer, system prompt không enforce grounding,
|
|
245
|
-
cần hybrid search (BM25 + dense) cho domain-specific terms.
|
|
246
|
-
|
|
247
|
-
**role: devops**
|
|
248
|
-
```
|
|
249
|
-
Lỗi: GitHub Actions deploy job fail: "Error: EACCES: permission denied, open '/app/logs'"
|
|
250
|
-
Stage: production — chỉ xảy ra sau khi update Docker base image
|
|
251
|
-
Xảy ra khi: Deploy lên production container
|
|
252
|
-
Tần suất: 100% sau khi merge PR #247
|
|
253
|
-
File nghi ngờ: Dockerfile, docker-compose.prod.yml, .github/workflows/deploy.yml
|
|
254
|
-
Đã thử: Revert base image — OK, nhưng cần base image mới để patch CVE
|
|
255
|
-
```
|
|
256
|
-
→ AI điều tra: USER directive trong Dockerfile thay đổi giữa image versions,
|
|
257
|
-
volume mount permission, non-root user setup, security vs functionality trade-off.
|
|
26
|
+
- "màn hình trắng"
|
|
27
|
+
- "lỗi 500"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# qk-bug-resolution — Debug & Fix Bug (Surgical Root-Cause Engine)
|
|
31
|
+
|
|
32
|
+
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 1. Nguyên Tắc Cốt Lõi & Luật Chống Over-Engineering
|
|
37
|
+
|
|
38
|
+
> **Core Principle:** A bug fix must be surgical, evidence-based, and minimal. Never guess. Never refactor surrounding code during a bug fix.
|
|
39
|
+
> **Verification Principle:** PASS is a verified conclusion, never a target. Zero workarounds.
|
|
40
|
+
|
|
41
|
+
### 🛡️ Anti-Overengineering Rule (CẤM SỬA LAN MAN)
|
|
42
|
+
- **Tối thiểu hóa Diff (Minimal Diff):** Chỉ sửa đúng dòng code hoặc biểu thức gây ra lỗi. Tuyệt đối KHÔNG nhân cơ hội sửa bug để "tiện tay" đổi tên biến xung quanh, format lại cả file, hay viết lại cả hàm.
|
|
43
|
+
- **Không thay đổi kiến trúc trong bản vá:** Nếu phát hiện kiến trúc cũ xấu, giải quyết dứt điểm bug trước bằng một bản vá an toàn (Surgical Guard), sau đó đề xuất người dùng chạy `qk-code-cleaner` sau. Cấm trộn lẫn việc fix bug và việc refactor vào cùng một lần sửa.
|
|
44
|
+
|
|
45
|
+
### 🔒 No Unrelated Changes Rule (CẤM CHẠM CODE NGOÀI)
|
|
46
|
+
- Tuyệt đối không sửa các file ngoài call-path của bug.
|
|
47
|
+
- Tuyệt đối không tự tiện nâng cấp thư viện lân cận.
|
|
48
|
+
- Nếu phát hiện code smell hoặc vấn đề ngoài scope: **Chỉ ghi nhận vào báo cáo**, tuyệt đối không tự sửa.
|
|
49
|
+
|
|
50
|
+
### 🛡️ Anti-Fake-Pass Rule (CẤM ÉP PASS ẢO - R-G-14.5)
|
|
51
|
+
- **CẤM** dùng `as any`, `@ts-ignore`, `@ts-expect-error` để che giấu crash hoặc lỗi type.
|
|
52
|
+
- **CẤM** dùng `catch (e) {}` rỗng nuốt exception để code không crash bề mặt.
|
|
53
|
+
- **CẤM** sửa expected assertions trong unit test để lừa test runner chuyển từ đỏ sang xanh.
|
|
54
|
+
|
|
55
|
+
### ⚖️ Verify Before Claim Rule (XÁC MINH TRƯỚC KHI TUYÊN BỐ)
|
|
56
|
+
- **Cấm tuyên bố đã sửa xong nếu chưa kiểm chứng:** Nếu có test runner hoặc script tái hiện, BẮT BUỘC phải chạy lệnh để chứng minh lỗi đã biến mất.
|
|
57
|
+
- **Báo cáo trung thực:** Nếu không thể chạy môi trường (thiếu DB, thiếu API 3rd party), AI phải ghi rõ: `"Trạng thái: NOT VERIFIED — Đã vá theo bằng chứng tĩnh, chưa thể chạy test tự động. Cần user test tay theo kịch bản dưới đây"`.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 2. Ranh Giới & Phạm Vi Kỹ Thuật (Hard Boundaries)
|
|
62
|
+
|
|
63
|
+
### ✅ Việc skill này BẮT BUỘC làm:
|
|
64
|
+
- Thu thập và phân tích trực tiếp stack trace, logs, và file mã nguồn xung quanh call-stack.
|
|
65
|
+
- Tìm ra nguyên nhân gốc (Root Cause) bằng chứng cứ trong code thực tế, không dừng ở triệu chứng bề mặt.
|
|
66
|
+
- Phân loại chính xác: Logic Error, State Mutation, Boundary Condition, Type/Schema Mismatch, Race Condition, hoặc Unhandled Exception.
|
|
67
|
+
- Viết bản vá phẫu thuật (Surgical Fix) có tính phòng thủ (null-safety, boundary guard).
|
|
68
|
+
- Tạo hoặc cập nhật regression test để khóa lỗi vĩnh viễn (nếu repo có test framework).
|
|
69
|
+
|
|
70
|
+
### ❌ Việc skill này TUYỆT ĐỐI KHÔNG làm (Chuyển giao quyền):
|
|
71
|
+
- Tái cấu trúc cả module vì chê code xấu → Chuyển sang `qk-code-cleaner`.
|
|
72
|
+
- Thêm tính năng mới chưa từng có trong spec → Chuyển sang `qk-feature-delivery`.
|
|
73
|
+
- Thay đổi cấu trúc cơ sở dữ liệu lớn → Chuyển sang `qk-backend-data`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 3. Quy Trình Khép Kín 4 Bước (Sequential Procedure)
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
[Bước 1: Triangulate] ── Đọc log/trace, mở file thực tế quanh điểm crash, khoanh vùng phạm vi
|
|
81
|
+
│
|
|
82
|
+
▼
|
|
83
|
+
[Bước 2: Root-Cause] ── Trả lời 5 câu hỏi gốc rễ (R-G-14.1). Nếu thiếu chứng cứ ──► BLOCKED
|
|
84
|
+
│
|
|
85
|
+
▼
|
|
86
|
+
[Bước 3: Surgical Fix] ── Viết bản vá tối thiểu, defensive programming, không chạm code ngoài
|
|
87
|
+
│
|
|
88
|
+
▼
|
|
89
|
+
[Bước 4: Verify & Test] ── Chạy test xác thực thực tế. Nếu FAIL ──► Kích hoạt Failure Path
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Chi tiết các bước:
|
|
93
|
+
1. **Triangulate (Khoanh vùng):** Mở file chứa dòng lỗi, đọc tối thiểu 30–50 dòng xung quanh để hiểu ngữ cảnh.
|
|
94
|
+
2. **Root-Cause Gate (R-G-14.1):** Bắt buộc trả lời 5 câu hỏi trước khi sửa:
|
|
95
|
+
- 1. Vấn đề quan sát được là gì?
|
|
96
|
+
- 2. Lỗi xảy ra ở đâu (file & line)?
|
|
97
|
+
- 3. Luồng code nào dẫn tới lỗi?
|
|
98
|
+
- 4. Nguyên nhân gốc rễ là gì?
|
|
99
|
+
- 5. Vì sao bản vá đề xuất sẽ triệt tiêu nguyên nhân gốc rễ này?
|
|
100
|
+
*(Nếu không xác định được với đầy đủ bằng chứng: Chuyển trạng thái `Status: BLOCKED`)*.
|
|
101
|
+
3. **Surgical Fix:** Vá lỗi tại điểm phát sinh hoặc thêm Guard Clause phòng ngự. Đảm bảo optional chaining `?.`, fallback an toàn.
|
|
102
|
+
4. **Verification:** Chạy test hoặc kiểm tra call-sites để đảm bảo các nơi khác gọi hàm này không bị ảnh hưởng.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 4. Xử Lý Sự Cố Khi Bản Vá Thất Bại (Failure Path Protocol)
|
|
107
|
+
|
|
108
|
+
Nếu sau khi áp dụng bản vá mà lỗi vẫn còn hoặc sinh ra lỗi mới (Regression):
|
|
109
|
+
1. **Revert ngay bản vá vừa làm:**
|
|
110
|
+
```bash
|
|
111
|
+
git checkout HEAD -- path/to/failed_fix_file
|
|
112
|
+
```
|
|
113
|
+
2. **Hủy bỏ giả thuyết cũ:** Không cố chấp chắp vá thêm code. Việc test fail chứng tỏ giả thuyết về nguyên nhân gốc đã SAI.
|
|
114
|
+
3. **Hình thành giả thuyết mới:** Đọc kỹ thông báo lỗi mới xuất hiện để tìm nguyên nhân thực sự sâu hơn (ví dụ: lỗi không nằm ở controller mà nằm ở transformer dữ liệu trước đó).
|
|
115
|
+
4. **Giới hạn 2 lần thử:** Nếu sau 2 lần vá vẫn không hết lỗi, AI BẮT BUỘC dừng lại, giữ nguyên trạng thái ban đầu và báo cáo chi tiết các giả thuyết đã thử để xin thêm log từ người dùng với trạng thái `Status: BLOCKED`.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 5. Ví Dụ Bản Vá Phẫu Thuật Đa Ngôn Ngữ
|
|
120
|
+
|
|
121
|
+
### TypeScript / JavaScript:
|
|
122
|
+
```typescript
|
|
123
|
+
// ❌ Trước khi sửa: TypeError: Cannot read properties of undefined (reading 'address')
|
|
124
|
+
function getUserCity(user: UserResponse) {
|
|
125
|
+
return user.profile.address.city;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// ✅ Bản vá tối thiểu (Surgical Fix) có Null-Safety & Fallback:
|
|
129
|
+
function getUserCity(user: UserResponse | null | undefined): string {
|
|
130
|
+
return user?.profile?.address?.city ?? "Unknown";
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Python:
|
|
135
|
+
```python
|
|
136
|
+
# ❌ Trước khi sửa: KeyError hoặc NoneType error khi item không có 'price'
|
|
137
|
+
def calculate_subtotal(items):
|
|
138
|
+
return sum(item["price"] * item["quantity"] for item in items)
|
|
139
|
+
|
|
140
|
+
# ✅ Bản vá tối thiểu (Surgical Fix) phòng thủ với dict.get() và type guard:
|
|
141
|
+
def calculate_subtotal(items) -> float:
|
|
142
|
+
if not items:
|
|
143
|
+
return 0.0
|
|
144
|
+
return sum(
|
|
145
|
+
float(item.get("price", 0.0)) * int(item.get("quantity", 1))
|
|
146
|
+
for item in items
|
|
147
|
+
if isinstance(item, dict)
|
|
148
|
+
)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 6. Thích Ứng Theo Role Kỹ Thuật (Role Adaptation)
|
|
154
|
+
|
|
155
|
+
| Role | Trọng tâm khi Debug & Fix Bug | Hành vi kỹ thuật đặc thù |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `frontend` | UI lifecycle, re-rendering, event propagation, API response binding | Kiểm tra network mock, hook dependency array, conditional rendering |
|
|
158
|
+
| `backend` | Transaction rollback, auth middleware, input validation, SQL exception | Kiểm tra query logging, DB connection pool, Zod validation, error status |
|
|
159
|
+
| `fullstack` | Hợp đồng giao tiếp FE-BE, serialization, cookie/session, sync state | Kiểm tra shared types, request payload vs response schema, CORS |
|
|
160
|
+
| `data` | Data corruption, schema drift, null trong pipeline, OOM | Kiểm tra partition path, dbt logs, data quality assertion, idempotency |
|
|
161
|
+
| `devops` | CrashLoopBackOff, memory leak, missing env secret, port conflict | Kiểm tra container logs, Docker healthcheck, ingress/proxy headers |
|
|
162
|
+
| `qa` | Tạo test case tái hiện (Repro step), edge-case boundary verification | Viết automated reproduction script, kiểm tra cross-browser |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 7. Báo Cáo Nghiệm Thu Chuẩn Xác (Truth-First Report)
|
|
167
|
+
|
|
168
|
+
```markdown
|
|
169
|
+
🔧 Bug Resolution Summary [Role: <role> | Type: <Dạng lỗi>]
|
|
170
|
+
─────────────────────────────────────────────────────────────────────
|
|
171
|
+
Trạng thái: [SUCCESS | BLOCKED | FAILED | PARTIAL]
|
|
172
|
+
Triệu chứng ban đầu: [Mô tả ngắn gọn lỗi gặp phải và thông báo lỗi]
|
|
173
|
+
Nguyên nhân gốc rễ: [Cơ chế chính xác gây ra lỗi trong mã nguồn]
|
|
174
|
+
|
|
175
|
+
Vị trí đã can thiệp phẫu thuật (Laser Focus):
|
|
176
|
+
✅ [FIX] [TênFile.ts:L42](file:///<workspace-root>/path/to/file.ts#L42-L48): [Mô tả bản vá ngắn gọn]
|
|
177
|
+
|
|
178
|
+
Kiểm chứng thực tế (Verify Before Claim):
|
|
179
|
+
• Chạy lệnh kiểm thử: [Đã chạy: `npm test path/to/test` | Chưa chạy (Lý do môi trường)]
|
|
180
|
+
• Kết quả kiểm tra: [Pass | Regression test đã bổ sung | Cần user test tay]
|
|
181
|
+
• Tác động phụ: ✅ Đã rà soát N call-sites, 0 side-effect
|
|
182
|
+
|
|
183
|
+
📋 Kịch bản test tay dành cho người dùng:
|
|
184
|
+
1. [Thao tác cụ thể để kích hoạt lại luồng và xác nhận lỗi đã hết]
|
|
185
|
+
```
|