claudeos-core 1.7.0 → 2.0.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 (39) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/CONTRIBUTING.md +92 -59
  3. package/README.de.md +465 -240
  4. package/README.es.md +446 -223
  5. package/README.fr.md +461 -238
  6. package/README.hi.md +485 -261
  7. package/README.ja.md +440 -235
  8. package/README.ko.md +244 -56
  9. package/README.md +215 -47
  10. package/README.ru.md +462 -238
  11. package/README.vi.md +454 -230
  12. package/README.zh-CN.md +476 -252
  13. package/bin/cli.js +144 -140
  14. package/bin/commands/init.js +550 -46
  15. package/bin/commands/memory.js +426 -0
  16. package/bin/lib/cli-utils.js +206 -143
  17. package/bootstrap.sh +81 -390
  18. package/content-validator/index.js +436 -340
  19. package/lib/expected-guides.js +23 -0
  20. package/lib/expected-outputs.js +91 -0
  21. package/lib/language-config.js +35 -0
  22. package/lib/memory-scaffold.js +1014 -0
  23. package/lib/plan-parser.js +153 -149
  24. package/lib/staged-rules.js +118 -0
  25. package/manifest-generator/index.js +176 -171
  26. package/package.json +1 -1
  27. package/pass-json-validator/index.js +337 -299
  28. package/pass-prompts/templates/common/pass3-footer.md +16 -0
  29. package/pass-prompts/templates/common/pass4.md +317 -0
  30. package/pass-prompts/templates/common/staging-override.md +26 -0
  31. package/pass-prompts/templates/python-flask/pass1.md +119 -0
  32. package/pass-prompts/templates/python-flask/pass2.md +85 -0
  33. package/pass-prompts/templates/python-flask/pass3.md +103 -0
  34. package/plan-installer/domain-grouper.js +2 -1
  35. package/plan-installer/prompt-generator.js +120 -96
  36. package/plan-installer/scanners/scan-frontend.js +219 -10
  37. package/plan-installer/scanners/scan-java.js +226 -223
  38. package/plan-installer/scanners/scan-python.js +21 -0
  39. package/sync-checker/index.js +133 -132
package/README.vi.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ClaudeOS-Core
2
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 quy tắc Claude Code phù hợp chính xác với dự án của bạn.**
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
4
 
5
5
  ```bash
6
6
  npx claudeos-core init
@@ -12,50 +12,60 @@ ClaudeOS-Core đọc codebase của bạn, trích xuất mọi pattern tìm th
12
12
 
13
13
  ---
14
14
 
15
- ## Tại sao ClaudeOS-Core?
15
+ ## Tại sao chọn ClaudeOS-Core?
16
16
 
17
- > Con người tả dự án LLM tạo tài liệu
17
+ Mọi công cụ Claude Code khác hoạt động như sau:
18
18
 
19
- ClaudeOS-Core:
19
+ > **Con người mô tả dự án → LLM tạo tài liệu**
20
20
 
21
- > 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
21
+ ClaudeOS-Core hoạt động như sau:
22
22
 
23
- ### Vấn đề cốt lõi: LLM đoán. Code xác nhận.
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
24
 
25
- 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.
25
+ Đây không phải khác biệt nhỏ. do quan trọng:
26
26
 
27
- **ClaudeOS-Core không đoán.** Claude Node.js:
27
+ ### Vấn đề cốt lõi: LLM đoán. Code thì không.
28
28
 
29
- - `build.gradle` / `package.json` / `pyproject.toml` **confirmed**
30
- - directory scan **confirmed**
31
- - Java 5 patterns, Kotlin CQRS/BFF, Next.js App Router/FSD **classified**
32
- - domain groups → **split**
33
- - stack-specific prompt **assembled**
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
+ 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.
34
42
 
35
43
  ### Kết quả
36
44
 
37
- Các tool khác tạo tài liệu "tốt một cách chung chung".
38
- ClaudeOS-Core tạo tài liệu biết rằng dự án sử dụng `ApiResponse.ok()` (không phải `ResponseEntity.success()`), MyBatis XML mapper nằm ở `src/main/resources/mybatis/mappers/` — vì nó đã đọc code thực tế.
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.
39
47
 
40
48
  ### Before & After
41
49
 
42
- **Không có ClaudeOS-Core**:
50
+ **Không có ClaudeOS-Core** — bạn yêu cầu Claude Code tạo Order CRUD:
43
51
  ```
44
- JPA repository (MyBatis)
45
- ❌ ResponseEntity.success() (ApiResponse.ok())
46
- ❌ order/controller/ (controller/order/)
47
- 20 min fix per file
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
48
57
  ```
49
58
 
50
- **Có ClaudeOS-Core**:
59
+ **Có ClaudeOS-Core** — `.claude/rules/` đã chứa các pattern đã xác nhận của bạn:
51
60
  ```
52
- ✅ MyBatis mapper + XML (build.gradle)
53
- ✅ ApiResponse.ok() (source code)
54
- ✅ controller/order/ (Pattern A)
55
- immediate match
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
56
66
  ```
57
67
 
58
- Sự khác biệt này tích lũy. 10 task/ngày × 20 phút tiết kiệm = **hơn 3 giờ/ngày**.
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**.
59
69
 
60
70
  ---
61
71
 
@@ -79,7 +89,6 @@ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản
79
89
 
80
90
  **Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
81
91
 
82
-
83
92
  ### Phát Hiện Domain Java (5 pattern với fallback)
84
93
 
85
94
  | Ưu tiên | Pattern | Cấu trúc | Ví dụ |
@@ -92,41 +101,66 @@ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản
92
101
 
93
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.
94
103
 
95
-
96
104
  ### Phát Hiện Domain Kotlin Multi-Module
97
105
 
98
106
  Dành cho dự án Kotlin với cấu trúc Gradle multi-module (ví dụ: CQRS monorepo):
99
107
 
100
108
  | Bước | Hành Động | Ví Dụ |
101
109
  |---|---|---|
102
- | 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm thấy 14 module |
103
- | 2 | Phát hiện loại module từ tên | `reservation-command-server` → type: `command` |
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` |
104
112
  | 3 | Trích xuất domain từ tên module | `reservation-command-server` → domain: `reservation` |
105
- | 4 | Nhóm cùng domain qua các module | `reservation-command-server` + `common-query-server` → 1 domain |
113
+ | 4 | Gom cùng domain qua các module | `reservation-command-server` + `common-query-server` → 1 domain |
106
114
  | 5 | Phát hiện kiến trúc | Có module `command` + `query` → CQRS |
107
115
 
108
- Loại module hỗ trợ: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Thư viện chia sẻ (`shared-lib`, `integration-lib`) được phát hiện như domain đặc biệt.
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.
109
117
 
110
118
  ### Phát Hiện Domain Frontend
111
119
 
112
120
  - **App Router**: `app/{domain}/page.tsx` (Next.js)
113
121
  - **Pages Router**: `pages/{domain}/index.tsx`
114
122
  - **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
115
- - **RSC/Client split**: Phát hiện pattern `client.tsx`, theo dõi tách Server/Client
116
- - **Đường dẫn lồng nhau không chuẩn**: Phát hiện pages, components và FSD layers dưới `src/*/pages/`, `src/*/components/`, `src/*/features/` (ví dụ: `src/admin/pages/dashboard/`)
117
- - **Config fallback**: Phát hiện Next.js/Vite/Nuxt từ file config (hỗ trợ monorepo)
118
- - **Fallback thư mục sâu**: Với dự án React/CRA/Vite/Vue/RN, quét `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` ở mọi độ sâu
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 có 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`) 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.
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`) mà danh sách built-in loại vì quá mơ hồ, hoặc nâng `minSubappFiles` cho monorepo nhiễu.
119
153
 
120
154
  ---
121
155
 
122
156
  ## Bắt Đầu Nhanh
123
157
 
124
- ### Yêu Cầu
158
+ ### Yêu cầu trước
125
159
 
