claudeos-core 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +1649 -481
  2. package/CONTRIBUTING.md +92 -92
  3. package/README.de.md +64 -5
  4. package/README.es.md +64 -5
  5. package/README.fr.md +64 -5
  6. package/README.hi.md +64 -5
  7. package/README.ja.md +64 -5
  8. package/README.ko.md +1018 -959
  9. package/README.md +1020 -960
  10. package/README.ru.md +66 -5
  11. package/README.vi.md +1019 -960
  12. package/README.zh-CN.md +64 -5
  13. package/bin/cli.js +152 -148
  14. package/bin/commands/init.js +1673 -1518
  15. package/bin/commands/lint.js +62 -0
  16. package/bin/commands/memory.js +438 -438
  17. package/bin/lib/cli-utils.js +206 -206
  18. package/claude-md-validator/index.js +184 -0
  19. package/claude-md-validator/reporter.js +66 -0
  20. package/claude-md-validator/structural-checks.js +528 -0
  21. package/content-validator/index.js +666 -436
  22. package/lib/env-parser.js +317 -0
  23. package/lib/expected-guides.js +23 -23
  24. package/lib/expected-outputs.js +90 -90
  25. package/lib/language-config.js +35 -35
  26. package/lib/memory-scaffold.js +1058 -1052
  27. package/lib/plan-parser.js +165 -165
  28. package/lib/staged-rules.js +118 -118
  29. package/manifest-generator/index.js +174 -174
  30. package/package.json +90 -87
  31. package/pass-json-validator/index.js +337 -337
  32. package/pass-prompts/templates/angular/pass3.md +28 -13
  33. package/pass-prompts/templates/common/claude-md-scaffold.md +686 -0
  34. package/pass-prompts/templates/common/pass3-footer.md +402 -39
  35. package/pass-prompts/templates/common/pass3b-core-header.md +43 -0
  36. package/pass-prompts/templates/common/pass4.md +375 -302
  37. package/pass-prompts/templates/common/staging-override.md +26 -26
  38. package/pass-prompts/templates/java-spring/pass3.md +31 -21
  39. package/pass-prompts/templates/kotlin-spring/pass3.md +34 -22
  40. package/pass-prompts/templates/node-express/pass3.md +30 -21
  41. package/pass-prompts/templates/node-fastify/pass3.md +28 -14
  42. package/pass-prompts/templates/node-nestjs/pass3.md +29 -14
  43. package/pass-prompts/templates/node-nextjs/pass3.md +34 -21
  44. package/pass-prompts/templates/node-vite/pass1.md +117 -117
  45. package/pass-prompts/templates/node-vite/pass2.md +78 -78
  46. package/pass-prompts/templates/node-vite/pass3.md +30 -13
  47. package/pass-prompts/templates/python-django/pass3.md +32 -21
  48. package/pass-prompts/templates/python-fastapi/pass3.md +33 -21
  49. package/pass-prompts/templates/python-flask/pass1.md +119 -119
  50. package/pass-prompts/templates/python-flask/pass2.md +85 -85
  51. package/pass-prompts/templates/python-flask/pass3.md +31 -13
  52. package/pass-prompts/templates/vue-nuxt/pass3.md +32 -13
  53. package/plan-installer/domain-grouper.js +76 -76
  54. package/plan-installer/index.js +137 -129
  55. package/plan-installer/prompt-generator.js +188 -128
  56. package/plan-installer/scanners/scan-frontend.js +505 -473
  57. package/plan-installer/scanners/scan-java.js +226 -226
  58. package/plan-installer/scanners/scan-node.js +57 -57
  59. package/plan-installer/scanners/scan-python.js +85 -85
  60. package/plan-installer/stack-detector.js +482 -466
  61. package/plan-installer/structure-scanner.js +65 -65
  62. package/sync-checker/index.js +177 -177
