claudeos-core 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.vi.md CHANGED
@@ -7,44 +7,40 @@
7
7
  [![license](https://img.shields.io/npm/l/claudeos-core.svg?color=blue)](LICENSE)
8
8
  [![downloads](https://img.shields.io/npm/dm/claudeos-core.svg?logo=npm&color=blue&label=downloads)](https://www.npmjs.com/package/claudeos-core)
9
9
 
10
- **Tự động sinh tài liệu Claude Code từ chính nguồn thực tế của bạn.** Một CLI phân tích tĩnh dự án rồi chạy pipeline Claude 4-pass để sinh `.claude/rules/`, standards, skills guides nhờ đó Claude Code tuân theo **các quy ước của dự án bạn**, không phải các quy ước chung chung.
10
+ **Một CLI đọc trực tiếp source code dự án rồi tự sinh ra `CLAUDE.md` cùng `.claude/rules/`. Bộ công cụ gồm Node.js scanner, pipeline 4-pass cho Claude 5 validator. Hỗ trợ 12 stack, 10 ngôn ngữ, không bao giờ tạo ra đường dẫn không trong code.**
11
11
 
12
12
  ```bash
13
13
  npx claudeos-core init
14
14
  ```
15
15
 
16
+ Có thể dùng ngay với [**12 stack**](#supported-stacks), kể cả monorepo. Một câu lệnh là đủ, không cần cấu hình, chạy giữa chừng dừng lại vẫn tiếp tục được, và chạy nhiều lần cũng an toàn.
17
+
16
18
  [🇺🇸 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)
17
19
 
18
20
  ---
19
21
 
20
- ## Công cụ này là gì?
22
+ ## Đây là gì?
21
23
 
22
- Bạn đang dùng Claude Code. thông minh, nhưng không biết **các quy ước của dự án bạn**:
23
- - Đội của bạn dùng MyBatis, nhưng Claude lại sinh code JPA.
24
- - Wrapper của bạn là `ApiResponse.ok()`, nhưng Claude lại viết `ResponseEntity.success()`.
25
- - Package của bạn là `controller/order/`, nhưng Claude lại tạo `order/controller/`.
24
+ Mỗi khi mở phiên mới, Claude Code lại rơi về mặc định của framework. Team đang dùng **MyBatis** thì Claude vẫn cứ viết JPA. Wrapper dự án là `ApiResponse.ok()`, Claude lại quen tay gõ `ResponseEntity.success()`. Package theo layer-first, Claude lại sinh ra kiểu domain-first. Viết tay `.claude/rules/` cho từng repo thì chữa được tạm thời, nhưng code đổi vài lần rules cũng lệch theo.
26
25
 
27
- vậy bạn mất khá nhiều thời gian để sửa từng tệp được sinh ra.
26
+ **ClaudeOS-Core sinh lại toàn bộ tài liệu này một cách nhất quán, đọc thẳng từ source code thật.** Đầu tiên, một Node.js scanner duyệt dự án để chốt stack, ORM, cấu trúc package và đường dẫn file. Tiếp đó pipeline 4-pass của Claude viết toàn bộ tài liệu: `CLAUDE.md`, `.claude/rules/` auto-load, standards và skills. Mọi pass đều bị khoá trong một allowlist đường dẫn tường minh, LLM không thoát ra được. Cuối cùng, năm validator soi lại kết quả trước khi xuất.
28
27
 
29
- **ClaudeOS-Core khắc phục điều này.** quét nguồn thực tế của bạn, xác định các quy ước, viết một tập rule hoàn chỉnh vào `.claude/rules/` — thư mục mà Claude Code tự động đọc. Lần sau bạn nói *"Tạo CRUD cho orders"*, Claude sẽ tuân theo quy ước của bạn ngay từ lần đầu.
28
+ Nhờ vậy, cùng input thì luôn ra cùng output, byte-identical cả 10 ngôn ngữ,không bịa ra đường dẫn không trong code. (Xem chi tiết phần [Điểm khác biệt](#điểm-khác-biệt) bên dưới.)
30
29
 
31
- ```
32
- Trước: Bạn → Claude Code → code "tốt nói chung" → sửa thủ công
33
- Sau: Bạn → Claude Code → code khớp với dự án của bạn → dùng luôn
34
- ```
30
+ Với các dự án chạy lâu dài, công cụ còn seed thêm một [Memory Layer](#memory-layer-tùy-chọn-cho-dự-án-dài-hạn) riêng.
35
31
 
36
32
  ---
37
33
 
38
- ## Xem trên một dự án thật
34
+ ## Xem trên dự án thực tế
39
35
 
40
- Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files. Kết quả: **75 generated files**, tổng thời gian **53 phút**, mọi validator ✅.
36
+ Chạy thử trên [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app). Dự án dùng Java 11, Spring Boot 2.6, MyBatis, SQLite với 187 file source. Kết quả: **75 file được sinh ra**, tổng thời gian **53 phút**, mọi validator đều ✅.
41
37
 
42
38
  <p align="center">
43
39
  <img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
44
40
  </p>
45
41
 
46
42
  <details>
47
- <summary><strong>📺 Đầu ra terminal (bản text, để tìm kiếm và sao chép)</strong></summary>
43
+ <summary><strong>Output terminal (bản text, để tiện tìm kiếm và copy)</strong></summary>
48
44
 
49
45
  ```text
50
46
  ╔════════════════════════════════════════════════════╗
@@ -79,18 +75,18 @@ Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkste
79
75
  [██████████░░░░░░░░░░] 50% (2/4)
80
76
 
81
77
  [6] Pass 3 — Generating all files...
82
- 🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
78
+ Pass 3 split mode (3a → 3b → 3c → 3d-aux)
83
79
  ✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
84
80
  ✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
85
81
  ✅ 3c complete (12m 35s) — 13 skills + 9 guides
86
82
  ✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
87
- 🎉 Pass 3 split complete: 4/4 stages successful
83
+ Pass 3 split complete: 4/4 stages successful
88
84
  [███████████████░░░░░] 75% (3/4)
89
85
 
90
86
  [7] Pass 4 — Memory scaffolding...
91
- 📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
87
+ Pass 4 staged-rules: 6 rule files moved to .claude/rules/
92
88
  ✅ Pass 4 complete (5m)
93
- 📋 Gap-fill: all 12 expected files already present
89
+ Gap-fill: all 12 expected files already present
94
90
  [████████████████████] 100% (4/4)
95
91
 
96
92
  ╔═══════════════════════════════════════╗
@@ -119,37 +115,45 @@ Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkste
119
115
  </details>
120
116
 
121
117
  <details>
122
- <summary><strong>📄 Trích đoạn <code>CLAUDE.md</code> được sinh (đầu ra thực tế)</strong></summary>
118
+ <summary><strong>Phần thực sự đi vào <code>CLAUDE.md</code> của bạn (trích đoạn thật — Section 1 + 2)</strong></summary>
123
119
 
124
120
  ```markdown
125
- ## 4. Core Architecture
126
-
127
- ### Core Patterns
128
-
129
- - **Hexagonal ports & adapters**: domain ports live in `io.spring.core.{aggregate}`
130
- and are implemented by `io.spring.infrastructure.repository.MyBatis{Aggregate}Repository`.
131
- The domain layer has zero MyBatis imports.
132
- - **CQRS-lite read/write split (same DB)**: write side goes through repository ports
133
- + entities; read side is a separate `readservice` package whose `@Mapper`
134
- interfaces return `*Data` DTOs directly (no entity hydration).
135
- - **No aggregator/orchestrator layer**: multi-source orchestration happens inside
136
- application services (e.g., `ArticleQueryService`); there is no `*Aggregator`
137
- class in the codebase.
138
- - **Application-supplied UUIDs**: entity constructors assign their own UUID; PK is
139
- passed via `#{user.id}` on INSERT. The global
140
- `mybatis.configuration.use-generated-keys=true` flag is dead config
141
- (auto-increment is unused).
142
- - **JWT HS512 authentication**: `io.spring.infrastructure.service.DefaultJwtService`
143
- is the sole token subject in/out; `io.spring.api.security.JwtTokenFilter`
144
- extracts the token at the servlet layer.
121
+ # CLAUDE.md spring-boot-realworld-example-app
122
+
123
+ > Reference implementation of the RealWorld backend specification on
124
+ > Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
125
+ > over a hexagonal MyBatis persistence layer.
126
+
127
+ #### 1. Role Definition
128
+
129
+ As the senior developer for this repository, you are responsible for
130
+ writing, modifying, and reviewing code. Responses must be written in English.
131
+ A Java Spring Boot REST + GraphQL API server organized around a hexagonal
132
+ (ports & adapters) architecture, with a CQRS-lite read/write split inside
133
+ an XML-driven MyBatis persistence layer and JWT-based authentication.
134
+
135
+ #### 2. Project Overview
136
+
137
+ | Item | Value |
138
+ |---|---|
139
+ | Language | Java 11 |
140
+ | Framework | Spring Boot 2.6.3 |
141
+ | Build Tool | Gradle (Groovy DSL) |
142
+ | Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
143
+ | Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
144
+ | Migration | Flyway — single baseline `V1__create_tables.sql` |
145
+ | API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
146
+ | Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
147
+ | Server Port | 8080 (default) |
148
+ | Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
145
149
  ```
146
150
 
147
- Lưu ý: mọi luận điểm phía trên đều dựa trên nguồn thực tên class, đường dẫn package, key cấu hình, cờ dead-config đều do scanner trích xuất trước khi Claude viết tệp.
151
+ Mọi giá trị trong bảng trên đều do scanner đọc thẳng từ `build.gradle`, `application.properties` cây source trước khi Claude viết file. Toạ độ dependency, tên file `dev.db`, tên migration `V1__create_tables.sql`, ghi chú "no JPA" — tất cả đều sự thật trích xuất, không chỗ nào phỏng đoán.
148
152
 
149
153
  </details>
150
154
 
151
155
  <details>
152
- <summary><strong>🛡️ Một rule thực tế được tự động nạp (<code>.claude/rules/10.backend/03.data-access-rules.md</code>)</strong></summary>
156
+ <summary><strong>Một rule auto-load thật (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
153
157
 
154
158
  ````markdown
155
159
  ---
@@ -157,298 +161,352 @@ paths:
157
161
  - "**/*"
158
162
  ---
159
163
 
160
- # Data Access Rules
164
+ #### Controller Rules
165
+
166
+ ##### REST (`io.spring.api.*`)
167
+
168
+ - Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
169
+ Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
170
+ - Each controller method calls exactly ONE application service method. Multi-source
171
+ composition lives in the application service.
172
+ - Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
173
+ - Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
174
+ `io.spring.application.{aggregate}.*`.
175
+ - Resolve the current user via `@AuthenticationPrincipal User`.
176
+ - Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
177
+ (`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
161
178
 
162
- ## XML-only SQL
163
- - Every SQL statement lives in `src/main/resources/mapper/*.xml`.
164
- NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
165
- - Each `@Mapper` interface has exactly one XML file at
166
- `src/main/resources/mapper/{InterfaceName}.xml`.
167
- - `<mapper namespace="...">` MUST be the fully qualified Java interface name.
168
- The single existing exception is `TransferData.xml` (free-form `transfer.data`).
179
+ ##### GraphQL (`io.spring.graphql.*`)
169
180
 
170
- ## Dynamic SQL
171
- - `<if>` predicates MUST guard both null and empty:
172
- `<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
173
- - Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
181
+ - DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
182
+ Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
183
+ - Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
174
184
 
175
- ## Examples
185
+ ##### Examples
176
186
 
177
187
  ✅ Correct:
178
- ```xml
179
- <update id="update">
180
- UPDATE articles
181
- <set>
182
- <if test="article.title != null and article.title != ''">title = #{article.title},</if>
183
- updated_at = #{article.updatedAt}
184
- </set>
185
- WHERE id = #{article.id}
186
- </update>
188
+ ```java
189
+ @PostMapping
190
+ public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
191
+ @Valid @RequestBody NewArticleParam param) {
192
+ Article article = articleCommandService.createArticle(param, user);
193
+ ArticleData data = articleQueryService.findById(article.getId(), user)
194
+ .orElseThrow(ResourceNotFoundException::new);
195
+ return ResponseEntity.ok(Map.of("article", data));
196
+ }
187
197
  ```
188
198
 
189
199
  ❌ Incorrect:
190
- ```xml
191
- <mapper namespace="article.mapper"> <!-- NO — namespace MUST be FQCN -->
200
+ ```java
201
+ @PostMapping
202
+ public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
203
+ try {
204
+ articleCommandService.createArticle(p, currentUser);
205
+ } catch (Exception e) { // NO — let CustomizeExceptionHandler handle it
206
+ return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
207
+ }
208
+ return ResponseEntity.ok().build();
209
+ }
192
210
  ```
193
211
  ````
194
212
 
195
- Glob `paths: ["**/*"]` nghĩa là Claude Code tự động nạp rule này mỗi khi bạn chỉnh bất kỳ tệp nào trong dự án. Các dụ ✅/❌ được lấy thẳng từ chính các quy ước mẫu lỗi đã trong codebase này.
213
+ Glob `paths: ["**/*"]` nghĩa là Claude Code sẽ tự động nạp rule này mỗi khi sửa bất kỳ file nào trong dự án. Tên class, đường dẫn package, exception handler trong rule đều lấy nguyên văn từ source đã quét, kể cả `CustomizeExceptionHandler` `JacksonCustomizations` thật của dự án.
196
214
 
197
215
  </details>
198
216
 
199
217
  <details>
200
- <summary><strong>🧠 Hạt mầm <code>decision-log.md</code> tự sinh (trích đoạn thực tế)</strong></summary>
218
+ <summary><strong>Một seed <code>decision-log.md</code> được sinh tự động (trích đoạn thật)</strong></summary>
201
219
 
202
220
  ```markdown
203
- ## 2026-04-26 — CQRS-lite read/write split inside the persistence layer
204
-
205
- - **Context:** Writes go through `core.*Repository` port → `MyBatis*Repository`
206
- adapter → `io.spring.infrastructure.mybatis.mapper.{Aggregate}Mapper`.
207
- Reads bypass the domain port: application service →
208
- `io.spring.infrastructure.mybatis.readservice.{Concept}ReadService` directly,
209
- returning flat `*Data` DTOs from `io.spring.application.data.*`.
210
- - **Options considered:** Single repository surface returning hydrated entities
211
- for both reads and writes.
212
- - **Decision:** Same database, two `@Mapper` packages — `mapper/` (write side,
213
- operates on core entities) and `readservice/` (read side, returns `*Data` DTOs).
214
- Read DTOs avoid entity hydration overhead.
215
- - **Consequences:** Reads are NOT routed through the domain port this is
216
- intentional, not a bug. Application services may inject both a `*Repository`
217
- (writes) and one or more `*ReadService` interfaces (reads) at the same time.
218
- Do NOT add hydrate-then-map glue in the read path.
221
+ #### 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
222
+
223
+ - **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
224
+ `io.spring.core.article.ArticleRepository`) implemented by
225
+ `io.spring.infrastructure.repository.MyBatis*Repository` adapters.
226
+ The domain layer has zero `org.springframework.*` /
227
+ `org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
228
+ - **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
229
+ `BaseMapper`. None adopted.
230
+ - **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
231
+ hand-written XML statements under `src/main/resources/mapper/*.xml`.
232
+ Hexagonal port/adapter wiring keeps the domain framework-free.
233
+ - **Consequences:** Every SQL lives in XML`@Select`/`@Insert`/`@Update`/`@Delete`
234
+ annotations are forbidden. New aggregates require both a
235
+ `core.{aggregate}.{Aggregate}Repository` port AND a
236
+ `MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
237
+ split the persistence model.
219
238
  ```
220
239
 
221
- Pass 4 gieo `decision-log.md` bằng các quyết định kiến trúc được trích từ `pass2-merged.json`, để các phiên sau ghi nhớ *vì sao* codebase trông như vậy không chỉ *trông như thế nào*.
240
+ Pass 4 ghi sẵn các quyết định kiến trúc trích từ `pass2-merged.json` vào `decision-log.md`. Nhờ vậy, các phiên về sau không chỉ biết codebase _trông như thế nào_, mà còn nhớ được _vì sao lại như vậy_. Mọi option ("JPA/Hibernate", "MyBatis-Plus") cùng các consequence đều neo vào block dependency có thật trong `build.gradle`.
222
241
 
223
242
  </details>
224
243
 
225
244
  ---
226
245
 
227
- ## Quick Start
246
+ ## Đã kiểm thử trên
228
247
 
229
- **Yêu cầu trước:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) đã cài đặt xác thực.
248
+ ClaudeOS-Core đi kèm các benchmark tham chiếu trên dự án OSS thật. Nếu đã thử trên một public repo nào đó, hãy [mở issue](https://github.com/claudeos-core/claudeos-core/issues) để chúng tôi bổ sung vào bảng này.
249
+
250
+ | Dự án | Stack | Scanned → Generated | Trạng thái |
251
+ |---|---|---|---|
252
+ | [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) | Java 11 · Spring Boot 2.6 · MyBatis · SQLite | 187 → 75 files | ✅ cả 5 validator đều pass |
253
+
254
+ ---
255
+
256
+ ## Bắt đầu nhanh
257
+
258
+ **Yêu cầu trước:** Node.js 18 trở lên, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) đã cài và đã đăng nhập.
230
259
 
231
260
  ```bash
232
- # 1. Vào thư mục gốc dự án
261
+ # 1. Vào thư mục gốc của dự án
233
262
  cd my-spring-boot-project
234
263
 
235
- # 2. Chạy init (lệnh này phân tích code yêu cầu Claude viết rules)
264
+ # 2. Chạy init (lệnh này quét code rồi nhờ Claude viết rules)
236
265
  npx claudeos-core init
237
266
 
238
- # 3. Xong. Mở Claude Code và bắt đầu code — rules đã được nạp sẵn.
267
+ # 3. Xong. Mở Claude Code và bắt tay vào code — rules đã sẵn sàng.
239
268
  ```
240
269
 
241
- **Bạn sẽ có** sau khi `init` hoàn tất:
270
+ Sau khi `init` hoàn tất, bạn sẽ thấy cấu trúc như sau.
242
271
 
243
272
  ```
244
273
  your-project/
245
274
  ├── .claude/
246
- │ └── rules/ ← Tự động nạp bởi Claude Code
275
+ │ └── rules/ ← Claude Code tự động load
247
276
  │ ├── 00.core/ (rules chung — naming, kiến trúc)
248
277
  │ ├── 10.backend/ (rules backend stack, nếu có)
249
278
  │ ├── 20.frontend/ (rules frontend stack, nếu có)
250
- │ ├── 30.security-db/ (quy ước bảo mật & DB)
279
+ │ ├── 30.security-db/ (quy ước bảo mật DB)
251
280
  │ ├── 40.infra/ (env, logging, CI/CD)
252
- │ ├── 50.sync/ (nhắc đồng bộ doc — chỉ rules)
281
+ │ ├── 50.sync/ (nhắc đồng bộ tài liệu — chỉ rules)
253
282
  │ ├── 60.memory/ (memory rules — Pass 4, chỉ rules)
254
283
  │ ├── 70.domains/{type}/ (rules theo domain, type = backend|frontend)
255
- │ └── 80.verification/ (chiến lược test + nhắc xác minh build)
284
+ │ └── 80.verification/ (chiến lược test nhắc verify build)
256
285
  ├── claudeos-core/
257
- │ ├── standard/ ← Tài liệu tham chiếu (mirror cấu trúc category)
258
- │ │ ├── 00.core/ (project overview, kiến trúc, naming)
259
- │ │ ├── 10.backend/ (reference backend — nếu có backend stack)
260
- │ │ ├── 20.frontend/ (reference frontend — nếu có frontend stack)
261
- │ │ ├── 30.security-db/ (reference bảo mật & DB)
262
- │ │ ├── 40.infra/ (reference env / logging / CI-CD)
263
- │ │ ├── 70.domains/{type}/ (reference theo domain)
264
- │ │ ├── 80.verification/ (reference build / startup / testing — chỉ standard)
265
- │ │ └── 90.optional/ (mở rộng riêng cho stack — chỉ standard)
266
- │ ├── skills/ (mẫu tái sử dụng Claude có thể áp dụng)
267
- │ ├── guide/ (hướng dẫn how-to cho các tác vụ thường gặp)
286
+ │ ├── standard/ ← Tài liệu tham chiếu (cấu trúc category song song)
287
+ │ │ ├── 00.core/ (tổng quan dự án, kiến trúc, naming)
288
+ │ │ ├── 10.backend/ (tham chiếu backend — nếu có backend stack)
289
+ │ │ ├── 20.frontend/ (tham chiếu frontend — nếu có frontend stack)
290
+ │ │ ├── 30.security-db/ (tham chiếu bảo mật DB)
291
+ │ │ ├── 40.infra/ (tham chiếu env / logging / CI-CD)
292
+ │ │ ├── 70.domains/{type}/ (tham chiếu theo domain)
293
+ │ │ ├── 80.verification/ (tham chiếu build / startup / test — chỉ standard)
294
+ │ │ └── 90.optional/ (mở rộng theo stack — chỉ standard)
295
+ │ ├── skills/ (pattern tái sử dụng để Claude áp dụng)
296
+ │ ├── guide/ (hướng dẫn how-to cho các tác vụ phổ biến)
268
297
  │ ├── database/ (tổng quan schema, hướng dẫn migration)
269
298
  │ ├── mcp-guide/ (ghi chú tích hợp MCP)
270
299
  │ └── memory/ (decision log, failure patterns, compaction)
271
- └── CLAUDE.md (chỉ mục Claude đọc đầu tiên)
300
+ └── CLAUDE.md (index Claude đọc đầu tiên)
272
301
  ```
273
302
 
274
- Các category dùng chung tiền tố số giữa `rules/` và `standard/` đại diện cho cùng một mảng khái niệm (ví dụ: `10.backend` rules `10.backend` standards). Category chỉ-rules: `50.sync` (nhắc đồng bộ doc) và `60.memory` (Pass 4 memory). Category chỉ-standard: `90.optional` (mở rộng riêng stack, không cưỡng chế). Mọi tiền tố khác (`00`, `10`, `20`, `30`, `40`, `70`, `80`) xuất hiện ở CẢ `rules/` `standard/`. Giờ Claude Code đã hiểu dự án của bạn.
303
+ Các category cùng số prefix `rules/` và `standard/` cùng chỉ về một vùng khái niệm. Chẳng hạn `10.backend` rules đối ứng `10.backend` standards. Hai category chỉ tồn tại bên rules `50.sync` (nhắc đồng bộ tài liệu) và `60.memory` (memory của Pass 4). Phía standard có một category riêng là `90.optional`, dành cho phần mở rộng theo stack không enforce. Các prefix còn lại (`00`, `10`, `20`, `30`, `40`, `70`, `80`) thì xuất hiện ở cả hai bên. Đến đây, Claude Code đã hiểu dự án của bạn.
275
304
 
276
305
  ---
277
306
 
278
307
  ## Dành cho ai?
279
308
 
280
- | Bạn là... | Công cụ này giúp bạn... |
309
+ | Bạn là... | Vấn đề được giải quyết |
281
310
  |---|---|
282
- | **Dev solo** đang khởi tạo dự án mới với Claude Code | Bỏ qua hoàn toàn giai đoạn "dạy Claude quy ước của tôi" |
283
- | **Team lead** duy trì chuẩn dùng chung | Tự động hóa phần tẻ nhạt: giữ `.claude/rules/` luôn cập nhật |
284
- | **Đã dùng Claude Code** nhưng mệt mỏi sửa code được sinh | Khiến Claude tuân theo mẫu của BẠN, không phải mẫu "tốt nói chung" |
311
+ | **Solo dev** đang khởi động dự án mới với Claude Code | Khỏi phải dạy lại quy ước cho Claude mỗi phiên. `CLAUDE.md` cùng 8 category trong `.claude/rules/` được sinh ra chỉ trong một lần chạy. |
312
+ | **Team lead** quản standards dùng chung giữa nhiều repo | `.claude/rules/` rất hay drift mỗi khi đổi tên package, đổi ORM hay đổi response wrapper. ClaudeOS-Core đồng bộ lại một cách nhất quán: cùng input thì ra output byte-identical, không có diff thừa. |
313
+ | **Đã quen Claude Code** nhưng chán cảnh phải sửa lại code mỗi lần | Sai response wrapper, sai cấu trúc package, viết JPA trong khi dự án dùng MyBatis, rải `try/catch` trong khi đã có middleware tập trung. Scanner trích quy ước thật của dự án, mỗi pass của Claude đều chạy trong allowlist tường minh. |
314
+ | **Onboard vào repo mới** (dự án có sẵn, vào team mới) | Chạy `init` xong là có ngay tấm bản đồ kiến trúc sống. Bảng stack trong CLAUDE.md, rules theo từng layer kèm ví dụ ✅/❌, decision log seed sẵn lý do đằng sau những lựa chọn lớn (JPA hay MyBatis, REST hay GraphQL...). Đọc 5 file vẫn nhanh hơn lội qua 5.000 file source. |
315
+ | **Làm việc bằng tiếng Hàn, Nhật, Trung và 7 ngôn ngữ khác** | Phần lớn rule generator cho Claude Code chỉ có tiếng Anh. ClaudeOS-Core viết toàn bộ ở **10 ngôn ngữ** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) và áp **kiểm tra cấu trúc byte-identical**. Verdict của `claude-md-validator` không đổi dù chọn ngôn ngữ output nào. |
316
+ | **Đang dùng monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Domain backend và frontend được phân tích trong cùng một lần chạy nhưng bằng prompt riêng. `apps/*/` và `packages/*/` được duyệt tự động, rules theo từng stack đổ vào `70.domains/{type}/`. |
317
+ | **Đóng góp OSS hoặc đang thử nghiệm** | Output thân thiện với gitignore. `claudeos-core/` là thư mục làm việc local, chỉ `CLAUDE.md` và `.claude/` cần ship. Đứt giữa chừng vẫn tiếp tục được, chạy lại nhiều lần vẫn an toàn (chỉnh sửa tay không bị mất nếu không kèm `--force`). |
285
318
 
286
- **Không phù hợp nếu:** bạn muốn một bundle preset agents/skills/rules dạng one-size-fits-all chạy được ngay từ ngày đầu mà không cần bước scan (xem [docs/vi/comparison.md](docs/vi/comparison.md) để biết công cụ nào hợp với việc ), hoặc dự án của bạn chưa khớp với một trong các [stack được hỗ trợ](#supported-stacks).
319
+ ** thể không phù hợp nếu** bạn muốn một bundle preset agents/skills/rules xài được ngay từ ngày đầu mà không cần bước scan (xem [docs/vi/comparison.md](docs/vi/comparison.md) để biết công cụ nào hợp với hoàn cảnh nào), dự án chưa rơi vào một trong các [stack được hỗ trợ](#supported-stacks), hoặc chỉ cần đúng một file `CLAUDE.md`. Riêng trường hợp cuối thì `claude /init` có sẵn là đủ, khỏi cài thêm tool nào khác.
287
320
 
288
321
  ---
289
322
 
290
- ## Hoạt động thế nào?
323
+ ## Cách hoạt động
291
324
 
292
- ClaudeOS-Core đảo ngược workflow Claude Code thông thường:
325
+ ClaudeOS-Core đảo ngược workflow Claude Code thông thường.
293
326
 
294
327
  ```
295
- Thông thường: Bạn mô tả dự án → Claude đoán stack → Claude viết doc
296
- Công cụ này: Code đọc stack → Code đưa sự kiện đã xác nhận cho Claude → Claude viết doc từ sự kiện
328
+ Thông thường: Bạn mô tả dự án → Claude đoán stack của bạn → Claude viết docs
329
+ Cách này: Code đọc stack của bạn → Code đưa fact đã xác nhận cho Claude → Claude viết docs từ fact
297
330
  ```
298
331
 
299
- Ý tưởng then chốt: **một scanner Node.js đọc nguồn của bạn trước** (deterministic, không AI), sau đó pipeline Claude 4-pass viết tài liệu, bị ràng buộc bởi những gì scanner tìm thấy. Claude không thể bịa ra đường dẫn hay framework không thực sự có trong code.
332
+ Pipeline gồm **ba giai đoạn**, code mặt cả hai phía của lời gọi LLM.
333
+
334
+ **1. Step A — Scanner (nhất quán, không gọi LLM).** Một Node.js scanner đi qua thư mục gốc, đọc `package.json`, `build.gradle`, `pom.xml`, `pyproject.toml`, parse các file `.env*` (đồng thời redact các biến nhạy cảm như `PASSWORD/SECRET/TOKEN/JWT_SECRET/...`), phân loại pattern kiến trúc (5 pattern A/B/C/D/E của Java; Kotlin CQRS hoặc multi-module; Next.js App Router so với Pages Router; FSD; components-pattern), tìm ra các domain, rồi dựng allowlist tường minh chứa mọi đường dẫn source thật. Output là `project-analysis.json`, đóng vai trò single source of truth cho mọi bước về sau.
335
+
336
+ **2. Step B — Pipeline Claude 4-pass (ràng buộc bởi fact của Step A).**
337
+ - **Pass 1** đọc các file đại diện theo từng domain group rồi trích ra khoảng 50–100 quy ước cho mỗi domain: response wrapper, thư viện logging, cách xử lý lỗi, quy ước naming, pattern test. Mỗi domain group chỉ chạy một lần (`max 4 domains, 40 files per group`) nên context không bao giờ tràn.
338
+ - **Pass 2** gộp toàn bộ phân tích theo domain thành bức tranh chung của dự án. Có mâu thuẫn thì công cụ chọn quy ước phổ biến nhất.
339
+ - **Pass 3** viết `CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, skills và guides. Bước này được chia thành nhiều stage (`3a` facts → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide) để prompt mỗi stage vẫn vừa context window dù `pass2-merged.json` có lớn cỡ nào. Với dự án từ 16 domain trở lên, 3b/3c sẽ chia tiếp thành các batch ≤15 domain.
340
+ - **Pass 4** seed L4 memory layer (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) và bổ sung các rule scaffold phổ quát. Pass 4 **tuyệt đối không được sửa `CLAUDE.md`**. Section 8 do Pass 3 viết mới là nguồn duy nhất.
341
+
342
+ **3. Step C — Verification (nhất quán, không gọi LLM).** Năm validator soi lại kết quả.
343
+ - `claude-md-validator` chạy 25 kiểm tra cấu trúc trên `CLAUDE.md` (8 section, đếm H3/H4, tính duy nhất của file memory, bất biến T1 canonical heading). Validator này language-invariant, nên chọn `--lang` nào cũng ra cùng verdict.
344
+ - `content-validator` chạy 10 kiểm tra nội dung, gồm verify path-claim (`STALE_PATH` bắt được tham chiếu `src/...` bịa đặt) và phát hiện MANIFEST drift.
345
+ - `pass-json-validator` kiểm tra JSON well-formedness của Pass 1/2/3/4 cùng số section theo từng stack.
346
+ - `plan-validator` so plan với disk (legacy, gần như no-op từ v2.1.0).
347
+ - `sync-checker` đối chiếu disk với `sync-map.json` qua 7 thư mục được track.
348
+
349
+ Có ba mức severity (`fail` / `warn` / `advisory`), nhờ vậy các warning kiểu hallucination LLM mà dev tự sửa được sẽ không bao giờ làm kẹt CI.
350
+
351
+ Cốt lõi gắn kết tất cả lại là một bất biến: **Claude chỉ được trích dẫn các đường dẫn có thật trong code**, vì Step A đã đưa cho nó một allowlist hữu hạn. Tuy nhiên, nếu LLM vẫn cố bịa (hiếm gặp, chỉ xuất hiện ở vài seed cụ thể) thì Step C cũng sẽ bắt lại trước khi docs được ship.
300
352
 
301
- Xem kiến trúc đầy đủ tại [docs/vi/architecture.md](docs/vi/architecture.md).
353
+ Để xem chi tiết từng pass, cơ chế resume dựa trên marker, workaround staged-rules dùng để vượt qua block đường dẫn nhạy cảm `.claude/` của Claude Code, cùng internals của stack detection, mời đọc [docs/vi/architecture.md](docs/vi/architecture.md).
302
354
 
303
355
  ---
304
356
 
305
357
  ## Supported Stacks
306
358
 
307
- 12 stack, tự động phát hiện từ tệp dự án:
359
+ 12 stack, tự động phát hiện từ chính các file dự án.
308
360
 
309
361
  **Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
310
362
 
311
363
  **Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
312
364
 
313
- Dự án đa-stack ( dụ: Spring Boot backend + Next.js frontend) hoạt động ngay không cần cấu hình.
365
+ Dự án multi-stack (chẳng hạn Spring Boot backend cộng Next.js frontend) chạy được luôn không cần điều chỉnh.
314
366
 
315
- Quy tắc phát hiện và những gì mỗi scanner trích xuất xem tại [docs/vi/stacks.md](docs/vi/stacks.md).
367
+ Quy tắc phát hiện và những gì mỗi scanner trích xuất được tả trong [docs/vi/stacks.md](docs/vi/stacks.md).
316
368
 
317
369
  ---
318
370
 
319
- ## Workflow hằng ngày
371
+ ## Quy trình hàng ngày
320
372
 
321
- Ba lệnh phủ ~95% nhu cầu sử dụng:
373
+ Ba lệnh sau đủ dùng cho khoảng 95% trường hợp.
322
374
 
323
375
  ```bash
324
- # Lần đầu trên một dự án
376
+ # Lần đầu chạy trên một dự án
325
377
  npx claudeos-core init
326
378
 
327
- # Sau khi bạn chỉnh thủ công standards hoặc rules
379
+ # Sau khi bạn chỉnh tay standards hoặc rules
328
380
  npx claudeos-core lint
329
381
 
330
- # Health check (chạy trước khi commit, hoặc trong CI)
382
+ # Health check (chạy trước khi commit hoặc trong CI)
331
383
  npx claudeos-core health
332
384
  ```
333
385
 
334
- Hai lệnh nữa cho bảo trì memory layer:
335
-
336
- ```bash
337
- # Compact log failure-patterns (chạy định kỳ)
338
- npx claudeos-core memory compact
339
-
340
- # Đề xuất các pattern lỗi thường gặp thành rule mới
341
- npx claudeos-core memory propose-rules
342
- ```
343
-
344
- Tùy chọn đầy đủ của từng lệnh xem tại [docs/vi/commands.md](docs/vi/commands.md).
386
+ Đầy đủ option của từng lệnh trong [docs/vi/commands.md](docs/vi/commands.md). Các lệnh thuộc memory layer (`memory compact`, `memory propose-rules`) được nói rõ ở phần [Memory Layer](#memory-layer-tùy-chọn-cho-dự-án-dài-hạn) bên dưới.
345
387
 
346
388
  ---
347
389
 
348
- ## Điều gì làm công cụ này khác biệt
390
+ ## Điểm khác biệt
349
391
 
350
- Hầu hết công cụ sinh tài liệu Claude Code đều sinh từ một mô tả (bạn nói cho công cụ, công cụ nói cho Claude). ClaudeOS-Core sinh từ chính nguồn của bạn (công cụ đọc, công cụ nói cho Claude phần nào đã được xác nhận, Claude chỉ viết những gì đã được xác nhận).
392
+ Phần lớn công cụ tài liệu cho Claude Code sinh ra từ một bản tả: bạn nói cho công cụ, công cụ nói lại cho Claude. ClaudeOS-Core thì sinh thẳng từ source code thật. Công cụ tự đọc, tự đẩy các fact đã xác nhận sang Claude, còn Claude chỉ viết đúng những gì đã được xác nhận.
351
393
 
352
- Ba hệ quả cụ thể:
394
+ Cách làm này dẫn tới ba điểm khác biệt cụ thể.
353
395
 
354
- 1. **Phát hiện stack có tính deterministic.** Cùng dự án + cùng code = cùng đầu ra. Không chuyện "lần này Claude đoán khác."
355
- 2. **Không bịa ra đường dẫn.** Prompt của Pass 3 liệt kê tường minh mọi đường dẫn nguồn được phép; Claude không thể trích các đường dẫn không tồn tại.
356
- 3. **Hiểu đa-stack.** Domain backend và frontend dùng prompt phân tích khác nhau trong cùng một lần chạy.
396
+ 1. **Stack detection nhất quán.** Cùng dự án, cùng code thì luôn ra cùng output. Hết cảnh "lần này Claude lại đoán khác".
397
+ 2. **Không tạo path bịa.** Prompt của Pass 3 liệt kê tường minh mọi source path được phép, vì thế Claude không thể trích ra path không tồn tại.
398
+ 3. **Hiểu được multi-stack.** Trong cùng một lần chạy, domain backend và frontend dùng prompt phân tích riêng.
357
399
 
358
- So sánh phạm vi side-by-side với các công cụ khác xem [docs/vi/comparison.md](docs/vi/comparison.md). So sánh về **mỗi công cụ làm gì**, không phải **cái nào tốt hơn** phần lớn là bổ trợ nhau.
400
+ Muốn so sánh scope cạnh nhau với các công cụ khác, mời đọc [docs/vi/comparison.md](docs/vi/comparison.md). Nội dung tập trung vào **mỗi công cụ làm gì**, chứ không phải **công cụ nào tốt hơn**. Thực ra phần lớn là bổ sung cho nhau.
359
401
 
360
402
  ---
361
403
 
362
- ## Xác minh (sau khi sinh)
404
+ ## Xác minh (sau khi tạo)
363
405
 
364
- Sau khi Claude viết doc, code sẽ xác minh chúng. Năm validator độc lập:
406
+ Sau khi Claude viết xong docs, đến lượt code kiểm tra lại. Năm validator độc lập như sau.
365
407
 
366
- | Validator | Kiểm tra gì | Chạy bởi |
408
+ | Validator | Kiểm tra cái gì | Chạy bởi |
367
409
  |---|---|---|
368
- | `claude-md-validator` | Bất biến cấu trúc của CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
369
- | `content-validator` | Đường dẫn nêu trong tài liệu thật sự tồn tại; manifest nhất quán | `health` (advisory) |
370
- | `pass-json-validator` | Đầu ra Pass 1 / 2 / 3 / 4 là JSON đúng pháp | `health` (warn) |
371
- | `plan-validator` | Plan đã lưu khớp với đĩa | `health` (fail-on-error) |
372
- | `sync-checker` | Tệp trên đĩa khớp với đăng ký trong `sync-map.json` (phát hiện orphaned/unregistered) | `health` (fail-on-error) |
410
+ | `claude-md-validator` | Bất biến cấu trúc của CLAUDE.md (8 section, language-invariant) | `claudeos-core lint` |
411
+ | `content-validator` | Path claim thật trong code; manifest nhất quán | `health` (advisory) |
412
+ | `pass-json-validator` | Output Pass 1 / 2 / 3 / 4 là JSON hợp lệ | `health` (warn) |
413
+ | `plan-validator` | Plan đã lưu khớp với disk | `health` (fail-on-error) |
414
+ | `sync-checker` | File trên disk khớp với đăng ký trong `sync-map.json` (phát hiện orphaned/unregistered) | `health` (fail-on-error) |
373
415
 
374
- Một `health-checker` điều phối bốn validator runtime với mức độ ba bậc (fail / warn / advisory) và thoát với exit code phù hợp cho CI. `claude-md-validator` chạy riêng qua lệnh `lint`lệch cấu trúc là tín hiệu cần re-init, không phải warning nhẹ. Có thể chạy bất cứ lúc nào:
416
+ `health-checker` điều phối bốn runtime validator theo ba mức severity (fail / warn / advisory) và thoát với phù hợp cho CI. Riêng `claude-md-validator` chạy độc lập qua lệnh `lint`, vì cấu trúc bị drift là tín hiệu cần re-init, không phải warning mềm. Có thể chạy bất kỳ lúc nào.
375
417
 
376
418
  ```bash
377
419
  npx claudeos-core health
378
420
  ```
379
421
 
380
- Chi tiết kiểm tra của từng validator xem [docs/vi/verification.md](docs/vi/verification.md).
422
+ Chi tiết kiểm tra của từng validator trong [docs/vi/verification.md](docs/vi/verification.md).
381
423
 
382
424
  ---
383
425
 
384
- ## Memory Layer (tùy chọn, dành cho dự án dài hạn)
426
+ ## Memory Layer (tùy chọn, cho dự án dài hạn)
385
427
 
386
- Sau v2.0, ClaudeOS-Core ghi một thư mục `claudeos-core/memory/` chứa bốn tệp:
428
+ Ngoài pipeline scaffolding kể trên, ClaudeOS-Core còn seed thêm thư mục `claudeos-core/memory/` cho những dự án cần giữ context vượt ra ngoài một phiên đơn lẻ. Phần này là tùy chọn. Nếu chỉ cần `CLAUDE.md` và rules thì cứ bỏ qua, không sao cả.
387
429
 
388
- - `decision-log.md` append-only "vì sao chọn X thay vì Y"
389
- - `failure-patterns.md` — lỗi tái diễn kèm điểm frequency/importance
430
+ Bốn file, tất cả đều do Pass 4 viết.
431
+
432
+ - `decision-log.md` — sổ append-only ghi "vì sao chọn X thay vì Y", seed từ `pass2-merged.json`
433
+ - `failure-patterns.md` — danh sách lỗi lặp lại kèm điểm frequency và importance
390
434
  - `compaction.md` — cách memory được tự động compact theo thời gian
391
- - `auto-rule-update.md` — pattern cần được biến thành rule mới
435
+ - `auto-rule-update.md` — các pattern nên được nâng thành rule mới
436
+
437
+ Hai lệnh để duy trì layer này lâu dài.
392
438
 
393
- Bạn có thể chạy `npx claudeos-core memory propose-rules` để yêu cầu Claude xem xét các pattern lỗi gần đây và đề xuất rule mới.
439
+ ```bash
440
+ # Compact log failure-patterns (chạy định kỳ)
441
+ npx claudeos-core memory compact
442
+
443
+ # Đề xuất rule mới từ các failure pattern xuất hiện thường xuyên
444
+ npx claudeos-core memory propose-rules
445
+ ```
394
446
 
395
- Mô hình memory và vòng đời xem [docs/vi/memory-layer.md](docs/vi/memory-layer.md).
447
+ Mô hình memory và lifecycle được tả trong [docs/vi/memory-layer.md](docs/vi/memory-layer.md).
396
448
 
397
449
  ---
398
450
 
399
451
  ## FAQ
400
452
 
401
- **H: Tôi cần Claude API key không?**
402
- Đ: Không. ClaudeOS-Core dùng cài đặt Claude Code sẵn của bạn truyền prompt đến `claude -p` trên máy bạn. Không cần tài khoản phụ.
453
+ **Q: cần Claude API key không?**
454
+ A: Không. ClaudeOS-Core dùng chính bản Claude Code đã cài trên máy. Prompt được pipe sang `claude -p` ngay tại máy, khỏi cần thêm tài khoản nào khác.
455
+
456
+ **Q: Lệnh này có ghi đè `CLAUDE.md` hay `.claude/rules/` đang có không?**
457
+ A: Lần đầu chạy trên dự án trống thì nó tạo mới. Chạy lại không kèm `--force` thì các chỉnh sửa tay được giữ nguyên, vì marker từ lần chạy trước được phát hiện và pass tương ứng sẽ bị skip. Còn nếu kèm `--force` thì mọi thứ sẽ bị xóa rồi sinh lại, kéo theo phần chỉnh sửa cũng mất. Đó đúng là ý nghĩa của `--force`. Chi tiết ở [docs/vi/safety.md](docs/vi/safety.md).
458
+
459
+ **Q: Stack của tôi chưa được hỗ trợ, có thêm vào được không?**
460
+ A: Được. Một stack mới chỉ cần khoảng 3 prompt template và một domain scanner. Hướng dẫn 8 bước nằm trong [CONTRIBUTING.md](CONTRIBUTING.md).
403
461
 
404
- **H: Lệnh này ghi đè CLAUDE.md hoặc `.claude/rules/` đang có không?**
405
- Đ: Lần chạy đầu trên dự án mới: tạo mới. Chạy lại không có `--force` thì giữ nguyên chỉnh sửa của bạn marker từ lần chạy trước được phát hiện pass đó bị bỏ qua. Chạy lại với `--force` thì xóa và sinh lại tất cả (các chỉnh sửa của bạn bị mất — đó chính là ý nghĩa của `--force`). Xem [docs/vi/safety.md](docs/vi/safety.md).
462
+ **Q: Làm sao sinh docs bằng tiếng Hàn (hoặc ngôn ngữ khác)?**
463
+ A: Chạy `npx claudeos-core init --lang ko` xong. 10 ngôn ngữ được hỗ trợ: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
406
464
 
407
- **H: Stack của tôi không được hỗ trợ. Tôi có thể thêm không?**
408
- Đ: Có. Stack mới cần ~3 prompt template + một domain scanner. Xem [CONTRIBUTING.md](CONTRIBUTING.md) đểhướng dẫn 8 bước.
465
+ **Q: dùng được với monorepo không?**
466
+ A: Có. Stack-detector nhận diện Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) npm/yarn workspaces (`package.json#workspaces`). Mỗi app phần phân tích riêng. Một số layout monorepo khác như NX tuy chưa có nhánh detect riêng, nhưng pattern chung `apps/*/` và `packages/*/` thì scanner theo từng stack vẫn nhận ra được.
409
467
 
410
- **H: Làm sao sinh doc bằng tiếng Việt (hoặc ngôn ngữ khác)?**
411
- Đ: `npx claudeos-core init --lang vi`. Hỗ trợ 10 ngôn ngữ: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
468
+ **Q: Nếu Claude Code sinh ra rule tôi không đồng ý thì sao?**
469
+ A: Cứ sửa trực tiếp. Sau đó chạy `npx claudeos-core lint` để chắc rằng cấu trúc CLAUDE.md vẫn hợp lệ. Phần chỉnh sửa tay sẽ được giữ qua các lần `init` sau (miễn không kèm `--force`), vì cơ chế resume sẽ skip những pass đã có marker.
412
470
 
413
- **H: chạy với monorepo không?**
414
- Đ: Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) npm/yarn workspaces (`package.json#workspaces`) được stack-detector phát hiện. Mỗi app được phân tích riêng. Các layout monorepo khác (ví dụ NX) không được phát hiện đặc biệt, nhưng các pattern chung `apps/*/` và `packages/*/` vẫn được scanner theo từng stack nhặt được.
471
+ **Q: Báo bug đâu?**
472
+ A: Tại [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Các vấn đề bảo mật xin xem [SECURITY.md](SECURITY.md).
473
+
474
+ ---
415
475
 
416
- **H: Nếu Claude Code sinh ra rule tôi không đồng ý thì sao?**
417
- Đ: Sửa trực tiếp. Sau đó chạy `npx claudeos-core lint` để kiểm tra CLAUDE.md vẫn đúng cấu trúc. Các chỉnh sửa của bạn được giữ qua các lần `init` sau (không có `--force`) — cơ chế resume bỏ qua các pass đã có marker.
476
+ ## Nếu điều này tiết kiệm thời gian cho bạn
418
477
 
419
- **H: Báo bug đâu?**
420
- Đ: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Vấn đề bảo mật xem [SECURITY.md](SECURITY.md).
478
+ Một trên GitHub giúp dự án dễ được nhìn thấy hơn và giúp người khác tìm tới. Issue, PR và đóng góp stack template đều rất được hoan nghênh. Chi tiết trong [CONTRIBUTING.md](CONTRIBUTING.md).
421
479
 
422
480
  ---
423
481
 
424
- ## Documentation
482
+ ## Tài liệu
425
483
 
426
- | Chủ đề | Đọc tại |
484
+ | Chủ đề | Đọc đâu |
427
485
  |---|---|
428
- | Cách pipeline 4-pass hoạt động (sâu hơn diagram) | [docs/vi/architecture.md](docs/vi/architecture.md) |
429
- | Diagram trực quan (Mermaid) của kiến trúc | [docs/vi/diagrams.md](docs/vi/diagrams.md) |
430
- | Phát hiện stack — mỗi scanner tìm | [docs/vi/stacks.md](docs/vi/stacks.md) |
486
+ | Pipeline 4-pass hoạt động ra sao (sâu hơn diagram) | [docs/vi/architecture.md](docs/vi/architecture.md) |
487
+ | Diagram trực quan của kiến trúc (Mermaid) | [docs/vi/diagrams.md](docs/vi/diagrams.md) |
488
+ | Stack detection — mỗi scanner nhìn vào đâu | [docs/vi/stacks.md](docs/vi/stacks.md) |
431
489
  | Memory layer — decision log và failure pattern | [docs/vi/memory-layer.md](docs/vi/memory-layer.md) |
432
490
  | Chi tiết cả 5 validator | [docs/vi/verification.md](docs/vi/verification.md) |
433
- | Mọi lệnh CLI và tùy chọn | [docs/vi/commands.md](docs/vi/commands.md) |
434
- | Cài thủ công (không dùng `npx`) | [docs/vi/manual-installation.md](docs/vi/manual-installation.md) |
435
- | Override scanner `.claudeos-scan.json` | [docs/vi/advanced-config.md](docs/vi/advanced-config.md) |
436
- | An toàn: cái gì được giữ khi re-init | [docs/vi/safety.md](docs/vi/safety.md) |
437
- | So sánh với các công cụ tương tự (về phạm vi, không phải chất lượng) | [docs/vi/comparison.md](docs/vi/comparison.md) |
438
- | Lỗi và cách phục hồi | [docs/vi/troubleshooting.md](docs/vi/troubleshooting.md) |
491
+ | Tất cả lệnh CLI và option | [docs/vi/commands.md](docs/vi/commands.md) |
492
+ | Cài đặt thủ công (không qua `npx`) | [docs/vi/manual-installation.md](docs/vi/manual-installation.md) |
493
+ | Override scanner qua `.claudeos-scan.json` | [docs/vi/advanced-config.md](docs/vi/advanced-config.md) |
494
+ | An toàn: cái gì được giữ lại khi re-init | [docs/vi/safety.md](docs/vi/safety.md) |
495
+ | So sánh với các công cụ tương tự (về scope, không phải chất lượng) | [docs/vi/comparison.md](docs/vi/comparison.md) |
496
+ | Lỗi thường gặp và cách khôi phục | [docs/vi/troubleshooting.md](docs/vi/troubleshooting.md) |
439
497
 
440
498
  ---
441
499
 
442
500
  ## Đóng góp
443
501
 
444
- Chào đón đóng góp thêm hỗ trợ stack, cải thiện prompt, sửa bug. Xem [CONTRIBUTING.md](CONTRIBUTING.md).
502
+ Mọi đóng góp đều được hoan nghênh. Thêm hỗ trợ stack mới, cải thiện prompt, fix bug — đều rất tốt. Chi tiết trong [CONTRIBUTING.md](CONTRIBUTING.md).
445
503
 
446
- Quy tắc ứng xử chính sách bảo mật xem [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) và [SECURITY.md](SECURITY.md).
504
+ Code of Conductpolicy bảo mật [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) và [SECURITY.md](SECURITY.md).
447
505
 
448
- ## License
506
+ ## Giấy phép
449
507
 
450
- [ISC](LICENSE) miễn phí cho mọi mục đích, kể cả thương mại.
508
+ [ISC License](LICENSE). Miễn phí cho mọi mục đích sử dụng, kể cả thương mại. © 2025–2026 ClaudeOS-Core contributors.
451
509
 
452
510
  ---
453
511
 
454
- <sub>Xây dựng tận tâm bởi [@claudeos-core](https://github.com/claudeos-core). Nếu công cụ này tiết kiệm thời gian cho bạn, một ⭐ trên GitHub giúp nó được nhiều người biết đến.</sub>
512
+ <sub>Dự án được duy trì bởi team [claudeos-core](https://github.com/claudeos-core). Issue PR gửi về <https://github.com/claudeos-core/claudeos-core>.</sub>