126
160
  - **Node.js** v18+
127
161
  - **Claude Code CLI** (đã cài đặt & xác thực)
128
162
 
129
- ### Cài Đặt
163
+ ### Cài đặt
130
164
 
131
165
  ```bash
132
166
  cd /your/project/root
@@ -138,23 +172,23 @@ npx claudeos-core init
138
172
  npm install -g claudeos-core
139
173
  claudeos-core init
140
174
 
141
- # Cách C: devDependency của dự án
175
+ # Cách C: project devDependency
142
176
  npm install --save-dev claudeos-core
143
177
  npx claudeos-core init
144
178
 
145
- # Cách D: git clone (cho phát triển/đóng góp)
179
+ # Cách D: git clone (để phát triển/đóng góp)
146
180
  git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
147
181
 
148
182
  # Đa nền tảng (PowerShell, CMD, Bash, Zsh — mọi terminal)
149
183
  node claudeos-core-tools/bin/cli.js init
150
184
 
151
- # Chỉ Linux/macOS (chỉ Bash)
185
+ # Linux/macOS (chỉ Bash)
152
186
  bash claudeos-core-tools/bootstrap.sh
153
187
  ```
154
188
 
155
- ### Ngôn ngữ đầu ra (10 ngôn ngữ)
189
+ ### Ngôn Ngữ Đầu Ra (10 ngôn ngữ)
156
190
 
157
- Khi chạy `init` không có `--lang`, bộ chọn tương tác bằng phím mũi tên hoặc phím số sẽ xuất hiện:
191
+ 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:
158
192
 
159
193
  ```
160
194
  ╔══════════════════════════════════════════════════╗
@@ -162,31 +196,37 @@ Khi chạy `init` không có `--lang`, bộ chọn tương tác bằng phím mũ
162
196
  ╚══════════════════════════════════════════════════╝
163
197
 
164
198
  Các file được tạo (CLAUDE.md, Standards, Rules,
165
- Skills, Guides) sẽ được viết bằng tiếng Việt.
199
+ Skills, Guides) sẽ được viết bằng Tiếng Việt.
166
200
 
167
201
  1. en — English
168
- ...
202
+ 2. ko — 한국어 (Korean)
203
+ 3. zh-CN — 简体中文 (Chinese Simplified)
204
+ 4. ja — 日本語 (Japanese)
205
+ 5. es — Español (Spanish)
169
206
  ❯ 6. vi — Tiếng Việt (Vietnamese)
170
- ...
207
+ 7. hi — हिन्दी (Hindi)
208
+ 8. ru — Русский (Russian)
209
+ 9. fr — Français (French)
210
+ 10. de — Deutsch (German)
171
211
 
172
212
  ↑↓ Move 1-0 Jump Enter Select ESC Cancel
173
213
  ```
174
214
 
175
- Mô tả thay đổi sang ngôn ngữ tương ứng khi di chuyển. Bỏ qua bộ chọn:
215
+ Mô 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:
176
216
 
177
217
  ```bash
178
- npx claudeos-core init --lang vi # Tiếng Việt
179
- npx claudeos-core init --lang en # English
180
- npx claudeos-core init --lang ko # 한국어
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)
181
221
  ```
182
222
 
183
- > **Lưu ý:** Chỉ thay đổi ngôn ngữ của file tài liệu được tạo. Phân tích (Pass 1–2) luôn chạy bằng tiếng Anh; chỉ kết quả tạo (Pass 3) được viết bằng ngôn ngữ đã chọn.
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.
184
224
 
185
- Chỉ vậy thôi. Sau 5–18 phút, 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 với phần trăm, thời gian đã trôi và thời gian còn lại ước tính cho mỗi Pass.
225
+ Vậy thôi. Sau 5–20 phút (Pass 1×N + Pass 2 + Pass 3 + Pass 4 memory scaffolding), 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 ETA cho mỗi pass.
186
226
 
187
227
  ### Cài Đặt Thủ Công Từng Bước
188
228
 
189
- 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 thất bại ở bước nào đó — bạn có thể chạy từng bước thủ công. Điều này cũng hữu ích để hiểu cách ClaudeOS-Core hoạt động bên trong.
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.
190
230
 
191
231
  #### Step 1: Clone và cài đặt dependencies
192
232
 
@@ -200,8 +240,8 @@ cd claudeos-core-tools && npm install && cd ..
200
240
  #### Step 2: Tạo cấu trúc thư mục
201
241
 
202
242
  ```bash
203
- # Rules
204
- mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync}
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}
205
245
 
206
246
  # Standards
207
247
  mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
@@ -209,69 +249,102 @@ mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.securi
209
249
  # Skills
210
250
  mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
211
251
 
212
- # Guide, Plan, Database, MCP, Generated
252
+ # Guide, Plan, Database, MCP, Generated, Memory (v2.0.0: thêm memory)
213
253
  mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
214
- mkdir -p claudeos-core/{plan,database,mcp-guide,generated}
254
+ mkdir -p claudeos-core/{plan,database,mcp-guide,generated,memory}
215
255
  ```
216
256
 
217
257
  #### Step 3: Chạy plan-installer (phân tích dự án)
218
258
 
219
- Quét dự án, phát hiện stack, tìm domain, chia nhóm và tạo prompt.
259
+ 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.
220
260
 
221
261
  ```bash
222
262
  node claudeos-core-tools/plan-installer/index.js
223
263
  ```
224
264
 
225
- **Đầu ra (`claudeos-core/generated/`):**
226
- - `project-analysis.json` — stack phát hiện, domain, thông tin frontend
227
- - `domain-groups.json` — nhóm domain cho Pass 1
265
+ **Output (trong `claudeos-core/generated/`):**
266
+ - `project-analysis.json` — stack, domain, thông tin frontend đã phát hiện
267
+ - `domain-groups.json` — các nhóm domain cho Pass 1
228
268
  - `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompt phân tích
229
- - `pass2-prompt.md` — prompt hợp nhất
230
- - `pass3-prompt.md` — prompt tạo
269
+ - `pass2-prompt.md` — prompt merge
270
+ - `pass3-prompt.md` — prompt tạo (được bọc bằng directive `staging-override.md` — xem ghi chú Step 6)
271
+ - `pass4-prompt.md` — prompt L4 memory scaffolding (v2.0.0; dùng cùng `staging-override.md` cho ghi rule `60.memory/`)
231
272
 
232
273
  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.
233
274
 
234
- #### Step 4: Pass 1 — Phân tích code sâu theo nhóm domain
275
+ #### Step 4: Pass 1 — Phân tích code sâu (mỗi nhóm domain)
235
276
 
236
- Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số nhóm.
277
+ Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số lượng nhóm.
237
278
 
238
279
  ```bash
239
- # Check groups
280
+ # Kiểm tra có bao nhiêu nhóm
240
281
  cat claudeos-core/generated/domain-groups.json | node -e "
241
282
  const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
242
283
  g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
243
284
  "
244
285
 
