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.
- package/.agents/AGENTS.md +139 -42
- package/.agents/DEV_PROFILE.md +95 -0
- package/.agents/registry/capability-graph.yml +171 -334
- package/.agents/registry/graph.json +37 -19
- package/.agents/registry/index.yaml +59 -13
- package/.agents/registry/skills-index.yml +204 -447
- package/.agents/rules/coding.md +23 -0
- package/.agents/rules/global.md +44 -30
- package/.agents/skills/_template/SKILL.md +2 -377
- package/.agents/skills/qk-access-policy/SKILL.md +98 -473
- package/.agents/skills/qk-agent-observability/SKILL.md +3 -439
- package/.agents/skills/qk-ai-builder/SKILL.md +132 -565
- package/.agents/skills/qk-api-consumer/SKILL.md +256 -0
- package/.agents/skills/qk-api-consumer/capability.yaml +21 -0
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +29 -0
- package/.agents/skills/qk-api-lifecycle/SKILL.md +133 -456
- package/.agents/skills/qk-bug-resolution/SKILL.md +128 -561
- package/.agents/skills/qk-code-review/SKILL.md +142 -420
- package/.agents/skills/qk-context-loader/SKILL.md +99 -471
- package/.agents/skills/qk-data-engineer/SKILL.md +119 -340
- package/.agents/skills/qk-data-lifecycle/SKILL.md +89 -488
- package/.agents/skills/qk-db-optimizer/SKILL.md +102 -488
- package/.agents/skills/qk-design-system-engineering/SKILL.md +76 -461
- package/.agents/skills/qk-devops-platform/SKILL.md +77 -463
- package/.agents/skills/qk-docs/SKILL.md +88 -494
- package/.agents/skills/qk-engineering-standard/SKILL.md +4 -588
- package/.agents/skills/qk-fe-api-integration/SKILL.md +343 -343
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +29 -29
- package/.agents/skills/qk-feature-delivery/SKILL.md +137 -445
- package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-frontend-architecture/SKILL.md +5 -479
- package/.agents/skills/qk-help/evals/scorecard.yaml +13 -13
- package/.agents/skills/qk-orchestrator/SKILL.md +63 -502
- package/.agents/skills/qk-orchestrator/references/routing-table.md +10 -14
- package/.agents/skills/qk-product-specification/SKILL.md +70 -479
- package/.agents/skills/qk-production-release/SKILL.md +80 -537
- package/.agents/skills/qk-project-audit/SKILL.md +174 -0
- package/.agents/skills/qk-project-bootstrap/SKILL.md +243 -471
- package/.agents/skills/qk-project-health/SKILL.md +97 -496
- package/.agents/skills/qk-project-memory/SKILL.md +76 -21
- package/.agents/skills/qk-refactor/SKILL.md +167 -384
- package/.agents/skills/qk-security-audit/SKILL.md +141 -463
- package/.agents/skills/qk-security-audit/capability.yaml +1 -2
- package/.agents/skills/qk-system-evolution/SKILL.md +343 -343
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +26 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +119 -509
- package/.agents/skills/qk-ui-audit/SKILL.md +73 -537
- package/.agents/skills/qk-ui-builder/SKILL.md +521 -482
- package/.agents/skills/qk-ui-system-builder/SKILL.md +68 -514
- package/.agents/skills/qk-upgrade/SKILL.md +301 -0
- package/.agents/skills/qk-upgrade/capability.yaml +24 -0
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +26 -0
- package/.agents/skills/qk-validation-gate/SKILL.md +4 -603
- package/.agents/skills/qk-web-quality-gate/SKILL.md +85 -463
- package/.agents/workflows/bug-resolution.yml +6 -6
- package/.agents/workflows/context-discovery.yml +94 -0
- package/.agents/workflows/feature-delivery.yml +8 -4
- package/.agents/workflows/refactor.yml +6 -3
- package/.agents/workflows/shared/quality-gate.yml +94 -0
- package/.agents/workflows/skin-governance.yml +115 -0
- package/README.md +152 -67
- package/package.json +2 -2
- package/tooling/build-registry.js +30 -8
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
# ── Identity ───────────────────────────────────────────────
|
|
3
3
|
name: qk-data-lifecycle
|
|
4
|
-
version: 9.
|
|
4
|
+
version: 9.2.0
|
|
5
5
|
status: stable
|
|
6
|
-
description: "Quản lý Schema
|
|
6
|
+
description: "Quản lý Schema và Migration cơ sở dữ liệu an toàn — schema freeze, backward-compatible migrations, data transformation, zero-downtime deployment. Dùng skill này khi user nhắc đến: sửa schema, migration, database model, db schema, cập nhật database, đổi model, thêm cột, alter table — kể cả khi chỉ nói 'thêm trường phone vào bảng users'."
|
|
7
7
|
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
8
|
|
|
9
9
|
# ── V9: Classification ─────────────────────────────────────
|
|
@@ -21,11 +21,16 @@ complexity:
|
|
|
21
21
|
has_external_dependency: true
|
|
22
22
|
has_breaking_change: false
|
|
23
23
|
|
|
24
|
-
triggers:
|
|
25
|
-
- "sửa schema"
|
|
26
|
-
- "
|
|
27
|
-
- "
|
|
28
|
-
- "
|
|
24
|
+
triggers:
|
|
25
|
+
- "sửa schema"
|
|
26
|
+
- "migration"
|
|
27
|
+
- "database model"
|
|
28
|
+
- "db schema"
|
|
29
|
+
- "cập nhật database"
|
|
30
|
+
- "đổi model"
|
|
31
|
+
- "thêm cột"
|
|
32
|
+
- "alter table"
|
|
33
|
+
|
|
29
34
|
|
|
30
35
|
# ── V8: References ─────────────────────────────────────────
|
|
31
36
|
workflow: feature-delivery
|
|
@@ -33,6 +38,7 @@ workflow: feature-delivery
|
|
|
33
38
|
rules:
|
|
34
39
|
- global
|
|
35
40
|
- coding
|
|
41
|
+
- safety
|
|
36
42
|
|
|
37
43
|
tools:
|
|
38
44
|
- filesystem
|
|
@@ -40,11 +46,13 @@ tools:
|
|
|
40
46
|
|
|
41
47
|
related_skills:
|
|
42
48
|
- qk-db-optimizer
|
|
49
|
+
- qk-api-lifecycle
|
|
43
50
|
|
|
44
51
|
knowledge_scope:
|
|
45
52
|
owns:
|
|
46
53
|
- schema
|
|
47
54
|
- migrations
|
|
55
|
+
- data-contracts
|
|
48
56
|
references:
|
|
49
57
|
- architecture
|
|
50
58
|
- security
|
|
@@ -72,525 +80,118 @@ produces: [code, schema]
|
|
|
72
80
|
consumes: [context-graph, user-description]
|
|
73
81
|
|
|
74
82
|
token_budget:
|
|
75
|
-
max_files_read:
|
|
76
|
-
max_lines_per_read:
|
|
77
|
-
max_shell_commands:
|
|
83
|
+
max_files_read: 5
|
|
84
|
+
max_lines_per_read: 150
|
|
85
|
+
max_shell_commands: 2
|
|
78
86
|
stop_early: true
|
|
79
87
|
|
|
80
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
88
|
+
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
81
89
|
---
|
|
82
90
|
|
|
83
|
-
# qk-data-lifecycle — Database Schema &
|
|
91
|
+
# qk-data-lifecycle — Database Schema & Migration Guardian
|
|
84
92
|
|
|
85
93
|
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
86
94
|
|
|
95
|
+
Chịu trách nhiệm quản lý vòng đời Schema DB và Migration an toàn theo nguyên tắc: **Freeze schema → Backward-compatible migration (Expand & Contract) → Cleanup**. Tuyệt đối không làm đứt gãy runtime hoặc gây mất mát dữ liệu live.
|
|
96
|
+
|
|
87
97
|
---
|
|
88
98
|
|
|
89
|
-
## Memory Workflow
|
|
90
|
-
|
|
91
|
-
### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
|
|
92
|
-
- 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:
|
|
93
|
-
- **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.
|
|
94
|
-
- **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.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
99
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
100
|
-
bắt buộc tra cứu:
|
|
101
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
102
|
-
|
|
103
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
104
|
-
- Architecture
|
|
105
|
-
- Hard Bug
|
|
106
|
-
- Convention
|
|
107
|
-
- Pattern
|
|
108
|
-
- Tech Debt Pattern
|
|
109
|
-
- 👉 *Domain Focus:* Convention / Architecture (vd: chiến lược migration backward-compatible, quy định FK).
|
|
110
|
-
|
|
111
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
112
|
-
Không được xem Memory là Source of Truth.
|
|
113
|
-
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.
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
118
|
-
- 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:
|
|
119
|
-
- Hard Bug có khả năng tái diễn.
|
|
120
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
121
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
122
|
-
- Quyết định Architecture quan trọng.
|
|
123
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
124
|
-
- 👉 *Domain Harvest:* Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới).
|
|
125
|
-
|
|
126
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
127
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
128
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
133
|
-
Sau khi hoàn thành task:
|
|
134
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
135
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
136
|
-
- Đề xuất người dùng xem xét.
|
|
137
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
138
|
-
- `/learn`
|
|
139
|
-
- `qk-project-memory`
|
|
140
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
.ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
147
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
### Ignore (Không đưa vào Memory)
|
|
152
|
-
Không lưu:
|
|
153
|
-
- Trace log của một session đơn lẻ.
|
|
154
|
-
- Temporary debugging data.
|
|
155
|
-
- Output của một lần chạy test/scan.
|
|
156
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
157
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
158
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
159
|
-
- 👉 *Domain Ignore:* Thao tác thêm trường đơn giản hoặc temporary database fix.
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
### Golden Rule
|
|
164
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
165
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
|
|
172
|
-
- 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:
|
|
173
|
-
- **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.
|
|
174
|
-
- **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.
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
179
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
180
|
-
bắt buộc tra cứu:
|
|
181
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
182
|
-
|
|
183
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
184
|
-
- Architecture
|
|
185
|
-
- Hard Bug
|
|
186
|
-
- Convention
|
|
187
|
-
- Pattern
|
|
188
|
-
- Tech Debt Pattern
|
|
189
|
-
- 👉 *Domain Focus:* Convention / Architecture (vd: chiến lược migration backward-compatible, quy định FK).
|
|
190
|
-
|
|
191
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
192
|
-
Không được xem Memory là Source of Truth.
|
|
193
|
-
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.
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
198
|
-
- 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:
|
|
199
|
-
- Hard Bug có khả năng tái diễn.
|
|
200
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
201
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
202
|
-
- Quyết định Architecture quan trọng.
|
|
203
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
204
|
-
- 👉 *Domain Harvest:* Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới).
|
|
205
|
-
|
|
206
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
207
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
208
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
213
|
-
Sau khi hoàn thành task:
|
|
214
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
215
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
216
|
-
- Đề xuất người dùng xem xét.
|
|
217
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
218
|
-
- `/learn`
|
|
219
|
-
- `qk-project-memory`
|
|
220
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
.ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
227
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
### Ignore (Không đưa vào Memory)
|
|
232
|
-
Không lưu:
|
|
233
|
-
- Trace log của một session đơn lẻ.
|
|
234
|
-
- Temporary debugging data.
|
|
235
|
-
- Output của một lần chạy test/scan.
|
|
236
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
237
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
238
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
239
|
-
- 👉 *Domain Ignore:* Thao tác thêm trường đơn giản hoặc temporary database fix.
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
### Golden Rule
|
|
244
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
245
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
252
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
253
|
-
bắt buộc tra cứu:
|
|
254
|
-
- `.agents/knowledge/index.yaml` (Shared Project Knowledge)
|
|
255
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
256
|
-
|
|
257
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
258
|
-
- Architecture
|
|
259
|
-
- Hard Bug
|
|
260
|
-
- Convention
|
|
261
|
-
- Pattern
|
|
262
|
-
- Tech Debt Pattern
|
|
263
|
-
- 👉 *Domain Focus:* Convention / Architecture (vd: chiến lược migration backward-compatible, quy định FK).
|
|
264
|
-
|
|
265
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
266
|
-
Không được xem Memory là Source of Truth.
|
|
267
|
-
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.
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
272
|
-
- 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:
|
|
273
|
-
- Hard Bug có khả năng tái diễn.
|
|
274
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
275
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
276
|
-
- Quyết định Architecture quan trọng.
|
|
277
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
278
|
-
- 👉 *Domain Harvest:* Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới).
|
|
279
|
-
|
|
280
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
281
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
282
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
287
|
-
Sau khi hoàn thành task:
|
|
288
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
289
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
290
|
-
- Đề xuất người dùng xem xét.
|
|
291
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
292
|
-
- `/learn`
|
|
293
|
-
- `qk-project-memory`
|
|
294
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
301
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
### Ignore (Không đưa vào Memory)
|
|
306
|
-
Không lưu:
|
|
307
|
-
- Trace log của một session đơn lẻ.
|
|
308
|
-
- Temporary debugging data.
|
|
309
|
-
- Output của một lần chạy test/scan.
|
|
310
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
311
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
312
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
313
|
-
- 👉 *Domain Ignore:* Thao tác thêm trường đơn giản hoặc temporary database fix.
|
|
314
|
-
|
|
315
|
-
---
|
|
316
|
-
|
|
317
|
-
### Golden Rule
|
|
318
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
319
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
325
|
-
- 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:
|
|
326
|
-
- Hard Bug có khả năng tái diễn.
|
|
327
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
328
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
329
|
-
- Quyết định Architecture quan trọng.
|
|
330
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
331
|
-
- 👉 *Domain Harvest:* Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới).
|
|
332
|
-
|
|
333
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
334
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
335
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
336
|
-
|
|
337
|
-
---
|
|
338
|
-
|
|
339
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
340
|
-
Sau khi hoàn thành task:
|
|
341
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
342
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
343
|
-
- Đề xuất người dùng xem xét.
|
|
344
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
345
|
-
- `/learn`
|
|
346
|
-
- `qk-project-memory`
|
|
347
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
348
|
-
|
|
349
|
-
```
|
|
350
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
354
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
355
|
-
|
|
356
|
-
---
|
|
357
|
-
|
|
358
|
-
### Ignore (Không đưa vào Memory)
|
|
359
|
-
Không lưu:
|
|
360
|
-
- Trace log của một session đơn lẻ.
|
|
361
|
-
- Temporary debugging data.
|
|
362
|
-
- Output của một lần chạy test/scan.
|
|
363
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
364
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
365
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
366
|
-
- 👉 *Domain Ignore:* Thao tác thêm trường đơn giản hoặc temporary database fix.
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
### Golden Rule
|
|
371
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
372
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
373
|
-
|
|
374
|
-
---
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
378
|
-
- 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:
|
|
379
|
-
- Hard Bug có khả năng tái diễn.
|
|
380
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
381
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
382
|
-
- Quyết định Architecture quan trọng.
|
|
383
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
384
|
-
- 👉 *Domain Harvest:* Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới).
|
|
385
|
-
|
|
386
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
387
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
388
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
393
|
-
Sau khi hoàn thành task:
|
|
394
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
395
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
396
|
-
- Đề xuất người dùng xem xét.
|
|
397
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
398
|
-
- `/learn`
|
|
399
|
-
- `qk-project-memory`
|
|
400
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
401
|
-
|
|
402
|
-
```
|
|
403
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
407
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
### Ignore (Không đưa vào Memory)
|
|
412
|
-
Không lưu:
|
|
413
|
-
- Trace log của một session đơn lẻ.
|
|
414
|
-
- Temporary debugging data.
|
|
415
|
-
- Output của một lần chạy test/scan.
|
|
416
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
417
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
418
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
419
|
-
- 👉 *Domain Ignore:* Thao tác thêm trường đơn giản hoặc temporary database fix.
|
|
420
|
-
|
|
421
|
-
---
|
|
422
|
-
|
|
423
|
-
### Golden Rule
|
|
424
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
425
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
---
|
|
429
|
-
---
|
|
430
|
-
---
|
|
431
|
-
|
|
432
99
|
## Preconditions
|
|
433
|
-
- [ ] Existing schema is identified (ORM model files)
|
|
434
|
-
- [ ] Change intent is clear (add field / modify field / drop field)
|
|
435
|
-
|
|
436
|
-
```
|
|
437
|
-
On missing precondition:
|
|
438
|
-
EXIT: BLOCKED
|
|
439
|
-
Message: "Cần xác định: schema hiện tại + loại thay đổi (add/modify/drop)."
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
---
|
|
443
100
|
|
|
444
|
-
|
|
445
|
-
- ✅ Define strict schema BEFORE writing repository code
|
|
446
|
-
- ✅ Always backward-compatible migrations (never destructive in first pass)
|
|
447
|
-
- ✅ Separate schema (models) from business logic (services)
|
|
101
|
+
Trước khi thay đổi bất kỳ file schema hay migration nào, AI BẮT BUỘC kiểm tra:
|
|
448
102
|
|
|
449
|
-
|
|
450
|
-
-
|
|
451
|
-
-
|
|
452
|
-
-
|
|
103
|
+
- [ ] Xác định ORM/Tool đang dùng từ `DEV_PROFILE.md` (Prisma, Drizzle, TypeORM, Alembic, Knex, v.v.).
|
|
104
|
+
- [ ] Xác định Database engine (PostgreSQL, MySQL, SQLite, MongoDB).
|
|
105
|
+
- [ ] **Destructive check**: Thay đổi có chứa thao tác xóa/đổi tên cột (`DROP COLUMN`, `RENAME COLUMN`, thay đổi type thu hẹp dữ liệu) không?
|
|
106
|
+
- [ ] Nếu là thay đổi Destructive:
|
|
107
|
+
→ **EXIT: BLOCKED**
|
|
108
|
+
→ Báo cáo user: Cảnh báo rủi ro downtime và đề xuất áp dụng **Expand & Contract Pattern** thay vì drop/rename trực tiếp.
|
|
453
109
|
|
|
454
110
|
---
|
|
455
111
|
|
|
456
|
-
##
|
|
457
|
-
| P | Task | Skip Threshold |
|
|
458
|
-
|---|------|----------------|
|
|
459
|
-
| P1 | Read existing schema | Never |
|
|
460
|
-
| P2 | Design migration (backward-compat) | Never |
|
|
461
|
-
| P3 | Write migration file | Never |
|
|
462
|
-
| P4 | Update repository layer | Budget < 30% |
|
|
463
|
-
| P5 | Update affected service layer | Budget < 50% |
|
|
112
|
+
## Scope
|
|
464
113
|
|
|
465
|
-
|
|
114
|
+
✅ Skill này làm:
|
|
115
|
+
- Cập nhật file định nghĩa Schema (ví dụ `schema.prisma`, `schema.ts`, model files).
|
|
116
|
+
- Tạo migration scripts (SQL hoặc ORM-generated) có tính lũy tiến, an toàn.
|
|
117
|
+
- Thiết kế chiến lược **Expand & Contract** khi đổi tên cột hoặc tách bảng (Giai đoạn 1: Thêm cột mới + dual write; Giai đoạn 2: Backfill data; Giai đoạn 3: Deprecate & remove cột cũ).
|
|
118
|
+
- Đảm bảo các cột mới có `DEFAULT` value hoặc `NULLABLE` để tránh khóa bảng (table lock) hoặc lỗi insert từ code cũ đang chạy.
|
|
119
|
+
- Cập nhật types/interfaces tương ứng trong ứng dụng.
|
|
466
120
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
modify_column:
|
|
473
|
-
strategy: add new column → migrate data → drop old column (3-phase)
|
|
474
|
-
|
|
475
|
-
drop_column:
|
|
476
|
-
strategy: Phase 1 — mark deprecated (keep in schema)
|
|
477
|
-
Phase 2 — next release — remove from queries
|
|
478
|
-
Phase 3 — next migration — DROP COLUMN
|
|
479
|
-
|
|
480
|
-
rename_table:
|
|
481
|
-
strategy: create new table → migrate → drop old (never ALTER TABLE RENAME in prod)
|
|
482
|
-
|
|
483
|
-
pii_data:
|
|
484
|
-
strategy: Khi add column chứa PII (Personal Identifiable Information), BẮT BUỘC áp dụng cơ chế hashing/encryption tương ứng (tuân thủ R-SEC-04).
|
|
485
|
-
```
|
|
121
|
+
❌ Skill này KHÔNG làm:
|
|
122
|
+
- Chạy lệnh phá hủy tự động (`prisma migrate reset`, `drop database`, `truncate table`).
|
|
123
|
+
- Viết câu query phân tích hiệu năng/EXPLAIN (→ `qk-db-optimizer`).
|
|
124
|
+
- Viết API endpoint xử lý request/response (→ `qk-api-lifecycle`).
|
|
486
125
|
|
|
487
126
|
---
|
|
488
127
|
|
|
489
|
-
##
|
|
490
|
-
|
|
491
|
-
### Phase 1 — Schema Read
|
|
492
|
-
1. `grep_search` for existing model/entity file
|
|
493
|
-
2. Read current schema (targeted, ≤ 100 lines)
|
|
494
|
-
3. Identify impact of proposed change
|
|
128
|
+
## Execution Steps
|
|
495
129
|
|
|
496
|
-
###
|
|
497
|
-
1. Choose safety strategy (see Migration Safety Rules)
|
|
498
|
-
2. Write migration file (up + down)
|
|
499
|
-
3. Verify down() is always defined (rollback support)
|
|
500
|
-
|
|
501
|
-
### Phase 3 — Repository Update
|
|
502
|
-
1. Update repository methods to use new schema
|
|
503
|
-
2. Verify no raw queries reference old column names
|
|
504
|
-
|
|
505
|
-
**Decision:**
|
|
130
|
+
### Step 1 — Phân tích Schema Diff & Đánh giá rủi ro
|
|
506
131
|
```
|
|
507
|
-
|
|
508
|
-
|
|
132
|
+
Inputs: Schema hiện tại, Yêu cầu thay đổi từ user
|
|
133
|
+
Actions:
|
|
134
|
+
- So sánh schema cũ và mới.
|
|
135
|
+
- Phân loại:
|
|
136
|
+
- Safe: Thêm bảng mới, thêm nullable column, thêm column có default an toàn.
|
|
137
|
+
- Caution: Thêm index trên bảng lớn (cần CONCURRENTLY nếu Postgres).
|
|
138
|
+
- Dangerous: Xóa cột, đổi tên cột, đổi kiểu dữ liệu (Int -> String hoặc ngược lại).
|
|
139
|
+
Exit: BLOCKED nếu gặp Dangerous change mà chưa có kế hoạch Expand & Contract
|
|
509
140
|
```
|
|
510
141
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
## Evidence Format
|
|
142
|
+
### Step 2 — Áp dụng Expand & Contract (nếu có Breaking Change)
|
|
514
143
|
```
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
144
|
+
Quy trình chuẩn:
|
|
145
|
+
1. Expand: Thêm cột mới song song (nullable). Code ứng dụng ghi đồng thời cả 2 cột.
|
|
146
|
+
2. Migrate Data: Chạy batch script chuyển dữ liệu từ cột cũ sang cột mới.
|
|
147
|
+
3. Contract: Chuyển code đọc từ cột mới. Sau 1 release ổn định mới xóa cột cũ.
|
|
519
148
|
```
|
|
520
149
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
| FAILED | Migration involves destructive DROP without backup | Architecture violation |
|
|
530
|
-
|
|
531
|
-
---
|
|
150
|
+
### Step 3 — Sinh Migration Script & Cập nhật ORM
|
|
151
|
+
```
|
|
152
|
+
Actions:
|
|
153
|
+
- Sửa file schema chính (`schema.prisma`, Drizzle `schema.ts`, SQLAlchemy model).
|
|
154
|
+
- Tạo migration file có timestamp rõ ràng (VD: `20260914_add_phone_to_users.sql`).
|
|
155
|
+
- Đi kèm cả script Rollback (Down migration) nếu framework hỗ trợ.
|
|
156
|
+
- Chạy code generation cho types (VD: `npx prisma generate`).
|
|
157
|
+
```
|
|
532
158
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
159
|
+
### Step 4 — Verification
|
|
160
|
+
```
|
|
161
|
+
Actions:
|
|
162
|
+
- Kiểm tra cú pháp SQL của migration file.
|
|
163
|
+
- Kiểm tra tính tương thích ngược: Code cũ vẫn insert/query được mà không crash.
|
|
164
|
+
- Kiểm tra Type definitions trong app có bị type error không (chạy tsc/type-check).
|
|
165
|
+
```
|
|
539
166
|
|
|
540
167
|
---
|
|
541
168
|
|
|
542
|
-
##
|
|
543
|
-
| Level | Definition | Example |
|
|
544
|
-
|-------|-----------|---------|
|
|
545
|
-
| CRITICAL | Data loss risk in migration | Direct `DROP TABLE` without data copy |
|
|
546
|
-
| HIGH | Missing index on foreign key | Performance degrade on JOIN |
|
|
547
|
-
| MEDIUM | N+1 query vulnerability in repository | Fetching related entities in a loop |
|
|
548
|
-
| LOW | Naming convention violation | `userId` instead of `user_id` in DB |
|
|
169
|
+
## Prompt Template
|
|
549
170
|
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
## Retry Policy
|
|
553
171
|
```
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
172
|
+
DB Engine: [PostgreSQL / MySQL / SQLite / MongoDB]
|
|
173
|
+
ORM/Tool: [Prisma / Drizzle / TypeORM / Alembic / Knex]
|
|
174
|
+
Thay đổi: [Thêm bảng mới / Thêm trường / Sửa quan hệ / Đổi kiểu dữ liệu]
|
|
175
|
+
Mục đích: [Mô tả nghiệp vụ cần lưu trữ]
|
|
176
|
+
Dữ liệu live: [Có dữ liệu production đang chạy không?]
|
|
558
177
|
```
|
|
559
178
|
|
|
560
|
-
|
|
179
|
+
### Ví dụ theo Stack:
|
|
561
180
|
|
|
562
|
-
|
|
181
|
+
**Prisma (PostgreSQL)**
|
|
563
182
|
```
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
Questions:
|
|
569
|
-
1. Bảng này cần lưu những trường dữ liệu nào?
|
|
570
|
-
2. Bảng này có liên kết với bảng nào khác không? (ví dụ User)
|
|
571
|
-
Recommended Assumptions:
|
|
572
|
-
- Add standard created_at, updated_at timestamps
|
|
573
|
-
- UUID primary keys
|
|
183
|
+
DB Engine: PostgreSQL
|
|
184
|
+
ORM: Prisma
|
|
185
|
+
Thay đổi: Thêm trường `phoneNumber` vào model `User`, không bắt buộc nhưng phải unique nếu có.
|
|
186
|
+
Dữ liệu live: Có (hơn 100k users)
|
|
574
187
|
```
|
|
188
|
+
→ AI cập nhật: `phoneNumber String? @unique` trong `schema.prisma`, sinh migration SQL với `CREATE UNIQUE INDEX CONCURRENTLY` (nếu cần), chạy `prisma generate`.
|
|
575
189
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
## Handoff Contract
|
|
579
|
-
### Consumes
|
|
580
|
-
```json
|
|
581
|
-
{
|
|
582
|
-
"from": "user",
|
|
583
|
-
"required_fields": ["entity_name", "fields"],
|
|
584
|
-
"optional_fields": ["relationships", "db_engine"]
|
|
585
|
-
}
|
|
190
|
+
**Drizzle ORM (MySQL)**
|
|
586
191
|
```
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
"to": "user or db-optimizer",
|
|
591
|
-
"output_fields": ["schema_file", "migration_file", "repository_file", "exit_code"]
|
|
592
|
-
}
|
|
192
|
+
DB Engine: MySQL
|
|
193
|
+
ORM: Drizzle
|
|
194
|
+
Thay đổi: Tạo bảng `AuditLog` lưu lịch sử hành động người dùng (id, userId, action, metadata JSON, createdAt).
|
|
593
195
|
```
|
|
594
|
-
|
|
595
|
-
---
|
|
196
|
+
→ AI tạo: `auditLogs` table definition trong `src/db/schema.ts`, sinh migration file với Drizzle Kit, export type `AuditLog` và `NewAuditLog`.
|
|
596
197
|
|