ai-developer-skill-os 8.3.1 → 9.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.
Files changed (107) hide show
  1. package/.agents/AGENTS.md +21 -0
  2. package/.agents/registry/capability-graph.yml +13 -2
  3. package/.agents/registry/graph.json +33 -33
  4. package/.agents/registry/index.yaml +33 -33
  5. package/.agents/rules/global.md +13 -0
  6. package/.agents/skills/_template/SKILL.md +178 -2
  7. package/.agents/skills/_template/capability.yaml +1 -1
  8. package/.agents/skills/qk-access-policy/SKILL.md +185 -2
  9. package/.agents/skills/qk-access-policy/capability.yaml +1 -1
  10. package/.agents/skills/qk-access-policy/evals/scorecard.yaml +1 -1
  11. package/.agents/skills/qk-agent-observability/SKILL.md +190 -1
  12. package/.agents/skills/qk-agent-observability/capability.yaml +1 -1
  13. package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +1 -1
  14. package/.agents/skills/qk-ai-builder/SKILL.md +185 -2
  15. package/.agents/skills/qk-ai-builder/capability.yaml +1 -1
  16. package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +1 -1
  17. package/.agents/skills/qk-api-lifecycle/SKILL.md +185 -2
  18. package/.agents/skills/qk-api-lifecycle/capability.yaml +1 -1
  19. package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +1 -1
  20. package/.agents/skills/qk-bug-resolution/SKILL.md +185 -2
  21. package/.agents/skills/qk-bug-resolution/capability.yaml +1 -1
  22. package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
  23. package/.agents/skills/qk-code-review/SKILL.md +185 -2
  24. package/.agents/skills/qk-code-review/capability.yaml +1 -1
  25. package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
  26. package/.agents/skills/qk-context-loader/SKILL.md +188 -4
  27. package/.agents/skills/qk-context-loader/capability.yaml +1 -1
  28. package/.agents/skills/qk-context-loader/evals/scorecard.yaml +1 -1
  29. package/.agents/skills/qk-data-lifecycle/SKILL.md +185 -2
  30. package/.agents/skills/qk-data-lifecycle/capability.yaml +1 -1
  31. package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +1 -1
  32. package/.agents/skills/qk-db-optimizer/SKILL.md +185 -2
  33. package/.agents/skills/qk-db-optimizer/capability.yaml +1 -1
  34. package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +1 -1
  35. package/.agents/skills/qk-design-system-engineering/SKILL.md +185 -2
  36. package/.agents/skills/qk-design-system-engineering/capability.yaml +1 -1
  37. package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +1 -1
  38. package/.agents/skills/qk-devops-platform/SKILL.md +185 -2
  39. package/.agents/skills/qk-devops-platform/capability.yaml +1 -1
  40. package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +1 -1
  41. package/.agents/skills/qk-docs/SKILL.md +185 -2
  42. package/.agents/skills/qk-docs/capability.yaml +1 -1
  43. package/.agents/skills/qk-docs/evals/scorecard.yaml +1 -1
  44. package/.agents/skills/qk-engineering-standard/SKILL.md +185 -2
  45. package/.agents/skills/qk-engineering-standard/capability.yaml +1 -1
  46. package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +3 -3
  47. package/.agents/skills/qk-fe-api-integration/SKILL.md +185 -2
  48. package/.agents/skills/qk-fe-api-integration/capability.yaml +1 -1
  49. package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +1 -1
  50. package/.agents/skills/qk-feature-delivery/SKILL.md +185 -2
  51. package/.agents/skills/qk-feature-delivery/capability.yaml +1 -1
  52. package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
  53. package/.agents/skills/qk-frontend-architecture/SKILL.md +185 -2
  54. package/.agents/skills/qk-frontend-architecture/capability.yaml +1 -1
  55. package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +1 -1
  56. package/.agents/skills/qk-help/SKILL.md +2 -2
  57. package/.agents/skills/qk-help/capability.yaml +1 -1
  58. package/.agents/skills/qk-help/evals/scorecard.yaml +1 -1
  59. package/.agents/skills/qk-orchestrator/SKILL.md +185 -2
  60. package/.agents/skills/qk-orchestrator/capability.yaml +1 -1
  61. package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
  62. package/.agents/skills/qk-product-specification/SKILL.md +185 -2
  63. package/.agents/skills/qk-product-specification/capability.yaml +1 -1
  64. package/.agents/skills/qk-product-specification/evals/scorecard.yaml +1 -1
  65. package/.agents/skills/qk-production-release/SKILL.md +185 -2
  66. package/.agents/skills/qk-production-release/capability.yaml +1 -1
  67. package/.agents/skills/qk-production-release/evals/scorecard.yaml +1 -1
  68. package/.agents/skills/qk-project-bootstrap/SKILL.md +200 -4
  69. package/.agents/skills/qk-project-bootstrap/capability.yaml +1 -1
  70. package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +1 -1
  71. package/.agents/skills/qk-project-health/SKILL.md +185 -2
  72. package/.agents/skills/qk-project-health/capability.yaml +1 -1
  73. package/.agents/skills/qk-project-health/evals/scorecard.yaml +1 -1
  74. package/.agents/skills/qk-project-memory/SKILL.md +252 -277
  75. package/.agents/skills/qk-project-memory/capability.yaml +1 -1
  76. package/.agents/skills/qk-project-memory/evals/scorecard.yaml +1 -1
  77. package/.agents/skills/qk-refactor/SKILL.md +184 -1
  78. package/.agents/skills/qk-refactor/capability.yaml +1 -1
  79. package/.agents/skills/qk-refactor/evals/scorecard.yaml +1 -1
  80. package/.agents/skills/qk-security-audit/SKILL.md +185 -2
  81. package/.agents/skills/qk-security-audit/capability.yaml +1 -1
  82. package/.agents/skills/qk-security-audit/evals/scorecard.yaml +1 -1
  83. package/.agents/skills/qk-system-evolution/SKILL.md +185 -2
  84. package/.agents/skills/qk-system-evolution/capability.yaml +1 -1
  85. package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +1 -1
  86. package/.agents/skills/qk-test-engineering/SKILL.md +185 -2
  87. package/.agents/skills/qk-test-engineering/capability.yaml +1 -1
  88. package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +1 -1
  89. package/.agents/skills/qk-ui-audit/SKILL.md +185 -2
  90. package/.agents/skills/qk-ui-audit/capability.yaml +1 -1
  91. package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +1 -1
  92. package/.agents/skills/qk-ui-builder/capability.yaml +1 -1
  93. package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +26 -0
  94. package/.agents/skills/qk-ui-system-builder/SKILL.md +185 -2
  95. package/.agents/skills/qk-ui-system-builder/capability.yaml +1 -1
  96. package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +1 -1
  97. package/.agents/skills/qk-validation-gate/SKILL.md +185 -2
  98. package/.agents/skills/qk-validation-gate/capability.yaml +1 -1
  99. package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +1 -1
  100. package/.agents/skills/qk-web-quality-gate/SKILL.md +185 -2
  101. package/.agents/skills/qk-web-quality-gate/capability.yaml +1 -1
  102. package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +2 -2
  103. package/CHANGELOG.md +8 -0
  104. package/README.md +13 -4
  105. package/package.json +4 -3
  106. package/tooling/sync-versions.js +256 -6
  107. package/tooling/validate-skills.js +1 -1