245
- # Run Pass 1 for group 1:
246
- cp claudeos-core/generated/pass1-backend-prompt.md /tmp/_pass1.md
247
- DOMAIN_LIST="user, order, product" PASS_NUM=1 \
248
- perl -pi -e 's/\{\{DOMAIN_GROUP\}\}/$ENV{DOMAIN_LIST}/g; s/\{\{PASS_NUM\}\}/$ENV{PASS_NUM}/g' /tmp/_pass1.md
249
- cat /tmp/_pass1.md | claude -p --dangerously-skip-permissions
250
-
251
- # Đối với nhóm frontend, sử dụng pass1-frontend-prompt.md
286
+ # Chạy Pass 1 cho mỗi nhóm (thay domain và số nhóm)
287
+ # Lưu ý: v1.6.1+ dùng Node.js String.replace() thay vì perl — không còn
288
+ # yêu cầu perl, ngữ nghĩa replacement-function ngăn chặn regex injection
289
+ # từ các tự $/&/$1 có thể xuất hiện trong tên domain.
290
+ #
291
+ # Cho nhóm 1:
292
+ DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
293
+ const fs = require('fs');
294
+ const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
295
+ const out = tpl
296
+ .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
297
+ .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
298
+ process.stdout.write(out);
299
+ " | claude -p --dangerously-skip-permissions
300
+
301
+ # Cho nhóm 2 (nếu có):
302
+ DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
303
+ const fs = require('fs');
304
+ const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
305
+ const out = tpl
306
+ .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
307
+ .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
308
+ process.stdout.write(out);
309
+ " | claude -p --dangerously-skip-permissions
310
+
311
+ # Với nhóm frontend, đổi pass1-backend-prompt.md → pass1-frontend-prompt.md
252
312
  ```
253
313
 
254
314
  **Xác minh:** `ls claudeos-core/generated/pass1-*.json` phải hiển thị một JSON cho mỗi nhóm.
255
315
 
256
- #### Step 5: Pass 2 — Hợp nhất kết quả phân tích
316
+ #### Step 5: Pass 2 — Merge kết quả phân tích
257
317
 
258
318
  ```bash
259
319
  cat claudeos-core/generated/pass2-prompt.md \
260
320
  | claude -p --dangerously-skip-permissions
261
321
  ```
262
322
 
263
- **Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ key cấp cao nhất.
323
+ **Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ top-level key.
264
324
 
265
- #### Step 6: Pass 3 — Tạo tất cả tài liệu
325
+ #### Step 6: Pass 3 — Tạo toàn bộ tài liệu
266
326
 
267
327
  ```bash
268
328
  cat claudeos-core/generated/pass3-prompt.md \
269
329
  | claude -p --dangerously-skip-permissions
270
330
  ```
271
331
 
272
- **Xác minh:** `CLAUDE.md` phải tồn tại ở thư mục gốc dự án.
332
+ **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.
333
+
334
+ > **Lưu ý (v2.0.0):** 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 (`npx claudeos-core init`) xử lý việc di chuyển tự động. Nếu bạn chạy bước này thủ công, bạn cần tự di chuyển cây staging: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (giữ nguyên subpath).
335
+
336
+ #### Step 7: Pass 4 — Memory scaffolding
337
+
338
+ ```bash
339
+ cat claudeos-core/generated/pass4-prompt.md \
340
+ | claude -p --dangerously-skip-permissions
341
+ ```
342
+
343
+ **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, `claudeos-core/plan/50.memory-master.md` phải tồn tại, và `CLAUDE.md` giờ phải có mục `## Memory (L4)` được append. Marker: `claudeos-core/generated/pass4-memory.json`.
344
+
345
+ > **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.
273
346
 
274
- #### Step 7: Chạy công cụ xác thực
347
+ #### Step 8: Chạy verification tools
275
348
 
276
349
  ```bash
277
350
  # Tạo metadata (bắt buộc trước các kiểm tra khác)
@@ -280,69 +353,85 @@ node claudeos-core-tools/manifest-generator/index.js
280
353
  # Chạy tất cả kiểm tra
281
354
  node claudeos-core-tools/health-checker/index.js
282
355
 
283
- # Hoặc chạy kiểm tra riêng lẻ:
284
- node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk
285
- node claudeos-core-tools/sync-checker/index.js # Sync status
286
- node claudeos-core-tools/content-validator/index.js # Content quality
287
- node claudeos-core-tools/pass-json-validator/index.js # JSON format
356
+ # Hoặc chạy từng kiểm tra:
357
+ node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk consistency
358
+ node claudeos-core-tools/sync-checker/index.js # File chưa đăng ký/orphan
359
+ node claudeos-core-tools/content-validator/index.js # Kiểm tra chất lượng file (bao gồm mục memory/ [9/9])
360
+ node claudeos-core-tools/pass-json-validator/index.js # Kiểm tra JSON Pass 1–4 + completion marker
288
361
  ```
289
362
 
290
- #### Step 8: Xác minh kết quả
363
+ #### Step 9: Xác minh kết quả
291
364
 
292
365
  ```bash
366
+ # Đếm số file được tạo
293
367
  find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
368
+
369
+ # Kiểm tra CLAUDE.md
294
370
  head -30 CLAUDE.md
371
+
372
+ # Kiểm tra một file standard
373
+ cat claudeos-core/standard/00.core/01.project-overview.md | head -20
374
+
375
+ # Kiểm tra rules
295
376
  ls .claude/rules/*/
296
377
  ```
297
378
 
298
- > **Mẹo:** Nếu bước nào thất bại, bạn có thể chạy lại chỉ 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.
379
+ > **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.
299
380
 
300
381
  ### Bắt Đầu Sử Dụng
301
382
 
302
383
  ```
303
- # Trong Claude Code — chỉ cần nói tự nhiên:
304
- "Tạo CRUD cho domain đơn hàng"
384
+ # Trong Claude Code — chỉ cần hỏi tự nhiên:
385
+ "Tạo CRUD cho domain order"
305
386
  "Thêm API xác thực người dùng"
306
- "Refactor code này theo pattern của dự án"
387
+ "Refactor code này khớp với pattern dự án"
307
388
 
308
389
  # Claude Code tự động tham chiếu Standards, Rules và Skills đã tạo.
309
390
  ```
310
391
 
311
392
  ---
312
393
 
313
- ## Cách Hoạt Động — Pipeline 3-Pass
394
+ ## Cách Hoạt Động — 4-Pass Pipeline
314
395
 
315
396
  ```
316
397
  npx claudeos-core init
317
398
 
318
- ├── [1] npm install ← Cài dependencies (~10s)
319
- ├── [2] Cấu trúc thư mục ← Tạo folders (~1s)
399
+ ├── [1] npm install ← Dependencies (~10s)
400
+ ├── [2] Cấu trúc thư mục ← Tạo folder (~1s)
320
401
  ├── [3] plan-installer (Node.js) ← Quét dự án (~5s)
321
- │ ├── Tự động phát hiện stack (hỗ trợ multi-stack)
322
- │ ├── Trích xuất danh sách domain (gắn tag: backend/frontend)
323
- │ ├── Phân chia nhóm domain (theo loại)
324
- │ └── Chọn prompt theo stack (theo loại)
402
+ │ ├── Tự phát hiện stack (multi-stack aware)
403
+ │ ├── Trích domain list (tag: backend/frontend)
404
+ │ ├── Chia thành domain group (theo kiểu)
405
+ │ └── Chọn prompt theo stack (theo kiểu)
325
406
 
326
- ├── [4] Pass 1 × N (claude -p) ← Phân tích code chuyên sâu (~2-8 phút)
327
- │ ├── ⚙️ Nhóm backend → prompt phân tích backend
328
- │ └── 🎨 Nhóm frontend → prompt phân tích frontend
407
+ ├── [4] Pass 1 × N (claude -p) ← Phân tích code sâu (~2-8min)
408
+ │ ├── ⚙️ Backend group → prompt backend
409
+ │ └── 🎨 Frontend group → prompt frontend
329
410
 
330
- ├── [5] Pass 2 × 1 (claude -p) ← Hợp nhất phân tích (~1 phút)
411
+ ├── [5] Pass 2 × 1 (claude -p) ← Merge phân tích (~1min)
331
412
  │ └── Tổng hợp TẤT CẢ kết quả Pass 1 (backend + frontend)
332
413
 
333
- ├── [6] Pass 3 × 1 (claude -p) ← Tạo toàn bộ file (~3-5 phút)
414
+ ├── [6] Pass 3 × 1 (claude -p) ← Tạo mọi thứ (~3-5min)
334
415
  │ └── Prompt kết hợp (mục tiêu backend + frontend)
335
416
 
336
- └── [7] Xác thực ← Tự động chạy health checker
417
+ ├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s)
418
+ │ ├── Khởi tạo memory/ (decision-log, failure-patterns, …)
419
+ │ ├── Tạo rules 60.memory/
420
+ │ ├── Append mục "Memory (L4)" vào CLAUDE.md
421
+ │ └── Xây dựng plan 50.memory-master.md
422
+
423
+ └── [8] Xác minh ← Tự chạy health checker
337
424
  ```