package/README.vi.md CHANGED
@@ -1,960 +1,1019 @@
1
- # ClaudeOS-Core
2
-
3
- **Công cụ duy nhất đọc mã nguồn trước, xác nhận stack và pattern bằng phân tích deterministic, sau đó tạo Claude Code rules phù hợp chính xác với dự án của bạn.**
4
-
5
- ```bash
6
- npx claudeos-core init
7
- ```
8
-
9
- ClaudeOS-Core đọc codebase của bạn, trích xuất mọi pattern tìm thấy và tạo ra bộ Standards, Rules, Skills và Guides hoàn chỉnh được tùy chỉnh cho _dự án của bạn_. Sau đó, khi bạn nói với Claude Code "Tạo CRUD cho đơn hàng", nó sẽ tạo ra code khớp chính xác với các pattern hiện có của bạn.
10
-
11
- [🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
12
-
13
- ---
14
-
15
- ## Tại sao chọn ClaudeOS-Core?
16
-
17
- Mọi công cụ Claude Code khác hoạt động như sau:
18
-
19
- > **Con người mô tả dự án → LLM tạo tài liệu**
20
-
21
- ClaudeOS-Core hoạt động như sau:
22
-
23
- > **Code phân tích source → Code xây dựng prompt tùy chỉnh → LLM tạo tài liệu → Code xác minh đầu ra**
24
-
25
- Đây không phải là khác biệt nhỏ. Lý do quan trọng:
26
-
27
- ### Vấn đề cốt lõi: LLM đoán. Code thì không.
28
-
29
- Khi bạn yêu cầu Claude "phân tích dự án này", nó **đoán** stack, ORM, cấu trúc domain của bạn.
30
- Nó có thể thấy `spring-boot` trong `build.gradle` nhưng bỏ sót việc bạn dùng MyBatis (không phải JPA).
31
- Nó có thể phát hiện thư mục `user/` nhưng không nhận ra dự án của bạn dùng layer-first packaging (Pattern A), không phải domain-first (Pattern B).
32
-
33
- **ClaudeOS-Core không đoán.** Trước khi Claude nhìn thấy dự án của bạn, Node.js code đã:
34
-
35
- - Parse `build.gradle` / `package.json` / `pyproject.toml` và **xác nhận** stack, ORM, DB và package manager
36
- - Quét cấu trúc thư mục và **xác nhận** danh sách domain kèm số lượng file
37
- - Phân loại cấu trúc dự án vào một trong 5 pattern Java, Kotlin CQRS/BFF, hoặc Next.js App Router/FSD
38
- - Chia domain thành các nhóm có kích thước tối ưu phù hợp với context window của Claude
39
- - Lắp ráp prompt riêng cho stack với mọi sự thật đã xác nhận được chèn vào
40
-
41
- Khi Claude nhận prompt, không còn gì phải đoán. Stack đã xác nhận. Domain đã xác nhận. Pattern cấu trúc đã xác nhận. Nhiệm vụ duy nhất của Claude là tạo tài liệu khớp với các **sự thật đã xác nhận** này.
42
-
43
- ### Kết quả
44
-
45
- Các công cụ khác tạo tài liệu "tốt một cách chung chung".
46
- ClaudeOS-Core tạo tài liệu biết rằng dự án dùng `ApiResponse.ok()` (không phải `ResponseEntity.success()`), MyBatis XML mapper của bạn nằm ở `src/main/resources/mybatis/mappers/`, và package structure là `com.company.module.{domain}.controller` — vì nó đã đọc code thực tế của bạn.
47
-
48
- ### Before & After
49
-
50
- **Không có ClaudeOS-Core** — bạn yêu cầu Claude Code tạo Order CRUD:
51
- ```
52
- ❌ Dùng repository kiểu JPA (dự án của bạn dùng MyBatis)
53
- ❌ Tạo ResponseEntity.success() (wrapper của bạn là ApiResponse.ok())
54
- ❌ Đặt file vào order/controller/ (dự án của bạn dùng controller/order/)
55
- ❌ Tạo comment tiếng Anh (team của bạn viết comment tiếng Việt)
56
- → Bạn mất 20 phút sửa từng file đã tạo
57
- ```
58
-
59
- **Có ClaudeOS-Core** — `.claude/rules/` đã chứa các pattern đã xác nhận của bạn:
60
- ```
61
- ✅ Tạo MyBatis mapper + XML (phát hiện từ build.gradle)
62
- ✅ Dùng ApiResponse.ok() (trích xuất từ source thực tế của bạn)
63
- ✅ Đặt file vào controller/order/ (Pattern A xác nhận bằng structure scan)
64
- ✅ Comment tiếng Việt (--lang vi đã áp dụng)
65
- → Code được tạo khớp ngay với convention của dự án
66
- ```
67
-
68
- Sự khác biệt này được tích lũy. 10 task/ngày × 20 phút tiết kiệm = **hơn 3 giờ/ngày**.
69
-
70
- ---
71
-
72
- ## Stack Được Hỗ Trợ
73
-
74
- | Stack | Phát Hiện | Độ Sâu Phân Tích |
75
- |---|---|---|
76
- | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 package patterns | 10 danh mục, 59 mục con |
77
- | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 danh mục, 95 mục con |
78
- | **Node.js / Express** | `package.json` | 9 danh mục, 57 mục con |
79
- | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 danh mục, 68 mục con |
80
- | **Next.js / React** | `package.json`, `next.config.*`, hỗ trợ FSD | 9 danh mục, 55 mục con |
81
- | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 danh mục, 58 mục con |
82
- | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 55 mục con |
83
- | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 58 mục con |
84
- | **Node.js / Fastify** | `package.json` | 10 danh mục, 62 mục con |
85
- | **Vite / React SPA** | `package.json`, `vite.config.*` | 9 danh mục, 55 mục con |
86
- | **Angular** | `package.json`, `angular.json` | 12 danh mục, 78 mục con |
87
-
88
- Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản (bao gồm Vite như SPA framework), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, v.v.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), kiến trúc (CQRS, BFF — phát hiện từ tên module), cấu trúc multi-module (từ settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces).
89
-
90
- **Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
91
-
92
- ### Phát Hiện Domain Java (5 pattern với fallback)
93
-
94
- | Ưu tiên | Pattern | Cấu trúc | dụ |
95
- |---|---|---|---|
96
- | A | Layer trước | `controller/{domain}/` | `controller/user/UserController.java` |
97
- | B | Domain trước | `{domain}/controller/` | `user/controller/UserController.java` |
98
- | D | Module prefix | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
99
- | E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
100
- | C | Phẳng | `controller/*.java` | `controller/UserController.java` → trích `user` từ tên class |
101
-
102
- Các domain chỉ có service (không có controller) cũng được phát hiện qua thư mục `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Bỏ qua: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, v.v.
103
-
104
- ### Phát Hiện Domain Kotlin Multi-Module
105
-
106
- Dành cho dự án Kotlin với cấu trúc Gradle multi-module (ví dụ: CQRS monorepo):
107
-
108
- | Bước | Hành Động | Dụ |
109
- |---|---|---|
110
- | 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm 14 module |
111
- | 2 | Phát hiện kiểu module từ tên | `reservation-command-server` type: `command` |
112
- | 3 | Trích xuất domain từ tên module | `reservation-command-server` domain: `reservation` |
113
- | 4 | Gom cùng domain qua các module | `reservation-command-server` + `common-query-server` 1 domain |
114
- | 5 | Phát hiện kiến trúc | module `command` + `query` CQRS |
115
-
116
- Các kiểu module được hỗ trợ: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Các thư viện dùng chung (`shared-lib`, `integration-lib`) được phát hiện như domain đặc biệt.
117
-
118
- ### Phát Hiện Domain Frontend
119
-
120
- - **App Router**: `app/{domain}/page.tsx` (Next.js)
121
- - **Pages Router**: `pages/{domain}/index.tsx`
122
- - **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
123
- - **Phân tách RSC/Client**: phát hiện pattern `client.tsx`, theo dõi phân tách Server/Client component
124
- - **Đường dẫn lồng nhau không chuẩn**: Phát hiện pages, components và các FSD layer dưới đường dẫn `src/*/` (ví dụ: `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
125
- - **Phát hiện chia tách Platform/tier (v2.0.0)**: Nhận diện layout `src/{platform}/{subapp}/` — `{platform}` có thể là keyword device/target (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) hoặc keyword access-tier (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Sinh một domain cho mỗi cặp `(platform, subapp)` với tên `{platform}-{subapp}` kèm số đếm routes/components/layouts/hooks riêng cho từng domain. Chạy đồng thời trên Angular, Next.js, React và Vue (glob đa đuôi `{tsx,jsx,ts,js,vue}`). Yêu cầu ≥2 file nguồn cho mỗi subapp để tránh domain nhiễu 1-file.
126
- - **Monorepo platform split (v2.0.0)**: Platform scan cũng khớp với `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm workspace `src/`) `{apps,packages}/{platform}/{subapp}/` (workspace không wrapper `src/`).
127
- - **Fallback E — routes-file (v2.0.0)**: Khi scanner chính + Fallback A–D đều trả về 0, glob `**/routes/*.{tsx,jsx,ts,js,vue}` và gom nhóm theo tên thư mục cha của `routes`. Bắt các dự án React Router file-routing (CRA/Vite + `react-router`) không khớp với `page.tsx` của Next.js hoặc layout FSD. Tên cha chung chung (`src`, `app`, `pages`) được lọc bỏ.
128
- - **Config fallback**: Phát hiện Next.js/Vite/Nuxt từ file cấu hình khi không trong `package.json` (hỗ trợ monorepo)
129
- - **Deep directory fallback**: Đối với dự án React/CRA/Vite/Vue/RN, quét `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` bất kỳ độ sâu nào
130
- - **Danh sách bỏ qua dùng chung (v2.0.0)**: Tất cả scanner chia sẻ `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`) để build output và test fixture không làm phồng số file của từng domain.
131
-
132
- ### Scanner Overrides (v2.0.0)
133
-
134
- Thả tùy chọn `.claudeos-scan.json` tại root của dự án để mở rộng giá trị mặc định của scanner mà không cần chỉnh sửa toolkit. Tất cả các trường đều **cộng dồn** — các mục của người dùng mở rộng giá trị mặc định, không thay thế:
135
-
136
- ```json
137
- {
138
- "frontendScan": {
139
- "platformKeywords": ["kiosk"],
140
- "skipSubappNames": ["legacy"],
141
- "minSubappFiles": 3
142
- }
143
- }
144
- ```
145
-
146
- | Trường | Mặc định | Mục đích |
147
- |---|---|---|
148
- | `platformKeywords` | danh sách built-in trên | Các keyword `{platform}` bổ sung cho platform scan (ví dụ: `kiosk`, `vr`, `embedded`) |
149
- | `skipSubappNames` | chỉ các thư mục cấu trúc | Các tên subapp bổ sung để loại khỏi việc sinh domain của platform scan |
150
- | `minSubappFiles` | `2` | Ghi đè số file tối thiểu cần có trước khi một subapp trở thành domain |
151
-
152
- Thiếu file hoặc JSON bị lỗi → âm thầm fallback về mặc định (không crash). Sử dụng điển hình: opt-in một viết tắt ngắn (`adm`, `bo`) danh sách built-in loại vì quá mơ hồ, hoặc nâng `minSubappFiles` cho monorepo nhiễu.
153
-
154
- ---
155
-
156
- ## Bắt Đầu Nhanh
157
-
158
- ### Yêu cầu trước
159
-
160
- - **Node.js** v18+
161
- - **Claude Code CLI** (đã cài đặt & xác thực)
162
-
163
- ### Cài đặt
164
-
165
- ```bash
166
- cd /your/project/root
167
-
168
- # Cách A: npx (khuyến nghị không cần cài đặt)
169
- npx claudeos-core init
170
-
171
- # Cách B: cài đặt global
172
- npm install -g claudeos-core
173
- claudeos-core init
174
-
175
- # Cách C: project devDependency
176
- npm install --save-dev claudeos-core
177
- npx claudeos-core init
178
-
179
- # Cách D: git clone (để phát triển/đóng góp)
180
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
181
-
182
- # Đa nền tảng (PowerShell, CMD, Bash, Zsh — mọi terminal)
183
- node claudeos-core-tools/bin/cli.js init
184
-
185
- # Linux/macOS (chỉ Bash)
186
- bash claudeos-core-tools/bootstrap.sh
187
- ```
188
-
189
- ### Ngôn Ngữ Đầu Ra (10 ngôn ngữ)
190
-
191
- Khi chạy `init` không `--lang`, selector tương tác sẽ hiện ra dùng phím mũi tên hoặc phím số để chọn:
192
-
193
- ```
194
- ╔══════════════════════════════════════════════════╗
195
- ║ Select generated document language (required) ║
196
- ╚══════════════════════════════════════════════════╝
197
-
198
- Các file được tạo (CLAUDE.md, Standards, Rules,
199
- Skills, Guides) sẽ được viết bằng Tiếng Việt.
200
-
201
- 1. en — English
202
- 2. ko — 한국어 (Korean)
203
- 3. zh-CN — 简体中文 (Chinese Simplified)
204
- 4. ja — 日本語 (Japanese)
205
- 5. es — Español (Spanish)
206
- ❯ 6. vi — Tiếng Việt (Vietnamese)
207
- 7. hi — हिन्दी (Hindi)
208
- 8. ru — Русский (Russian)
209
- 9. fr — Français (French)
210
- 10. de Deutsch (German)
211
-
212
- ↑↓ Move 1-0 Jump Enter Select ESC Cancel
213
- ```
214
-
215
- tả sẽ đổi sang ngôn ngữ được chọn khi bạn điều hướng. Để bỏ qua selector, truyền `--lang` trực tiếp:
216
-
217
- ```bash
218
- npx claudeos-core init --lang ko # Korean
219
- npx claudeos-core init --lang ja # Japanese
220
- npx claudeos-core init --lang en # English (mặc định)
221
- ```
222
-
223
- > **Lưu ý:** Cài đặt này chỉ áp dụng cho ngôn ngữ của các file tài liệu được tạo. Phân tích code (Pass 1–2) luôn chạy bằng tiếng Anh; output được tạo (Pass 3) được viết bằng ngôn ngữ bạn chọn. Các ví dụ code bên trong file được tạo vẫn giữ nguyên cú pháp ngôn ngữ lập trình gốc.
224
-
225
- Vậy thôi. Sau 10 phút (dự án nhỏ) đến 2 giờ (monorepo 60+ domain), tất cả tài liệu được tạo và sẵn sàng sử dụng. CLI hiển thị thanh tiến trình kèm phần trăm, thời gian đã trôi qua và ETA cho mỗi pass. Xem [Tự Động Mở Rộng Theo Kích Thước Dự Án](#tự-động-mở-rộng-theo-kích-thước-dự-án) để biết thời gian chi tiết theo kích thước dự án.
226
-
227
- ### Cài Đặt Thủ Công Từng Bước
228
-
229
- Nếu bạn muốn kiểm soát hoàn toàn từng giai đoạn — hoặc nếu pipeline tự động bị lỗi ở bước nào đó — bạn có thể chạy từng giai đoạn thủ công. Cách này cũng hữu ích để hiểu cách ClaudeOS-Core hoạt động bên trong.
230
-
231
- #### Step 1: Clone cài đặt dependencies
232
-
233
- ```bash
234
- cd /your/project/root
235
-
236
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
237
- cd claudeos-core-tools && npm install && cd ..
238
- ```
239
-
240
- #### Step 2: Tạo cấu trúc thư mục
241
-
242
- ```bash
243
- # Rules (v2.0.0: thêm 60.memory)
244
- mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
245
-
246
- # Standards
247
- mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
248
-
249
- # Skills
250
- mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
251
-
252
- # Guide, Database, MCP, Generated, Memory (v2.0.0: thêm memory; v2.1.0: bỏ plan)
253
- mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
254
- mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
255
- ```
256
-
257
- > **Lưu ý v2.1.0:** Thư mục `claudeos-core/plan/` không còn được tạo nữa. Việc tạo master plan đã bị loại bỏ master plan là backup nội bộ mà Claude Code không đọc lúc runtime, việc tổng hợp chúng đã gây ra lỗi `Prompt is too long`. Dùng `git` để backup/restore thay thế.
258
-
259
- #### Step 3: Chạy plan-installer (phân tích dự án)
260
-
261
- Lệnh này quét dự án, phát hiện stack, tìm domain, chia chúng thành các nhóm và tạo prompt.
262
-
263
- ```bash
264
- node claudeos-core-tools/plan-installer/index.js
265
- ```
266
-
267
- **Output (trong `claudeos-core/generated/`):**
268
- - `project-analysis.json` — stack, domain, thông tin frontend đã phát hiện
269
- - `domain-groups.json` các nhóm domain cho Pass 1
270
- - `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompt phân tích
271
- - `pass2-prompt.md`prompt merge
272
- - `pass3-prompt.md` — template prompt Pass 3 với block "Read Once, Extract Facts" Phase 1 được thêm vào đầu (Rules A–E). Pipeline tự động chia Pass 3 thành nhiều stage lúc runtime; template này dùng cho từng stage.
273
- - `pass3-context.json` slim project summary (< 5 KB, xây sau Pass 2) mà prompt Pass 3 ưu tiên hơn `pass2-merged.json` đầy đủ (v2.1.0)
274
- - `pass4-prompt.md` — prompt L4 memory scaffolding (v2.0.0; dùng cùng `staging-override.md` cho ghi rule `60.memory/`)
275
-
276
- Bạn có thể kiểm tra các file này để xác minh độ chính xác phát hiện trước khi tiếp tục.
277
-
278
- #### Step 4: Pass 1 — Phân tích code sâu (mỗi nhóm domain)
279
-
280
- Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số lượng nhóm.
281
-
282
- ```bash
283
- # Kiểm tra có bao nhiêu nhóm
284
- cat claudeos-core/generated/domain-groups.json | node -e "
285
- const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
286
- g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
287
- "
288
-
289
- # Chạy Pass 1 cho mỗi nhóm (thay domain và số nhóm)
290
- # Lưu ý: v1.6.1+ dùng Node.js String.replace() thay vì perl — không còn
291
- # yêu cầu perl, và ngữ nghĩa replacement-function ngăn chặn regex injection
292
- # từ các ký tự $/&/$1 có thể xuất hiện trong tên domain.
293
- #
294
- # Cho nhóm 1:
295
- DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
296
- const fs = require('fs');
297
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
298
- const out = tpl
299
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
300
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
301
- process.stdout.write(out);
302
- " | claude -p --dangerously-skip-permissions
303
-
304
- # Cho nhóm 2 (nếu có):
305
- DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
306
- const fs = require('fs');
307
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
308
- const out = tpl
309
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
310
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
311
- process.stdout.write(out);
312
- " | claude -p --dangerously-skip-permissions
313
-
314
- # Với nhóm frontend, đổi pass1-backend-prompt.md pass1-frontend-prompt.md
315
- ```
316
-
317
- **Xác minh:** `ls claudeos-core/generated/pass1-*.json` phải hiển thị một JSON cho mỗi nhóm.
318
-
319
- #### Step 5: Pass 2 — Merge kết quả phân tích
320
-
321
- ```bash
322
- cat claudeos-core/generated/pass2-prompt.md \
323
- | claude -p --dangerously-skip-permissions
324
- ```
325
-
326
- **Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ top-level key.
327
-
328
- #### Step 6: Pass 3 — Tạo toàn bộ tài liệu (chia thành nhiều stage)
329
-
330
- **Lưu ý v2.1.0:** Pass 3 **luôn chạy ở chế độ split** bởi pipeline tự động. Mỗi stage là một lời gọi `claude -p` riêng biệt với context window mới, nên tràn output do tích lũy không thể xảy ra về mặt cấu trúc bất kể kích thước dự án. Template `pass3-prompt.md` được lắp ráp theo từng stage với một directive `STAGE:` chỉ cho Claude biết tập con file nào cần phát ra. Với chế độ thủ công, đường đơn giản nhất vẫn là đưa toàn bộ template và để Claude tạo mọi thứ trong một lời gọi — nhưng điều này chỉ đáng tin cậy trên dự án nhỏ (≤5 domain). Cho dự án lớn hơn, hãy dùng `npx claudeos-core init` để split runner xử lý điều phối stage.
331
-
332
- **Chế độ lời gọi đơn (chỉ cho dự án nhỏ, ≤5 domain):**
333
-
334
- ```bash
335
- cat claudeos-core/generated/pass3-prompt.md \
336
- | claude -p --dangerously-skip-permissions
337
- ```
338
-
339
- **Chế độ từng stage (khuyến nghị cho mọi kích thước dự án):**
340
-
341
- Pipeline tự động chạy các stage sau. Danh sách stage:
342
-
343
- | Stage | Ghi | Ghi chú |
344
- |---|---|---|
345
- | `3a` | `pass3a-facts.md` (fact sheet đã chắt lọc 5–10 KB) | Đọc `pass2-merged.json` một lần; stage sau tham chiếu file này |
346
- | `3b-core` | `CLAUDE.md`, `standard/` chung, `.claude/rules/` chung | File xuyên dự án; không output đặc thù domain |
347
- | `3b-1..N` | `standard/60.domains/*.md` đặc thù domain + rule domain | Batch ≤15 domain mỗi stage (tự động chia ở ≥16 domain) |
348
- | `3c-core` | `guide/` (9 file), `skills/00.shared/MANIFEST.md`, orchestrator `skills/*/` | Skill chung và tất cả guide hướng người dùng |
349
- | `3c-1..N` | Sub-skill domain dưới `skills/20.frontend-page/scaffold-page-feature/` | Batch ≤15 domain mỗi stage |
350
- | `3d-aux` | `database/`, `mcp-guide/` | Kích thước cố định, không phụ thuộc số domain |
351
-
352
- Cho dự án 1–15 domain, điều này mở rộng thành 4 stage (`3a`, `3b-core`, `3c-core`, `3d-aux` — không chia batch). Cho 16–30 domain, mở rộng thành 8 stage (`3b` và `3c` mỗi cái chia thành 2 batch). Xem [Tự Động Mở Rộng Theo Kích Thước Dự Án](#tự-động-mở-rộng-theo-kích-thước-dự-án) để có bảng đầy đủ.
353
-
354
- **Xác minh:** `CLAUDE.md` phải tồn tại ở thư mục gốc dự án, và marker `claudeos-core/generated/pass3-complete.json` phải được ghi. Ở chế độ split, marker chứa `mode: "split"` và một mảng `groupsCompleted` liệt kê mọi stage đã hoàn thành — logic partial-marker dùng thông tin này để resume từ stage đúng sau khi crash thay vì bắt đầu lại từ `3a` (sẽ nhân đôi chi phí token).
355
-
356
- > **Lưu ý staging:** Pass 3 ghi các file rule vào `claudeos-core/generated/.staged-rules/` trước vì chính sách sensitive-path của Claude Code chặn ghi trực tiếp vào `.claude/`. Pipeline tự động xử lý việc di chuyển sau mỗi stage. Nếu bạn chạy một stage thủ công, bạn cần tự di chuyển cây staged: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (giữ nguyên subpath).
357
-
358
- #### Step 7: Pass 4 — Memory scaffolding
359
-
360
- ```bash
361
- cat claudeos-core/generated/pass4-prompt.md \
362
- | claude -p --dangerously-skip-permissions
363
- ```
364
-
365
- **Xác minh:** `claudeos-core/memory/` phải chứa 4 file (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` phải chứa 4 file rule, và `CLAUDE.md` giờ phải có mục `## Memory (L4)` được append. Marker: `claudeos-core/generated/pass4-memory.json`.
366
-
367
- > **Gap-fill v2.1.0:** Pass 4 cũng đảm bảo `claudeos-core/skills/00.shared/MANIFEST.md` tồn tại. Nếu Pass 3c bỏ sót (có thể xảy ra ở các dự án ít skill vì template stack `pass3.md` liệt kê `MANIFEST.md` là mục tiêu tạo mà không đánh dấu REQUIRED), gap-fill tạo stub tối thiểu để `.claude/rules/50.sync/03.skills-sync.md` luôn có tham chiếu hợp lệ. Idempotent: bỏ qua nếu file đã có nội dung thực (>20 ký tự).
368
-
369
- > **Lưu ý:** Nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, pipeline tự động sẽ fallback về scaffold tĩnh qua `lib/memory-scaffold.js` (có dịch qua Claude khi `--lang` khác tiếng Anh). Fallback tĩnh chỉ chạy bên trong `npx claudeos-core init` — chế độ thủ công yêu cầu Pass 4 thành công.
370
-
371
- #### Step 8: Chạy verification tools
372
-
373
- ```bash
374
- # Tạo metadata (bắt buộc trước các kiểm tra khác)
375
- node claudeos-core-tools/manifest-generator/index.js
376
-
377
- # Chạy tất cả kiểm tra
378
- node claudeos-core-tools/health-checker/index.js
379
-
380
- # Hoặc chạy từng kiểm tra:
381
- node claudeos-core-tools/plan-validator/index.js --check # Plan disk consistency
382
- node claudeos-core-tools/sync-checker/index.js # File chưa đăng ký/orphan
383
- node claudeos-core-tools/content-validator/index.js # Kiểm tra chất lượng file (bao gồm mục memory/ [9/9])
384
- node claudeos-core-tools/pass-json-validator/index.js # Kiểm tra JSON Pass 1–4 + completion marker
385
- ```
386
-
387
- #### Step 9: Xác minh kết quả
388
-
389
- ```bash
390
- # Đếm số file được tạo
391
- find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
392
-
393
- # Kiểm tra CLAUDE.md
394
- head -30 CLAUDE.md
395
-
396
- # Kiểm tra một file standard
397
- cat claudeos-core/standard/00.core/01.project-overview.md | head -20
398
-
399
- # Kiểm tra rules
400
- ls .claude/rules/*/
401
- ```
402
-
403
- > **Mẹo:** Nếu bước nào đó lỗi, bạn có thể sửa và chạy lại đúng bước đó. Kết quả Pass 1/2 được cache — nếu `pass1-N.json` hoặc `pass2-merged.json` đã tồn tại, pipeline tự động sẽ bỏ qua. Dùng `npx claudeos-core init --force` để xóa kết quả trước và bắt đầu lại từ đầu.
404
-
405
- ### Bắt Đầu Sử Dụng
406
-
407
- ```
408
- # Trong Claude Code — chỉ cần hỏi tự nhiên:
409
- "Tạo CRUD cho domain order"
410
- "Thêm API xác thực người dùng"
411
- "Refactor code này khớp với pattern dự án"
412
-
413
- # Claude Code tự động tham chiếu Standards, Rules và Skills đã tạo.
414
- ```
415
-
416
- ---
417
-
418
- ## Cách Hoạt Động — 4-Pass Pipeline
419
-
420
- ```
421
- npx claudeos-core init
422
-
423
- ├── [1] npm install ← Dependencies (~10s)
424
- ├── [2] Cấu trúc thư mục ← Tạo folder (~1s)
425
- ├── [3] plan-installer (Node.js) ← Quét dự án (~5s)
426
- │ ├── Tự phát hiện stack (multi-stack aware)
427
- │ ├── Trích domain list (tag: backend/frontend)
428
- │ ├── Chia thành domain group (theo kiểu)
429
- │ ├── Xây pass3-context.json (slim summary, v2.1.0)
430
- │ └── Chọn prompt theo stack (theo kiểu)
431
-
432
- ├── [4] Pass 1 × N (claude -p) ← Phân tích code sâu (~2-8min)
433
- │ ├── ⚙️ Backend group prompt backend
434
- │ └── 🎨 Frontend group → prompt frontend
435
-
436
- ├── [5] Pass 2 × 1 (claude -p) ← Merge phân tích (~1min)
437
- │ └── Tổng hợp TẤT CẢ kết quả Pass 1 vào pass2-merged.json
438
-
439
- ├── [6] Pass 3 (split mode, v2.1.0) ← Tạo mọi thứ
440
- │ │
441
- │ ├── 3a × 1 (claude -p) ← Trích xuất fact (~5-10min)
442
- │ │ └── Đọc pass2-merged.json một lần → pass3a-facts.md
443
- │ │
444
- │ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + standard/rules chung
445
- │ ├── 3b-1..N × N (claude -p) ← Standard/rules domain (≤15 domain/batch)
446
- │ │
447
- │ ├── 3c-core × 1 (claude -p) ← Guides + skill chung + MANIFEST.md
448
- │ ├── 3c-1..N × N (claude -p) ← Sub-skill domain (≤15 domain/batch)
449
- │ │
450
- │ └── 3d-aux × 1 (claude -p) ← Stub database/ + mcp-guide/
451
-
452
- ├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s-5min)
453
- │ ├── Seed memory/ (decision-log, failure-patterns, …)
454
- │ ├── Tạo rules 60.memory/
455
- │ ├── Append mục "Memory (L4)" vào CLAUDE.md
456
- │ └── Gap-fill: đảm bảo skills/00.shared/MANIFEST.md tồn tại (v2.1.0)
457
-
458
- └── [8] Xác minh ← Tự chạy health checker
459
- ```
460
-
461
- ### Tại sao 4 Pass?
462
-
463
- **Pass 1** là pass duy nhất đọc mã nguồn của bạn. Nó chọn các file đại diện cho mỗi domain và trích xuất pattern qua 55–95 danh mục phân tích (theo stack). Với dự án lớn, Pass 1 chạy nhiều lần — mỗi lần cho một nhóm domain. Với dự án multi-stack (ví dụ Java backend + React frontend), domain backend và frontend dùng **prompt phân tích khác nhau** phù hợp từng stack.
464
-
465
- **Pass 2** merge tất cả kết quả Pass 1 thành phân tích thống nhất: pattern chung (100% share), pattern đa số (50%+ share), pattern đặc thù domain, anti-pattern theo mức độ nghiêm trọng và các mối quan tâm cross-cutting (naming, security, DB, testing, logging, performance). Kết quả backend và frontend được merge cùng nhau.
466
-
467
- **Pass 3** (split mode, v2.1.0) nhận phân tích đã merge và tạo toàn bộ hệ sinh thái file (CLAUDE.md, rules, standards, skills, guides) qua nhiều lời gọi `claude -p` tuần tự. Insight quan trọng là tràn output do tích lũy không thể dự đoán từ kích thước input: Pass 3 lời-gọi-đơn hoạt động tốt trên dự án 2 domain và thất bại nhất quán ở ~5 domain, và ranh giới thất bại thay đổi tùy theo mức độ dài dòng của mỗi file. Split mode né hoàn toàn vấn đề này — mỗi stage bắt đầu với context window mới và ghi một tập con file có giới hạn. Tính nhất quán xuyên stage (vốn là lợi thế chính của phương pháp lời-gọi-đơn) được bảo tồn bởi `pass3a-facts.md`, một fact sheet đã chắt lọc 5–10 KB mà mọi stage sau tham chiếu.
468
-
469
- Template prompt Pass 3 cũng bao gồm **block Phase 1 "Read Once, Extract Facts"** với năm rule ràng buộc thêm khối lượng output:
470
-
471
- - **Rule A** Tham chiếu bảng fact; không đọc lại `pass2-merged.json`.
472
- - **Rule B** Ghi file idempotent (bỏ qua nếu target đã có nội dung thực), giúp Pass 3 có thể chạy lại an toàn sau khi gián đoạn.
473
- - **Rule C** — Tính nhất quán xuyên file được đảm bảo qua bảng fact như single source of truth.
474
- - **Rule D** — Output cô đọng: một dòng (`[WRITE]`/`[SKIP]`) giữa các lần ghi file, không nhắc lại bảng fact, không echo nội dung file.
475
- - **Rule E** Kiểm tra idempotent theo batch: một `Glob` lúc bắt đầu PHASE 2 thay vì gọi `Read` từng target.
476
-
477
- **Pass 4** scaffold L4 Memory layer: các file kiến thức team bền vững (decision-log, failure-patterns, compaction policy, auto-rule-update) cộng với rules `60.memory/` chỉ dẫn các session tương lai khi nào và cách đọc/ghi các file đó. Memory layer là thứ giúp Claude Code tích lũy bài học qua các session thay vì phải khám phá lại mỗi lần. Khi `--lang` khác tiếng Anh, nội dung fallback tĩnh được dịch qua Claude trước khi ghi. v2.1.0 thêm gap-fill cho `skills/00.shared/MANIFEST.md` phòng trường hợp Pass 3c bỏ sót.
478
-
479
- ---
480
-
481
- ## Cấu Trúc File Được Tạo
482
-
483
- ```
484
- your-project/
485
-
486
- ├── CLAUDE.md Entry point của Claude Code
487
-
488
- ├── .claude/
489
- └── rules/ Rules kích hoạt theo glob
490
- │ ├── 00.core/
491
- ├── 10.backend/
492
- ├── 20.frontend/
493
- ├── 30.security-db/
494
- ├── 40.infra/
495
- │ ├── 50.sync/ Rule nhắc sync
496
- └── 60.memory/ ← Rule scope on-demand của L4 memory (v2.0.0)
497
-
498
- ├── claudeos-core/ Thư mục output chính
499
- ├── generated/ ← JSON phân tích + prompt động + Pass markers (nên gitignore)
500
- │ │ ├── project-analysis.json Thông tin stack (multi-stack aware)
501
- │ │ ├── domain-groups.json ← Groups với type: backend/frontend
502
- │ │ ├── pass1-backend-prompt.md ← Prompt phân tích backend
503
- │ │ ├── pass1-frontend-prompt.md ← Prompt phân tích frontend (nếu phát hiện)
504
- │ │ ├── pass2-prompt.md ← Prompt merge
505
- │ │ ├── pass2-merged.json ← Output Pass 2 (chỉ Pass 3a tiêu thụ)
506
- │ │ ├── pass3-context.json ← Slim summary (< 5 KB) cho Pass 3 (v2.1.0)
507
- │ │ ├── pass3-prompt.md ← Template prompt Pass 3 (block Phase 1 được thêm trước)
508
- │ │ ├── pass3a-facts.md ← Fact sheet được ghi bởi Pass 3a, đọc bởi 3b/3c/3d (v2.1.0)
509
- │ │ ├── pass4-prompt.md Prompt memory scaffolding (v2.0.0)
510
- │ │ ├── pass3-complete.json ← Marker hoàn thành Pass 3 (split mode: bao gồm groupsCompleted, v2.1.0)
511
- │ │ ├── pass4-memory.json ← Marker hoàn thành Pass 4 (bỏ qua khi resume)
512
- │ │ ├── rule-manifest.json ← Index file cho công cụ xác minh
513
- │ │ ├── sync-map.json ← Mapping Plan disk (rỗng v2.1.0; giữ lại để tương thích sync-checker)
514
- │ │ ├── stale-report.json ← Kết quả xác minh tổng hợp
515
- │ │ ├── .i18n-cache-<lang>.json ← Cache bản dịch (`--lang` khác tiếng Anh)
516
- │ │ └── .staged-rules/ ← Thư mục staging tạm cho ghi `.claude/rules/` (tự động di chuyển + dọn)
517
- │ ├── standard/ ← Coding standards (15-19 file + theo domain 60.domains/)
518
- │ │ ├── 00.core/ ← Tổng quan, kiến trúc, naming
519
- │ │ ├── 10.backend-api/ API pattern (theo stack)
520
- │ │ ├── 20.frontend-ui/ ← Frontend pattern (nếu phát hiện)
521
- │ │ ├── 30.security-db/ ← Security, DB schema, utilities
522
- │ │ ├── 40.infra/ ← Config, logging, CI/CD
523
- │ │ ├── 50.verification/ ← Build verification, testing
524
- │ │ ├── 60.domains/ ← Standard theo domain (ghi bởi Pass 3b-N, v2.1.0)
525
- │ │ └── 90.optional/ ← Convention tùy chọn (mở rộng theo stack)
526
- │ ├── skills/ ← Skills scaffold CRUD/page
527
- │ │ └── 00.shared/MANIFEST.md ← Single source of truth cho skill đã đăng ký
528
- │ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 file)
529
- ├── database/ ← DB schema, hướng dẫn migration
530
- ├── mcp-guide/ Hướng dẫn tích hợp MCP server
531
- └── memory/ ← L4: kiến thức team (4 file) — commit các file này
532
- ├── decision-log.md ← Lý do "tại sao" đằng sau quyết định thiết kế
533
- ├── failure-patterns.md Lỗi lặp lại & cách fix (tự chấm điểm — `npx claudeos-core memory score`)
534
- │ ├── compaction.md ← Chiến lược compaction 4 giai đoạn (chạy `npx claudeos-core memory compact`)
535
- └── auto-rule-update.md ← Đề xuất cải tiến rule (`npx claudeos-core memory propose-rules`)
536
-
537
- └── claudeos-core-tools/ ← Toolkit này (không sửa)
538
- ```
539
-
540
- Mọi file standard đều bao gồm ví dụ đúng ✅, ví dụ sai ❌, và bảng tóm tắt rule — tất cả đều được trích xuất từ pattern code thực tế của bạn, không phải template chung chung.
541
-
542
- > **Lưu ý v2.1.0:** `claudeos-core/plan/` không còn được tạo nữa. Master plan là backup nội bộ mà Claude Code không tiêu thụ lúc runtime, và việc tổng hợp chúng trong Pass 3 là nguyên nhân chính gây tràn output. Dùng `git` để backup/restore thay thế. Các dự án upgrade từ v2.0.x có thể xóa an toàn thư mục `claudeos-core/plan/` hiện có.
543
-
544
- ### Đề xuất gitignore
545
-
546
- **Nên commit** (kiến thức team — có mục đích chia sẻ):
547
- - `CLAUDE.md` entry point của Claude Code
548
- - `.claude/rules/**` — rules tự động load
549
- - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — tài liệu được tạo (lưu ý: `plan/**` không còn được tạo ở v2.1.0)
550
- - `claudeos-core/memory/**` lịch sử quyết định, failure pattern, đề xuất rule
551
-
552
- **KHÔNG commit** (build artifact thể tạo lại):
553
-
554
- ```gitignore
555
- # ClaudeOS-Core phân tích được tạo & cache dịch
556
- claudeos-core/generated/
557
- ```
558
-
559
- Thư mục `generated/` chứa JSON phân tích (`pass1-*.json`, `pass2-merged.json`), prompts (`pass1/2/3/4-prompt.md`), Pass completion marker (`pass3-complete.json`, `pass4-memory.json`), translation cache (`.i18n-cache-<lang>.json`), thư mục staging tạm (`.staged-rules/`) tất cả có thể xây lại bằng cách chạy lại `npx claudeos-core init`.
560
-
561
- ---
562
-
563
- ## Tự Động Mở Rộng Theo Kích Thước Dự Án
564
-
565
- Split mode của Pass 3 mở rộng số stage theo số domain. Việc chia batch kích hoạt ở 16 domain để giữ output mỗi stage dưới ~50 file, là khoảng an toàn thực nghiệm cho `claude -p` trước khi tràn output do tích lũy.
566
-
567
- | Kích thước | Domain | Số stage Pass 3 | Tổng `claude -p` | Thời gian ước tính |
568
- |---|---|---|---|---|
569
- | Nhỏ | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 stage Pass 3 + Pass 4) | ~10–15 phút |
570
- | Vừa | 5–15 | 4 | 8–9 | ~25–45 phút |
571
- | Lớn | 16–30 | **8** (3b, 3c mỗi cái chia thành 2 batch) | 11–12 | **~60–105 phút** |
572
- | Rất lớn | 31–45 | 10 | 13–14 | ~100–150 phút |
573
- | Siêu lớn | 46–60 | 12 | 15–16 | ~150–200 phút |
574
- | Cực lớn | 61+ | 14+ | 17+ | 200 phút+ |
575
-
576
- Công thức số stage (khi chia batch): `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, với `N = ceil(totalDomains / 15)`.
577
-
578
- Pass 4 (memory scaffolding) thêm khoảng ~30 giây đến 5 phút lên trên tùy thuộc vào việc chạy tạo qua Claude hay fallback tĩnh. Với dự án multi-stack (ví dụ Java + React), domain backend và frontend được đếm cộng lại. Dự án 6 backend + 4 frontend = 10 tổng = tier Vừa.
579
-
580
- ---
581
-
582
- ## Công Cụ Xác Minh
583
-
584
- ClaudeOS-Core bao gồm 5 công cụ xác minh built-in chạy tự động sau khi tạo:
585
-
586
- ```bash
587
- # Chạy tất cả kiểm tra cùng lúc (khuyến nghị)
588
- npx claudeos-core health
589
-
590
- # Lệnh riêng lẻ
591
- npx claudeos-core validate # So sánh Plan disk
592
- npx claudeos-core refresh # Disk Plan sync
593
- npx claudeos-core restore # Plan Disk restore
594
-
595
- # Hoặc dùng node trực tiếp (cho người dùng git clone)
596
- node claudeos-core-tools/health-checker/index.js
597
- node claudeos-core-tools/manifest-generator/index.js
598
- node claudeos-core-tools/plan-validator/index.js --check
599
- node claudeos-core-tools/sync-checker/index.js
600
- ```
601
-
602
- | Công cụ | Chức năng |
603
- |---|---|
604
- | **manifest-generator** | Tạo JSON metadata (`rule-manifest.json`, `sync-map.json`, khởi tạo `stale-report.json`); index 7 thư mục bao gồm `memory/` (`totalMemory` trong summary). v2.1.0: `plan-manifest.json` không còn được tạo vì master plan đã bị loại bỏ. |
605
- | **plan-validator** | Xác minh block `<file>` master plan với disk cho các dự án vẫn còn `claudeos-core/plan/` (trường hợp upgrade legacy). v2.1.0: bỏ qua tạo `plan-sync-status.json` khi `plan/` vắng mặt hoặc rỗng — `stale-report.json` vẫn ghi một no-op pass. |
606
- | **sync-checker** | Phát hiện file chưa đăng ký (trên disk nhưng không có trong plan) và entry orphan — bao phủ 7 thư mục (thêm `memory/` ở v2.0.0). Thoát sạch khi `sync-map.json` không có mapping nào (trạng thái mặc định của v2.1.0). |
607
- | **content-validator** | Kiểm tra chất lượng 9 mục — file rỗng, thiếu ví dụ ✅/❌, mục bắt buộc, cộng với toàn vẹn scaffold L4 memory (ngày heading decision-log, trường bắt buộc failure-pattern, parse nhận biết fence) |
608
- | **pass-json-validator** | Xác minh cấu trúc JSON Pass 1–4 cộng với marker hoàn thành `pass3-complete.json` (shape split-mode, v2.1.0) và `pass4-memory.json` |
609
-
610
- ---
611
-
612
- ## Cách Claude Code Dùng Tài Liệu Của Bạn
613
-
614
- ClaudeOS-Core tạo tài liệu Claude Code thực sự đọc đây là cách:
615
-
616
- ### Cái Claude Code đọc tự động
617
-
618
- | File | Khi nào | Đảm bảo |
619
- |---|---|---|
620
- | `CLAUDE.md` | Mỗi lần bắt đầu hội thoại | Luôn luôn |
621
- | `.claude/rules/00.core/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
622
- | `.claude/rules/10.backend/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
623
- | `.claude/rules/20.frontend/*` | Khi sửa bất kỳ file frontend nào (scope tới đường dẫn component/page/style) | Có điều kiện |
624
- | `.claude/rules/30.security-db/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
625
- | `.claude/rules/40.infra/*` | Chỉ khi sửa file config/infra (đường dẫn có scope) | Có điều kiện |
626
- | `.claude/rules/50.sync/*` | Chỉ khi sửa file claudeos-core (đường dẫn có scope) | Có điều kiện |
627
- | `.claude/rules/60.memory/*` | Khi sửa `claudeos-core/memory/*` (scope tới đường dẫn memory) — chỉ dẫn **cách** đọc/ghi memory layer on-demand | Có điều kiện (v2.0.0) |
628
-
629
- ### Cái Claude Code đọc theo yêu cầu qua rule references
630
-
631
- Mỗi file rule link tới standard tương ứng qua mục `## Reference`. Claude chỉ đọc standard liên quan cho task hiện tại:
632
-
633
- - `claudeos-core/standard/**` — coding pattern, ví dụ ✅/❌, convention đặt tên
634
- - `claudeos-core/database/**` DB schema (cho query, mapper, migration)
635
- - `claudeos-core/memory/**` (v2.0.0) L4 team knowledge layer; **không** auto-load (sẽ quá nhiễu ở mỗi hội thoại). Thay vào đó, các rule `60.memory/*` chỉ dẫn Claude *khi nào* Read các file này: ở đầu session (lướt qua `decision-log.md` gần đây + `failure-patterns.md` importance cao), và append theo yêu cầu khi ra quyết định hoặc gặp lỗi lặp lại.
636
-
637
- `00.standard-reference.md` đóng vai trò như danh bạ của tất cả file standard để phát hiện những standard không có rule tương ứng.
638
-
639
- ### Cái Claude Code KHÔNG đọc (tiết kiệm context)
640
-
641
- Các folder này được loại trừ rõ ràng qua mục `DO NOT Read` trong rule standard-reference:
642
-
643
- | Folder | Lý do loại trừ |
644
- |---|---|
645
- | `claudeos-core/plan/` | Master Plan backup từ các dự án legacy (v2.0.x và trước đó). Không tạo ở v2.1.0. Nếu có mặt, Claude Code sẽ không tự động load — chỉ đọc theo yêu cầu. |
646
- | `claudeos-core/generated/` | JSON metadata build, prompt, Pass marker, translation cache, `.staged-rules/`. Không dùng cho coding. |
647
- | `claudeos-core/guide/` | Hướng dẫn onboarding cho con người. |
648
- | `claudeos-core/mcp-guide/` | Tài liệu MCP server. Không dùng cho coding. |
649
- | `claudeos-core/memory/` (auto-load) | **Auto-load bị tắt** chủ đích sẽ làm phồng context mỗi hội thoại. Đọc theo yêu cầu qua rule `60.memory/*` thay thế (ví dụ: scan `failure-patterns.md` lúc bắt đầu session). Luôn commit các file này. |
650
-
651
- ---
652
-
653
- ## Quy Trình Hằng Ngày
654
-
655
- ### Sau Khi Cài Đặt
656
-
657
- ```
658
- # Chỉ dùng Claude Code như bình thường tham chiếu standard của bạn tự động:
659
- "Tạo CRUD cho domain order"
660
- "Thêm API cập nhật profile người dùng"
661
- "Refactor code này khớp với pattern dự án"
662
- ```
663
-
664
- ### Sau Khi Sửa Standard Thủ Công
665
-
666
- ```bash
667
- # Sau khi sửa file standard hoặc rules:
668
- npx claudeos-core refresh
669
-
670
- # Xác minh mọi thứ nhất quán
671
- npx claudeos-core health
672
- ```
673
-
674
- ### Khi Docs Bị Hỏng
675
-
676
- ```bash
677
- # Khuyến nghị v2.1.0: dùng git để khôi phục (vì master plan không còn
678
- # được tạo nữa). Commit tài liệu được tạo thường xuyên để có thể rollback
679
- # từng file cụ thể không cần tạo lại:
680
- git checkout HEAD -- .claude/rules/ claudeos-core/
681
-
682
- # Legacy (dự án v2.0.x vẫn còn claudeos-core/plan/):
683
- npx claudeos-core restore
684
- ```
685
-
686
- ### Bảo Trì Memory Layer (v2.0.0)
687
-
688
- L4 Memory layer (`claudeos-core/memory/`) tích lũy kiến thức team qua các session. Ba CLI subcommand giữ nó khỏe mạnh:
689
-
690
- ```bash
691
- # Compact: áp dụng chính sách compaction 4 giai đoạn (chạy định kỳ — ví dụ hàng tháng)
692
- npx claudeos-core memory compact
693
- # Stage 1: tóm tắt các entry (>30 ngày, body một dòng)
694
- # Stage 2: merge heading trùng (tổng frequency, giữ fix mới nhất)
695
- # Stage 3: bỏ importance thấp + cũ (importance <3 VÀ lastSeen >60 ngày)
696
- # Stage 4: áp dụng giới hạn 400 dòng mỗi file (bỏ importance thấp cũ nhất trước)
697
-
698
- # Score: xếp hạng lại các entry trong failure-patterns.md theo importance
699
- npx claudeos-core memory score
700
- # importance = round(frequency × 1.5 + recency × 5), giới hạn 10
701
- # Chạy sau khi append vài failure pattern mới
702
-
703
- # Propose-rules: nổi bật các candidate rule addition từ failure lặp lại
704
- npx claudeos-core memory propose-rules
705
- # Đọc các entry failure-patterns.md với frequency 3
706
- # Tính confidence (sigmoid trên weighted evidence × anchor multiplier)
707
- # Ghi proposal vào memory/auto-rule-update.md (KHÔNG tự động áp dụng)
708
- # Confidence 0.70 đáng xem xét nghiêm túc; nếu accept → sửa rule + log quyết định
709
-
710
- # v2.1.0: `memory --help` giờ route tới help subcommand (trước đây hiển thị top-level)
711
- npx claudeos-core memory --help
712
- ```
713
-
714
- > **Fix v2.1.0:** `memory score` không còn để lại dòng `importance` trùng lặp sau lần chạy đầu (trước đây dòng được tự chấm điểm được thêm ở trên trong khi dòng nguyên bản bị bỏ lại bên dưới). Marker summary Stage 1 của `memory compact` giờ là markdown list item đúng định dạng (`- _Summarized on ..._`) nên render sạch và được parse lại đúng ở các lần compact sau.
715
-
716
- Khi nào ghi vào memory (Claude làm theo yêu cầu, nhưng bạn cũng có thể sửa thủ công):
717
- - **`decision-log.md`** — append entry mới bất cứ khi nào bạn chọn giữa các pattern cạnh tranh, chọn thư viện, định nghĩa convention team, hoặc quyết định KHÔNG làm gì đó. Chỉ append; không bao giờ sửa entry lịch sử.
718
- - **`failure-patterns.md`** append vào **lần xuất hiện thứ hai** của lỗi lặp lại hoặc nguyên nhân không hiển nhiên. Lỗi lần đầu không cần entry.
719
- - `compaction.md` và `auto-rule-update.md` — được tạo/quản lý bởi các CLI subcommand trên; không sửa bằng tay.
720
-
721
- ### Tích Hợp CI/CD
722
-
723
- ```yaml
724
- # dụ GitHub Actions
725
- - run: npx claudeos-core validate
726
- # Exit code 1 chặn PR
727
-
728
- # Tùy chọn: housekeeping memory hàng tháng (workflow cron riêng)
729
- - run: npx claudeos-core memory compact
730
- - run: npx claudeos-core memory score
731
- ```
732
-
733
- ---
734
-
735
- ## Khác Biệt Ra Sao?
736
-
737
- ### So với Các Công Cụ Claude Code Khác
738
-
739
- | | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
740
- |---|---|---|---|---|---|
741
- | **Cách tiếp cận** | Code phân tích trước, rồi LLM tạo | Preset config dựng sẵn | LLM thiết kế agent team | LLM tạo spec doc | LLM viết CLAUDE.md |
742
- | **Đọc source code** | Phân tích tĩnh deterministic | ❌ | ❌ | ❌ (LLM đọc) | ❌ (LLM đọc) |
743
- | **Phát hiện stack** | Code xác nhận (ORM, DB, build tool, pkg manager) | N/A (stack-agnostic) | LLM đoán | LLM đoán | LLM đoán |
744
- | **Phát hiện domain** | Code xác nhận (Java 5 pattern, Kotlin CQRS, Next.js FSD) | N/A | LLM đoán | N/A | N/A |
745
- | **Cùng dự án cùng kết quả** | ✅ Phân tích deterministic | ✅ (file tĩnh) | ❌ (LLM thay đổi) | ❌ (LLM thay đổi) | ❌ (LLM thay đổi) |
746
- | **Xử lý dự án lớn** | Chia domain group (4 domain / 40 file mỗi group) | N/A | Không chia | Không chia | Giới hạn context window |
747
- | **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ file) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec document | CLAUDE.md (1 file) |
748
- | **Vị trí output** | `.claude/rules/` (tự load bởi Claude Code) | `.claude/` đủ loại | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
749
- | **Xác minh sau khi tạo** | ✅ 5 validator tự động | ❌ | ❌ | ❌ | ❌ |
750
- | **Output đa ngôn ngữ** | 10 ngôn ngữ | ❌ | ❌ | ❌ | ❌ |
751
- | **Multi-stack** | ✅ Backend + Frontend đồng thời | ❌ Stack-agnostic | | | Một phần |
752
- | **Memory layer bền vững** | L4 decision log + failure pattern + đề xuất rule chấm điểm tự động (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
753
- | **Điều phối agent** | ❌ | ✅ 28 agent | ✅ 6 pattern | ❌ | ❌ |
754
-
755
- ### Khác biệt chính trong một câu
756
-
757
- **Các công cụ khác cho Claude "instructions tốt nói chung". ClaudeOS-Core cho Claude "instructions trích xuất từ code thực tế của bạn".**
758
-
759
- Đó là lý do Claude Code ngừng tạo code JPA trong dự án MyBatis,
760
- ngừng dùng `success()` khi codebase của bạn dùng `ok()`,
761
- ngừng tạo thư mục `user/controller/` khi dự án của bạn dùng `controller/user/`.
762
-
763
- ### Bổ sung, không cạnh tranh
764
-
765
- ClaudeOS-Core tập trung vào **rule và standard đặc thù dự án**.
766
- Các công cụ khác tập trung vào **điều phối agent và workflow**.
767
-
768
- Bạn thể dùng ClaudeOS-Core để tạo rule cho dự án, rồi dùng ECC hoặc Harness bên trên cho agent team và tự động hóa workflow. Chúng giải quyết các vấn đề khác nhau.
769
-
770
- ---
771
-
772
- ## FAQ
773
-
774
- **Q: sửa source code của tôi không?**
775
- Không. Nó chỉ tạo `CLAUDE.md`, `.claude/rules/`, và `claudeos-core/`. Code hiện có của bạn không bao giờ bị sửa.
776
-
777
- **Q: Chi phí là bao nhiêu?**
778
- Nó gọi `claude -p` vài lần qua 4 pass. Ở split mode v2.1.0, chỉ riêng Pass 3 đã mở rộng thành 4–14+ stage tùy theo kích thước dự án (xem [Tự Động Mở Rộng](#tự-động-mở-rộng-theo-kích-thước-dự-án)). Một dự án nhỏ điển hình (1–15 domain) dùng tổng cộng 8–9 lời gọi `claude -p`; dự án 18 domain dùng 11; dự án 60 domain dùng 15–17. Mỗi stage chạy với context window mới — chi phí token mỗi lời gọi thực ra thấp hơn Pass 3 lời-gọi-đơn, vì không stage nào phải giữ toàn bộ cây file trong một context. Khi `--lang` khác tiếng Anh, đường fallback tĩnh có thể gọi thêm vài `claude -p` để dịch; kết quả được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên các lần chạy sau dùng lại. Vẫn nằm trong mức sử dụng Claude Code bình thường.
779
-
780
- **Q: Pass 3 split mode là gì và tại sao được thêm ở v2.1.0?**
781
- Trước v2.1.0, Pass 3 thực hiện một lời gọi `claude -p` đơn phải phát ra toàn bộ cây file được tạo (`CLAUDE.md`, standards, rules, skills, guides — thường 30–60 file) trong một response. Điều này hoạt động trên dự án nhỏ nhưng luôn gặp lỗi `Prompt is too long` do tích lũy output ở ~5 domain. Lỗi không thể dự đoán từ kích thước input — nó phụ thuộc vào mức độ dài dòng của mỗi file được tạo, và có thể ập đến cùng một dự án một cách không ổn định. Split mode né vấn đề này về cấu trúc: Pass 3 được chia thành các stage tuần tự (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), mỗi cái là một lời gọi `claude -p` riêng với context window mới. Tính nhất quán xuyên stage được bảo tồn bởi `pass3a-facts.md`, fact sheet đã chắt lọc 5–10 KB mà mọi stage sau tham chiếu thay vì đọc lại `pass2-merged.json`. Marker `pass3-complete.json` mang mảng `groupsCompleted` để crash trong `3c-2` resume từ `3c-2` (không phải từ `3a`), tránh chi phí token gấp đôi.
782
- **Q: Tôi có nên commit các file được tạo vào Git không?**
783
- Có, khuyến nghị. Team của bạn có thể chia sẻ cùng standard Claude Code. Hãy xem xét thêm `claudeos-core/generated/` vào `.gitignore` (JSON phân tích có thể tạo lại).
784
-
785
- **Q: Còn dự án mixed-stack (ví dụ Java backend + React frontend)?**
786
- Được hỗ trợ hoàn toàn. ClaudeOS-Core tự phát hiện cả hai stack, gắn tag domain là `backend` hoặc `frontend`, và dùng prompt phân tích theo stack cho mỗi cái. Pass 2 merge mọi thứ, Pass 3 tạo cả standard backend và frontend qua các split stage — domain backend rơi vào một số batch 3b/3c, domain frontend vào các batch khác, tất cả đều tham chiếu cùng `pass3a-facts.md` để có tính nhất quán.
787
-
788
- **Q: hoạt động với monorepo Turborepo / pnpm workspaces / Lerna không?**
789
- Có. ClaudeOS-Core phát hiện `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, hoặc `package.json#workspaces` tự động quét file `package.json` của sub-package để tìm dependency framework/ORM/DB. Quét domain bao phủ pattern `apps/*/src/` `packages/*/src/`. Chạy từ root monorepo.
790
-
791
- **Q: Chạy lại thì chuyện xảy ra?**
792
- Nếu kết quả Pass 1/2 trước đó tồn tại, một prompt tương tác cho bạn chọn: **Continue** (tiếp tục từ chỗ dừng) hoặc **Fresh** (xóa tất cả bắt đầu lại). Dùng `--force` để bỏ qua prompt luôn bắt đầu mới. Ở split mode v2.1.0, resume Pass 3 hoạt động ở mức độ stage — nếu lần chạy crash trong `3c-2`, `init` tiếp theo resume từ `3c-2` thay vì bắt đầu lại từ `3a` (sẽ nhân đôi chi phí token). Marker `pass3-complete.json` ghi `mode: "split"` cộng với mảng `groupsCompleted` để điều khiển logic này.
793
-
794
- **Q: NestJS template riêng hay dùng của Express?**
795
- NestJS dùng template `node-nestjs` chuyên dụng với các danh mục phân tích đặc thù NestJS: decorator `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI container, pattern CQRS, và `Test.createTestingModule`. Dự án Express dùng template `node-express` riêng biệt.
796
-
797
- **Q: Còn dự án Vue / Nuxt?**
798
- Vue/Nuxt dùng template `vue-nuxt` chuyên dụng bao phủ Composition API, `<script setup>`, defineProps/defineEmits, Pinia store, `useFetch`/`useAsyncData`, Nitro server route, và `@nuxt/test-utils`. Dự án Next.js/React dùng template `node-nextjs`.
799
-
800
- **Q: Nó có hỗ trợ Kotlin không?**
801
- Có. ClaudeOS-Core tự phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. Nó dùng template `kotlin-spring` chuyên dụng với phân tích đặc thù Kotlin (data class, sealed class, coroutine, extension function, MockK, v.v.).
802
-
803
- **Q: Còn kiến trúc CQRS / BFF?**
804
- Được hỗ trợ hoàn toàn cho dự án Kotlin multi-module. ClaudeOS-Core đọc `settings.gradle.kts`, phát hiện kiểu module (command, query, bff, integration) từ tên module, và nhóm cùng domain qua các module Command/Query. Các standard được tạo bao gồm rule riêng cho command controller vs query controller, pattern BFF/Feign, và convention giao tiếp liên module.
805
-
806
- **Q: Còn Gradle multi-module monorepo?**
807
- ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất kể độ sâu nesting. Kiểu module được suy ra từ convention đặt tên (ví dụ `reservation-command-server` → domain: `reservation`, type: `command`). Các thư viện shared (`shared-lib`, `integration-lib`) cũng được phát hiện.
808
-
809
- **Q: L4 Memory layer (v2.0.0)? Tôi nên commit `claudeos-core/memory/` không?**
810
- **luôn commit** `claudeos-core/memory/`. Đó kiến thức team bền vững: `decision-log.md` ghi lại *lý do* đằng sau các lựa chọn kiến trúc (chỉ append), `failure-patterns.md` đăng ký các lỗi lặp lại với importance score để session tương lai tránh, `compaction.md` định nghĩa chính sách compaction 4 giai đoạn, `auto-rule-update.md` thu thập các đề xuất cải tiến rule do máy tạo. Khác với rule (tự load theo path), file memory là **on-demand** — Claude chỉ đọc khi rule `60.memory/*` hướng dẫn (ví dụ: scan failure importance cao lúc bắt đầu session). Điều này giữ chi phí context thấp trong khi bảo toàn kiến thức dài hạn.
811
-
812
- **Q: Nếu Pass 4 lỗi thì sao?**
813
- Pipeline tự động (`npx claudeos-core init`) có static fallback: nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, nó scaffold memory layer trực tiếp qua `lib/memory-scaffold.js`. Khi `--lang` khác tiếng Anh, static fallback **phải** dịch qua CLI `claude` — nếu cũng lỗi, lần chạy sẽ abort với `InitError` (không fallback âm thầm về English). Chạy lại khi `claude` đã xác thực, hoặc dùng `--lang en` để bỏ qua dịch. Kết quả dịch được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên lần chạy sau dùng lại.
814
-
815
- **Q: `memory compact` / `memory score` / `memory propose-rules` làm gì?**
816
- Xem mục [Bảo Trì Memory Layer](#bảo-trì-memory-layer-v200) ở trên. Phiên bản ngắn: `compact` chạy chính sách 4 giai đoạn (tóm tắt cũ, merge trùng, bỏ importance thấp cũ, áp dụng giới hạn 400 dòng); `score` xếp hạng lại `failure-patterns.md` theo importance (frequency × recency); `propose-rules` nổi bật candidate rule addition từ failure lặp lại vào `auto-rule-update.md` (không tự động áp dụng — xem và accept/reject thủ công).
817
-
818
- **Q: Tại sao `--force` (hoặc chế độ "fresh" resume) xóa `.claude/rules/`?**
819
- v2.0.0 thêm ba silent-failure guard cho Pass 3 (Guard 3 bao phủ hai biến thể output không đầy đủ: H2 cho `guide/` và H1 cho `standard/skills`). Guard 1 ("partial staged-rules move") Guard 3 ("incomplete output — missing/empty guide files or missing standard sentinel / empty skills") không phụ thuộc vào rule hiện có, nhưng Guard 2 ("zero rules detected") thì có — nó kích hoạt khi Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/` (nơi chính sách sensitive-path của Claude Code chặn). Rule cũ từ lần chạy trước sẽ khiến Guard 2 false-negative — nên `--force`/`fresh` xóa `.claude/rules/` để đảm bảo phát hiện sạch. **Sửa rule thủ công sẽ bị mất** dưới `--force`/`fresh`; hãy backup trước nếu cần. (Lưu ý v2.1.0: Guard 3 H1 không còn kiểm tra `plan/` vì master plan không còn được tạo.)
820
-
821
- **Q: `claudeos-core/generated/.staged-rules/` và tại sao tồn tại?**
822
- Chính sách sensitive-path của Claude Code từ chối ghi trực tiếp vào `.claude/` từ subprocess `claude -p` (ngay cả với `--dangerously-skip-permissions`). v2.0.0 đi vòng bằng cách cho prompt Pass 3/4 chuyển hướng mọi ghi `.claude/rules/` vào thư mục staging; orchestrator Node.js (không chịu chính sách đó) sau đó di chuyển cây staged vào `.claude/rules/` sau mỗi pass. Điều này trong suốt với người dùng thư mục được tự tạo, tự dọn, tự di chuyển. Nếu lần chạy trước crash giữa chừng di chuyển, lần chạy sau xóa staging dir trước khi thử lại. split mode v2.1.0, stage runner di chuyển staged rules vào `.claude/rules/` sau mỗi stage (không chỉ cuối cùng), nên crash giữa Pass 3 vẫn để lại rule của các stage đã hoàn thành trước đó tại chỗ.
823
-
824
- **Q: Tôi thể chạy Pass 3 thủ công thay `npx claudeos-core init` không?**
825
- cho dự án nhỏ (≤5 domain) hướng dẫn thủ công lời-gọi-đơn [Step 6](#step-6-pass-3--tạo-toàn-bộ-tài-liệu-chia-thành-nhiều-stage) vẫn hoạt động. Cho dự án lớn hơn bạn nên dùng `npx claudeos-core init` split runner cái điều phối thực thi từng stage với context mới, xử chia batch ≥16 domain, ghi shape marker `pass3-complete.json` đúng (`mode: "split"` + `groupsCompleted`), di chuyển staged rules giữa các stage. Tái tạo điều phối đó bằng tay thể được nhưng mệt mỏi. Nếu bạn do chạy stage thủ công (ví dụ: debug một stage cụ thể), bạn thể template `pass3-prompt.md` với directive `STAGE:` phù hợp đưa cho `claude -p` trực tiếp nhưng nhớ di chuyển `.staged-rules/` sau mỗi stage tự cập nhật marker.
826
-
827
- **Q: Dự án của tôi upgrade từ v2.0.x thư mục `claudeos-core/plan/` hiện hữu. Tôi phải làm gì?**
828
- Không cần gì cả — công cụ v2.1.0 bỏ qua `plan/` khi nó vắng mặt hoặc rỗng, và `plan-validator` vẫn xử lý các dự án legacy có thư mục `plan/` đã điền để tương thích ngược. Bạn có thể xóa an toàn `claudeos-core/plan/` nếu không cần master plan backup (git history dù sao cũng là backup tốt hơn). Nếu giữ `plan/`, chạy `npx claudeos-core init` sẽ không cập nhật nó — nội dung mới không được tổng hợp vào master plan ở v2.1.0. Công cụ xác minh xử lý sạch cả hai trường hợp.
829
-
830
- ---
831
-
832
- ## Cấu Trúc Template
833
-
834
- ```
835
- pass-prompts/templates/
836
- ├── common/ # header/footer dùng chung + pass4 + staging-override
837
- ├── java-spring/ # Java / Spring Boot
838
- ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
839
- ├── node-express/ # Node.js / Express
840
- ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
841
- ├── node-fastify/ # Node.js / Fastify
842
- ├── node-nextjs/ # Next.js / React (App Router, RSC)
843
- ├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
844
- ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
845
- ├── angular/ # Angular
846
- ├── python-django/ # Python / Django (DRF)
847
- ├── python-fastapi/ # Python / FastAPI
848
- └── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
849
- ```
850
-
851
- `plan-installer` tự phát hiện các stack của bạn, rồi lắp ráp prompt theo kiểu. NestJS, Vue/Nuxt, Vite SPA Flask mỗi cái dùng template chuyên dụng với danh mục phân tích đặc thù framework (ví dụ: `@Module`/`@Injectable`/Guards cho NestJS; `<script setup>`/Pinia/useFetch cho Vue; client-side routing/`VITE_` env cho Vite; Blueprint/`app.factory`/Flask-SQLAlchemy cho Flask). Cho dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` riêng biệt được tạo, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo của cả hai stack. Ở v2.1.0, template Pass 3 được thêm `common/pass3-phase1.md` (block "Read Once, Extract Facts" với Rules A–E) vào đầu trước khi được cắt theo từng stage split-mode. Pass 4 dùng template chung `common/pass4.md` (memory scaffolding) bất kể stack.
852
-
853
- ---
854
-
855
- ## Hỗ Trợ Monorepo
856
-
857
- ClaudeOS-Core tự động phát hiện setup monorepo JS/TS quét sub-package tìm dependency.
858
-
859
- **Các monorepo marker được hỗ trợ** (tự phát hiện):
860
- - `turbo.json` (Turborepo)
861
- - `pnpm-workspace.yaml` (pnpm workspaces)
862
- - `lerna.json` (Lerna)
863
- - `package.json#workspaces` (npm/yarn workspaces)
864
-
865
- **Chạy từ root monorepo** — ClaudeOS-Core đọc `apps/*/package.json``packages/*/package.json` để khám phá dependency framework/ORM/DB qua các sub-package:
866
-
867
- ```bash
868
- cd my-monorepo
869
- npx claudeos-core init
870
- ```
871
-
872
- **Những gì được phát hiện:**
873
- - Dependency từ `apps/web/package.json` (ví dụ: `next`, `react`) → frontend stack
874
- - Dependency từ `apps/api/package.json` (ví dụ: `express`, `prisma`) → backend stack
875
- - Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
876
- - Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` (ví dụ: `services/*`)
877
-
878
- **Quét domain cũng bao phủ layout monorepo:**
879
- - `apps/api/src/modules/*/` và `apps/api/src/*/` cho backend domain
880
- - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho frontend domain
881
- - `packages/*/src/*/` cho shared package domain
882
-
883
- ```
884
- my-monorepo/ ← Chạy đây: npx claudeos-core init
885
- ├── turbo.json ← Tự phát hiện Turborepo
886
- ├── apps/
887
- ├── web/ ← Next.js phát hiện từ apps/web/package.json
888
- │ │ ├── app/dashboard/ ← Frontend domain được phát hiện
889
- │ │ └── package.json ← { "dependencies": { "next": "^14" } }
890
- │ └── api/ Express phát hiện từ apps/api/package.json
891
- ├── src/modules/users/ ← Backend domain được phát hiện
892
- │ └── package.json ← { "dependencies": { "express": "^4" } }
893
- ├── packages/
894
- ├── db/ Drizzle phát hiện từ packages/db/package.json
895
- │ └── ui/
896
- └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
897
- ```
898
-
899
- > **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module dùng `settings.gradle.kts` (xem [Phát Hiện Domain Kotlin Multi-Module](#phát-hiện-domain-kotlin-multi-module) ở trên) và không cần marker monorepo JS.
900
-
901
- ## Xử Lý Sự Cố
902
-
903
- **"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không trong PATH. Xem [tài liệu Claude Code](https://code.claude.com/docs/en/overview).
904
-
905
- **"npm install failed"** — Phiên bản Node.js có thể quá thấp. Yêu cầu v18+.
906
-
907
- **"0 domains detected"** — Cấu trúc dự án của bạn có thể không chuẩn. Xem các pattern phát hiện ở trên cho stack của bạn.
908
-
909
- **"0 domains detected" trên dự án Kotlin** — Đảm bảo dự án có `build.gradle.kts` (hoặc `build.gradle` với kotlin plugin) ở root, và file source nằm dưới `**/src/main/kotlin/`. Với dự án multi-module, đảm bảo `settings.gradle.kts` chứa các lệnh `include()`. Dự án Kotlin single-module (không có `settings.gradle`) cũng được hỗ trợ — domain được trích xuất từ cấu trúc package/class dưới `src/main/kotlin/`.
910
-
911
- **"Language detected as java instead of kotlin"** — ClaudeOS-Core kiểm tra root `build.gradle(.kts)` trước, rồi tới file build submodule. Nếu file build root dùng plugin `java` không có `kotlin`, nhưng submodule dùng Kotlin, công cụ kiểm tra tối đa 5 file build submodule làm fallback. Nếu vẫn không phát hiện, đảm bảo ít nhất một `build.gradle.kts` chứa `kotlin("jvm")` hoặc `org.jetbrains.kotlin`.
912
-
913
- **"CQRS not detected"** — Phát hiện kiến trúc dựa trên tên module chứa từ khóa `command` và `query`. Nếu module của bạn dùng tên khác (ví dụ: `write-server`, `read-server`), kiến trúc CQRS sẽ không tự phát hiện. Bạn có thể chỉnh thủ công prompt được tạo sau khi plan-installer chạy.
914
-
915
- **"Pass 3 produced 0 rule files under .claude/rules/" (v2.0.0)** — Guard 2 kích hoạt: Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/`, nơi chính sách sensitive-path của Claude Code chặn ghi. Chạy lại với `npx claudeos-core init --force`. Nếu lỗi vẫn xuất hiện, kiểm tra `claudeos-core/generated/pass3-prompt.md` để xác nhận block `staging-override.md` ở đầu.
916
-
917
- **"Pass 3 finished but N rule file(s) could not be moved from staging" (v2.0.0)** — Guard 1 kích hoạt: việc di chuyển staging gặp khóa file tạm thời (thường là Windows antivirus hoặc file-watcher). Marker KHÔNG được ghi, nên lần chạy `init` tiếp theo tự động retry Pass 3. Chỉ cần chạy lại `npx claudeos-core init`.
918
-
919
- **"Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty" (v2.0.0)** — Guard 3 (H2) kích hoạt: Claude bị cắt giữa chừng sau khi viết CLAUDE.md + rules nhưng trước khi hoàn thành (hoặc bắt đầu) mục `claudeos-core/guide/` (mong đợi 9 file). Cũng kích hoạt trên file chỉ có BOM hoặc chỉ có whitespace (heading đã viết nhưng body bị cắt). Không có guard này, completion marker vẫn được ghi, để `guide/` trống vĩnh viễn ở các lần chạy sau. Marker KHÔNG được ghi ở đây, nên lần chạy `init` tiếp theo retry Pass 3 từ cùng kết quả Pass 2. Nếu cứ lặp lại, chạy lại với `npx claudeos-core init --force` để tạo lại từ đầu.
920
-
921
- **"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.0, cập nhật v2.1.0)** — Guard 3 (H1) kích hoạt: Claude bị cắt SAU `claudeos-core/guide/` nhưng trước (hoặc trong lúc) `claudeos-core/standard/` hoặc `claudeos-core/skills/`. Yêu cầu: (a) `standard/00.core/01.project-overview.md` tồn tại và không rỗng (sentinel được ghi bởi mọi prompt Pass 3 của mọi stack), (b) `skills/` có ≥1 `.md` không rỗng. `database/` và `mcp-guide/` bị loại trừ có chủ đích (một số stack tạo ra 0 file hợp lệ). `plan/` không còn được kiểm tra kể từ v2.1.0 (master plan đã bị loại bỏ). Đường khôi phục như Guard 3 (H2): chạy lại `init`, hoặc `--force` nếu lỗi vẫn tiếp diễn.
922
-
923
- **"Pass 3 split stage crashed partway through (v2.1.0)"** — Khi một trong các split stage (ví dụ: `3b-1`, `3c-2`) lỗi giữa chừng, marker mức stage KHÔNG được ghi, nhưng các stage đã hoàn thành ĐƯỢC ghi trong `pass3-complete.json.groupsCompleted`. Lần chạy `init` tiếp theo đọc mảng này và resume từ stage chưa hoàn thành đầu tiên, bỏ qua mọi công việc đã hoàn thành trước đó. Bạn không cần làm gì thủ công — chỉ cần chạy lại `npx claudeos-core init`. Nếu resume cứ lỗi ở cùng stage, kiểm tra `claudeos-core/generated/pass3-prompt.md` tìm nội dung bị lỗi, rồi thử `--force` để khởi động lại đầy đủ. Shape `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) ổn định; một marker thiếu hoặc lỗi sẽ khiến toàn bộ Pass 3 chạy lại từ `3a`.
924
-
925
- **"Pass 3 stale marker (shape mismatch) — treating as incomplete" (v2.1.0)** — Một `pass3-complete.json` từ lần chạy lời-gọi-đơn pre-v2.1.0 đang được diễn giải theo luật split-mode mới. Kiểm tra shape tìm `mode: "split"` và mảng `groupsCompleted`; nếu thiếu, marker được coi là partial và Pass 3 chạy lại ở split mode. Nếu bạn upgrade từ v2.0.x, điều này xảy ra một lần là mong đợi — lần chạy tiếp theo sẽ ghi shape marker đúng. Không cần hành động.
926
-
927
- **"pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running" (v2.0.0)** — Log thông tin, không phải lỗi. Khi resume, `init` giờ parse và validate `pass2-merged.json` (yêu cầu ≥5 top-level key, phản chiếu ngưỡng `INSUFFICIENT_KEYS` của `pass-json-validator`). Skeleton `{}` hoặc JSON lỗi từ lần chạy crash trước tự động bị xóa và Pass 2 chạy lại. Không cần hành động thủ công — pipeline tự chữa. Nếu cứ lặp lại, kiểm tra `claudeos-core/generated/pass2-prompt.md` và retry với `--force`.
928
-
929
- **"Static fallback failed while translating to lang='ko'" (v2.0.0)** — Khi `--lang` khác tiếng Anh, Pass 4 / static fallback / gap-fill đều yêu cầu CLI `claude` để dịch. Nếu dịch lỗi (CLI chưa xác thực, timeout mạng, hoặc strict validation từ chối output: <40% độ dài, code fence hỏng, mất frontmatter, v.v.), lần chạy abort thay vì âm thầm ghi tiếng Anh. Sửa: đảm bảo `claude` đã xác thực, hoặc chạy lại với `--lang en` để bỏ qua dịch.
930
-
931
- **"pass4-memory.json exists but memory/ is empty" (v2.0.0)** — Lần chạy trước đã ghi marker nhưng người dùng (hoặc script dọn dẹp) xóa `claudeos-core/memory/`. CLI tự phát hiện marker cũ này và chạy lại Pass 4 ở lần `init` tiếp theo. Không cần hành động thủ công.
932
-
933
- **"pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4" (v2.0.0)** — Log thông tin, không phải lỗi. Nội dung marker Pass 4 giờ được validate (`passNum === 4` + mảng `memoryFiles` không rỗng), không chỉ sự tồn tại. Một lỗi Claude một phần đã phát ra thứ như `{"error":"timeout"}` làm thân marker trước đây sẽ được chấp nhận như thành công mãi mãi; giờ marker bị xóa và Pass 4 tự chạy lại.
934
-
935
- **"Could not delete stale pass3-complete.json / pass4-memory.json" InitError (v2.0.0)** — `init` phát hiện marker cũ (Pass 3: CLAUDE.md bị xóa bên ngoài; Pass 4: memory/ rỗng hoặc thân marker lỗi) và thử xóa, nhưng gọi `unlinkSync` lỗi — thường vì Windows antivirus hoặc file-watcher (editor, IDE indexer) đang giữ file handle. Trước đây điều này bị bỏ qua âm thầm, khiến pipeline bỏ qua pass và dùng lại marker cũ. Giờ nó lỗi rõ ràng. Sửa: đóng mọi editor/AV scanner có thể đang mở file, rồi chạy lại `npx claudeos-core init`.
936
-
937
- **"CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation" InitError (v2.0.0)** — Bạn đang set env var chỉ dành cho test `CLAUDEOS_SKIP_TRANSLATION=1` trong shell (có thể là sót từ setup CI/test) chọn `--lang` khác tiếng Anh. Env var này short-circuit đường dịch mà static-fallback và gap-fill của Pass 4 phụ thuộc để output không phải tiếng Anh. `init` phát hiện xung đột lúc chọn ngôn ngữ và abort ngay lập tức (thay vì crash giữa Pass-4 với lỗi lồng khó hiểu). Sửa: hoặc `unset CLAUDEOS_SKIP_TRANSLATION` trước khi chạy, hoặc dùng `npx claudeos-core init --lang en`.
938
-
939
- ---
940
-
941
- ## Đóng Góp
942
-
943
- Đóng góp được hoan nghênh! Các khu vực cần giúp đỡ nhất:
944
-
945
- - **Template stack mới** Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
946
- - **Tích hợp IDE** — VS Code extension, IntelliJ plugin
947
- - **Template CI/CD** dụ GitLab CI, CircleCI, Jenkins (GitHub Actions đã có — xem `.github/workflows/test.yml`)
948
- - **Độ phủ test** — Mở rộng test suite (hiện tại 563 test trên 29 file test bao phủ scanner, phát hiện stack, domain grouping, plan parsing, tạo prompt, CLI selector, phát hiện monorepo, phát hiện Vite SPA, công cụ xác minh, L4 memory scaffold, xác thực resume Pass 2, Pass 3 Guards 1/2/3 (sentinel H1 + empty-file nhận biết BOM H2 + unlink marker cũ nghiêm ngặt), chia batch split-mode Pass 3, resume partial-marker Pass 3 (v2.1.0), xác thực nội dung marker Pass 4 + độ nghiêm ngặt unlink marker cũ + gap-fill scaffoldSkillsManifest (v2.1.0), guard env-skip dịch + fail-fast sớm + CI workflow, di chuyển staged-rules, fallback dịch lang-aware, suite regression loại bỏ master plan (v2.1.0), regression định dạng memory score/compact (v2.1.0), và cấu trúc template AI Work Rules)
949
-
950
- Xem [`CONTRIBUTING.md`](./CONTRIBUTING.md) để có danh sách đầy đủ các khu vực, code style, commit convention, và hướng dẫn từng bước để thêm template stack mới.
951
-
952
- ---
953
-
954
- ## Tác Giả
955
-
956
- Tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
957
-
958
- ## License
959
-
960
- ISC
1
+ # ClaudeOS-Core
2
+
3
+ **Công cụ duy nhất đọc mã nguồn trước, xác nhận stack và pattern bằng phân tích deterministic, sau đó tạo Claude Code rules phù hợp chính xác với dự án của bạn.**
4
+
5
+ ```bash
6
+ npx claudeos-core init
7
+ ```
8
+
9
+ ClaudeOS-Core đọc codebase của bạn, trích xuất mọi pattern tìm thấy và tạo ra bộ Standards, Rules, Skills và Guides hoàn chỉnh được tùy chỉnh cho _dự án của bạn_. Sau đó, khi bạn nói với Claude Code "Tạo CRUD cho đơn hàng", nó sẽ tạo ra code khớp chính xác với các pattern hiện có của bạn.
10
+
11
+ [🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
12
+
13
+ ---
14
+
15
+ ## Tại sao chọn ClaudeOS-Core?
16
+
17
+ Mọi công cụ Claude Code khác hoạt động như sau:
18
+
19
+ > **Con người mô tả dự án → LLM tạo tài liệu**
20
+
21
+ ClaudeOS-Core hoạt động như sau:
22
+
23
+ > **Code phân tích source → Code xây dựng prompt tùy chỉnh → LLM tạo tài liệu → Code xác minh đầu ra**
24
+
25
+ Đây không phải là khác biệt nhỏ. Lý do quan trọng:
26
+
27
+ ### Vấn đề cốt lõi: LLM đoán. Code thì không.
28
+
29
+ Khi bạn yêu cầu Claude "phân tích dự án này", nó **đoán** stack, ORM, cấu trúc domain của bạn.
30
+ Nó có thể thấy `spring-boot` trong `build.gradle` nhưng bỏ sót việc bạn dùng MyBatis (không phải JPA).
31
+ Nó có thể phát hiện thư mục `user/` nhưng không nhận ra dự án của bạn dùng layer-first packaging (Pattern A), không phải domain-first (Pattern B).
32
+
33
+ **ClaudeOS-Core không đoán.** Trước khi Claude nhìn thấy dự án của bạn, Node.js code đã:
34
+
35
+ - Parse `build.gradle` / `package.json` / `pyproject.toml` và **xác nhận** stack, ORM, DB và package manager
36
+ - Quét cấu trúc thư mục và **xác nhận** danh sách domain kèm số lượng file
37
+ - Phân loại cấu trúc dự án vào một trong 5 pattern Java, Kotlin CQRS/BFF, hoặc Next.js App Router/FSD
38
+ - Chia domain thành các nhóm có kích thước tối ưu phù hợp với context window của Claude
39
+ - Lắp ráp prompt riêng cho stack với mọi sự thật đã xác nhận được chèn vào
40
+
41
+ Khi Claude nhận prompt, không còn gì phải đoán. Stack đã xác nhận. Domain đã xác nhận. Pattern cấu trúc đã xác nhận. Nhiệm vụ duy nhất của Claude là tạo tài liệu khớp với các **sự thật đã xác nhận** này.
42
+
43
+ ### Kết quả
44
+
45
+ Các công cụ khác tạo tài liệu "tốt một cách chung chung".
46
+ ClaudeOS-Core tạo tài liệu biết rằng dự án dùng `ApiResponse.ok()` (không phải `ResponseEntity.success()`), MyBatis XML mapper của bạn nằm ở `src/main/resources/mybatis/mappers/`, và package structure là `com.company.module.{domain}.controller` — vì nó đã đọc code thực tế của bạn.
47
+
48
+ ### Before & After
49
+
50
+ **Không có ClaudeOS-Core** — bạn yêu cầu Claude Code tạo Order CRUD:
51
+ ```
52
+ ❌ Dùng repository kiểu JPA (dự án của bạn dùng MyBatis)
53
+ ❌ Tạo ResponseEntity.success() (wrapper của bạn là ApiResponse.ok())
54
+ ❌ Đặt file vào order/controller/ (dự án của bạn dùng controller/order/)
55
+ ❌ Tạo comment tiếng Anh (team của bạn viết comment tiếng Việt)
56
+ → Bạn mất 20 phút sửa từng file đã tạo
57
+ ```
58
+
59
+ **Có ClaudeOS-Core** — `.claude/rules/` đã chứa các pattern đã xác nhận của bạn:
60
+ ```
61
+ ✅ Tạo MyBatis mapper + XML (phát hiện từ build.gradle)
62
+ ✅ Dùng ApiResponse.ok() (trích xuất từ source thực tế của bạn)
63
+ ✅ Đặt file vào controller/order/ (Pattern A xác nhận bằng structure scan)
64
+ ✅ Comment tiếng Việt (--lang vi đã áp dụng)
65
+ → Code được tạo khớp ngay với convention của dự án
66
+ ```
67
+
68
+ Sự khác biệt này được tích lũy. 10 task/ngày × 20 phút tiết kiệm = **hơn 3 giờ/ngày**.
69
+
70
+ ---
71
+
72
+ ## Đảm bảo chất lượng sau khi sinh (v2.3.0)
73
+
74
+ Sinh ra tài liệu chỉ một nửa vấn đề. Nửa còn lại là **biết rằng output là đúng** — xuyên suốt 10 ngôn ngữ output, 11 template stack, và các dự án ở mọi kích thước. v2.3.0 thêm hai validator tất định chạy sau khi sinh và không phụ thuộc vào LLM tự kiểm tra.
75
+
76
+ ### `claude-md-validator` bất biến cấu trúc
77
+
78
+ Mỗi `CLAUDE.md` được sinh ra đều được kiểm tra đối chiếu với 25 bất biến cấu trúc sử dụng chỉ những tín hiệu không phụ thuộc ngôn ngữ: cú pháp markdown (`^## `, `^### `), tên file literal (`decision-log.md`, `failure-patterns.md` không bao giờ được dịch), số section, số sub-section mỗi section, và số hàng bảng. Cùng một validator, từng byte một, sẽ đưa ra phán quyết giống nhau đối với `CLAUDE.md` được sinh ra bằng tiếng Anh, Hàn, Nhật, Việt, Hindi, Nga, Tây Ban Nha, Trung, Pháp, hoặc Đức.
79
+
80
+ Đảm bảo xuyên ngôn ngữ được xác minh bằng các test fixture trong cả 10 ngôn ngữ, bao gồm các fixture bad-case trong 6 trong số các ngôn ngữ đó tạo ra chữ ký lỗi giống hệt nhau. Khi một bất biến thất bại trên một dự án tiếng Việt, cách sửa cũng giống như khi nó thất bại trên một dự án tiếng Đức.
81
+
82
+ ### `content-validator [10/10]` xác minh tuyên bố path tính nhất quán MANIFEST
83
+
84
+ Đọc mọi tham chiếu path được bọc bởi backtick (`src/...`, `.claude/rules/...`, `claudeos-core/skills/...`) từ tất cả các file `.md` được sinh ra và xác minh chúng với file system thực. Bắt hai lớp thất bại của LLM mà không có công cụ nào phát hiện trước đây:
85
+
86
+ - **`STALE_PATH`** khi Pass 3 hoặc Pass 4 bịa ra một đường dẫn nghe có vẻ hợp lý nhưng không tồn tại. Các trường hợp điển hình: suy diễn `featureRoutePath.ts` từ một TypeScript constant có tên `FEATURE_ROUTE_PATH` khi file thực tế là `routePath.ts`; giả định `src/main.tsx` theo quy ước Vite trong một dự án multi-entry; giả định `src/__mocks__/handlers.ts` theo tài liệu MSW ngay cả khi dự án không có test nào.
87
+ - **`MANIFEST_DRIFT`** — khi `claudeos-core/skills/00.shared/MANIFEST.md` đăng ký một skill mà `CLAUDE.md §6` không đề cập (hoặc ngược lại). Nhận diện layout orchestrator + sub-skills phổ biến, trong đó `CLAUDE.md §6` là điểm vào và `MANIFEST.md` là registry đầy đủ — các sub-skill được coi là được bao phủ thông qua orchestrator cha của chúng.
88
+
89
+ Validator này được kết hợp với phòng ngừa ở giai đoạn prompt trong `pass3-footer.md` và `pass4.md`: các khối anti-pattern ghi lại các lớp hallucination cụ thể (tiền tố thư mục cha, các quy ước thư viện Vite/MSW/Vitest/Jest/RTL), và positive guidance rõ ràng về việc giới hạn phạm vi các rule theo thư mục khi một tên file cụ thể không có trong `pass3a-facts.md`.
90
+
91
+ ### Chạy validation trên bất kỳ dự án nào
92
+
93
+ ```bash
94
+ npx claudeos-core health # tất cả validator một phán quyết go/no-go duy nhất
95
+ npx claudeos-core lint # chỉ bất biến cấu trúc CLAUDE.md (bất kỳ ngôn ngữ nào)
96
+ ```
97
+
98
+ ### Xác minh thực tế
99
+
100
+ v2.3.0 đã được xác minh end-to-end trên hai dự án tiếng Hàn sibling thực tế trước khi phát hành: một frontend single-SPA Vite + React 19 với 14 domain và orchestrator `scaffold-page-feature` 8 sub-skill, và một backend Spring Boot + MyBatis với 8 domain và orchestrator `scaffold-crud-feature` 8 sub-skill đang trong quá trình migration PostgreSQL MariaDB. Cả hai đều dừng lại ở **0 lỗi, 0 cảnh báo** trong health check đầy đủ — `STALE_PATH` 0, `MANIFEST_DRIFT` 0, 25/25 bất biến cấu trúc đều pass — mà không có bất kỳ chỉnh sửa thủ công nào trên output được sinh ra.
101
+
102
+ ---
103
+
104
+ ## Stack Được Hỗ Trợ
105
+
106
+ | Stack | Phát Hiện | Độ Sâu Phân Tích |
107
+ |---|---|---|
108
+ | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 package patterns | 10 danh mục, 59 mục con |
109
+ | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 danh mục, 95 mục con |
110
+ | **Node.js / Express** | `package.json` | 9 danh mục, 57 mục con |
111
+ | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 danh mục, 68 mục con |
112
+ | **Next.js / React** | `package.json`, `next.config.*`, hỗ trợ FSD | 9 danh mục, 55 mục con |
113
+ | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 danh mục, 58 mục con |
114
+ | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 55 mục con |
115
+ | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 58 mục con |
116
+ | **Node.js / Fastify** | `package.json` | 10 danh mục, 62 mục con |
117
+ | **Vite / React SPA** | `package.json`, `vite.config.*` | 9 danh mục, 55 mục con |
118
+ | **Angular** | `package.json`, `angular.json` | 12 danh mục, 78 mục con |
119
+
120
+ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản (bao gồm Vite như SPA framework), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, v.v.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), kiến trúc (CQRS, BFF — phát hiện từ tên module), cấu trúc multi-module (từ settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **cấu hình runtime từ `.env.example`** (v2.2.0 — trích xuất port/host/API-target từ 16+ tên biến quy ước trên các framework Vite · Next.js · Nuxt · Angular · Node · Python).
121
+
122
+ **Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
123
+
124
+ ### Cấu hình runtime từ `.env` (v2.2.0)
125
+
126
+ v2.2.0 bổ sung `lib/env-parser.js` để `CLAUDE.md` được sinh ra phản ánh những project thực sự khai báo, thay giá trị mặc định của framework.
127
+
128
+ - **Thứ tự tìm kiếm**: `.env.example` (canonical, đã commit) `.env.local.example` `.env.sample` `.env.template` → `.env` → `.env.local` `.env.development`. Biến thể `.example` thắng vì đó là shape-of-truth trung lập của developer, không phải override local của một contributor cụ thể.
129
+ - **Các quy ước biến port được nhận diện**: `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / `PORT` tổng quát. Tên đặc thù framework thắng `PORT` tổng quát khi cả hai cùng hiện diện.
130
+ - **Host & API target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` v.v.
131
+ - **Độ ưu tiên**: Spring Boot `application.yml` `server.port` vẫn thắng (config framework-native), rồi đến port khai báo trong `.env`, cuối cùng mới fallback về default của framework (Vite 5173, Next.js 3000, Django 8000, v.v.).
132
+ - **Redact biến nhạy cảm**: giá trị của các biến khớp pattern `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` được thay bằng `***REDACTED***` trước khi tới bất kỳ generator downstream nào. Defense-in-depth chống secret bị commit nhầm vào `.env.example`. `DATABASE_URL` được whitelist tường minh để giữ back-compat cho việc nhận diện DB của stack-detector.
133
+
134
+ ### Phát Hiện Domain Java (5 pattern với fallback)
135
+
136
+ | Ưu tiên | Pattern | Cấu trúc | Ví dụ |
137
+ |---|---|---|---|
138
+ | A | Layer trước | `controller/{domain}/` | `controller/user/UserController.java` |
139
+ | B | Domain trước | `{domain}/controller/` | `user/controller/UserController.java` |
140
+ | D | Module prefix | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
141
+ | E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
142
+ | C | Phẳng | `controller/*.java` | `controller/UserController.java` → trích `user` từ tên class |
143
+
144
+ Các domain chỉ có service (không có controller) cũng được phát hiện qua thư mục `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Bỏ qua: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, v.v.
145
+
146
+ ### Phát Hiện Domain Kotlin Multi-Module
147
+
148
+ Dành cho dự án Kotlin với cấu trúc Gradle multi-module (ví dụ: CQRS monorepo):
149
+
150
+ | Bước | Hành Động | Dụ |
151
+ |---|---|---|
152
+ | 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm 14 module |
153
+ | 2 | Phát hiện kiểu module từ tên | `reservation-command-server` → type: `command` |
154
+ | 3 | Trích xuất domain từ tên module | `reservation-command-server` → domain: `reservation` |
155
+ | 4 | Gom cùng domain qua các module | `reservation-command-server` + `common-query-server` → 1 domain |
156
+ | 5 | Phát hiện kiến trúc | Có module `command` + `query` → CQRS |
157
+
158
+ Các kiểu module được hỗ trợ: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Các thư viện dùng chung (`shared-lib`, `integration-lib`) được phát hiện như domain đặc biệt.
159
+
160
+ ### Phát Hiện Domain Frontend
161
+
162
+ - **App Router**: `app/{domain}/page.tsx` (Next.js)
163
+ - **Pages Router**: `pages/{domain}/index.tsx`
164
+ - **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
165
+ - **Phân tách RSC/Client**: phát hiện pattern `client.tsx`, theo dõi phân tách Server/Client component
166
+ - **Đường dẫn lồng nhau không chuẩn**: Phát hiện pages, components và các FSD layer dưới đường dẫn `src/*/` (ví dụ: `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
167
+ - **Phát hiện chia tách Platform/tier (v2.0.0)**: Nhận diện layout `src/{platform}/{subapp}/` — `{platform}` có thể là keyword device/target (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) hoặc keyword access-tier (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Sinh một domain cho mỗi cặp `(platform, subapp)` với tên `{platform}-{subapp}` kèm số đếm routes/components/layouts/hooks riêng cho từng domain. Chạy đồng thời trên Angular, Next.js, React và Vue (glob đa đuôi `{tsx,jsx,ts,js,vue}`). Yêu cầu ≥2 file nguồn cho mỗi subapp để tránh domain nhiễu 1-file.
168
+ - **Monorepo platform split (v2.0.0)**: Platform scan cũng khớp với `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm workspace có `src/`) và `{apps,packages}/{platform}/{subapp}/` (workspace không wrapper `src/`).
169
+ - **Fallback E — routes-file (v2.0.0)**: Khi scanner chính + Fallback A–D đều trả về 0, glob `**/routes/*.{tsx,jsx,ts,js,vue}` và gom nhóm theo tên thư mục cha của `routes`. Bắt các dự án React Router file-routing (CRA/Vite + `react-router`) không khớp với `page.tsx` của Next.js hoặc layout FSD. Tên cha chung chung (`src`, `app`, `pages`) được lọc bỏ.
170
+ - **Config fallback**: Phát hiện Next.js/Vite/Nuxt từ file cấu hình khi không có trong `package.json` (hỗ trợ monorepo)
171
+ - **Deep directory fallback**: Đối với dự án React/CRA/Vite/Vue/RN, quét `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` ở bất kỳ độ sâu nào
172
+ - **Danh sách bỏ qua dùng chung (v2.0.0)**: Tất cả scanner chia sẻ `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) và `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`) để build output và test fixture không làm phồng số file của từng domain.
173
+
174
+ ### Scanner Overrides (v2.0.0)
175
+
176
+ Thả tùy chọn `.claudeos-scan.json` tại root của dự án để mở rộng giá trị mặc định của scanner mà không cần chỉnh sửa toolkit. Tất cả các trường đều **cộng dồn** — các mục của người dùng mở rộng giá trị mặc định, không thay thế:
177
+
178
+ ```json
179
+ {
180
+ "frontendScan": {
181
+ "platformKeywords": ["kiosk"],
182
+ "skipSubappNames": ["legacy"],
183
+ "minSubappFiles": 3
184
+ }
185
+ }
186
+ ```
187
+
188
+ | Trường | Mặc định | Mục đích |
189
+ |---|---|---|
190
+ | `platformKeywords` | danh sách built-in ở trên | Các keyword `{platform}` bổ sung cho platform scan (ví dụ: `kiosk`, `vr`, `embedded`) |
191
+ | `skipSubappNames` | chỉ các thư mục cấu trúc | Các tên subapp bổ sung để loại khỏi việc sinh domain của platform scan |
192
+ | `minSubappFiles` | `2` | Ghi đè số file tối thiểu cần có trước khi một subapp trở thành domain |
193
+
194
+ Thiếu file hoặc JSON bị lỗi → âm thầm fallback về mặc định (không crash). Sử dụng điển hình: opt-in một viết tắt ngắn (`adm`, `bo`) mà danh sách built-in loại vì quá mơ hồ, hoặc nâng `minSubappFiles` cho monorepo nhiễu.
195
+
196
+ ---
197
+
198
+ ## Bắt Đầu Nhanh
199
+
200
+ ### Yêu cầu trước
201
+
202
+ - **Node.js** v18+
203
+ - **Claude Code CLI** (đã cài đặt & xác thực)
204
+
205
+ ### Cài đặt
206
+
207
+ ```bash
208
+ cd /your/project/root
209
+
210
+ # Cách A: npx (khuyến nghị không cần cài đặt)
211
+ npx claudeos-core init
212
+
213
+ # Cách B: cài đặt global
214
+ npm install -g claudeos-core
215
+ claudeos-core init
216
+
217
+ # Cách C: project devDependency
218
+ npm install --save-dev claudeos-core
219
+ npx claudeos-core init
220
+
221
+ # Cách D: git clone (để phát triển/đóng góp)
222
+ git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
223
+
224
+ # Đa nền tảng (PowerShell, CMD, Bash, Zsh — mọi terminal)
225
+ node claudeos-core-tools/bin/cli.js init
226
+
227
+ # Linux/macOS (chỉ Bash)
228
+ bash claudeos-core-tools/bootstrap.sh
229
+ ```
230
+
231
+ ### Ngôn Ngữ Đầu Ra (10 ngôn ngữ)
232
+
233
+ Khi chạy `init` không có `--lang`, selector tương tác sẽ hiện ra — dùng phím mũi tên hoặc phím số để chọn:
234
+
235
+ ```
236
+ ╔══════════════════════════════════════════════════╗
237
+ ║ Select generated document language (required) ║
238
+ ╚══════════════════════════════════════════════════╝
239
+
240
+ Các file được tạo (CLAUDE.md, Standards, Rules,
241
+ Skills, Guides) sẽ được viết bằng Tiếng Việt.
242
+
243
+ 1. en — English
244
+ 2. ko — 한국어 (Korean)
245
+ 3. zh-CN — 简体中文 (Chinese Simplified)
246
+ 4. ja — 日本語 (Japanese)
247
+ 5. es — Español (Spanish)
248
+ ❯ 6. vi — Tiếng Việt (Vietnamese)
249
+ 7. hi — हिन्दी (Hindi)
250
+ 8. ru — Русский (Russian)
251
+ 9. fr — Français (French)
252
+ 10. de — Deutsch (German)
253
+
254
+ ↑↓ Move 1-0 Jump Enter Select ESC Cancel
255
+ ```
256
+
257
+ tả sẽ đổi sang ngôn ngữ được chọn khi bạn điều hướng. Để bỏ qua selector, truyền `--lang` trực tiếp:
258
+
259
+ ```bash
260
+ npx claudeos-core init --lang ko # Korean
261
+ npx claudeos-core init --lang ja # Japanese
262
+ npx claudeos-core init --lang en # English (mặc định)
263
+ ```
264
+
265
+ > **Lưu ý:** Cài đặt này chỉ áp dụng cho ngôn ngữ của các file tài liệu được tạo. Phân tích code (Pass 1–2) luôn chạy bằng tiếng Anh; output được tạo (Pass 3) được viết bằng ngôn ngữ bạn chọn. Các ví dụ code bên trong file được tạo vẫn giữ nguyên cú pháp ngôn ngữ lập trình gốc.
266
+
267
+ Vậy thôi. Sau 10 phút (dự án nhỏ) đến 2 giờ (monorepo 60+ domain), tất cả tài liệu được tạo và sẵn sàng sử dụng. CLI hiển thị thanh tiến trình kèm phần trăm, thời gian đã trôi qua và ETA cho mỗi pass. Xem [Tự Động Mở Rộng Theo Kích Thước Dự Án](#tự-động-mở-rộng-theo-kích-thước-dự-án) để biết thời gian chi tiết theo kích thước dự án.
268
+
269
+ ### Cài Đặt Thủ Công Từng Bước
270
+
271
+ Nếu bạn muốn kiểm soát hoàn toàn từng giai đoạn hoặc nếu pipeline tự động bị lỗi ở bước nào đó — bạn có thể chạy từng giai đoạn thủ công. Cách này cũng hữu ích để hiểu cách ClaudeOS-Core hoạt động bên trong.
272
+
273
+ #### Step 1: Clone cài đặt dependencies
274
+
275
+ ```bash
276
+ cd /your/project/root
277
+
278
+ git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
279
+ cd claudeos-core-tools && npm install && cd ..
280
+ ```
281
+
282
+ #### Step 2: Tạo cấu trúc thư mục
283
+
284
+ ```bash
285
+ # Rules (v2.0.0: thêm 60.memory)
286
+ mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
287
+
288
+ # Standards
289
+ mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
290
+
291
+ # Skills
292
+ mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
293
+
294
+ # Guide, Database, MCP, Generated, Memory (v2.0.0: thêm memory; v2.1.0: bỏ plan)
295
+ mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
296
+ mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
297
+ ```
298
+
299
+ > **Lưu ý v2.1.0:** Thư mục `claudeos-core/plan/` không còn được tạo nữa. Việc tạo master plan đã bị loại bỏ vì master plan là backup nội bộ mà Claude Code không đọc lúc runtime, việc tổng hợp chúng đã gây ra lỗi `Prompt is too long`. Dùng `git` để backup/restore thay thế.
300
+
301
+ #### Step 3: Chạy plan-installer (phân tích dự án)
302
+
303
+ Lệnh này quét dự án, phát hiện stack, tìm domain, chia chúng thành các nhóm và tạo prompt.
304
+
305
+ ```bash
306
+ node claudeos-core-tools/plan-installer/index.js
307
+ ```
308
+
309
+ **Output (trong `claudeos-core/generated/`):**
310
+ - `project-analysis.json` — stack, domain, thông tin frontend đã phát hiện
311
+ - `domain-groups.json` — các nhóm domain cho Pass 1
312
+ - `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompt phân tích
313
+ - `pass2-prompt.md` — prompt merge
314
+ - `pass3-prompt.md` template prompt Pass 3 với block "Read Once, Extract Facts" Phase 1 được thêm vào đầu (Rules A–E). Pipeline tự động chia Pass 3 thành nhiều stage lúc runtime; template này dùng cho từng stage.
315
+ - `pass3-context.json` — slim project summary (< 5 KB, xây sau Pass 2) mà prompt Pass 3 ưu tiên hơn `pass2-merged.json` đầy đủ (v2.1.0)
316
+ - `pass4-prompt.md` — prompt L4 memory scaffolding (v2.0.0; dùng cùng `staging-override.md` cho ghi rule `60.memory/`)
317
+
318
+ Bạn có thể kiểm tra các file này để xác minh độ chính xác phát hiện trước khi tiếp tục.
319
+
320
+ #### Step 4: Pass 1 — Phân tích code sâu (mỗi nhóm domain)
321
+
322
+ Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số lượng nhóm.
323
+
324
+ ```bash
325
+ # Kiểm tra có bao nhiêu nhóm
326
+ cat claudeos-core/generated/domain-groups.json | node -e "
327
+ const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
328
+ g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
329
+ "
330
+
331
+ # Chạy Pass 1 cho mỗi nhóm (thay domain và số nhóm)
332
+ # Lưu ý: v1.6.1+ dùng Node.js String.replace() thay perl không còn
333
+ # yêu cầu perl, và ngữ nghĩa replacement-function ngăn chặn regex injection
334
+ # từ các ký tự $/&/$1 có thể xuất hiện trong tên domain.
335
+ #
336
+ # Cho nhóm 1:
337
+ DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
338
+ const fs = require('fs');
339
+ const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
340
+ const out = tpl
341
+ .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
342
+ .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
343
+ process.stdout.write(out);
344
+ " | claude -p --dangerously-skip-permissions
345
+
346
+ # Cho nhóm 2 (nếu có):
347
+ DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
348
+ const fs = require('fs');
349
+ const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
350
+ const out = tpl
351
+ .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
352
+ .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
353
+ process.stdout.write(out);
354
+ " | claude -p --dangerously-skip-permissions
355
+
356
+ # Với nhóm frontend, đổi pass1-backend-prompt.md pass1-frontend-prompt.md
357
+ ```
358
+
359
+ **Xác minh:** `ls claudeos-core/generated/pass1-*.json` phải hiển thị một JSON cho mỗi nhóm.
360
+
361
+ #### Step 5: Pass 2 — Merge kết quả phân tích
362
+
363
+ ```bash
364
+ cat claudeos-core/generated/pass2-prompt.md \
365
+ | claude -p --dangerously-skip-permissions
366
+ ```
367
+
368
+ **Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ top-level key.
369
+
370
+ #### Step 6: Pass 3 — Tạo toàn bộ tài liệu (chia thành nhiều stage)
371
+
372
+ **Lưu ý v2.1.0:** Pass 3 **luôn chạy ở chế độ split** bởi pipeline tự động. Mỗi stage là một lời gọi `claude -p` riêng biệt với context window mới, nên tràn output do tích lũy không thể xảy ra về mặt cấu trúc bất kể kích thước dự án. Template `pass3-prompt.md` được lắp ráp theo từng stage với một directive `STAGE:` chỉ cho Claude biết tập con file nào cần phát ra. Với chế độ thủ công, đường đơn giản nhất vẫn là đưa toàn bộ template và để Claude tạo mọi thứ trong một lời gọi — nhưng điều này chỉ đáng tin cậy trên dự án nhỏ (≤5 domain). Cho dự án lớn hơn, hãy dùng `npx claudeos-core init` để split runner xử lý điều phối stage.
373
+
374
+ **Chế độ lời gọi đơn (chỉ cho dự án nhỏ, ≤5 domain):**
375
+
376
+ ```bash
377
+ cat claudeos-core/generated/pass3-prompt.md \
378
+ | claude -p --dangerously-skip-permissions
379
+ ```
380
+
381
+ **Chế độ từng stage (khuyến nghị cho mọi kích thước dự án):**
382
+
383
+ Pipeline tự động chạy các stage sau. Danh sách stage:
384
+
385
+ | Stage | Ghi | Ghi chú |
386
+ |---|---|---|
387
+ | `3a` | `pass3a-facts.md` (fact sheet đã chắt lọc 5–10 KB) | Đọc `pass2-merged.json` một lần; stage sau tham chiếu file này |
388
+ | `3b-core` | `CLAUDE.md`, `standard/` chung, `.claude/rules/` chung | File xuyên dự án; không output đặc thù domain |
389
+ | `3b-1..N` | `standard/60.domains/*.md` đặc thù domain + rule domain | Batch ≤15 domain mỗi stage (tự động chia ở ≥16 domain) |
390
+ | `3c-core` | `guide/` (9 file), `skills/00.shared/MANIFEST.md`, orchestrator `skills/*/` | Skill chung và tất cả guide hướng người dùng |
391
+ | `3c-1..N` | Sub-skill domain dưới `skills/20.frontend-page/scaffold-page-feature/` | Batch ≤15 domain mỗi stage |
392
+ | `3d-aux` | `database/`, `mcp-guide/` | Kích thước cố định, không phụ thuộc số domain |
393
+
394
+ Cho dự án 1–15 domain, điều này mở rộng thành 4 stage (`3a`, `3b-core`, `3c-core`, `3d-aux` — không chia batch). Cho 16–30 domain, mở rộng thành 8 stage (`3b` và `3c` mỗi cái chia thành 2 batch). Xem [Tự Động Mở Rộng Theo Kích Thước Dự Án](#tự-động-mở-rộng-theo-kích-thước-dự-án) để có bảng đầy đủ.
395
+
396
+ **Xác minh:** `CLAUDE.md` phải tồn tại ở thư mục gốc dự án, và marker `claudeos-core/generated/pass3-complete.json` phải được ghi. Ở chế độ split, marker chứa `mode: "split"` và một mảng `groupsCompleted` liệt kê mọi stage đã hoàn thành — logic partial-marker dùng thông tin này để resume từ stage đúng sau khi crash thay vì bắt đầu lại từ `3a` (sẽ nhân đôi chi phí token).
397
+
398
+ > **Lưu ý staging:** Pass 3 ghi các file rule vào `claudeos-core/generated/.staged-rules/` trước vì chính sách sensitive-path của Claude Code chặn ghi trực tiếp vào `.claude/`. Pipeline tự động xử lý việc di chuyển sau mỗi stage. Nếu bạn chạy một stage thủ công, bạn cần tự di chuyển cây staged: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (giữ nguyên subpath).
399
+
400
+ #### Step 7: Pass 4 — Memory scaffolding
401
+
402
+ ```bash
403
+ cat claudeos-core/generated/pass4-prompt.md \
404
+ | claude -p --dangerously-skip-permissions
405
+ ```
406
+
407
+ **Xác minh:** `claudeos-core/memory/` phải chứa 4 file (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` phải chứa 4 file rule, và `CLAUDE.md` giờ phải có mục `## Memory (L4)` được append. Marker: `claudeos-core/generated/pass4-memory.json`.
408
+
409
+ > **Gap-fill v2.1.0:** Pass 4 cũng đảm bảo `claudeos-core/skills/00.shared/MANIFEST.md` tồn tại. Nếu Pass 3c bỏ sót (có thể xảy ra ở các dự án ít skill vì template stack `pass3.md` liệt kê `MANIFEST.md` là mục tiêu tạo mà không đánh dấu REQUIRED), gap-fill tạo stub tối thiểu để `.claude/rules/50.sync/02.skills-sync.md` (đường dẫn v2.2.0 — số lượng rule sync giảm từ 3 xuống 2, `03` trở thành `02`) luôn có tham chiếu hợp lệ. Idempotent: bỏ qua nếu file đã có nội dung thực (>20 ký tự).
410
+
411
+ > **Lưu ý:** Nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, pipeline tự động sẽ fallback về scaffold tĩnh qua `lib/memory-scaffold.js` (có dịch qua Claude khi `--lang` khác tiếng Anh). Fallback tĩnh chỉ chạy bên trong `npx claudeos-core init` — chế độ thủ công yêu cầu Pass 4 thành công.
412
+
413
+ #### Step 8: Chạy verification tools
414
+
415
+ ```bash
416
+ # Tạo metadata (bắt buộc trước các kiểm tra khác)
417
+ node claudeos-core-tools/manifest-generator/index.js
418
+
419
+ # Chạy tất cả kiểm tra
420
+ node claudeos-core-tools/health-checker/index.js
421
+
422
+ # Hoặc chạy từng kiểm tra:
423
+ node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk consistency
424
+ node claudeos-core-tools/sync-checker/index.js # File chưa đăng ký/orphan
425
+ node claudeos-core-tools/content-validator/index.js # Kiểm tra chất lượng file (bao gồm mục memory/ [9/9])
426
+ node claudeos-core-tools/pass-json-validator/index.js # Kiểm tra JSON Pass 1–4 + completion marker
427
+ ```
428
+
429
+ #### Step 9: Xác minh kết quả
430
+
431
+ ```bash
432
+ # Đếm số file được tạo
433
+ find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
434
+
435
+ # Kiểm tra CLAUDE.md
436
+ head -30 CLAUDE.md
437
+
438
+ # Kiểm tra một file standard
439
+ cat claudeos-core/standard/00.core/01.project-overview.md | head -20
440
+
441
+ # Kiểm tra rules
442
+ ls .claude/rules/*/
443
+ ```
444
+
445
+ > **Mẹo:** Nếu bước nào đó lỗi, bạn có thể sửa và chạy lại đúng bước đó. Kết quả Pass 1/2 được cache — nếu `pass1-N.json` hoặc `pass2-merged.json` đã tồn tại, pipeline tự động sẽ bỏ qua. Dùng `npx claudeos-core init --force` để xóa kết quả trước và bắt đầu lại từ đầu.
446
+
447
+ ### Bắt Đầu Sử Dụng
448
+
449
+ ```
450
+ # Trong Claude Code chỉ cần hỏi tự nhiên:
451
+ "Tạo CRUD cho domain order"
452
+ "Thêm API xác thực người dùng"
453
+ "Refactor code này khớp với pattern dự án"
454
+
455
+ # Claude Code tự động tham chiếu Standards, Rules và Skills đã tạo.
456
+ ```
457
+
458
+ ---
459
+
460
+ ## Cách Hoạt Động — 4-Pass Pipeline
461
+
462
+ ```
463
+ npx claudeos-core init
464
+
465
+ ├── [1] npm install ← Dependencies (~10s)
466
+ ├── [2] Cấu trúc thư mục ← Tạo folder (~1s)
467
+ ├── [3] plan-installer (Node.js) Quét dự án (~5s)
468
+ │ ├── Tự phát hiện stack (multi-stack aware)
469
+ │ ├── Trích domain list (tag: backend/frontend)
470
+ │ ├── Chia thành domain group (theo kiểu)
471
+ │ ├── Xây pass3-context.json (slim summary, v2.1.0)
472
+ │ └── Chọn prompt theo stack (theo kiểu)
473
+
474
+ ├── [4] Pass 1 × N (claude -p) ← Phân tích code sâu (~2-8min)
475
+ │ ├── ⚙️ Backend group prompt backend
476
+ │ └── 🎨 Frontend group → prompt frontend
477
+
478
+ ├── [5] Pass 2 × 1 (claude -p) ← Merge phân tích (~1min)
479
+ │ └── Tổng hợp TẤT CẢ kết quả Pass 1 vào pass2-merged.json
480
+
481
+ ├── [6] Pass 3 (split mode, v2.1.0) ← Tạo mọi thứ
482
+ │ │
483
+ │ ├── 3a × 1 (claude -p) ← Trích xuất fact (~5-10min)
484
+ │ │ └── Đọc pass2-merged.json một lần → pass3a-facts.md
485
+
486
+ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + standard/rules chung
487
+ ├── 3b-1..N × N (claude -p) ← Standard/rules domain (≤15 domain/batch)
488
+ │ │
489
+ ├── 3c-core × 1 (claude -p) Guides + skill chung + MANIFEST.md
490
+ │ ├── 3c-1..N × N (claude -p) ← Sub-skill domain (≤15 domain/batch)
491
+
492
+ └── 3d-aux × 1 (claude -p) ← Stub database/ + mcp-guide/
493
+
494
+ ├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s-5min)
495
+ │ ├── Seed memory/ (decision-log, failure-patterns, …)
496
+ ├── Tạo rules 60.memory/
497
+ ├── Append mục "Memory (L4)" vào CLAUDE.md
498
+ │ └── Gap-fill: đảm bảo skills/00.shared/MANIFEST.md tồn tại (v2.1.0)
499
+
500
+ └── [8] Xác minh Tự chạy health checker
501
+ ```
502
+
503
+ ### Tại sao 4 Pass?
504
+
505
+ **Pass 1** là pass duy nhất đọc mã nguồn của bạn. chọn các file đại diện cho mỗi domain và trích xuất pattern qua 55–95 danh mục phân tích (theo stack). Với dự án lớn, Pass 1 chạy nhiều lần — mỗi lần cho một nhóm domain. Với dự án multi-stack (ví dụ Java backend + React frontend), domain backend và frontend dùng **prompt phân tích khác nhau** phù hợp từng stack.
506
+
507
+ **Pass 2** merge tất cả kết quả Pass 1 thành phân tích thống nhất: pattern chung (100% share), pattern đa số (50%+ share), pattern đặc thù domain, anti-pattern theo mức độ nghiêm trọng và các mối quan tâm cross-cutting (naming, security, DB, testing, logging, performance). Kết quả backend và frontend được merge cùng nhau.
508
+
509
+ **Pass 3** (split mode, v2.1.0) nhận phân tích đã merge và tạo toàn bộ hệ sinh thái file (CLAUDE.md, rules, standards, skills, guides) qua nhiều lời gọi `claude -p` tuần tự. Insight quan trọng là tràn output do tích lũy không thể dự đoán từ kích thước input: Pass 3 lời-gọi-đơn hoạt động tốt trên dự án 2 domain và thất bại nhất quán ở ~5 domain, và ranh giới thất bại thay đổi tùy theo mức độ dài dòng của mỗi file. Split mode né hoàn toàn vấn đề này — mỗi stage bắt đầu với context window mới và ghi một tập con file có giới hạn. Tính nhất quán xuyên stage (vốn là lợi thế chính của phương pháp lời-gọi-đơn) được bảo tồn bởi `pass3a-facts.md`, một fact sheet đã chắt lọc 5–10 KB mà mọi stage sau tham chiếu.
510
+
511
+ Template prompt Pass 3 cũng bao gồm **block Phase 1 "Read Once, Extract Facts"** với năm rule ràng buộc thêm khối lượng output:
512
+
513
+ - **Rule A** Tham chiếu bảng fact; không đọc lại `pass2-merged.json`.
514
+ - **Rule B** Ghi file idempotent (bỏ qua nếu target đã có nội dung thực), giúp Pass 3 có thể chạy lại an toàn sau khi gián đoạn.
515
+ - **Rule C** Tính nhất quán xuyên file được đảm bảo qua bảng fact như single source of truth.
516
+ - **Rule D** Output đọng: một dòng (`[WRITE]`/`[SKIP]`) giữa các lần ghi file, không nhắc lại bảng fact, không echo nội dung file.
517
+ - **Rule E** Kiểm tra idempotent theo batch: một `Glob` lúc bắt đầu PHASE 2 thay vì gọi `Read` từng target.
518
+
519
+ Trong **v2.2.0**, Pass 3 cũng inline một CLAUDE.md scaffold deterministic (`pass-prompts/templates/common/claude-md-scaffold.md`) vào prompt. Điều này cố định tiêu đề và thứ tự của 8 section cấp cao nhất nên `CLAUDE.md` được sinh ra không còn drift giữa các project, trong khi nội dung mỗi section vẫn thích ứng với từng project. Parser `.env` mới của stack-detector (`lib/env-parser.js`) cung cấp `stack.envInfo` cho prompt để các hàng port/host/API target khớp với giá trị project thực sự khai báo thay vì framework default.
520
+
521
+ **Pass 4** scaffold L4 Memory layer: các file kiến thức team bền vững (decision-log, failure-patterns, compaction policy, auto-rule-update) cộng với rules `60.memory/` chỉ dẫn các session tương lai khi nào và cách đọc/ghi các file đó. Memory layer là thứ giúp Claude Code tích lũy bài học qua các session thay vì phải khám phá lại mỗi lần. Khi `--lang` khác tiếng Anh, nội dung fallback tĩnh được dịch qua Claude trước khi ghi. v2.1.0 thêm gap-fill cho `skills/00.shared/MANIFEST.md` phòng trường hợp Pass 3c bỏ sót.
522
+
523
+ ---
524
+
525
+ ## Cấu Trúc File Được Tạo
526
+
527
+ ```
528
+ your-project/
529
+
530
+ ├── CLAUDE.md Entry point của Claude Code (cấu trúc 8-phần deterministic, v2.2.0)
531
+
532
+ ├── .claude/
533
+ └── rules/ Rules kích hoạt theo glob
534
+ │ ├── 00.core/
535
+ ├── 10.backend/
536
+ ├── 20.frontend/
537
+ │ ├── 30.security-db/
538
+ │ ├── 40.infra/
539
+ │ ├── 50.sync/ ← Rule nhắc sync
540
+ │ └── 60.memory/ ← Rule scope on-demand của L4 memory (v2.0.0)
541
+
542
+ ├── claudeos-core/ Thư mục output chính
543
+ │ ├── generated/ ← JSON phân tích + prompt động + Pass markers (nên gitignore)
544
+ │ │ ├── project-analysis.json ← Thông tin stack (multi-stack aware)
545
+ │ │ ├── domain-groups.json ← Groups với type: backend/frontend
546
+ │ │ ├── pass1-backend-prompt.md ← Prompt phân tích backend
547
+ │ │ ├── pass1-frontend-prompt.md Prompt phân tích frontend (nếu phát hiện)
548
+ │ │ ├── pass2-prompt.md ← Prompt merge
549
+ │ │ ├── pass2-merged.json ← Output Pass 2 (chỉ Pass 3a tiêu thụ)
550
+ │ │ ├── pass3-context.json ← Slim summary (< 5 KB) cho Pass 3 (v2.1.0)
551
+ │ │ ├── pass3-prompt.md ← Template prompt Pass 3 (block Phase 1 được thêm trước)
552
+ │ │ ├── pass3a-facts.md ← Fact sheet được ghi bởi Pass 3a, đọc bởi 3b/3c/3d (v2.1.0)
553
+ │ │ ├── pass4-prompt.md ← Prompt memory scaffolding (v2.0.0)
554
+ │ │ ├── pass3-complete.json ← Marker hoàn thành Pass 3 (split mode: bao gồm groupsCompleted, v2.1.0)
555
+ │ │ ├── pass4-memory.json ← Marker hoàn thành Pass 4 (bỏ qua khi resume)
556
+ │ │ ├── rule-manifest.json ← Index file cho công cụ xác minh
557
+ │ │ ├── sync-map.json ← Mapping Plan ↔ disk (rỗng ở v2.1.0; giữ lại để tương thích sync-checker)
558
+ │ │ ├── stale-report.json ← Kết quả xác minh tổng hợp
559
+ │ │ ├── .i18n-cache-<lang>.json Cache bản dịch (`--lang` khác tiếng Anh)
560
+ │ │ └── .staged-rules/ ← Thư mục staging tạm cho ghi `.claude/rules/` (tự động di chuyển + dọn)
561
+ │ ├── standard/ ← Coding standards (15-19 file + theo domain ở 60.domains/)
562
+ │ │ ├── 00.core/ ← Tổng quan, kiến trúc, naming
563
+ │ │ ├── 10.backend-api/ ← API pattern (theo stack)
564
+ │ │ ├── 20.frontend-ui/ ← Frontend pattern (nếu phát hiện)
565
+ │ │ ├── 30.security-db/ ← Security, DB schema, utilities
566
+ │ │ ├── 40.infra/ ← Config, logging, CI/CD
567
+ │ │ ├── 50.verification/ ← Build verification, testing
568
+ │ │ ├── 60.domains/ ← Standard theo domain (ghi bởi Pass 3b-N, v2.1.0)
569
+ │ │ └── 90.optional/ ← Convention tùy chọn (mở rộng theo stack)
570
+ │ ├── skills/ ← Skills scaffold CRUD/page
571
+ │ │ └── 00.shared/MANIFEST.md ← Single source of truth cho skill đã đăng
572
+ │ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 file)
573
+ │ ├── database/ ← DB schema, hướng dẫn migration
574
+ │ ├── mcp-guide/ ← Hướng dẫn tích hợp MCP server
575
+ │ └── memory/ ← L4: kiến thức team (4 file) — commit các file này
576
+ │ ├── decision-log.md ← do "tại sao" đằng sau quyết định thiết kế
577
+ │ ├── failure-patterns.md ← Lỗi lặp lại & cách fix (tự chấm điểm — `npx claudeos-core memory score`)
578
+ │ ├── compaction.md ← Chiến lược compaction 4 giai đoạn (chạy `npx claudeos-core memory compact`)
579
+ │ └── auto-rule-update.md ← Đề xuất cải tiến rule (`npx claudeos-core memory propose-rules`)
580
+
581
+ └── claudeos-core-tools/ ← Toolkit này (không sửa)
582
+ ```
583
+
584
+ Mọi file standard đều bao gồm dụ đúng ✅, dụ sai ❌, bảng tóm tắt rule — tất cả đều được trích xuất từ pattern code thực tế của bạn, không phải template chung chung.
585
+
586
+ > **Lưu ý v2.1.0:** `claudeos-core/plan/` không còn được tạo nữa. Master plan là backup nội bộ mà Claude Code không tiêu thụ lúc runtime, và việc tổng hợp chúng trong Pass 3 là nguyên nhân chính gây tràn output. Dùng `git` để backup/restore thay thế. Các dự án upgrade từ v2.0.x có thể xóa an toàn thư mục `claudeos-core/plan/` hiện có.
587
+
588
+ ### Đề xuất gitignore
589
+
590
+ **Nên commit** (kiến thức team — có mục đích chia sẻ):
591
+ - `CLAUDE.md` entry point của Claude Code
592
+ - `.claude/rules/**` rules tự động load
593
+ - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — tài liệu được tạo (lưu ý: `plan/**` không còn được tạo ở v2.1.0)
594
+ - `claudeos-core/memory/**` — lịch sử quyết định, failure pattern, đề xuất rule
595
+
596
+ **KHÔNG commit** (build artifact có thể tạo lại):
597
+
598
+ ```gitignore
599
+ # ClaudeOS-Core — phân tích được tạo & cache dịch
600
+ claudeos-core/generated/
601
+ ```
602
+
603
+ Thư mục `generated/` chứa JSON phân tích (`pass1-*.json`, `pass2-merged.json`), prompts (`pass1/2/3/4-prompt.md`), Pass completion marker (`pass3-complete.json`, `pass4-memory.json`), translation cache (`.i18n-cache-<lang>.json`), và thư mục staging tạm (`.staged-rules/`) — tất cả có thể xây lại bằng cách chạy lại `npx claudeos-core init`.
604
+
605
+ ---
606
+
607
+ ## Tự Động Mở Rộng Theo Kích Thước Dự Án
608
+
609
+ Split mode của Pass 3 mở rộng số stage theo số domain. Việc chia batch kích hoạt ở 16 domain để giữ output mỗi stage dưới ~50 file, là khoảng an toàn thực nghiệm cho `claude -p` trước khi tràn output do tích lũy.
610
+
611
+ | Kích thước | Domain | Số stage Pass 3 | Tổng `claude -p` | Thời gian ước tính |
612
+ |---|---|---|---|---|
613
+ | Nhỏ | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 stage Pass 3 + Pass 4) | ~10–15 phút |
614
+ | Vừa | 5–15 | 4 | 8–9 | ~25–45 phút |
615
+ | Lớn | 16–30 | **8** (3b, 3c mỗi cái chia thành 2 batch) | 11–12 | **~60–105 phút** |
616
+ | Rất lớn | 31–45 | 10 | 13–14 | ~100–150 phút |
617
+ | Siêu lớn | 46–60 | 12 | 15–16 | ~150–200 phút |
618
+ | Cực lớn | 61+ | 14+ | 17+ | 200 phút+ |
619
+
620
+ Công thức số stage (khi chia batch): `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, với `N = ceil(totalDomains / 15)`.
621
+
622
+ Pass 4 (memory scaffolding) thêm khoảng ~30 giây đến 5 phút lên trên tùy thuộc vào việc chạy tạo qua Claude hay fallback tĩnh. Với dự án multi-stack ( dụ Java + React), domain backend frontend được đếm cộng lại. Dự án 6 backend + 4 frontend = 10 tổng = tier Vừa.
623
+
624
+ ---
625
+
626
+ ## Công Cụ Xác Minh
627
+
628
+ ClaudeOS-Core bao gồm 5 công cụ xác minh built-in chạy tự động sau khi tạo:
629
+
630
+ ```bash
631
+ # Chạy tất cả kiểm tra cùng lúc (khuyến nghị)
632
+ npx claudeos-core health
633
+
634
+ # Lệnh riêng lẻ
635
+ npx claudeos-core validate # So sánh Plan disk
636
+ npx claudeos-core refresh # Disk → Plan sync
637
+ npx claudeos-core restore # Plan Disk restore
638
+
639
+ # Hoặc dùng node trực tiếp (cho người dùng git clone)
640
+ node claudeos-core-tools/health-checker/index.js
641
+ node claudeos-core-tools/manifest-generator/index.js
642
+ node claudeos-core-tools/plan-validator/index.js --check
643
+ node claudeos-core-tools/sync-checker/index.js
644
+ ```
645
+
646
+ | Công cụ | Chức năng |
647
+ |---|---|
648
+ | **manifest-generator** | Tạo JSON metadata (`rule-manifest.json`, `sync-map.json`, khởi tạo `stale-report.json`); index 7 thư mục bao gồm `memory/` (`totalMemory` trong summary). v2.1.0: `plan-manifest.json` không còn được tạo vì master plan đã bị loại bỏ. |
649
+ | **plan-validator** | Xác minh block `<file>` master plan với disk cho các dự án vẫn còn `claudeos-core/plan/` (trường hợp upgrade legacy). v2.1.0: bỏ qua tạo `plan-sync-status.json` khi `plan/` vắng mặt hoặc rỗng — `stale-report.json` vẫn ghi một no-op pass. |
650
+ | **sync-checker** | Phát hiện file chưa đăng ký (trên disk nhưng không có trong plan) và entry orphan — bao phủ 7 thư mục (thêm `memory/` ở v2.0.0). Thoát sạch khi `sync-map.json` không có mapping nào (trạng thái mặc định của v2.1.0). |
651
+ | **content-validator** | Kiểm tra chất lượng 9 mục — file rỗng, thiếu ví dụ ✅/❌, mục bắt buộc, cộng với toàn vẹn scaffold L4 memory (ngày heading decision-log, trường bắt buộc failure-pattern, parse nhận biết fence) |
652
+ | **pass-json-validator** | Xác minh cấu trúc JSON Pass 1–4 cộng với marker hoàn thành `pass3-complete.json` (shape split-mode, v2.1.0) và `pass4-memory.json` |
653
+
654
+ ---
655
+
656
+ ## Cách Claude Code Dùng Tài Liệu Của Bạn
657
+
658
+ ClaudeOS-Core tạo tài liệu mà Claude Code thực sự đọcđây cách:
659
+
660
+ ### Cái Claude Code đọc tự động
661
+
662
+ | File | Khi nào | Đảm bảo |
663
+ |---|---|---|
664
+ | `CLAUDE.md` | Mỗi lần bắt đầu hội thoại | Luôn luôn |
665
+ | `.claude/rules/00.core/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
666
+ | `.claude/rules/10.backend/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
667
+ | `.claude/rules/20.frontend/*` | Khi sửa bất kỳ file frontend nào (scope tới đường dẫn component/page/style) | Có điều kiện |
668
+ | `.claude/rules/30.security-db/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
669
+ | `.claude/rules/40.infra/*` | Chỉ khi sửa file config/infra (đường dẫn có scope) | Có điều kiện |
670
+ | `.claude/rules/50.sync/*` | Chỉ khi sửa file claudeos-core (đường dẫn có scope) | Có điều kiện |
671
+ | `.claude/rules/60.memory/*` | Khi sửa `claudeos-core/memory/*` (scope tới đường dẫn memory) — chỉ dẫn **cách** đọc/ghi memory layer on-demand | Có điều kiện (v2.0.0) |
672
+
673
+ ### Cái Claude Code đọc theo yêu cầu qua rule references
674
+
675
+ Mỗi file rule link tới standard tương ứng qua mục `## Reference`. Claude chỉ đọc standard liên quan cho task hiện tại:
676
+
677
+ - `claudeos-core/standard/**` coding pattern, dụ ✅/❌, convention đặt tên
678
+ - `claudeos-core/database/**` DB schema (cho query, mapper, migration)
679
+ - `claudeos-core/memory/**` (v2.0.0) L4 team knowledge layer; **không** auto-load (sẽ quá nhiễu ở mỗi hội thoại). Thay vào đó, các rule `60.memory/*` chỉ dẫn Claude *khi nào* Read các file này: ở đầu session (lướt qua `decision-log.md` gần đây + `failure-patterns.md` importance cao), và append theo yêu cầu khi ra quyết định hoặc gặp lỗi lặp lại.
680
+
681
+ `00.standard-reference.md` đóng vai trò như danh bạ của tất cả file standard để phát hiện những standard không có rule tương ứng.
682
+
683
+ ### Cái Claude Code KHÔNG đọc (tiết kiệm context)
684
+
685
+ Các folder này được loại trừ rõ ràng qua mục `DO NOT Read` trong rule standard-reference:
686
+
687
+ | Folder | Lý do loại trừ |
688
+ |---|---|
689
+ | `claudeos-core/plan/` | Master Plan backup từ các dự án legacy (v2.0.x và trước đó). Không tạo ở v2.1.0. Nếu có mặt, Claude Code sẽ không tự động load — chỉ đọc theo yêu cầu. |
690
+ | `claudeos-core/generated/` | JSON metadata build, prompt, Pass marker, translation cache, `.staged-rules/`. Không dùng cho coding. |
691
+ | `claudeos-core/guide/` | Hướng dẫn onboarding cho con người. |
692
+ | `claudeos-core/mcp-guide/` | Tài liệu MCP server. Không dùng cho coding. |
693
+ | `claudeos-core/memory/` (auto-load) | **Auto-load bị tắt** chủ đích — sẽ làm phồng context ở mỗi hội thoại. Đọc theo yêu cầu qua rule `60.memory/*` thay thế ( dụ: scan `failure-patterns.md` lúc bắt đầu session). Luôn commit các file này. |
694
+
695
+ ---
696
+
697
+ ## Quy Trình Hằng Ngày
698
+
699
+ ### Sau Khi Cài Đặt
700
+
701
+ ```
702
+ # Chỉ dùng Claude Code như bình thường — nó tham chiếu standard của bạn tự động:
703
+ "Tạo CRUD cho domain order"
704
+ "Thêm API cập nhật profile người dùng"
705
+ "Refactor code này khớp với pattern dự án"
706
+ ```
707
+
708
+ ### Sau Khi Sửa Standard Thủ Công
709
+
710
+ ```bash
711
+ # Sau khi sửa file standard hoặc rules:
712
+ npx claudeos-core refresh
713
+
714
+ # Xác minh mọi thứ nhất quán
715
+ npx claudeos-core health
716
+ ```
717
+
718
+ ### Khi Docs Bị Hỏng
719
+
720
+ ```bash
721
+ # Khuyến nghị v2.1.0: dùng git để khôi phục (vì master plan không còn
722
+ # được tạo nữa). Commit tài liệu được tạo thường xuyên để có thể rollback
723
+ # từng file cụ thể mà không cần tạo lại:
724
+ git checkout HEAD -- .claude/rules/ claudeos-core/
725
+
726
+ # Legacy (dự án v2.0.x vẫn còn claudeos-core/plan/):
727
+ npx claudeos-core restore
728
+ ```
729
+
730
+ ### Bảo Trì Memory Layer (v2.0.0)
731
+
732
+ L4 Memory layer (`claudeos-core/memory/`) tích lũy kiến thức team qua các session. Ba CLI subcommand giữ nó khỏe mạnh:
733
+
734
+ ```bash
735
+ # Compact: áp dụng chính sách compaction 4 giai đoạn (chạy định kỳ — ví dụ hàng tháng)
736
+ npx claudeos-core memory compact
737
+ # Stage 1: tóm tắt các entry (>30 ngày, body → một dòng)
738
+ # Stage 2: merge heading trùng (tổng frequency, giữ fix mới nhất)
739
+ # Stage 3: bỏ importance thấp + (importance <3 lastSeen >60 ngày)
740
+ # Stage 4: áp dụng giới hạn 400 dòng mỗi file (bỏ importance thấp cũ nhất trước)
741
+
742
+ # Score: xếp hạng lại các entry trong failure-patterns.md theo importance
743
+ npx claudeos-core memory score
744
+ # importance = round(frequency × 1.5 + recency × 5), giới hạn 10
745
+ # Chạy sau khi append vài failure pattern mới
746
+
747
+ # Propose-rules: nổi bật các candidate rule addition từ failure lặp lại
748
+ npx claudeos-core memory propose-rules
749
+ # Đọc các entry failure-patterns.md với frequency 3
750
+ # Tính confidence (sigmoid trên weighted evidence × anchor multiplier)
751
+ # Ghi proposal vào memory/auto-rule-update.md (KHÔNG tự động áp dụng)
752
+ # Confidence 0.70 đáng xem xét nghiêm túc; nếu accept sửa rule + log quyết định
753
+
754
+ # v2.1.0: `memory --help` giờ route tới help subcommand (trước đây hiển thị top-level)
755
+ npx claudeos-core memory --help
756
+ ```
757
+
758
+ > **Fix v2.1.0:** `memory score` không còn để lại dòng `importance` trùng lặp sau lần chạy đầu (trước đây dòng được tự chấm điểm được thêm ở trên trong khi dòng nguyên bản bị bỏ lại bên dưới). Marker summary Stage 1 của `memory compact` giờ là markdown list item đúng định dạng (`- _Summarized on ..._`) nên render sạch và được parse lại đúng ở các lần compact sau.
759
+
760
+ Khi nào ghi vào memory (Claude làm theo yêu cầu, nhưng bạn cũng có thể sửa thủ công):
761
+ - **`decision-log.md`** append entry mới bất cứ khi nào bạn chọn giữa các pattern cạnh tranh, chọn thư viện, định nghĩa convention team, hoặc quyết định KHÔNG làm gì đó. Chỉ append; không bao giờ sửa entry lịch sử.
762
+ - **`failure-patterns.md`** — append vào **lần xuất hiện thứ hai** của lỗi lặp lại hoặc nguyên nhân không hiển nhiên. Lỗi lần đầu không cần entry.
763
+ - `compaction.md` `auto-rule-update.md` — được tạo/quản lý bởi các CLI subcommand trên; không sửa bằng tay.
764
+
765
+ ### Tích Hợp CI/CD
766
+
767
+ ```yaml
768
+ # dụ GitHub Actions
769
+ - run: npx claudeos-core validate
770
+ # Exit code 1 chặn PR
771
+
772
+ # Tùy chọn: housekeeping memory hàng tháng (workflow cron riêng)
773
+ - run: npx claudeos-core memory compact
774
+ - run: npx claudeos-core memory score
775
+ ```
776
+
777
+ ---
778
+
779
+ ## Khác Biệt Ra Sao?
780
+
781
+ ### So với Các Công Cụ Claude Code Khác
782
+
783
+ | | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
784
+ |---|---|---|---|---|---|
785
+ | **Cách tiếp cận** | Code phân tích trước, rồi LLM tạo | Preset config dựng sẵn | LLM thiết kế agent team | LLM tạo spec doc | LLM viết CLAUDE.md |
786
+ | **Đọc source code** | Phân tích tĩnh deterministic | | | (LLM đọc) | (LLM đọc) |
787
+ | **Phát hiện stack** | Code xác nhận (ORM, DB, build tool, pkg manager) | N/A (stack-agnostic) | LLM đoán | LLM đoán | LLM đoán |
788
+ | **Phát hiện domain** | Code xác nhận (Java 5 pattern, Kotlin CQRS, Next.js FSD) | N/A | LLM đoán | N/A | N/A |
789
+ | **Cùng dự án cùng kết quả** | Phân tích deterministic | (file tĩnh) | (LLM thay đổi) | (LLM thay đổi) | (LLM thay đổi) |
790
+ | **Xử lý dự án lớn** | Chia domain group (4 domain / 40 file mỗi group) | N/A | Không chia | Không chia | Giới hạn context window |
791
+ | **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ file) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec document | CLAUDE.md (1 file) |
792
+ | **Vị trí output** | `.claude/rules/` (tự load bởi Claude Code) | `.claude/` đủ loại | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
793
+ | **Xác minh sau khi tạo** | ✅ 5 validator tự động | ❌ | ❌ | ❌ | ❌ |
794
+ | **Output đa ngôn ngữ** | 10 ngôn ngữ | ❌ | ❌ | ❌ | ❌ |
795
+ | **Multi-stack** | Backend + Frontend đồng thời | Stack-agnostic | | | Một phần |
796
+ | **Memory layer bền vững** | ✅ L4 — decision log + failure pattern + đề xuất rule chấm điểm tự động (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
797
+ | **Điều phối agent** | | 28 agent | ✅ 6 pattern | ❌ | ❌ |
798
+
799
+ ### Khác biệt chính trong một câu
800
+
801
+ **Các công cụ khác cho Claude "instructions tốt nói chung". ClaudeOS-Core cho Claude "instructions trích xuất từ code thực tế của bạn".**
802
+
803
+ Đó do Claude Code ngừng tạo code JPA trong dự án MyBatis,
804
+ ngừng dùng `success()` khi codebase của bạn dùng `ok()`,
805
+ và ngừng tạo thư mục `user/controller/` khi dự án của bạn dùng `controller/user/`.
806
+
807
+ ### Bổ sung, không cạnh tranh
808
+
809
+ ClaudeOS-Core tập trung vào **rule standard đặc thù dự án**.
810
+ Các công cụ khác tập trung vào **điều phối agentworkflow**.
811
+
812
+ Bạn thể dùng ClaudeOS-Core để tạo rule cho dự án, rồi dùng ECC hoặc Harness bên trên cho agent team và tự động hóa workflow. Chúng giải quyết các vấn đề khác nhau.
813
+
814
+ ---
815
+
816
+ ## FAQ
817
+
818
+ **Q: sửa source code của tôi không?**
819
+ Không. chỉ tạo `CLAUDE.md`, `.claude/rules/`, và `claudeos-core/`. Code hiện của bạn không bao giờ bị sửa.
820
+
821
+ **Q: Chi phí bao nhiêu?**
822
+ gọi `claude -p` vài lần qua 4 pass. Ở split mode v2.1.0, chỉ riêng Pass 3 đã mở rộng thành 4–14+ stage tùy theo kích thước dự án (xem [Tự Động Mở Rộng](#tự-động-mở-rộng-theo-kích-thước-dự-án)). Một dự án nhỏ điển hình (1–15 domain) dùng tổng cộng 8–9 lời gọi `claude -p`; dự án 18 domain dùng 11; dự án 60 domain dùng 15–17. Mỗi stage chạy với context window mới chi phí token mỗi lời gọi thực ra thấp hơn Pass 3 lời-gọi-đơn, không stage nào phải giữ toàn bộ cây file trong một context. Khi `--lang` khác tiếng Anh, đường fallback tĩnh thể gọi thêm vài `claude -p` để dịch; kết quả được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên các lần chạy sau dùng lại. Vẫn nằm trong mức sử dụng Claude Code bình thường.
823
+
824
+ **Q: Pass 3 split mode tại sao được thêm v2.1.0?**
825
+ Trước v2.1.0, Pass 3 thực hiện một lời gọi `claude -p` đơn phải phát ra toàn bộ cây file được tạo (`CLAUDE.md`, standards, rules, skills, guides — thường 30–60 file) trong một response. Điều này hoạt động trên dự án nhỏ nhưng luôn gặp lỗi `Prompt is too long` do tích lũy output ~5 domain. Lỗi không thể dự đoán từ kích thước input — nó phụ thuộc vào mức độ dài dòng của mỗi file được tạo, thể ập đến cùng một dự án một cách không ổn định. Split mode né vấn đề này về cấu trúc: Pass 3 được chia thành các stage tuần tự (`3a` `3b-core` `3b-N` `3c-core` `3c-N` → `3d-aux`), mỗi cái một lời gọi `claude -p` riêng với context window mới. Tính nhất quán xuyên stage được bảo tồn bởi `pass3a-facts.md`, fact sheet đã chắt lọc 5–10 KB mọi stage sau tham chiếu thay đọc lại `pass2-merged.json`. Marker `pass3-complete.json` mang mảng `groupsCompleted` để crash trong `3c-2` resume từ `3c-2` (không phải từ `3a`), tránh chi phí token gấp đôi.
826
+ **Q: Tôi có nên commit các file được tạo vào Git không?**
827
+ Có, khuyến nghị. Team của bạn thể chia sẻ cùng standard Claude Code. Hãy xem xét thêm `claudeos-core/generated/` vào `.gitignore` (JSON phân tích có thể tạo lại).
828
+
829
+ **Q: Còn dự án mixed-stack (ví dụ Java backend + React frontend)?**
830
+ Được hỗ trợ hoàn toàn. ClaudeOS-Core tự phát hiện cả hai stack, gắn tag domain là `backend` hoặc `frontend`, và dùng prompt phân tích theo stack cho mỗi cái. Pass 2 merge mọi thứ, và Pass 3 tạo cả standard backend và frontend qua các split stage — domain backend rơi vào một số batch 3b/3c, domain frontend vào các batch khác, tất cả đều tham chiếu cùng `pass3a-facts.md` để có tính nhất quán.
831
+
832
+ **Q: hoạt động với monorepo Turborepo / pnpm workspaces / Lerna không?**
833
+ Có. ClaudeOS-Core phát hiện `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, hoặc `package.json#workspaces` và tự động quét file `package.json` của sub-package để tìm dependency framework/ORM/DB. Quét domain bao phủ pattern `apps/*/src/` và `packages/*/src/`. Chạy từ root monorepo.
834
+
835
+ **Q: Chạy lại thì chuyện gì xảy ra?**
836
+ Nếu kết quả Pass 1/2 trước đó tồn tại, một prompt tương tác cho bạn chọn: **Continue** (tiếp tục từ chỗ dừng) hoặc **Fresh** (xóa tất cả và bắt đầu lại). Dùng `--force` để bỏ qua prompt và luôn bắt đầu mới. Ở split mode v2.1.0, resume Pass 3 hoạt động ở mức độ stage — nếu lần chạy crash trong `3c-2`, `init` tiếp theo resume từ `3c-2` thay vì bắt đầu lại từ `3a` (sẽ nhân đôi chi phí token). Marker `pass3-complete.json` ghi `mode: "split"` cộng với mảng `groupsCompleted` để điều khiển logic này.
837
+
838
+ **Q: NestJS template riêng hay dùng của Express?**
839
+ NestJS dùng template `node-nestjs` chuyên dụng với các danh mục phân tích đặc thù NestJS: decorator `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI container, pattern CQRS, và `Test.createTestingModule`. Dự án Express dùng template `node-express` riêng biệt.
840
+
841
+ **Q: Còn dự án Vue / Nuxt?**
842
+ Vue/Nuxt dùng template `vue-nuxt` chuyên dụng bao phủ Composition API, `<script setup>`, defineProps/defineEmits, Pinia store, `useFetch`/`useAsyncData`, Nitro server route, và `@nuxt/test-utils`. Dự án Next.js/React dùng template `node-nextjs`.
843
+
844
+ **Q: hỗ trợ Kotlin không?**
845
+ Có. ClaudeOS-Core tự phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. Nó dùng template `kotlin-spring` chuyên dụng với phân tích đặc thù Kotlin (data class, sealed class, coroutine, extension function, MockK, v.v.).
846
+
847
+ **Q: Còn kiến trúc CQRS / BFF?**
848
+ Được hỗ trợ hoàn toàn cho dự án Kotlin multi-module. ClaudeOS-Core đọc `settings.gradle.kts`, phát hiện kiểu module (command, query, bff, integration) từ tên module, và nhóm cùng domain qua các module Command/Query. Các standard được tạo bao gồm rule riêng cho command controller vs query controller, pattern BFF/Feign, và convention giao tiếp liên module.
849
+
850
+ **Q: Còn Gradle multi-module monorepo?**
851
+ ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất kể độ sâu nesting. Kiểu module được suy ra từ convention đặt tên (ví dụ `reservation-command-server` domain: `reservation`, type: `command`). Các thư viện shared (`shared-lib`, `integration-lib`) cũng được phát hiện.
852
+
853
+ **Q: L4 Memory layer là gì (v2.0.0)? Tôi có nên commit `claudeos-core/memory/` không?**
854
+ Có — **luôn commit** `claudeos-core/memory/`. Đó là kiến thức team bền vững: `decision-log.md` ghi lại *lý do* đằng sau các lựa chọn kiến trúc (chỉ append), `failure-patterns.md` đăng ký các lỗi lặp lại với importance score để session tương lai tránh, `compaction.md` định nghĩa chính sách compaction 4 giai đoạn, và `auto-rule-update.md` thu thập các đề xuất cải tiến rule do máy tạo. Khác với rule (tự load theo path), file memory là **on-demand** — Claude chỉ đọc khi rule `60.memory/*` hướng dẫn (ví dụ: scan failure importance cao lúc bắt đầu session). Điều này giữ chi phí context thấp trong khi bảo toàn kiến thức dài hạn.
855
+
856
+ **Q: Nếu Pass 4 lỗi thì sao?**
857
+ Pipeline tự động (`npx claudeos-core init`) static fallback: nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, nó scaffold memory layer trực tiếp qua `lib/memory-scaffold.js`. Khi `--lang` khác tiếng Anh, static fallback **phải** dịch qua CLI `claude` — nếu cũng lỗi, lần chạy sẽ abort với `InitError` (không fallback âm thầm về English). Chạy lại khi `claude` đã xác thực, hoặc dùng `--lang en` để bỏ qua dịch. Kết quả dịch được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên lần chạy sau dùng lại.
858
+
859
+ **Q: `memory compact` / `memory score` / `memory propose-rules` làm gì?**
860
+ Xem mục [Bảo Trì Memory Layer](#bảo-trì-memory-layer-v200) ở trên. Phiên bản ngắn: `compact` chạy chính sách 4 giai đoạn (tóm tắt cũ, merge trùng, bỏ importance thấp cũ, áp dụng giới hạn 400 dòng); `score` xếp hạng lại `failure-patterns.md` theo importance (frequency × recency); `propose-rules` nổi bật candidate rule addition từ failure lặp lại vào `auto-rule-update.md` (không tự động áp dụng — xem và accept/reject thủ công).
861
+
862
+ **Q: Tại sao `--force` (hoặc chế độ "fresh" resume) xóa `.claude/rules/`?**
863
+ v2.0.0 thêm ba silent-failure guard cho Pass 3 (Guard 3 bao phủ hai biến thể output không đầy đủ: H2 cho `guide/` và H1 cho `standard/skills`). Guard 1 ("partial staged-rules move") và Guard 3 ("incomplete output — missing/empty guide files or missing standard sentinel / empty skills") không phụ thuộc vào rule hiện có, nhưng Guard 2 ("zero rules detected") thì có — nó kích hoạt khi Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/` (nơi chính sách sensitive-path của Claude Code chặn). Rule cũ từ lần chạy trước sẽ khiến Guard 2 false-negative — nên `--force`/`fresh` xóa `.claude/rules/` để đảm bảo phát hiện sạch. **Sửa rule thủ công sẽ bị mất** dưới `--force`/`fresh`; hãy backup trước nếu cần. (Lưu ý v2.1.0: Guard 3 H1 không còn kiểm tra `plan/` vì master plan không còn được tạo.)
864
+
865
+ **Q: `claudeos-core/generated/.staged-rules/` tại sao tồn tại?**
866
+ Chính sách sensitive-path của Claude Code từ chối ghi trực tiếp vào `.claude/` từ subprocess `claude -p` (ngay cả với `--dangerously-skip-permissions`). v2.0.0 đi vòng bằng cách cho prompt Pass 3/4 chuyển hướng mọi ghi `.claude/rules/` vào thư mục staging; orchestrator Node.js (không chịu chính sách đó) sau đó di chuyển cây staged vào `.claude/rules/` sau mỗi pass. Điều này trong suốt với người dùng — thư mục được tự tạo, tự dọn, và tự di chuyển. Nếu lần chạy trước crash giữa chừng di chuyển, lần chạy sau xóa staging dir trước khi thử lại. Ở split mode v2.1.0, stage runner di chuyển staged rules vào `.claude/rules/` sau mỗi stage (không chỉ cuối cùng), nên crash giữa Pass 3 vẫn để lại rule của các stage đã hoàn thành trước đó tại chỗ.
867
+
868
+ **Q: Tôi có thể chạy Pass 3 thủ công thay vì `npx claudeos-core init` không?**
869
+ Có cho dự án nhỏ (≤5 domain) — hướng dẫn thủ công lời-gọi-đơn ở [Step 6](#step-6-pass-3--tạo-toàn-bộ-tài-liệu-chia-thành-nhiều-stage) vẫn hoạt động. Cho dự án lớn hơn bạn nên dùng `npx claudeos-core init` vì split runner là cái điều phối thực thi từng stage với context mới, xử lý chia batch ở ≥16 domain, ghi shape marker `pass3-complete.json` đúng (`mode: "split"` + `groupsCompleted`), và di chuyển staged rules giữa các stage. Tái tạo điều phối đó bằng tay có thể được nhưng mệt mỏi. Nếu bạn có lý do chạy stage thủ công (ví dụ: debug một stage cụ thể), bạn có thể template `pass3-prompt.md` với directive `STAGE:` phù hợp và đưa cho `claude -p` trực tiếp — nhưng nhớ di chuyển `.staged-rules/` sau mỗi stage và tự cập nhật marker.
870
+
871
+ **Q: Dự án của tôi là upgrade từ v2.0.x và có thư mục `claudeos-core/plan/` hiện hữu. Tôi phải làm gì?**
872
+ Không cần cả — công cụ v2.1.0 bỏ qua `plan/` khi nó vắng mặt hoặc rỗng, và `plan-validator` vẫn xử lý các dự án legacy có thư mục `plan/` đã điền để tương thích ngược. Bạn có thể xóa an toàn `claudeos-core/plan/` nếu không cần master plan backup (git history dù sao cũng là backup tốt hơn). Nếu giữ `plan/`, chạy `npx claudeos-core init` sẽ không cập nhật nó — nội dung mới không được tổng hợp vào master plan ở v2.1.0. Công cụ xác minh xử lý sạch cả hai trường hợp.
873
+
874
+ ---
875
+
876
+ ## Cấu Trúc Template
877
+
878
+ ```
879
+ pass-prompts/templates/
880
+ ├── common/ # header/footer dùng chung + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
881
+ │ ├── header.md # Vai trò + chỉ thị định dạng output (tất cả pass)
882
+ │ ├── pass3-footer.md # Chỉ thị health-check sau Pass 3 + 5 khối guardrail CRITICAL (v2.2.0)
883
+ │ ├── pass3-phase1.md # Khối "Read Once, Extract Facts" với Rule A-E (v2.1.0)
884
+ │ ├── pass4.md # Prompt scaffolding memory (v2.0.0)
885
+ ├── staging-override.md # Chuyển hướng write .claude/rules/** sang .staged-rules/** (v2.0.0)
886
+ ├── claude-md-scaffold.md # Template CLAUDE.md 8 section tất định (v2.2.0)
887
+ └── lang-instructions.json # Chỉ thị output theo ngôn ngữ (10 ngôn ngữ)
888
+ ├── java-spring/ # Java / Spring Boot
889
+ ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
890
+ ├── node-express/ # Node.js / Express
891
+ ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
892
+ ├── node-fastify/ # Node.js / Fastify
893
+ ├── node-nextjs/ # Next.js / React (App Router, RSC)
894
+ ├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
895
+ ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
896
+ ├── angular/ # Angular
897
+ ├── python-django/ # Python / Django (DRF)
898
+ ├── python-fastapi/ # Python / FastAPI
899
+ └── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
900
+ ```
901
+
902
+ `plan-installer` tự phát hiện các stack của bạn, rồi lắp ráp prompt theo kiểu. NestJS, Vue/Nuxt, Vite SPA và Flask mỗi cái dùng template chuyên dụng với danh mục phân tích đặc thù framework (ví dụ: `@Module`/`@Injectable`/Guards cho NestJS; `<script setup>`/Pinia/useFetch cho Vue; client-side routing/`VITE_` env cho Vite; Blueprint/`app.factory`/Flask-SQLAlchemy cho Flask). Cho dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` riêng biệt được tạo, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo của cả hai stack. Ở v2.1.0, template Pass 3 được thêm `common/pass3-phase1.md` (block "Read Once, Extract Facts" với Rules A–E) vào đầu trước khi được cắt theo từng stage split-mode. Pass 4 dùng template chung `common/pass4.md` (memory scaffolding) bất kể stack.
903
+
904
+ **Trong v2.2.0**, prompt Pass 3 cũng chèn inline `common/claude-md-scaffold.md` (template CLAUDE.md 8 section tất định) vào giữa khối phase1 và thân stack-specific — điều này cố định cấu trúc section để CLAUDE.md được tạo ra không bị drift giữa các project, trong khi nội dung vẫn thích ứng theo project. Template được viết **English-first**; việc inject ngôn ngữ từ `lang-instructions.json` chỉ thị LLM dịch tiêu đề section và văn xuôi sang ngôn ngữ output đích tại thời điểm emit.
905
+
906
+ ---
907
+
908
+ ## Hỗ Trợ Monorepo
909
+
910
+ ClaudeOS-Core tự động phát hiện setup monorepo JS/TS và quét sub-package tìm dependency.
911
+
912
+ **Các monorepo marker được hỗ trợ** (tự phát hiện):
913
+ - `turbo.json` (Turborepo)
914
+ - `pnpm-workspace.yaml` (pnpm workspaces)
915
+ - `lerna.json` (Lerna)
916
+ - `package.json#workspaces` (npm/yarn workspaces)
917
+
918
+ **Chạy từ root monorepo** — ClaudeOS-Core đọc `apps/*/package.json` và `packages/*/package.json` để khám phá dependency framework/ORM/DB qua các sub-package:
919
+
920
+ ```bash
921
+ cd my-monorepo
922
+ npx claudeos-core init
923
+ ```
924
+
925
+ **Những được phát hiện:**
926
+ - Dependency từ `apps/web/package.json` (ví dụ: `next`, `react`) → frontend stack
927
+ - Dependency từ `apps/api/package.json` ( dụ: `express`, `prisma`) backend stack
928
+ - Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
929
+ - Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` ( dụ: `services/*`)
930
+
931
+ **Quét domain cũng bao phủ layout monorepo:**
932
+ - `apps/api/src/modules/*/` và `apps/api/src/*/` cho backend domain
933
+ - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho frontend domain
934
+ - `packages/*/src/*/` cho shared package domain
935
+
936
+ ```
937
+ my-monorepo/ Chạy đây: npx claudeos-core init
938
+ ├── turbo.json ← Tự phát hiện là Turborepo
939
+ ├── apps/
940
+ │ ├── web/ ← Next.js phát hiện từ apps/web/package.json
941
+ │ │ ├── app/dashboard/ ← Frontend domain được phát hiện
942
+ │ │ └── package.json ← { "dependencies": { "next": "^14" } }
943
+ │ └── api/ ← Express phát hiện từ apps/api/package.json
944
+ │ ├── src/modules/users/ ← Backend domain được phát hiện
945
+ │ └── package.json ← { "dependencies": { "express": "^4" } }
946
+ ├── packages/
947
+ │ ├── db/ Drizzle phát hiện từ packages/db/package.json
948
+ │ └── ui/
949
+ └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
950
+ ```
951
+
952
+ > **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module dùng `settings.gradle.kts` (xem [Phát Hiện Domain Kotlin Multi-Module](#phát-hiện-domain-kotlin-multi-module) ở trên) và không cần marker monorepo JS.
953
+
954
+ ## Xử Lý Sự Cố
955
+
956
+ **"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không trong PATH. Xem [tài liệu Claude Code](https://code.claude.com/docs/en/overview).
957
+
958
+ **"npm install failed"** — Phiên bản Node.js có thể quá thấp. Yêu cầu v18+.
959
+
960
+ **"0 domains detected"** — Cấu trúc dự án của bạn có thể không chuẩn. Xem các pattern phát hiện ở trên cho stack của bạn.
961
+
962
+ **"0 domains detected" trên dự án Kotlin** — Đảm bảo dự án có `build.gradle.kts` (hoặc `build.gradle` với kotlin plugin) ở root, và file source nằm dưới `**/src/main/kotlin/`. Với dự án multi-module, đảm bảo `settings.gradle.kts` chứa các lệnh `include()`. Dự án Kotlin single-module (không có `settings.gradle`) cũng được hỗ trợ — domain được trích xuất từ cấu trúc package/class dưới `src/main/kotlin/`.
963
+
964
+ **"Language detected as java instead of kotlin"** — ClaudeOS-Core kiểm tra root `build.gradle(.kts)` trước, rồi tới file build submodule. Nếu file build root dùng plugin `java` không có `kotlin`, nhưng submodule dùng Kotlin, công cụ kiểm tra tối đa 5 file build submodule làm fallback. Nếu vẫn không phát hiện, đảm bảo ít nhất một `build.gradle.kts` chứa `kotlin("jvm")` hoặc `org.jetbrains.kotlin`.
965
+
966
+ **"CQRS not detected"** — Phát hiện kiến trúc dựa trên tên module chứa từ khóa `command` và `query`. Nếu module của bạn dùng tên khác (ví dụ: `write-server`, `read-server`), kiến trúc CQRS sẽ không tự phát hiện. Bạn có thể chỉnh thủ công prompt được tạo sau khi plan-installer chạy.
967
+
968
+ **"Pass 3 produced 0 rule files under .claude/rules/" (v2.0.0)** — Guard 2 kích hoạt: Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/`, nơi chính sách sensitive-path của Claude Code chặn ghi. Chạy lại với `npx claudeos-core init --force`. Nếu lỗi vẫn xuất hiện, kiểm tra `claudeos-core/generated/pass3-prompt.md` để xác nhận block `staging-override.md` ở đầu.
969
+
970
+ **"Pass 3 finished but N rule file(s) could not be moved from staging" (v2.0.0)** — Guard 1 kích hoạt: việc di chuyển staging gặp khóa file tạm thời (thường là Windows antivirus hoặc file-watcher). Marker KHÔNG được ghi, nên lần chạy `init` tiếp theo tự động retry Pass 3. Chỉ cần chạy lại `npx claudeos-core init`.
971
+
972
+ **"Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty" (v2.0.0)** — Guard 3 (H2) kích hoạt: Claude bị cắt giữa chừng sau khi viết CLAUDE.md + rules nhưng trước khi hoàn thành (hoặc bắt đầu) mục `claudeos-core/guide/` (mong đợi 9 file). Cũng kích hoạt trên file chỉ có BOM hoặc chỉ có whitespace (heading đã viết nhưng body bị cắt). Không có guard này, completion marker vẫn được ghi, để `guide/` trống vĩnh viễn ở các lần chạy sau. Marker KHÔNG được ghi ở đây, nên lần chạy `init` tiếp theo retry Pass 3 từ cùng kết quả Pass 2. Nếu cứ lặp lại, chạy lại với `npx claudeos-core init --force` để tạo lại từ đầu.
973
+
974
+ **"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.0, cập nhật v2.1.0)** — Guard 3 (H1) kích hoạt: Claude bị cắt SAU `claudeos-core/guide/` nhưng trước (hoặc trong lúc) `claudeos-core/standard/` hoặc `claudeos-core/skills/`. Yêu cầu: (a) `standard/00.core/01.project-overview.md` tồn tại và không rỗng (sentinel được ghi bởi mọi prompt Pass 3 của mọi stack), (b) `skills/` có ≥1 `.md` không rỗng. `database/` và `mcp-guide/` bị loại trừ có chủ đích (một số stack tạo ra 0 file hợp lệ). `plan/` không còn được kiểm tra kể từ v2.1.0 (master plan đã bị loại bỏ). Đường khôi phục như Guard 3 (H2): chạy lại `init`, hoặc `--force` nếu lỗi vẫn tiếp diễn.
975
+
976
+ **"Pass 3 split stage crashed partway through (v2.1.0)"** — Khi một trong các split stage (ví dụ: `3b-1`, `3c-2`) lỗi giữa chừng, marker mức stage KHÔNG được ghi, nhưng các stage đã hoàn thành ĐƯỢC ghi trong `pass3-complete.json.groupsCompleted`. Lần chạy `init` tiếp theo đọc mảng này và resume từ stage chưa hoàn thành đầu tiên, bỏ qua mọi công việc đã hoàn thành trước đó. Bạn không cần làm gì thủ công — chỉ cần chạy lại `npx claudeos-core init`. Nếu resume cứ lỗi ở cùng stage, kiểm tra `claudeos-core/generated/pass3-prompt.md` tìm nội dung bị lỗi, rồi thử `--force` để khởi động lại đầy đủ. Shape `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) ổn định; một marker thiếu hoặc lỗi sẽ khiến toàn bộ Pass 3 chạy lại từ `3a`.
977
+
978
+ **"Pass 3 stale marker (shape mismatch) — treating as incomplete" (v2.1.0)** — Một `pass3-complete.json` từ lần chạy lời-gọi-đơn pre-v2.1.0 đang được diễn giải theo luật split-mode mới. Kiểm tra shape tìm `mode: "split"` và mảng `groupsCompleted`; nếu thiếu, marker được coi là partial và Pass 3 chạy lại ở split mode. Nếu bạn upgrade từ v2.0.x, điều này xảy ra một lần là mong đợi — lần chạy tiếp theo sẽ ghi shape marker đúng. Không cần hành động.
979
+
980
+ **"pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running" (v2.0.0)** — Log thông tin, không phải lỗi. Khi resume, `init` giờ parse và validate `pass2-merged.json` (yêu cầu ≥5 top-level key, phản chiếu ngưỡng `INSUFFICIENT_KEYS` của `pass-json-validator`). Skeleton `{}` hoặc JSON lỗi từ lần chạy crash trước tự động bị xóa và Pass 2 chạy lại. Không cần hành động thủ công — pipeline tự chữa. Nếu cứ lặp lại, kiểm tra `claudeos-core/generated/pass2-prompt.md` và retry với `--force`.
981
+
982
+ **"Static fallback failed while translating to lang='ko'" (v2.0.0)** — Khi `--lang` khác tiếng Anh, Pass 4 / static fallback / gap-fill đều yêu cầu CLI `claude` để dịch. Nếu dịch lỗi (CLI chưa xác thực, timeout mạng, hoặc strict validation từ chối output: <40% độ dài, code fence hỏng, mất frontmatter, v.v.), lần chạy abort thay vì âm thầm ghi tiếng Anh. Sửa: đảm bảo `claude` đã xác thực, hoặc chạy lại với `--lang en` để bỏ qua dịch.
983
+
984
+ **"pass4-memory.json exists but memory/ is empty" (v2.0.0)** — Lần chạy trước đã ghi marker nhưng người dùng (hoặc script dọn dẹp) xóa `claudeos-core/memory/`. CLI tự phát hiện marker cũ này và chạy lại Pass 4 ở lần `init` tiếp theo. Không cần hành động thủ công.
985
+
986
+ **"pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4" (v2.0.0)** — Log thông tin, không phải lỗi. Nội dung marker Pass 4 giờ được validate (`passNum === 4` + mảng `memoryFiles` không rỗng), không chỉ sự tồn tại. Một lỗi Claude một phần đã phát ra thứ như `{"error":"timeout"}` làm thân marker trước đây sẽ được chấp nhận như thành công mãi mãi; giờ marker bị xóa và Pass 4 tự chạy lại.
987
+
988
+ **"Could not delete stale pass3-complete.json / pass4-memory.json" InitError (v2.0.0)** — `init` phát hiện marker cũ (Pass 3: CLAUDE.md bị xóa bên ngoài; Pass 4: memory/ rỗng hoặc thân marker lỗi) và thử xóa, nhưng gọi `unlinkSync` lỗi — thường vì Windows antivirus hoặc file-watcher (editor, IDE indexer) đang giữ file handle. Trước đây điều này bị bỏ qua âm thầm, khiến pipeline bỏ qua pass và dùng lại marker cũ. Giờ nó lỗi rõ ràng. Sửa: đóng mọi editor/AV scanner có thể đang mở file, rồi chạy lại `npx claudeos-core init`.
989
+
990
+ **"CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation" InitError (v2.0.0)** — Bạn đang set env var chỉ dành cho test `CLAUDEOS_SKIP_TRANSLATION=1` trong shell (có thể là sót từ setup CI/test) VÀ chọn `--lang` khác tiếng Anh. Env var này short-circuit đường dịch mà static-fallback và gap-fill của Pass 4 phụ thuộc để output không phải tiếng Anh. `init` phát hiện xung đột lúc chọn ngôn ngữ và abort ngay lập tức (thay vì crash giữa Pass-4 với lỗi lồng khó hiểu). Sửa: hoặc `unset CLAUDEOS_SKIP_TRANSLATION` trước khi chạy, hoặc dùng `npx claudeos-core init --lang en`.
991
+
992
+ **Cảnh báo "⚠️ v2.2.0 upgrade detected" (v2.2.0)** — `CLAUDE.md` hiện tại được sinh bởi phiên bản trước v2.2.0. Regeneration mặc định ở resume mode sẽ skip các file existing dưới Rule B idempotency, nên các cải tiến cấu trúc v2.2.0 (CLAUDE.md scaffold 8-section, per-file paths trong `40.infra/*`, port accuracy dựa trên `.env.example`, redesign Section 8 `Common Rules & Memory (L4)` (thiết kế lại với hai sub-section: Common Rules · L4 Memory), hàng rule `60.memory/*`, forward-reference `04.doc-writing-guide.md`) sẽ KHÔNG được áp dụng. Fix: chạy lại với `npx claudeos-core init --force`. Nó overwrite file generated (`CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, `claudeos-core/skills/`, `claudeos-core/guide/`) đồng thời giữ nguyên `claudeos-core/memory/` (decision-log, failure-patterns bạn đã tích luỹ — append-only). Commit project trước nếu muốn diff các overwrite.
993
+
994
+ **Port trong CLAUDE.md khác với `.env.example` (v2.2.0)** — Parser `.env` mới của stack-detector (`lib/env-parser.js`) đọc `.env.example` trước (canonical, committed), rồi các variant `.env` làm fallback. Biến port được nhận diện: `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT`, v.v. Với Spring Boot, `server.port` trong `application.yml` vẫn ưu tiên hơn `.env` (config framework-native thắng). Nếu project dùng tên biến env bất thường, đổi thành convention hoặc mở issue để mở rộng `PORT_VAR_KEYS`. Framework default (Vite 5173, Next.js 3000, Django 8000) chỉ dùng khi cả direct detection lẫn `.env` đều im lặng.
995
+
996
+ **Giá trị secret bị redact thành `***REDACTED***` trong docs generated (v2.2.0)** — Hành vi mong đợi. Parser `.env` v2.2.0 tự động redact giá trị của biến khớp các pattern `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` trước khi tới bất kỳ generator nào. Đây là defense-in-depth chống secret bị commit nhầm vào `.env.example`. `DATABASE_URL` giữ nguyên vì back-compat nhận diện DB của stack-detector. Nếu thấy `***REDACTED***` trong `CLAUDE.md` generated thì là bug — giá trị redacted không nên tới bảng; vui lòng báo issue. Config runtime không nhạy cảm (port, host, API target, NODE_ENV, v.v.) vẫn pass qua nguyên vẹn.
997
+
998
+ ---
999
+
1000
+ ## Đóng Góp
1001
+
1002
+ Đóng góp được hoan nghênh! Các khu vực cần giúp đỡ nhất:
1003
+
1004
+ - **Template stack mới** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
1005
+ - **Tích hợp IDE** — VS Code extension, IntelliJ plugin
1006
+ - **Template CI/CD** — ví dụ GitLab CI, CircleCI, Jenkins (GitHub Actions đã có — xem `.github/workflows/test.yml`)
1007
+ - **Độ phủ test** — Mở rộng test suite (hiện tại 602 test trên 30 file test bao phủ scanner, phát hiện stack, domain grouping, plan parsing, tạo prompt, CLI selector, phát hiện monorepo, phát hiện Vite SPA, công cụ xác minh, L4 memory scaffold, xác thực resume Pass 2, Pass 3 Guards 1/2/3 (sentinel H1 + empty-file nhận biết BOM H2 + unlink marker cũ nghiêm ngặt), chia batch split-mode Pass 3, resume partial-marker Pass 3 (v2.1.0), xác thực nội dung marker Pass 4 + độ nghiêm ngặt unlink marker cũ + gap-fill scaffoldSkillsManifest (v2.1.0), guard env-skip dịch + fail-fast sớm + CI workflow, di chuyển staged-rules, fallback dịch lang-aware, suite regression loại bỏ master plan (v2.1.0), regression định dạng memory score/compact (v2.1.0), và cấu trúc template AI Work Rules, và trích xuất port/host/API-target từ parser `.env` + redact biến nhạy cảm (v2.2.0))
1008
+
1009
+ Xem [`CONTRIBUTING.md`](./CONTRIBUTING.md) để có danh sách đầy đủ các khu vực, code style, commit convention, và hướng dẫn từng bước để thêm template stack mới.
1010
+
1011
+ ---
1012
+
1013
+ ## Tác Giả
1014
+
1015
+ Tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
1016
+
1017
+ ## License
1018
+
1019
+ ISC