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-access-policy
|
|
4
|
-
version: 9.
|
|
4
|
+
version: 9.2.0
|
|
5
5
|
status: stable
|
|
6
|
-
description: "Quản lý RBAC,
|
|
6
|
+
description: "Quản lý và thiết lập chính sách phân quyền RBAC/ABAC, định nghĩa permission matrix, sinh auth middleware bảo vệ endpoint. Dùng skill này khi user nhắc đến: phân quyền, rbac, abac, auth middleware, access control, bảo mật api, quyền truy cập, role permission — kể cả khi chỉ nói 'chỉ admin mới được xóa bài viết'."
|
|
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
|
-
- "
|
|
26
|
-
- "
|
|
27
|
-
- "
|
|
28
|
-
- "auth middleware"
|
|
24
|
+
triggers:
|
|
25
|
+
- "phân quyền"
|
|
26
|
+
- "rbac"
|
|
27
|
+
- "abac"
|
|
28
|
+
- "auth middleware"
|
|
29
|
+
- "access control"
|
|
30
|
+
- "bảo mật api"
|
|
31
|
+
- "quyền truy cập"
|
|
32
|
+
- "role permission"
|
|
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
|
+
- security
|
|
36
42
|
|
|
37
43
|
tools:
|
|
38
44
|
- filesystem
|
|
@@ -40,11 +46,13 @@ tools:
|
|
|
40
46
|
|
|
41
47
|
related_skills:
|
|
42
48
|
- qk-api-lifecycle
|
|
49
|
+
- qk-security-audit
|
|
43
50
|
|
|
44
51
|
knowledge_scope:
|
|
45
52
|
owns:
|
|
46
53
|
- security-policy
|
|
47
54
|
- role-matrix
|
|
55
|
+
- permission-middleware
|
|
48
56
|
references:
|
|
49
57
|
- architecture
|
|
50
58
|
- security
|
|
@@ -72,510 +80,127 @@ produces: [code, report]
|
|
|
72
80
|
consumes: [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: 1
|
|
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-access-policy — Access Control Designer
|
|
91
|
+
# qk-access-policy — Access Control & Authorization Designer
|
|
84
92
|
|
|
85
93
|
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
86
94
|
|
|
95
|
+
Chịu trách nhiệm thiết kế và triển khai cơ chế kiểm soát truy cập (RBAC / ABAC), bảo đảm nguyên tắc Least Privilege và Zero-Trust: **định nghĩa role matrix trước, implement middleware/guard sau**.
|
|
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:* Architecture/Pattern (vd: ma trận quyền authz, middleware rbac).
|
|
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 hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust).
|
|
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 1 route/role thông thường vào bảng quyền đã có.
|
|
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:* Architecture/Pattern (vd: ma trận quyền authz, middleware rbac).
|
|
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 hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust).
|
|
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 1 route/role thông thường vào bảng quyền đã có.
|
|
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:* Architecture/Pattern (vd: ma trận quyền authz, middleware rbac).
|
|
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 hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust).
|
|
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 1 route/role thông thường vào bảng quyền đã có.
|
|
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 hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust).
|
|
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 1 route/role thông thường vào bảng quyền đã có.
|
|
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 hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust).
|
|
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 1 route/role thông thường vào bảng quyền đã có.
|
|
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
|
-
- [ ] User roles and protected resources are defined
|
|
434
|
-
- [ ] Auth system (JWT, session, OAuth) is identified
|
|
435
100
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
101
|
+
Trước khi bắt đầu code, AI BẮT BUỘC xác nhận các thông tin sau:
|
|
102
|
+
|
|
103
|
+
- [ ] Danh sách Roles & Entities trong hệ thống (e.g. `guest`, `user`, `editor`, `admin`).
|
|
104
|
+
- [ ] Danh mục tài nguyên (Resources) và thao tác (Actions: create, read, update, delete).
|
|
105
|
+
- [ ] Cơ chế truyền tải identity hiện tại (JWT payload claims, Session cookie, hay Header API Key).
|
|
106
|
+
- [ ] Nếu yêu cầu ABAC: Xác định rõ thuộc tính ngữ cảnh (e.g. `owner_id === user.id`, `tenant_id === org.id`).
|
|
107
|
+
|
|
108
|
+
*Nếu thiếu thông tin về Role hoặc Auth mechanism:*
|
|
109
|
+
→ **EXIT: BLOCKED**
|
|
110
|
+
→ Thông báo user: "Vui lòng xác nhận danh sách Roles và cơ chế Identity hiện tại trước khi thiết lập phân quyền."
|
|
441
111
|
|
|
442
112
|
---
|
|
443
113
|
|
|
444
114
|
## Scope
|
|
445
|
-
- ✅ Define explicit Role-Permission Matrix before coding
|
|
446
|
-
- ✅ Implement middleware/guards based strictly on the matrix
|
|
447
|
-
- ✅ Separate auth (who are you?) from authz (what can you do?)
|
|
448
|
-
- ✅ **Bắt buộc tuân thủ R-SEC-04: Mọi kiểm tra phân quyền phải thực hiện ở Backend (Server-side) qua Middleware. Tuyệt đối không tin tưởng JWT Claims thô chưa xác thực từ Client.**
|
|
449
115
|
|
|
450
|
-
|
|
451
|
-
-
|
|
452
|
-
-
|
|
453
|
-
-
|
|
454
|
-
|
|
455
|
-
|
|
116
|
+
✅ Skill này làm:
|
|
117
|
+
- Thiết lập **Role-Permission Matrix** rõ ràng (dạng bảng Markdown đối chiếu).
|
|
118
|
+
- Tạo Type definitions / Enums cho `Role`, `Permission`, `Resource`, `Action`.
|
|
119
|
+
- Xây dựng Auth Middleware / Guard / Decorator kiểm tra quyền truy cập.
|
|
120
|
+
- Xử lý phân quyền theo ngữ cảnh / sở hữu tài nguyên (Resource Ownership check).
|
|
121
|
+
- Phân tách rõ ràng mã trạng thái HTTP: `401 Unauthorized` (chưa authenticate) vs `403 Forbidden` (đã login nhưng không đủ quyền).
|
|
456
122
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
| P2 | Implement deny-by-default middleware | Never |
|
|
462
|
-
| P3 | Add role guards to routes/controllers | Budget < 30% |
|
|
463
|
-
| P4 | Add audit logging for auth failures | Budget < 60% |
|
|
123
|
+
❌ Skill này KHÔNG làm:
|
|
124
|
+
- Viết flow đăng ký, đăng nhập, hash password (thuộc auth lifecycle cơ bản).
|
|
125
|
+
- Lưu trữ secret/token vào client-side không an toàn.
|
|
126
|
+
- Chỉ đặt guard ở controller/route mà bỏ qua validation ở service layer đối với logic nhạy cảm.
|
|
464
127
|
|
|
465
128
|
---
|
|
466
129
|
|
|
467
|
-
##
|
|
130
|
+
## Execution Steps
|
|
468
131
|
|
|
132
|
+
### Step 1 — Xây dựng Role-Permission Matrix
|
|
469
133
|
```
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
134
|
+
Inputs: user_description, DEV_PROFILE.md
|
|
135
|
+
Actions:
|
|
136
|
+
- Liệt kê bảng ma trận phân quyền Role x Resource x Action:
|
|
137
|
+
| Role | Resource | Actions | Conditions (ABAC) |
|
|
138
|
+
|--------|----------|----------------------|-----------------------|
|
|
139
|
+
| user | post | read, create | isOwner to update/del |
|
|
140
|
+
| admin | post | read, create, delete | any |
|
|
141
|
+
Outputs: Markdown table Role Matrix được phê duyệt
|
|
142
|
+
Exit: BLOCKED nếu quyền hạn bị mâu thuẫn hoặc chưa rõ scope
|
|
475
143
|
```
|
|
476
144
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
## Workflow
|
|
480
|
-
|
|
481
|
-
### Phase 1 — Matrix Definition
|
|
482
|
-
1. List all roles and resources from requirements
|
|
483
|
-
2. Create Role-Permission Matrix (table format above)
|
|
484
|
-
3. Identify conflicts or contradictions
|
|
485
|
-
|
|
486
|
-
**Decision:** `IF matrix has contradiction → EXIT: BLOCKED — resolve ambiguity`
|
|
487
|
-
|
|
488
|
-
### Phase 2 — Implementation
|
|
489
|
-
1. Create deny-by-default guard/middleware
|
|
490
|
-
2. Apply guards to routes using matrix
|
|
491
|
-
3. Add auth failure logging
|
|
492
|
-
|
|
493
|
-
### Phase 3 — Verification
|
|
494
|
-
1. Read matrix vs implementation — spot check 3 routes
|
|
495
|
-
|
|
496
|
-
---
|
|
497
|
-
|
|
498
|
-
## Evidence Format
|
|
145
|
+
### Step 2 — Khởi tạo Types & Constants
|
|
499
146
|
```
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
Fix: [specific change]
|
|
147
|
+
Actions:
|
|
148
|
+
- Khai báo enum/type an toàn (TypeScript/Python/Go) cho Role và Permission.
|
|
149
|
+
- Định nghĩa Policy / Rule registry có type-check chặt chẽ.
|
|
150
|
+
- Không dùng hardcoded string rải rác trong controller.
|
|
505
151
|
```
|
|
506
152
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
153
|
+
### Step 3 — Triển khai Guard / Middleware
|
|
154
|
+
```
|
|
155
|
+
Actions:
|
|
156
|
+
- Express/Fastify: Tạo middleware `requirePermission(perm)` hoặc `requireRole(role)`.
|
|
157
|
+
- NestJS: Tạo `@Roles()`, `@Permissions()` decorator + `AuthGuard`, `RolesGuard`.
|
|
158
|
+
- FastAPI: Tạo security dependency `Security(get_current_active_user, scopes=[...])`.
|
|
159
|
+
- Next.js: Xử lý middleware.ts (route matching) + Server Action permission assertion.
|
|
160
|
+
Rules:
|
|
161
|
+
- Kiểm tra 401 trước (chưa đăng nhập hoặc token hết hạn).
|
|
162
|
+
- Kiểm tra 403 sau (đã đăng nhập nhưng thiếu quyền).
|
|
163
|
+
- Không bao giờ trả về 500 khi vi phạm authorization.
|
|
164
|
+
```
|
|
518
165
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
166
|
+
### Step 4 — Verification & Guard Test
|
|
167
|
+
```
|
|
168
|
+
Actions:
|
|
169
|
+
- Kiểm tra endpoint được bảo vệ: gọi không có token -> 401.
|
|
170
|
+
- Gọi với role thường vào endpoint admin -> 403 Forbidden.
|
|
171
|
+
- Gọi đúng quyền -> 200 OK.
|
|
172
|
+
- Đảm bảo không có lỗ hổng IDOR (Insecure Direct Object Reference).
|
|
173
|
+
```
|
|
525
174
|
|
|
526
175
|
---
|
|
527
176
|
|
|
528
|
-
##
|
|
529
|
-
| Level | Definition | Example |
|
|
530
|
-
|-------|-----------|---------|
|
|
531
|
-
| CRITICAL | Route unguarded due to missing middleware | Anyone can access DELETE /users |
|
|
532
|
-
| HIGH | Hardcoded roles in business logic | `if (user.role === 'admin')` in service layer |
|
|
533
|
-
| MEDIUM | Wildcard permissions granted | `user` can access `*` |
|
|
534
|
-
| LOW | Audit log missing for auth failure | Unlogged 403 error |
|
|
535
|
-
|
|
536
|
-
---
|
|
177
|
+
## Prompt Template
|
|
537
178
|
|
|
538
|
-
## Retry Policy
|
|
539
179
|
```
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
180
|
+
Hệ thống: [Tên app / module cần phân quyền]
|
|
181
|
+
Roles: [Danh sách roles: vd: viewer, editor, admin]
|
|
182
|
+
Resource: [Tài nguyên cần bảo vệ: vd: documents, orders, users]
|
|
183
|
+
Yêu cầu: [RBAC đơn giản hay có điều kiện sở hữu ABAC]
|
|
184
|
+
Stack: [NestJS / Express / FastAPI / Next.js]
|
|
544
185
|
```
|
|
545
186
|
|
|
546
|
-
|
|
187
|
+
### Ví dụ theo Stack:
|
|
547
188
|
|
|
548
|
-
|
|
189
|
+
**role: be (NestJS + TypeScript)**
|
|
549
190
|
```
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
Questions:
|
|
555
|
-
1. Hệ thống có những role nào? (ví dụ: admin, user, manager)
|
|
556
|
-
2. Những API/Route nào cần bảo vệ?
|
|
557
|
-
Recommended Assumptions:
|
|
558
|
-
- Deny-by-default for all non-public routes
|
|
191
|
+
Roles: User, Moderator, Admin
|
|
192
|
+
Resource: Comment
|
|
193
|
+
Yêu cầu: User chỉ sửa comment của chính mình; Moderator xóa được mọi comment; Admin toàn quyền.
|
|
194
|
+
Stack: NestJS (Guards + Decorators)
|
|
559
195
|
```
|
|
196
|
+
→ AI tạo: `Role` enum, `@Roles()` decorator, `RolesGuard` implements `CanActivate`, `OwnershipGuard` kiểm tra `comment.authorId === request.user.id`.
|
|
560
197
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
## Handoff Contract
|
|
564
|
-
### Consumes
|
|
565
|
-
```json
|
|
566
|
-
{
|
|
567
|
-
"from": "user",
|
|
568
|
-
"required_fields": ["roles", "resources"],
|
|
569
|
-
"optional_fields": ["auth_strategy"]
|
|
570
|
-
}
|
|
198
|
+
**role: fullstack (Next.js 14 App Router)**
|
|
571
199
|
```
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
"output_fields": ["role_matrix", "middleware_files", "guarded_routes", "exit_code"]
|
|
577
|
-
}
|
|
200
|
+
Roles: Member, Owner
|
|
201
|
+
Resource: Workspace Settings
|
|
202
|
+
Yêu cầu: Chỉ Owner mới được đổi tên workspace hoặc xóa workspace. Member chỉ xem.
|
|
203
|
+
Stack: Next.js Server Actions + DAL (Data Access Layer)
|
|
578
204
|
```
|
|
579
|
-
|
|
580
|
-
---
|
|
205
|
+
→ AI tạo: Hàm assertion `assertWorkspaceOwner(workspaceId, userId)` dùng chung trong Server Actions, redirect/throw `ForbiddenError` chuẩn SEO & UX.
|
|
581
206
|
|