338
425
 
339
- ### Tại Sao 3 Pass?
426
+ ### Tại sao 4 Pass?
427
+
428
+ **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.
340
429
 
341
- **Pass 1** pass duy nhất đọc nguồn. chọn file đại diện cho mỗi domain trích xuất pattern trên 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 nhóm domain một lần. Trong dự án multi-stack ( dụ: Java backend + React frontend), backend và frontend sử dụng **prompt phân tích riêng biệt** phù hợp với từng stack.
430
+ **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 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.
342
431
 
343
- **Pass 2** hợp nhất tất cả kết quả Pass 1 thành phân tích thống nhất: pattern chung (100% chia sẻ), pattern đa số (50%+ chia sẻ), pattern riêng domain, anti-pattern theo mức độ nghiêm trọng các mối quan tâm xuyên suốt (đặt tên, bảo mật, DB, testing, logging, hiệu suất).
432
+ **Pass 3** nhận phân tích đã merge tạo toàn bộ hệ sinh thái file (CLAUDE.md, rules, standards, skills, guides). không bao giờ đọc nguồn chỉ đọc JSON phân tích. Ở chế độ multi-stack, prompt tạo kết hợp cả mục tiêu backend frontend để cả hai bộ standard đều được tạo trong một pass.
344
433
 
345
- **Pass 3** lấy phân tích đã hợp nhất tạo toàn bộ hệ sinh thái file. không bao giờ đọc nguồn chỉ đọc JSON phân tích. Trong chế độ multi-stack, prompt tạo file kết hợp mục tiêu backend frontend để tạo cả hai bộ tiêu chuẩn trong một pass duy nhất.
434
+ **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 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 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.
346
435
 
347
436
  ---
348
437
 
@@ -351,206 +440,316 @@ npx claudeos-core init
351
440
  ```
352
441
  your-project/
353
442
 
354
- ├── CLAUDE.md ← Điểm vào Claude Code
443
+ ├── CLAUDE.md ← Entry point của Claude Code
355
444
 
356
445
  ├── .claude/
357
- │ └── rules/ ← Rules kích hoạt bằng Glob
446
+ │ └── rules/ ← Rules kích hoạt theo glob
358
447
  │ ├── 00.core/
359
448
  │ ├── 10.backend/
360
449
  │ ├── 20.frontend/
361
450
  │ ├── 30.security-db/
362
451
  │ ├── 40.infra/
363
- └── 50.sync/ ← Rules nhắc nhở đồng bộ
452
+ ├── 50.sync/ ← Rule nhắc sync
453
+ │ └── 60.memory/ ← Rule scope on-demand của L4 memory (v2.0.0)
364
454
 
365
- ├── claudeos-core/ ← Thư mục đầu ra chính
366
- │ ├── generated/ ← JSON phân tích + prompt động
367
- │ ├── standard/ Tiêu chuẩn code (15-19 file)
368
- │ ├── skills/ Skills scaffolding CRUD
455
+ ├── claudeos-core/ ← Thư mục output chính
456
+ │ ├── generated/ ← JSON phân tích + prompt động + Pass markers (nên gitignore)
457
+ ├── project-analysis.json Thông tin stack (multi-stack aware)
458
+ ├── domain-groups.json Groups với type: backend/frontend
459
+ │ │ ├── pass1-backend-prompt.md ← Prompt phân tích backend
460
+ │ │ ├── pass1-frontend-prompt.md ← Prompt phân tích frontend (nếu phát hiện)
461
+ │ │ ├── pass2-prompt.md ← Prompt merge
462
+ │ │ ├── pass3-prompt.md ← Prompt tạo (kết hợp)
463
+ │ │ ├── pass4-prompt.md ← Prompt memory scaffolding (v2.0.0)
464
+ │ │ ├── pass3-complete.json ← Marker hoàn thành Pass 3 (bỏ qua khi resume)
465
+ │ │ ├── pass4-memory.json ← Marker hoàn thành Pass 4 (bỏ qua khi resume)
466
+ │ │ ├── .i18n-cache-<lang>.json ← Cache bản dịch (`--lang` khác tiếng Anh)
467
+ │ │ └── .staged-rules/ ← Thư mục staging tạm cho ghi `.claude/rules/` (tự động di chuyển + dọn)
468
+ │ ├── standard/ ← Coding standards (15-19 file)
469
+ │ │ ├── 00.core/ ← Tổng quan, kiến trúc, naming
470
+ │ │ ├── 10.backend-api/ ← API pattern (theo stack)
471
+ │ │ ├── 20.frontend-ui/ ← Frontend pattern (nếu phát hiện)
472
+ │ │ ├── 30.security-db/ ← Security, DB schema, utilities
473
+ │ │ ├── 40.infra/ ← Config, logging, CI/CD
474
+ │ │ ├── 50.verification/ ← Build verification, testing
475
+ │ │ └── 90.optional/ ← Convention tùy chọn (mở rộng theo stack)
476
+ │ ├── skills/ ← Skills scaffold CRUD
369
477
  │ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 file)
370
- │ ├── plan/ ← Master Plans (backup/khôi phục)
371
- │ ├── database/ ← Schema DB, hướng dẫn migration
372
- └── mcp-guide/ ← Hướng dẫn tích hợp MCP server
478
+ │ ├── plan/ ← Master plans (backup/restore)
479
+ │ ├── database/ ← DB schema, hướng dẫn migration
480
+ ├── mcp-guide/ ← Hướng dẫn tích hợp MCP server
481
+ │ └── memory/ ← L4: kiến thức team (4 file) — commit các file này
482
+ │ ├── decision-log.md ← Lý do "tại sao" đằng sau quyết định thiết kế
483
+ │ ├── failure-patterns.md ← Lỗi lặp lại & cách fix (tự chấm điểm — `npx claudeos-core memory score`)
484
+ │ ├── compaction.md ← Chiến lược compaction 4 giai đoạn (chạy `npx claudeos-core memory compact`)
485
+ │ └── auto-rule-update.md ← Đề xuất cải tiến rule (`npx claudeos-core memory propose-rules`)
373
486
 
374
- └── claudeos-core-tools/ ← Bộ công cụ này (không chỉnh sửa)
487
+ └── claudeos-core-tools/ ← Toolkit này (không sửa)
375
488
  ```
376
489
 