@@ -1,7 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
 
4
- const targetVersion = "8.3.1";
4
+ const targetVersion = "9.1.0";
5
5
  const rootDir = process.cwd();
6
6
  const skillsDir = path.join(rootDir, '.agents', 'skills');
7
7
 
@@ -9,6 +9,236 @@ const skills = fs.readdirSync(skillsDir).filter(f => fs.statSync(path.join(skill
9
9
 
10
10
  let updatedCount = 0;
11
11
 
12
+ function getMemoryWorkflow(skillName) {
13
+ const hints = {
14
+ 'qk-access-policy': {
15
+ active: 'Architecture/Pattern (vd: ma trận quyền authz, middleware rbac)',
16
+ harvest: 'Quyết định Architecture hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust)',
17
+ ignore: 'Thao tác thêm 1 route/role thông thường vào bảng quyền đã có'
18
+ },
19
+ 'qk-agent-observability': {
20
+ active: 'Hard Bug / Convention (vd: mô hình lỗi lặp vô tận, giới hạn token budget)',
21
+ harvest: 'Hard Bug mới có khả năng tái diễn (vd: lỗi loop định tuyến cần blacklist)',
22
+ ignore: 'Trace log của một session đơn lẻ (tự XÓA sau khi thực thi)'
23
+ },
24
+ 'qk-ai-builder': {
25
+ active: 'Architecture/Pattern (vd: cấu hình provider LLM, chuẩn RAG pipeline, prompt template)',
26
+ harvest: 'Pattern hoặc Convention mới (vd: quy chuẩn JSON schema cho prompt, scorecard định lượng)',
27
+ ignore: 'Các thao tác tinh chỉnh từ ngữ prompt tạm thời cho 1 task đơn lẻ'
28
+ },
29
+ 'qk-api-lifecycle': {
30
+ active: 'Convention/Pattern (vd: cấu trúc wrapper { status, data, error }, pagination format)',
31
+ harvest: 'Pattern hoặc Convention mới của dự án (vd: chuẩn xử lý lỗi API mới, rate limiting)',
32
+ ignore: 'Thao tác thêm 1 CRUD endpoint thông thường theo Hợp đồng sẵn có'
33
+ },
34
+ 'qk-bug-resolution': {
35
+ active: 'Hard Bug (vd: lỗi memory leak, race condition, lỗi thư viện tương tự từng gặp)',
36
+ harvest: 'Hard Bug mới có khả năng tái diễn (vd: nguyên nhân sâu xa của crash/leak để phòng ngừa)',
37
+ ignore: 'Lỗi nhỏ chỉ xảy ra một lần (vd: typo, quên import, thiếu ngoặc đơn giản)'
38
+ },
39
+ 'qk-code-review': {
40
+ active: 'Architecture / Convention / Pattern hiện hành của dự án (Ground Truth để thẩm định)',
41
+ harvest: 'Pattern hoặc Convention mới (vd: phát hiện anti-pattern lặp đi lặp lại trong codebase)',
42
+ ignore: 'Các góp ý phong cách (formatting/linting) đơn lẻ trong một PR'
43
+ },
44
+ 'qk-context-loader': {
45
+ active: 'Pattern / Architecture (vd: sơ đồ phụ thuộc mô-đun, biểu đồ ngữ cảnh O(1))',
46
+ harvest: 'Quyết định Architecture hoặc Pattern quan trọng khi ánh xạ dependency',
47
+ ignore: 'Cache đồ thị ngữ cảnh tạm thời của một lệnh tìm kiếm'
48
+ },
49
+ 'qk-data-lifecycle': {
50
+ active: 'Convention / Architecture (vd: chiến lược migration backward-compatible, quy định FK)',
51
+ harvest: 'Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới)',
52
+ ignore: 'Thao tác thêm trường đơn giản hoặc temporary database fix'
53
+ },
54
+ 'qk-db-optimizer': {
55
+ active: 'Pattern / Hard Bug (vd: lỗi slow query từng gặp, kế hoạch index đã duyệt)',
56
+ harvest: 'Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy)',
57
+ ignore: 'Dữ liệu kết quả EXPLAIN tạm thời của 1 query'
58
+ },
59
+ 'qk-design-system-engineering': {
60
+ active: 'Architecture / Convention (vd: hợp đồng màu sắc DESIGN.md, spacing, typography token)',
61
+ harvest: 'Pattern hoặc Convention mới (vd: định danh CSS variables mới cho toàn bộ hệ thống)',
62
+ ignore: 'Sửa đổi CSS cục bộ cho 1 component đơn lẻ'
63
+ },
64
+ 'qk-devops-platform': {
65
+ active: 'Architecture / Hard Bug (vd: quy trình CI/CD pipeline, rollback strategy, docker env)',
66
+ harvest: 'Quyết định Architecture quan trọng (vd: thay đổi runner CI, cấu hình rollback mới)',
67
+ ignore: 'Log build tạm thời của CI/CD session'
68
+ },
69
+ 'qk-docs': {
70
+ active: 'Convention (vd: chuẩn cấu trúc tài liệu, ngôn ngữ giải thích Tiếng Việt / Code Tiếng Anh)',
71
+ harvest: 'Pattern hoặc Convention mới của dự án (vd: quy chuẩn viết ADR hoặc tài liệu kiến trúc mới)',
72
+ ignore: 'Các lần sửa chính tả, ngữ pháp đơn lẻ'
73
+ },
74
+ 'qk-engineering-standard': {
75
+ active: 'Convention / Architecture (vd: ngưỡng định lượng độ phức tạp cyclomatic, DRY, SOLID)',
76
+ harvest: 'Convention hoặc ranh giới kỹ thuật mới (vd: áp đặt giới hạn 100 dòng cho file AGENTS.md)',
77
+ ignore: 'Cảnh báo linter tạm thời'
78
+ },
79
+ 'qk-fe-api-integration': {
80
+ active: 'Pattern / Convention (vd: cách quản lý state TanStack Query/Zustand, binding chuẩn)',
81
+ harvest: 'Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend)',
82
+ ignore: 'Logic call API của 1 component riêng rẽ'
83
+ },
84
+ 'qk-feature-delivery': {
85
+ active: 'Architecture / Pattern / Convention liên quan đến luồng tính năng hiện tại',
86
+ harvest: 'Quyết định Architecture hoặc Pattern mới hình thành khi làm feature',
87
+ ignore: 'Dữ liệu mock phục vụ thử nghiệm tính năng ban đầu'
88
+ },
89
+ 'qk-frontend-architecture': {
90
+ active: 'Architecture (vd: quy tắc router TanStack/Next, module routing, state isolation)',
91
+ harvest: 'Quyết định Architecture trọng yếu (vd: đổi chiến lược routing hoặc state management)',
92
+ ignore: 'Refactor UI component thông thường'
93
+ },
94
+ 'qk-orchestrator': {
95
+ active: 'Architecture / Convention (vd: bảng điều hướng kỹ năng, ràng buộc ranh giới rõ ràng)',
96
+ harvest: 'Quy luật phân phối routing hiệu quả mới',
97
+ ignore: 'Trình tự gọi lệnh tạm thời của một prompt user'
98
+ },
99
+ 'qk-product-specification': {
100
+ active: 'Convention / Pattern (vd: định dạng Acceptance Criteria, cấu trúc PRD)',
101
+ harvest: 'Thỏa thuận Product Spec hoặc cấu trúc requirement mới',
102
+ ignore: 'Ghi chú thảo luận ý tưởng thô ban đầu'
103
+ },
104
+ 'qk-production-release': {
105
+ active: 'Convention / Hard Bug (vd: 8-gate checklist release, rủi ro production cũ)',
106
+ harvest: 'Checklist hoặc Gate bảo vệ Production mới được đưa ra từ post-mortem',
107
+ ignore: 'Log deploy staging tạm thời'
108
+ },
109
+ 'qk-project-bootstrap': {
110
+ active: 'Architecture / Convention (vd: mô hình 4-folder RAG/Agent, blueprint quy chuẩn V9)',
111
+ harvest: 'Cấu trúc thư mục hoặc template scaffold mẫu mới của dự án',
112
+ ignore: 'File cấu hình local rác (đã đưa vào gitignore)'
113
+ },
114
+ 'qk-project-health': {
115
+ active: 'Architecture / Hard Bug (vd: chỉ số sức khỏe codebase 0-100, các điểm nợ kỹ thuật tech debt)',
116
+ harvest: 'Mô hình Code Smell hoặc Tech Debt hệ thống cần theo dõi tiêu diệt',
117
+ ignore: 'Report health tạm thời của 1 đợt scan'
118
+ },
119
+ 'qk-refactor': {
120
+ active: 'Pattern / Convention (vd: chiến lược tách file anti-slop, bảo toàn public contract)',
121
+ harvest: 'Pattern tái cấu trúc mã nguồn hiệu quả (vd: bẻ gẫy god-file thành module O(1))',
122
+ ignore: 'Các thao tác đổi tên biến (rename) hoặc format đơn giản'
123
+ },
124
+ 'qk-security-audit': {
125
+ active: 'Hard Bug / Architecture (vd: lỗ hổng OWASP, lộ rò rỉ secret, quy chuẩn Zero-Trust R-SEC-04)',
126
+ harvest: 'Lỗ hổng bảo mật mới phát hiện (Hard Bug) hoặc chính sách an toàn mới',
127
+ ignore: 'Cảnh báo scanner giả (false positive) đã xác thực'
128
+ },
129
+ 'qk-system-evolution': {
130
+ active: 'Architecture / Hard Bug (vd: kế hoạch nâng cấp thư viện incremental, breaking changes)',
131
+ harvest: 'Kinh nghiệm xử lý xung đột dependency hoặc bài học downgrade/rollback',
132
+ ignore: 'Lockfile changes tạm thời trong local cache'
133
+ },
134
+ 'qk-test-engineering': {
135
+ active: 'Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test)',
136
+ harvest: 'Pattern viết mock/stub mới hoặc chiến lược fixture dự án',
137
+ ignore: 'File coverage nháp sinh ra trong quá trình chạy test'
138
+ },
139
+ 'qk-ui-audit': {
140
+ active: 'Convention / Pattern (vd: 57 check Anti-Slop, độ tương phản A11y, Design Contract)',
141
+ harvest: 'Các mẫu lỗi AI-Slop phổ biến mới phát hiện trong UI dự án',
142
+ ignore: 'Lỗi lệch vài pixel hoặc sai color shade lẻ tẻ'
143
+ },
144
+ 'qk-ui-builder': {
145
+ active: 'Convention / Architecture (vd: bộ token màu sắc, typography, animation từ DESIGN.md)',
146
+ harvest: 'Mẫu layout hoặc component kết hợp chuẩn mực mới của ứng dụng',
147
+ ignore: 'CSS linh tinh không thuộc hệ thống design system'
148
+ },
149
+ 'qk-ui-system-builder': {
150
+ active: 'Architecture / Convention (vd: ánh xạ 1:1 từ contract DESIGN.md sang biến CSS)',
151
+ harvest: 'Chuẩn quy tắc đặt tên (--color-role-shade) hoặc cơ chế scale Dark Mode',
152
+ ignore: 'Giá trị màu thử nghiệm ngoài hợp đồng (bị nghiêm cấm)'
153
+ },
154
+ 'qk-validation-gate': {
155
+ active: 'Convention / Architecture (vd: các ngưỡng scorecard, quy định zero hallucination)',
156
+ harvest: 'Bộ tiêu chí kiểm định mới (Scorecard metric) được tích hợp vào pipeline',
157
+ ignore: 'Kết quả log pass/fail tạm thời của một build con'
158
+ },
159
+ 'qk-web-quality-gate': {
160
+ active: 'Convention / Hard Bug (vd: chỉ số Core Web Vitals LCP/CLS, rủi ro bot SEO/A11y)',
161
+ harvest: 'Mẫu tối ưu hiệu năng web (vd: chiến lược lazyload hình ảnh, bundle partition)',
162
+ ignore: 'Report Lighthouse của lần đo test tạm thời'
163
+ }
164
+ };
165
+
166
+ const hint = hints[skillName] || {};
167
+
168
+ return `## Memory Workflow
169
+
170
+ ### Pre-flight Retrieve (Trước khi thực thi)
171
+ - Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
172
+ bắt buộc tra cứu:
173
+ - \`.agents/knowledge/index.yaml\` (Shared Project Knowledge)
174
+ - \`.ai-local/knowledge/index.yaml\` (Private Local Knowledge)
175
+
176
+ - Ưu tiên sử dụng các Knowledge đang có trạng thái \`Active\` thuộc:
177
+ - Architecture
178
+ - Hard Bug
179
+ - Convention
180
+ - Pattern
181
+ - Tech Debt Pattern${hint.active ? `\n - 👉 *Domain Focus:* ${hint.active}.` : ''}
182
+
183
+ - Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
184
+ Không được xem Memory là Source of Truth.
185
+ 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.
186
+
187
+ ---
188
+
189
+ ### Learning Flow (AI tự học có kiểm soát)
190
+ - 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:
191
+ - Hard Bug có khả năng tái diễn.
192
+ - Pattern làm việc lặp lại trong dự án.
193
+ - Convention hoặc quy tắc kiến trúc mới.
194
+ - Quyết định Architecture quan trọng.
195
+ - Tech Debt Pattern hoặc Code Smell có tính hệ thống.${hint.harvest ? `\n - 👉 *Domain Harvest:* ${hint.harvest}.` : ''}
196
+
197
+ - Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
198
+ - Candidate Memory có thể lưu tạm tại: \`.ai-local/candidates/\`
199
+ - AI không được tự động Promote Candidate Memory thành Project Knowledge.
200
+
201
+ ---
202
+
203
+ ### Post-flight Harvest (Đề xuất → Phê duyệt)
204
+ Sau khi hoàn thành task:
205
+ - AI đánh giá các Candidate Memory đã tạo.
206
+ - Nếu phát hiện tri thức có giá trị tái sử dụng:
207
+ - Đề xuất người dùng xem xét.
208
+ - Gửi yêu cầu phê duyệt thông qua:
209
+ - \`/learn\`
210
+ - \`qk-project-memory\`
211
+ - Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
212
+
213
+ \`\`\`
214
+ .ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
215
+ \`\`\`
216
+
217
+ - Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
218
+ - Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
219
+
220
+ ---
221
+
222
+ ### Ignore (Không đưa vào Memory)
223
+ Không lưu:
224
+ - Trace log của một session đơn lẻ.
225
+ - Temporary debugging data.
226
+ - Output của một lần chạy test/scan.
227
+ - Report health tạm thời của một đợt kiểm tra.
228
+ - Lỗi nhỏ chỉ xảy ra một lần.
229
+ - Thông tin không có khả năng tái sử dụng.${hint.ignore ? `\n- 👉 *Domain Ignore:* ${hint.ignore}.` : ''}
230
+
231
+ ---
232
+
233
+ ### Golden Rule
234
+ > **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
235
+ > **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
236
+
237
+ ---
238
+
239
+ `;
240
+ }
241
+
12
242
  skills.forEach(skill => {
13
243
  const skillPath = path.join(skillsDir, skill);
14
244
 
@@ -16,9 +246,29 @@ skills.forEach(skill => {
16
246
  const skillMdPath = path.join(skillPath, 'SKILL.md');
17
247
  if (fs.existsSync(skillMdPath)) {
18
248
  let content = fs.readFileSync(skillMdPath, 'utf8');
19
- const newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
249
+ let newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
250
+ newContent = newContent.replace(/^# ── V[\d]+: Classification/m, `# ── V9: Classification`);
251
+
252
+ // Inject or update Memory Workflow (except qk-project-memory which manages memory itself)
253
+ if (skill !== 'qk-project-memory' && skill !== 'qk-help') {
254
+ const block = getMemoryWorkflow(skill);
255
+ if (newContent.includes('## Memory Workflow')) {
256
+ newContent = newContent.replace(/## Memory Workflow[\s\S]*?(?=\r?\n---\r?\n|\r?\n## )/m, block.trimEnd());
257
+ } else if (newContent.includes('## 🧭 V1 Knowledge Protocol')) {
258
+ newContent = newContent.replace(/## 🧭 V1 Knowledge Protocol[\s\S]*?(?=\r?\n---\r?\n|\r?\n## )/m, block.trimEnd());
259
+ } else if (newContent.includes('## Preconditions')) {
260
+ newContent = newContent.replace('## Preconditions', block + '## Preconditions');
261
+ } else if (newContent.includes('## Scope')) {
262
+ newContent = newContent.replace('## Scope', block + '## Scope');
263
+ } else if (newContent.includes('## Workflow')) {
264
+ newContent = newContent.replace('## Workflow', block + '## Workflow');
265
+ } else {
266
+ newContent = newContent.replace(/(# .*\r?\n\r?\n(> .*\r?\n)?\r?\n?---\r?\n\r?\n)/, '$1' + block);
267
+ }
268
+ }
269
+
20
270
  if (content !== newContent) {
21
- fs.writeFileSync(skillMdPath, newContent);
271
+ fs.writeFileSync(skillMdPath, newContent, 'utf8');
22
272
  updatedCount++;
23
273
  }
24
274
  }
@@ -29,7 +279,7 @@ skills.forEach(skill => {
29
279
  let content = fs.readFileSync(capPath, 'utf8');
30
280
  const newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: "${targetVersion}"`);
31
281
  if (content !== newContent) {
32
- fs.writeFileSync(capPath, newContent);
282
+ fs.writeFileSync(capPath, newContent, 'utf8');
33
283
  updatedCount++;
34
284
  }
35
285
  }
@@ -40,10 +290,10 @@ skills.forEach(skill => {
40
290
  let content = fs.readFileSync(evalPath, 'utf8');
41
291
  const newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
42
292
  if (content !== newContent) {
43
- fs.writeFileSync(evalPath, newContent);
293
+ fs.writeFileSync(evalPath, newContent, 'utf8');
44
294
  updatedCount++;
45
295
  }
46
296
  }
47
297
  });
48
298
 
49
- console.log(`✅ Synchronized version to ${targetVersion} across ${updatedCount} files.`);
299
+ console.log(`✅ Synchronized version to ${targetVersion} & Memory Workflow across ${updatedCount} files.`);
@@ -31,7 +31,7 @@ function parseFrontmatter(content) {
31
31
  const version = extract('version') || '7.5.0';
32
32
  let status = extract('status');
33
33
 
34
- if (!status && version.startsWith('8.')) {
34
+ if (!status && (version.startsWith('8.') || version.startsWith('9.'))) {
35
35
  status = 'stable';
36
36
  } else if (!status) {
37
37
  status = 'legacy';