377
- Mỗi file tiêu chuẩn bao gồm ví dụ đúng, ví dụ sai và bảng tóm tắt rules — tất cả được trích xuất từ pattern code thực tế của bạn, không phải template chung.
490
+ 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.
491
+
492
+ ### Đề xuất gitignore
493
+
494
+ **Nên commit** (kiến thức team — có mục đích chia sẻ):
495
+ - `CLAUDE.md` — entry point của Claude Code
496
+ - `.claude/rules/**` — rules tự động load
497
+ - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — tài liệu được tạo
498
+ - `claudeos-core/memory/**` — lịch sử quyết định, failure pattern, đề xuất rule
499
+
500
+ **KHÔNG commit** (build artifact có thể tạo lại):
501
+
502
+ ```gitignore
503
+ # ClaudeOS-Core — phân tích được tạo & cache dịch
504
+ claudeos-core/generated/
505
+ ```
506
+
507
+ 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`.
378
508
 
379
509
  ---
380
510
 
381
- ## Tự Động Mở Rộng Theo Quy Dự Án
511
+ ## Tự Động Mở Rộng Theo Kích Thước Dự Án
382
512
 
383
- | Quy | Số Domain | Số Lần Pass 1 | Tổng `claude -p` | Thời Gian Ước Tính |
513
+ | Kích thước | Domain | Số lần Pass 1 | Tổng `claude -p` | Thời gian ước tính |
384
514
  |---|---|---|---|---|
385
- | Nhỏ | 1–4 | 1 | 3 | ~5 phút |
386
- | Trung Bình | 5–8 | 2 | 4 | ~8 phút |
387
- | Lớn | 9–16 | 3–4 | 56 | ~12 phút |
388
- | Rất Lớn | 17+ | 5+ | 7+ | ~18 phút+ |
515
+ | Nhỏ | 1–4 | 1 | 4 (Pass 1 + 2 + 3 + 4) | ~5–6min |
516
+ | Vừa | 5–8 | 2 | 5 | ~8–9min |
517
+ | Lớn | 9–16 | 3–4 | 67 | ~12–13min |
518
+ | Rất lớn | 17+ | 5+ | 8+ | ~18min+ |
389
519
 
390
- Với dự án multi-stack (ví dụ: Java + React), domain backend và frontend được đếm chung. Dự án 6 domain backend + 4 frontend = tổng 10, mở rộng theo mức "Lớn".
520
+ Pass 4 (memory scaffolding) thêm khoảng ~30s lên trên các pass phân tích. 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, mở rộng như "Lớn".
391
521
 
392
522
  ---
393
523
 
394
- ## Công Cụ Xác Thực
524
+ ## Công Cụ Xác Minh
395
525
 
396
- ClaudeOS-Core bao gồm 5 công cụ xác thực tích hợp, chạy tự động sau khi tạo:
526
+ ClaudeOS-Core bao gồm 5 công cụ xác minh built-in chạy tự động sau khi tạo:
397
527
 
398
528
  ```bash
399
529
  # Chạy tất cả kiểm tra cùng lúc (khuyến nghị)
400
530
  npx claudeos-core health
401
531
 
402
532
  # Lệnh riêng lẻ
403
- npx claudeos-core validate # So sánh Plan ↔ đĩa
404
- npx claudeos-core refresh # Đồng bộ Đĩa → Plan
405
- npx claudeos-core restore # Khôi phục Plan → Đĩa
533
+ npx claudeos-core validate # So sánh Plan ↔ disk
534
+ npx claudeos-core refresh # Disk → Plan sync
535
+ npx claudeos-core restore # Plan → Disk restore
536
+
537
+ # Hoặc dùng node trực tiếp (cho người dùng git clone)
538
+ node claudeos-core-tools/health-checker/index.js
539
+ node claudeos-core-tools/manifest-generator/index.js
540
+ node claudeos-core-tools/plan-validator/index.js --check
541
+ node claudeos-core-tools/sync-checker/index.js
406
542
  ```
407
543
 
408
- | Công Cụ | Chức Năng |
544
+ | Công cụ | Chức năng |
409
545
  |---|---|
410
- | **manifest-generator** | Xây dựng JSON metadata (rule-manifest, sync-map, plan-manifest) |
411
- | **plan-validator** | So sánh khối `<file>` của Master Plan với đĩa — 3 chế độ: check, refresh, restore |
412
- | **sync-checker** | Phát hiện file chưa đăng ký (trên đĩa nhưng không trong plan) và mục mồ côi |
413
- | **content-validator** | Xác thực chất lượng file — file trống, thiếu ví dụ ✅/❌, phần bắt buộc |
414
- | **pass-json-validator** | Xác thực cấu trúc JSON Pass 1–3, khóa bắt buộc tính đầy đủ của phần |
546
+ | **manifest-generator** | Tạo JSON metadata (rule-manifest, sync-map, plan-manifest); index 7 thư mục bao gồm `memory/` (`totalMemory` trong summary) |
547
+ | **plan-validator** | So sánh block `<file>` Master Plan với disk — 3 chế độ: check, refresh, restore |
548
+ | **sync-checker** | Phát hiện file chưa đăng ký (trên disk nhưng không trong plan) và entry orphan — bao phủ 7 thư mục (thêm `memory/` ở v2.0.0) |
549
+ | **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) |
550
+ | **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` `pass4-memory.json` |
415
551
 
416
552
  ---
417
553
 
418
- ## Claude Code Sử Dụng Tài Liệu Như Thế Nào
554
+ ## Cách Claude Code Dùng Tài Liệu Của Bạn
419
555
 
420
- Đây cách Claude Code thực sự đọc tài liệu được ClaudeOS-Core tạo ra:
556
+ ClaudeOS-Core tạo tài liệu mà Claude Code thực sự đọc đây cách:
421
557
 
422
- ### File được đọc tự động
558
+ ### Cái Claude Code đọc tự động
423
559
 
424
- | File | Thời điểm | Đảm bảo |
560
+ | File | Khi nào | Đảm bảo |
425
561
  |---|---|---|
426
- | `CLAUDE.md` | Mỗi lần bắt đầu cuộc trò chuyện | Luôn luôn |
427
- | `.claude/rules/00.core/*` | Khi chỉnh sửa file (`paths: ["**/*"]`) | Luôn luôn |
428
- | `.claude/rules/10.backend/*` | Khi chỉnh sửa file (`paths: ["**/*"]`) | Luôn luôn |
429
- | `.claude/rules/30.security-db/*` | Khi chỉnh sửa file (`paths: ["**/*"]`) | Luôn luôn |
430
- | `.claude/rules/40.infra/*` | Chỉ khi chỉnh sửa file config/infra (paths giới hạn) | điều kiện |
431
- | `.claude/rules/50.sync/*` | Chỉ khi chỉnh sửa file claudeos-core (paths giới hạn) | Có điều kiện |
562
+ | `CLAUDE.md` | Mỗi lần bắt đầu hội thoại | Luôn luôn |
563
+ | `.claude/rules/00.core/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
564
+ | `.claude/rules/10.backend/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
565
+ | `.claude/rules/20.frontend/*` | Khi sửa bất kỳ file frontend nào (scope tới đường dẫn component/page/style) | điều kiện |
566
+ | `.claude/rules/30.security-db/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
567
+ | `.claude/rules/40.infra/*` | Chỉ khi sửa file config/infra (đường dẫn có scope) | Có điều kiện |
568
+ | `.claude/rules/50.sync/*` | Chỉ khi sửa file claudeos-core (đường dẫn có scope) | Có điều kiện |
569
+ | `.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) |
432
570
 
433
- ### File được đọc theo yêu cầu qua tham chiếu trong quy tắc
571
+ ### Cái Claude Code đọc theo yêu cầu qua rule references
434
572
 
435
- Mỗi file quy tắc liên kết đến standard tương ứng trong phần `## Reference`. Claude chỉ đọc standard liên quan đến tác vụ hiện tại:
573
+ 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:
436
574
 
437
- - `claudeos-core/standard/**` — Pattern coding, ví dụ ✅/❌, quy tắc đặt tên
575
+ - `claudeos-core/standard/**` — coding pattern, ví dụ ✅/❌, convention đặt tên
438
576
  - `claudeos-core/database/**` — DB schema (cho query, mapper, migration)
577
+ - `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.
439
578
 
440
- `00.standard-reference.md` đóng vai trò thư mục để khám phá các standard không có quy tắc tương ứng.
579
+ `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.
441
580
 
442
- ### File KHÔNG đọc (tiết kiệm context)
581
+ ### Cái Claude Code KHÔNG đọc (tiết kiệm context)
443
582
 
444
- Được loại trừ rõ ràng qua phần `DO NOT Read` của quy tắc standard-reference:
583
+ Các folder này được loại trừ rõ ràng qua mục `DO NOT Read` trong rule standard-reference:
445
584
 
446
- | Thư mục | Lý do loại trừ |
585
+ | Folder | Lý do loại trừ |
447
586
  |---|---|
448
- | `claudeos-core/plan/` | Backup Master Plan (~340KB). Dùng `npx claudeos-core refresh` để đồng bộ. |
449
- | `claudeos-core/generated/` | JSON metadata build. Không dùng cho coding. |
450
- | `claudeos-core/guide/` | Hướng dẫn onboarding cho người dùng. |
587
+ | `claudeos-core/plan/` | Master Plan backup (~340KB). Dùng `npx claudeos-core refresh` để sync. |
588
+ | `claudeos-core/generated/` | JSON metadata build, prompt, Pass marker, translation cache, `.staged-rules/`. Không dùng cho coding. |
589
+ | `claudeos-core/guide/` | Hướng dẫn onboarding cho con người. |
451
590
  | `claudeos-core/mcp-guide/` | Tài liệu MCP server. Không dùng cho coding. |
591
+ | `claudeos-core/memory/` (auto-load) | **Auto-load bị tắt** có 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. |
452
592
 
453
593
  ---
454
594
 
455
- ## Quy Trình Làm Việc Hàng Ngày
595
+ ## Quy Trình Hằng Ngày
456
596
 
457
597
  ### Sau Khi Cài Đặt
458
598
 
459
599
  ```
460
- # Sử dụng Claude Code bình thường — nó tự động tham chiếu tiêu chuẩn:
461
- "Tạo CRUD cho domain đơn hàng"
462
- "Thêm API cập nhật hồ người dùng"
463
- "Refactor code này theo pattern của dự án"
600
+ # Chỉ dùng Claude Code như bình thường — nó tham chiếu standard của bạn tự động:
601
+ "Tạo CRUD cho domain order"
602
+ "Thêm API cập nhật profile người dùng"
603
+ "Refactor code này khớp với pattern dự án"
464
604
  ```
465
605
 
466
- ### Sau Khi Chỉnh Sửa Thủ Công Standards
606
+ ### Sau Khi Sửa Standard Thủ Công
467
607
 
468
608
  ```bash
469
- # Sau khi chỉnh sửa file standard hoặc rules:
609
+ # Sau khi sửa file standard hoặc rules:
470
610
  npx claudeos-core refresh
471
611
 
472
612
  # Xác minh mọi thứ nhất quán
473
613
  npx claudeos-core health
474
614
  ```
475
615
 
476
- ### Khi Tài Liệu Bị Hỏng
616
+ ### Khi Docs Bị Hỏng
477
617
 
478
618
  ```bash
479
619
  # Khôi phục mọi thứ từ Master Plan
480
620
  npx claudeos-core restore
481
621
  ```
482
622
 
623
+ ### Bảo Trì Memory Layer (v2.0.0)
624
+
625
+ 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:
626
+
627
+ ```bash
628
+ # Compact: áp dụng chính sách compaction 4 giai đoạn (chạy định kỳ — ví dụ hàng tháng)
629
+ npx claudeos-core memory compact
630
+ # Stage 1: tóm tắt các entry cũ (>30 ngày, body → một dòng)
631
+ # Stage 2: merge heading trùng (tổng frequency, giữ fix mới nhất)
632
+ # Stage 3: bỏ importance thấp + cũ (importance <3 VÀ lastSeen >60 ngày)
633
+ # Stage 4: áp dụng giới hạn 400 dòng mỗi file (bỏ importance thấp cũ nhất trước)
634
+
635
+ # Score: xếp hạng lại các entry trong failure-patterns.md theo importance
636
+ npx claudeos-core memory score
637
+ # importance = round(frequency × 1.5 + recency × 5), giới hạn 10
638
+ # Chạy sau khi append vài failure pattern mới
639
+
640
+ # Propose-rules: nổi bật các candidate rule addition từ failure lặp lại
641
+ npx claudeos-core memory propose-rules
642
+ # Đọc các entry failure-patterns.md với frequency ≥ 3
643
+ # Tính confidence (sigmoid trên weighted evidence × anchor multiplier)
644
+ # Ghi proposal vào memory/auto-rule-update.md (KHÔNG tự động áp dụng)
645
+ # Confidence ≥ 0.70 đáng xem xét nghiêm túc; nếu accept → sửa rule + log quyết định
646
+ ```
647
+
648
+ 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):
649
+ - **`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ử.
650
+ - **`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.
651
+ - `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.
652
+
483
653
  ### Tích Hợp CI/CD
484
654
 
485
655
  ```yaml
486
656
  # Ví dụ GitHub Actions
487
657
  - run: npx claudeos-core validate
488
- # thoát 1 chặn PR
658
+ # Exit code 1 chặn PR
659
+
660
+ # Tùy chọn: housekeeping memory hàng tháng (workflow cron riêng)
661
+ - run: npx claudeos-core memory compact
662
+ - run: npx claudeos-core memory score
489
663
  ```
490
664
 
491
665
  ---
492
666
 
493
- ## Khác Biệt Gì?
667
+ ## Khác Biệt Ra Sao?
668
+
669
+ ### So với Các Công Cụ Claude Code Khác
494
670
 
495
671
  | | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
496
672
  |---|---|---|---|---|---|
497
- | **Approach** | Code analyzes first, then LLM generates | Pre-built config presets | LLM designs agent teams | LLM generates spec docs | LLM writes CLAUDE.md |
498
- | **Reads your source code** | ✅ Deterministic static analysis | ❌ | ❌ | ❌ (LLM reads) | ❌ (LLM reads) |
499
- | **Stack detection** | Code confirms (ORM, DB, build tool, pkg manager) | N/A (stack-agnostic) | LLM guesses | LLM guesses | LLM guesses |
500
- | **Domain detection** | Code confirms (Java 5 patterns, Kotlin CQRS, Next.js FSD) | N/A | LLM guesses | N/A | N/A |
501
- | **Same projectSame result** | ✅ Deterministic analysis | ✅ (static files) | ❌ (LLM varies) | ❌ (LLM varies) | ❌ (LLM varies) |
502
- | **Large project handling** | Domain group splitting (4 domains / 40 files per group) | N/A | No splitting | No splitting | Context window limit |
503
- | **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ files) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec documents | CLAUDE.md (1 file) |
504
- | **Output location** | `.claude/rules/` (auto-loaded by Claude Code) | `.claude/` various | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
505
- | **Post-generation verification** | ✅ 5 automated validators | ❌ | ❌ | ❌ | ❌ |
506
- | **Multi-language output** | ✅ 10 languages | ❌ | ❌ | ❌ | ❌ |
507
- | **Multi-stack** | ✅ Backend + Frontend simultaneous | ❌ Stack-agnostic | ❌ | ❌ | Partial |
508
- | **Agent orchestration** | | ✅ 28 agents | 6 patterns | ❌ | ❌ |
673
+ | **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 |
674
+ | **Đọc source code** | ✅ Phân tích tĩnh deterministic | ❌ | ❌ | ❌ (LLM đọc) | ❌ (LLM đọc) |
675
+ | **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 |
676
+ | **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 |
677
+ | **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) |
678
+ | **Xử 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 |
679
+ | **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ file) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec document | CLAUDE.md (1 file) |
680
+ | **Vị trí output** | `.claude/rules/` (tự load bởi Claude Code) | `.claude/` đủ loại | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
681
+ | **Xác minh sau khi tạo** | ✅ 5 validator tự động | ❌ | ❌ | ❌ | ❌ |
682
+ | **Output đa ngôn ngữ** | ✅ 10 ngôn ngữ | ❌ | ❌ | ❌ | ❌ |
683
+ | **Multi-stack** | ✅ Backend + Frontend đồng thời | ❌ Stack-agnostic | ❌ | ❌ | Một phần |
684
+ | **Memory layer bền vững** | ✅ L4 decision log + failure pattern + đề xuất rule chấm điểm tự động (v2.0.0) | | | ❌ | ❌ |
685
+ | **Điều phối agent** | ❌ | ✅ 28 agent | ✅ 6 pattern | ❌ | ❌ |
686
+
687
+ ### Khác biệt chính trong một câu
509
688
 
510
- ### Key difference
689
+ **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".**
511
690
 
512
- **Other tools give Claude "generally good instructions." ClaudeOS-Core gives Claude "instructions extracted from your actual code."**
691
+ Đó do Claude Code ngừng tạo code JPA trong dự án MyBatis,
692
+ ngừng dùng `success()` khi codebase của bạn dùng `ok()`,
693
+ và ngừng tạo thư mục `user/controller/` khi dự án của bạn dùng `controller/user/`.
513
694
 
514
- ### Complementary, not competing
695
+ ### Bổ sung, không cạnh tranh
515
696
 
516
- ClaudeOS-Core: **project-specific rules**. Other tools: **agent orchestration**.
517
- Use both together.
697
+ ClaudeOS-Core tập trung vào **rule standard đặc thù dự án**.
698
+ Các công cụ khác tập trung vào **điều phối agent và workflow**.
699
+
700
+ Bạn có 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.
518
701
 
519
702
  ---
703
+
520
704
  ## FAQ
521
705
 
522
- **H: Nó có sửa đổi nguồn của tôi không?**
523
- Không. 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 đổi.
706
+ **Q: Nó có sửa source code của tôi không?**
707
+ Không. 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.
708
+
709
+ **Q: Chi phí là bao nhiêu?**
710
+ Nó gọi `claude -p` 4–8 lần (Pass 1 × N + Pass 2 + Pass 3 + Pass 4). Nằm trong mức sử dụng Claude Code bình thường. 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.
711
+
712
+ **Q: Tôi có nên commit các file được tạo vào Git không?**
713
+ 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).
714
+
715
+ **Q: Còn dự án mixed-stack (ví dụ Java backend + React frontend)?**
716
+ Đượ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 trong một pass.
524
717
 
525
- **H: Chi phí bao nhiêu?**
526
- Gọi `claude -p` từ 3–7 lần. Nằm trong phạm vi sử dụng bình thường của Claude Code.
718
+ **Q: hoạt động với monorepo Turborepo / pnpm workspaces / Lerna không?**
719
+ 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.
527
720
 
528
- **H: nên commit file được tạo vào Git không?**
529
- Khuyến nghị. Team của bạn thể chia sẻ cùng tiêu chuẩn Claude Code. Cân nhắc thêm `claudeos-core/generated/` vào `.gitignore` (JSON phân tích có thể tạo lại).
721
+ **Q: Chạy lại thì chuyện xảy ra?**
722
+ 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 và luôn bắt đầu mới. Pass 3 luôn chạy lại. Các phiên bản trước có thể được khôi phục từ Master Plan.
530
723
 
531
- **H: Dự án multi-stack (ví dụ: Java backend + React frontend) thì sao?**
532
- 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`, sử dụng prompt phân tích riêng cho từng loại. Pass 2 hợp nhất tất cả, Pass 3 tạo tiêu chuẩn cho cả backend frontend trong một pass duy nhất.
724
+ **Q: NestJS template riêng hay dùng của Express?**
725
+ 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, `Test.createTestingModule`. Dự án Express dùng template `node-express` riêng biệt.
533
726
 
534
- **H: Chạy lại thì sao?**
535
- Nếu kết quả Pass 1/2 trước đó tồn tại, prompt tương tác cho phép bạn chọn: **Continue** (tiếp tục từ nơi dừng lại) hoặc **Fresh** (xóa tất cả và bắt đầu lại). Dùng `--force` để bỏ qua prompt luôn bắt đầu lại từ đầu. Pass 3 luôn chạy lại. Phiên bản trước có thể khôi phục từ Master Plans.
727
+ **Q: Còn dự án Vue / Nuxt?**
728
+ 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,`@nuxt/test-utils`. Dự án Next.js/React dùng template `node-nextjs`.
536
729
 
537
- **H: hoạt động với Turborepo / pnpm workspaces / Lerna monorepo không?**
538
- 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 gồm pattern `apps/*/src/` `packages/*/src/`. Chạy từ thư mục gốc monorepo.
730
+ **Q: hỗ trợ Kotlin không?**
731
+ Có. ClaudeOS-Core tự phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. 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.).
539
732
 
540
- **H: NestJS template riêng hay dùng chung với Express?**
541
- NestJS sử dụng template `node-nestjs` chuyên dụng với các danh mục phân tích riêng cho NestJS: decorator `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI container, pattern CQRS, và `Test.createTestingModule`. Dự án Express sử dụng template `node-express` riêng biệt.
733
+ **Q: Còn kiến trúc CQRS / BFF?**
734
+ Đượ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.
542
735
 
543
- **H: Dự án Vue / Nuxt thì sao?**
544
- Vue/Nuxt sử dụng template `vue-nuxt` chuyên dụng bao gồm Composition API, `<script setup>`, defineProps/defineEmits, Pinia stores, `useFetch`/`useAsyncData`, Nitro server routes, `@nuxt/test-utils`. Dự án Next.js/React sử dụng template `node-nextjs`.
736
+ **Q: Còn Gradle multi-module monorepo?**
737
+ 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.
545
738
 
546
- **H: hỗ trợ Kotlin không?**
547
- Có. ClaudeOS-Core tự động phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. Sử dụng template chuyên dụng `kotlin-spring` để phân tích các pattern đặc thù của Kotlin (data class, sealed class, coroutine, extension function, MockK, v.v.).
739
+ **Q: L4 Memory layer gì (v2.0.0)? Tôi có nên commit `claudeos-core/memory/` không?**
740
+ — **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 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 **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.
548
741
 
549
- **H: Kiến trúc CQRS / BFF thì sao?**
550
- Hỗ trợ đầy đủ cho các dự án Kotlin multi-module. ClaudeOS-Core đọc `settings.gradle.kts`, phát hiện loại module (command, query, bff, integration) từ tên module, nhóm các module Command/Query cùng domain lại. Các standard được tạo bao gồm quy tắc riêng cho command controller vs query controller, pattern BFF/Feign quy ước giao tiếp giữa các module.
742
+ **Q: Nếu Pass 4 lỗi thì sao?**
743
+ Pipeline tự động (`npx claudeos-core init`) static fallback: nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, 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.
551
744
 
552
- **H: Gradle multi-module monorepo thì sao?**
553
- ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất kể độ sâu lồng nhau. Loại module được suy luận từ quy ước đặt tên (ví dụ: `reservation-command-server` domain: `reservation`, type: `command`). Thư viện chia sẻ (`shared-lib`, `integration-lib`) cũng được phát hiện.
745
+ **Q: `memory compact` / `memory score` / `memory propose-rules` làm gì?**
746
+ 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).
747
+
748
+ **Q: Tại sao `--force` (hoặc chế độ "fresh" resume) xóa `.claude/rules/`?**
749
+ 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/plan`). Guard 1 ("partial staged-rules move") và Guard 3 ("incomplete output — missing/empty guide files or missing standard sentinel / empty skills / empty plan") 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.
750
+
751
+ **Q: `claudeos-core/generated/.staged-rules/` là gì và tại sao tồn tại?**
752
+ 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.
554
753
 
555
754
  ---
556
755
 
@@ -558,34 +757,36 @@ ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất k
558
757
 
559
758
  ```
560
759
  pass-prompts/templates/
561
- ├── common/ # Header/footer chung
760
+ ├── common/ # header/footer dùng chung + pass4 + staging-override
562
761
  ├── java-spring/ # Java / Spring Boot
563
762
  ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
564
763
  ├── node-express/ # Node.js / Express
565
764
  ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
566
765
  ├── node-fastify/ # Node.js / Fastify
567
- ├── node-nextjs/ # Next.js / React
766
+ ├── node-nextjs/ # Next.js / React (App Router, RSC)
767
+ ├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
568
768
  ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
569
769
  ├── angular/ # Angular
570
770
  ├── python-django/ # Python / Django (DRF)
571
- └── python-fastapi/ # Python / FastAPI
771
+ ├── python-fastapi/ # Python / FastAPI
772
+ └── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
572
773
  ```
573
774
 
574
- `plan-installer` tự phát hiện stack của bạn, sau đó lắp ráp prompt theo loại. NestJS Vue/Nuxt sử dụng template chuyên dụng với các danh mục phân tích riêng cho từng framework (ví dụ: `@Module`/`@Injectable`/Guards cho NestJS, `<script setup>`/Pinia/useFetch cho Vue). Với dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` được tạo riêng, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo file của cả hai stack.
775
+ `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. Pass 4 dùng template chung `common/pass4.md` (memory scaffolding) bất kể stack.
575
776
 
576
777
  ---
577
778
 
578
779
  ## Hỗ Trợ Monorepo
579
780
 
580
- ClaudeOS-Core tự động phát hiện thiết lập monorepo JS/TS và quét các sub-package để tìm dependency.
781
+ ClaudeOS-Core tự động phát hiện setup monorepo JS/TS và quét sub-package tìm dependency.
581
782
 
582
- **Monorepo marker được hỗ trợ** (tự động phát hiện):
783
+ **Các monorepo marker được hỗ trợ** (tự phát hiện):
583
784
  - `turbo.json` (Turborepo)
584
785
  - `pnpm-workspace.yaml` (pnpm workspaces)
585
786
  - `lerna.json` (Lerna)
586
787
  - `package.json#workspaces` (npm/yarn workspaces)
587
788
 
588
- **Chạy từ thư mục gốc monorepo** — ClaudeOS-Core đọc `apps/*/package.json` và `packages/*/package.json` để tìm dependency framework/ORM/DB trong các sub-package:
789
+ **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:
589
790
 
590
791
  ```bash
591
792
  cd my-monorepo
@@ -598,20 +799,20 @@ npx claudeos-core init
598
799
  - Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
599
800
  - Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` (ví dụ: `services/*`)
600
801
 
601
- **Quét domain cũng bao gồm cấu trúc monorepo:**
602
- - `apps/api/src/modules/*/` và `apps/api/src/*/` cho domain backend
603
- - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho domain frontend
604
- - `packages/*/src/*/` cho domain package chia sẻ
802
+ **Quét domain cũng bao phủ layout monorepo:**
803
+ - `apps/api/src/modules/*/` và `apps/api/src/*/` cho backend domain
804
+ - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho frontend domain
805
+ - `packages/*/src/*/` cho shared package domain
605
806
 
606
807
  ```
607
808
  my-monorepo/ ← Chạy ở đây: npx claudeos-core init
608
- ├── turbo.json ← Tự động phát hiện là Turborepo
809
+ ├── turbo.json ← Tự phát hiện là Turborepo
609
810
  ├── apps/
610
811
  │ ├── web/ ← Next.js phát hiện từ apps/web/package.json
611
- │ │ ├── app/dashboard/ ← Domain frontend được phát hiện
812
+ │ │ ├── app/dashboard/ ← Frontend domain được phát hiện
612
813
  │ │ └── package.json ← { "dependencies": { "next": "^14" } }
613
814
  │ └── api/ ← Express phát hiện từ apps/api/package.json
614
- │ ├── src/modules/users/ ← Domain backend được phát hiện
815
+ │ ├── src/modules/users/ ← Backend domain được phát hiện
615
816
  │ └── package.json ← { "dependencies": { "express": "^4" } }
616
817
  ├── packages/
617
818
  │ ├── db/ ← Drizzle phát hiện từ packages/db/package.json
@@ -619,38 +820,61 @@ my-monorepo/ ← Chạy ở đây: npx claudeos-core init
619
820
  └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
620
821
  ```
621
822
 
622
- > **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module sử 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 yêu cầu JS monorepo marker.
823
+ > **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.
623
824
 
624
825
  ## Xử Lý Sự Cố
625
826
 
626
- **"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không nằm trong PATH. Xem [tài liệu Claude Code](https://code.claude.com/docs/en/overview).
827
+ **"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).
627
828
 
628
829
  **"npm install failed"** — Phiên bản Node.js có thể quá thấp. Yêu cầu v18+.
629
830
 
630
- **"0 domains detected"** — Cấu trúc dự án có thể không chuẩn. Xem pattern phát hiện trong [tài liệu tiếng Hàn](./README.ko.md#트러블슈팅) cho stack của bạn.
831
+ **"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.
832
+
833
+ **"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/`.
834
+
835
+ **"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`.
836
+
837
+ **"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.
838
+
839
+ **"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.
840
+
841
+ **"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`.
631
842
 
632
- **Dự án Kotlin "phát hiện 0 domain"** — Đảm bảo thư mục gốc `build.gradle.kts` (hoặc `build.gradle` với kotlin plugin), file nguồn nằm dưới `**/src/main/kotlin/`. Với dự án multi-module, `settings.gradle.kts` phải chứa câu lệnh `include()`. Dự án Kotlin đơn module (không `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/`.
843
+ **"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ỉ BOM hoặc chỉ whitespace (heading đã viết nhưng body bị cắt). Không 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.
633
844
 
634
- **"Ngôn ngữ phát hiện java thay kotlin"** — ClaudeOS-Core kiểm tra `build.gradle(.kts)` gốc trước, sau đó kiểm tra file build của submodule. Đảm bảo ít nhất một file chứa `kotlin("jvm")` hoặc `org.jetbrains.kotlin`.
845
+ **"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.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/`, `claudeos-core/skills/`, hoặc `claudeos-core/plan/`. 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/` ≥1 `.md` không rỗng, (c) `plan/` ≥1 `.md` không rỗng. `database/` `mcp-guide/` bị loại trừ có chủ đích (một số stack tạo ra 0 file hợp lệ). Đườ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.
635
846
 
636
- **"Không phát hiện CQRS"** — Phát hiện kiến trúc phụ thuộc vào tên module chứa từ khóa `command` `query`. Nếu module của bạn dùng tên khác, thể điều chỉnh thủ công các prompt đã tạo.
847
+ **"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 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` retry với `--force`.
848
+
849
+ **"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.
850
+
851
+ **"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.
852
+
853
+ **"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.
854
+
855
+ **"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`.
856
+
857
+ **"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`.
637
858
 
638
859
  ---
639
860
 
640
861
  ## Đóng Góp
641
862
 
642
- Chào đón mọi đóng góp! Các lĩnh vực cần hỗ trợ nhất:
863
+ Đóng góp được hoan nghênh! Các khu vực cần giúp đỡ nhất:
864
+
865
+ - **Template stack mới** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
866
+ - **Tích hợp IDE** — VS Code extension, IntelliJ plugin
867
+ - **Template CI/CD** — ví dụ GitLab CI, CircleCI, Jenkins (GitHub Actions đã có — xem `.github/workflows/test.yml`)
868
+ - **Độ phủ test** — Mở rộng test suite (hiện tại 489 test trên 24 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), xác thực nội dung marker Pass 4 + độ nghiêm ngặt unlink marker cũ, guard env-skip dịch + fail-fast sớm + CI workflow, di chuyển staged-rules, fallback dịch lang-aware, và cấu trúc template AI Work Rules)
643
869
 
644
- - **Template stack mới** Ruby/Rails, Go/Gin, PHP/Laravel, Rust/Axum
645
- - **Hỗ trợ monorepo sâu** — Root sub-project riêng, phát hiện workspace
646
- - **Độ phủ test** — Mở rộng bộ test (hiện tại 269 test bao gồm tất cả scanner, phát hiện stack, nhóm domain, phân tích plan, tạo prompt, bộ chọn CLI, phát hiện monorepo, công cụ xác thực và phát hiện Vite SPA)
870
+ Xem [`CONTRIBUTING.md`](./CONTRIBUTING.md) để 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.
647
871
 
648
872
  ---
649
873
 
650
874
  ## Tác Giả
651
875
 
652
- Được tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
876
+ Tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
653
877
 
654
- ## Giấy Phép
878
+ ## License
655
879
 
656
880
  ISC