claudeos-core 2.3.2 → 2.4.1

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 (36) hide show
  1. package/CHANGELOG.md +790 -74
  2. package/CODE_OF_CONDUCT.md +15 -0
  3. package/README.de.md +374 -876
  4. package/README.es.md +374 -875
  5. package/README.fr.md +374 -875
  6. package/README.hi.md +374 -875
  7. package/README.ja.md +374 -875
  8. package/README.ko.md +374 -874
  9. package/README.md +374 -876
  10. package/README.ru.md +374 -877
  11. package/README.vi.md +374 -875
  12. package/README.zh-CN.md +374 -874
  13. package/SECURITY.md +51 -0
  14. package/bin/commands/init.js +192 -37
  15. package/content-validator/index.js +97 -4
  16. package/health-checker/index.js +44 -10
  17. package/package.json +92 -90
  18. package/pass-json-validator/index.js +58 -7
  19. package/pass-prompts/templates/angular/pass3.md +15 -14
  20. package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
  21. package/pass-prompts/templates/common/pass3-footer.md +104 -0
  22. package/pass-prompts/templates/java-spring/pass3.md +19 -18
  23. package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
  24. package/pass-prompts/templates/node-express/pass3.md +18 -17
  25. package/pass-prompts/templates/node-fastify/pass3.md +11 -10
  26. package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
  27. package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
  28. package/pass-prompts/templates/node-vite/pass3.md +11 -10
  29. package/pass-prompts/templates/python-django/pass3.md +18 -17
  30. package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
  31. package/pass-prompts/templates/python-flask/pass3.md +9 -8
  32. package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
  33. package/plan-installer/domain-grouper.js +45 -5
  34. package/plan-installer/index.js +11 -1
  35. package/plan-installer/scanners/scan-java.js +98 -2
  36. package/plan-installer/stack-detector.js +44 -0
package/README.ru.md CHANGED
@@ -1,1017 +1,514 @@
1
1
  # ClaudeOS-Core
2
2
 
3
- **Единственный инструмент, который сначала читает ваш исходный код, подтверждает стек и паттерны детерминированным анализом, а затем генерирует правила Claude Code, точно адаптированные к вашему проекту.**
3
+ [![npm version](https://img.shields.io/npm/v/claudeos-core.svg?logo=npm&label=npm)](https://www.npmjs.com/package/claudeos-core)
4
+ [![CI](https://img.shields.io/github/actions/workflow/status/claudeos-core/claudeos-core/test.yml?branch=master&logo=github&label=CI)](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
5
+ [![tests](https://img.shields.io/badge/tests-736%20passing-brightgreen?logo=node.js&logoColor=white)](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
6
+ [![node](https://img.shields.io/node/v/claudeos-core.svg?logo=node.js&logoColor=white&label=node)](https://nodejs.org/)
7
+ [![license](https://img.shields.io/npm/l/claudeos-core.svg?color=blue)](LICENSE)
8
+ [![downloads](https://img.shields.io/npm/dm/claudeos-core.svg?logo=npm&color=blue&label=downloads)](https://www.npmjs.com/package/claudeos-core)
4
9
 
5
- ```bash
6
- npx claudeos-core init
7
- ```
8
-
9
- ClaudeOS-Core читает вашу кодовую базу, извлекает каждый найденный паттерн и генерирует полный набор Standards, Rules, Skills и Guides, адаптированных под _ваш_ проект. После этого, когда вы говорите Claude Code «Создай CRUD для заказов», он производит код, точно соответствующий вашим существующим паттернам.
10
-
11
- [🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
12
-
13
- ---
14
-
15
- ## Почему ClaudeOS-Core?
16
-
17
- Любой другой инструмент для Claude Code работает так:
18
-
19
- > **Человек описывает проект → LLM генерирует документацию**
20
-
21
- ClaudeOS-Core работает так:
22
-
23
- > **Код анализирует ваш исходник → Код строит адаптированный промпт → LLM генерирует документацию → Код верифицирует вывод**
24
-
25
- Это не мелкая разница. Вот почему это важно:
26
-
27
- ### Ключевая проблема: LLM угадывает. Код не угадывает.
28
-
29
- Когда вы просите Claude «проанализировать этот проект», он **угадывает** ваш стек, ORM, структуру доменов.
30
- Он может увидеть `spring-boot` в вашем `build.gradle`, но упустить, что вы используете MyBatis (а не JPA).
31
- Он может обнаружить директорию `user/`, но не понять, что ваш проект использует layer-first упаковку (Pattern A), а не domain-first (Pattern B).
32
-
33
- **ClaudeOS-Core не угадывает.** Прежде чем Claude увидит ваш проект, код на Node.js уже:
10
+ **Заставьте Claude Code следовать конвенциям _именно вашего_ проекта с первой попытки — а не общим дефолтам.**
34
11
 
35
- - Распарсил `build.gradle` / `package.json` / `pyproject.toml` и **подтвердил** ваш стек, ORM, БД и пакетный менеджер
36
- - Просканировал структуру директорий и **подтвердил** список доменов с количеством файлов
37
- - Классифицировал структуру вашего проекта в один из 5 Java-паттернов, Kotlin CQRS/BFF или Next.js App Router/FSD
38
- - Разбил домены на оптимально размерные группы, помещающиеся в context window Claude
39
- - Собрал стек-специфический промпт со всеми подтверждёнными фактами
12
+ Детерминированный Node.js scanner сначала читает ваш код; затем 4-pass конвейер Claude пишет полный набор — `CLAUDE.md` + автоматически загружаемые `.claude/rules/` + standards + skills + L4 memory. 10 языков вывода, 5 post-generation validator-ов и явный path allowlist, не позволяющий LLM выдумывать файлы или фреймворки, отсутствующие в вашем коде.
40
13
 
41
- К моменту, когда Claude получает промпт, угадывать больше нечего. Стек подтверждён. Домены подтверждены. Паттерн структуры подтверждён. Единственная работа Claude — сгенерировать документацию, соответствующую этим **подтверждённым фактам**.
14
+ Работает на [**12 стеках**](#supported-stacks) (включая monorepo) одна команда `npx`, без конфигурации, resume-safe, идемпотентно.
42
15
 
43
- ### Результат
44
-
45
- Другие инструменты создают «в целом хорошую» документацию.
46
- ClaudeOS-Core создаёт документацию, которая знает, что ваш проект использует `ApiResponse.ok()` (а не `ResponseEntity.success()`), что ваши MyBatis XML-мапперы находятся в `src/main/resources/mybatis/mappers/`, и что ваша структура пакетов — `com.company.module.{domain}.controller` — потому что он прочитал ваш реальный код.
47
-
48
- ### До и после
49
-
50
- **Без ClaudeOS-Core** — вы просите Claude Code создать Order CRUD:
51
- ```
52
- ❌ Использует JPA-style репозиторий (ваш проект использует MyBatis)
53
- ❌ Создаёт ResponseEntity.success() (ваш враппер — ApiResponse.ok())
54
- ❌ Размещает файлы в order/controller/ (ваш проект использует controller/order/)
55
- ❌ Генерирует английские комментарии (ваша команда пишет русские комментарии)
56
- → Вы тратите 20 минут на исправление каждого сгенерированного файла
57
- ```
58
-
59
- **С ClaudeOS-Core** — `.claude/rules/` уже содержит ваши подтверждённые паттерны:
60
- ```
61
- ✅ Генерирует MyBatis mapper + XML (обнаружено из build.gradle)
62
- ✅ Использует ApiResponse.ok() (извлечено из вашего реального исходника)
63
- ✅ Размещает файлы в controller/order/ (Pattern A подтверждён сканированием структуры)
64
- ✅ Русские комментарии (применён --lang ru)
65
- → Сгенерированный код сразу соответствует конвенциям вашего проекта
16
+ ```bash
17
+ npx claudeos-core init
66
18
  ```
67
19
 
68
- Эта разница накапливается. 10 задач/день × 20 минут экономии = **более 3 часов/день**.
20
+ [🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
69
21
 
70
22
  ---
71
23
 
72
- ## Обеспечение качества после генерации (v2.3.0)
73
-
74
- Генерация — это только половина задачи. Другая половина — **знать, что результат корректен** — во всех 10 выходных языках, во всех 11 шаблонах стеков, в проектах любого размера. v2.3.0 добавляет два детерминированных валидатора, которые запускаются после генерации и не зависят от самопроверок LLM.
75
-
76
- ### `claude-md-validator` — структурные инварианты
77
-
78
- Каждый сгенерированный `CLAUDE.md` проверяется против 25 структурных инвариантов, использующих только языково-независимые сигналы: markdown-синтаксис (`^## `, `^### `), литеральные имена файлов (`decision-log.md`, `failure-patterns.md` — никогда не переводятся), количество секций, количество подсекций в секции, количество строк таблиц. Один и тот же валидатор байт в байт выносит одинаковый вердикт для `CLAUDE.md`, сгенерированного на английском, корейском, японском, вьетнамском, хинди, русском, испанском, китайском, французском или немецком.
24
+ ## Что это такое?
79
25
 
80
- Кросс-языковая гарантия проверяется test-фикстурами на всех 10 языках, включая bad-case фикстуры на 6 из этих языков, производящие идентичные сигнатуры ошибок. Когда инвариант падает на вьетнамском проекте, исправление такое же, как при падении на немецком проекте.
26
+ Вы используете Claude Code. Он мощный, но каждая сессия начинается с нуля у него нет памяти о том, как устроен _ваш_ проект. Поэтому он откатывается на «в целом хорошие» дефолты, которые редко совпадают с тем, что реально делает ваша команда:
81
27
 
82
- ### `content-validator [10/10]` проверка утверждений о путях и согласованность MANIFEST
28
+ - Ваша команда использует **MyBatis**, а Claude генерирует JPA-репозитории.
29
+ - Ваша обёртка для ответов — `ApiResponse.ok()`, а Claude пишет `ResponseEntity.success()`.
30
+ - Ваши пакеты — layer-first (`controller/order/`), а Claude создаёт domain-first (`order/controller/`).
31
+ - Ваши ошибки идут через централизованный middleware, а Claude разбрасывает `try/catch` по каждому endpoint.
83
32
 
84
- Читает каждую ссылку на путь в обратных кавычках (`src/...`, `.claude/rules/...`, `claudeos-core/skills/...`) из всех сгенерированных `.md`-файлов и сверяет их с реальной файловой системой. Ловит два класса сбоев LLM, которые раньше не обнаруживал ни один инструмент:
33
+ Хочется иметь набор `.claude/rules/` для каждого проекта Claude Code автоматически загружает его в каждой сессии но писать эти rules вручную для каждого нового repo занимает часы, и они расходятся с кодом по мере его эволюции.
85
34
 
86
- - **`STALE_PATH`** когда Pass 3 или Pass 4 выдумывает правдоподобный, но несуществующий путь. Три канонических класса: (1) **ренормализация идентификатора в имя файла** — вывод имени файла из TypeScript-константы в ALL_CAPS или Java-аннотации, хотя реальный файл следует другой конвенции именования; (2) **выдумывание точки входа по конвенции фреймворка** — предположение стандартного файла входа (main-модуль Vite, app-router providers Next.js и т.п.) в проекте, выбравшем иную раскладку; (3) **выдумывание правдоподобно названной утилиты** — указание конкретного имени файла для хелпера, который «естественно существовал бы» в видимой директории.
87
- - **`MANIFEST_DRIFT`** — когда `claudeos-core/skills/00.shared/MANIFEST.md` регистрирует skill, о котором `CLAUDE.md §6` не упоминает (или наоборот). Распознаёт общую схему orchestrator + sub-skills, где `CLAUDE.md §6` — точка входа, а `MANIFEST.md` — полный реестр; sub-skill'ы считаются покрытыми через их родительский orchestrator.
35
+ **ClaudeOS-Core пишет их за вас, прямо из вашего реального исходного кода.** Детерминированный Node.js scanner сначала читает ваш проект (стек, ORM, layout пакетов, конвенции, пути файлов). Затем 4-pass конвейер Claude превращает извлечённые факты в полный набор документации:
88
36
 
89
- Валидатор парой работает с prompt-time-предотвращением в `pass3-footer.md` и `pass4.md`: блоки anti-pattern, документирующие конкретные классы галлюцинаций (префикс родительского каталога, конвенции библиотек Vite/MSW/Vitest/Jest/RTL), и явное positive guidance ограничивать правила уровнем каталога, когда конкретного имени файла нет в `pass3a-facts.md`.
37
+ - **`CLAUDE.md`**индекс проекта, который Claude читает в каждой сессии
38
+ - **`.claude/rules/`** — автоматически загружаемые rules по категориям (`00.core` / `10.backend` / `20.frontend` / `30.security-db` / `40.infra` / `60.memory` / `70.domains` / `80.verification`)
39
+ - **`claudeos-core/standard/`** — справочные документы («почему» за каждым rule)
40
+ - **`claudeos-core/skills/`** — переиспользуемые паттерны (CRUD scaffolding, шаблоны страниц)
41
+ - **`claudeos-core/memory/`** — decision log + failure patterns, растущие вместе с проектом
90
42
 
91
- ### Запуск валидации на любом проекте
43
+ Поскольку scanner передаёт Claude явный path allowlist, LLM **не может выдумать файлы или фреймворки, которых нет в вашем коде**. Пять post-generation validator-ов (`claude-md-validator`, `content-validator`, `pass-json-validator`, `plan-validator`, `sync-checker`) проверяют вывод до отправки — language-invariant, поэтому одни и те же правила применяются независимо от того, генерируете ли вы на английском, русском или одном из 8 других языков.
92
44
 
93
- ```bash
94
- npx claudeos-core health # все валидаторы — единый вердикт go/no-go
95
- npx claudeos-core lint # только структурные инварианты CLAUDE.md (любой язык)
96
45
  ```
97
-
98
- ---
99
-
100
- ## Поддерживаемые стеки
101
-
102
- | Стек | Обнаружение | Глубина анализа |
103
- |---|---|---|
104
- | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 паттернов пакетов | 10 категорий, 59 подпунктов |
105
- | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, автоопределение CQRS/BFF | 12 категорий, 95 подпунктов |
106
- | **Node.js / Express** | `package.json` | 9 категорий, 57 подпунктов |
107
- | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 категорий, 68 подпунктов |
108
- | **Next.js / React** | `package.json`, `next.config.*`, поддержка FSD | 9 категорий, 55 подпунктов |
109
- | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 категорий, 58 подпунктов |
110
- | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 категорий, 55 подпунктов |
111
- | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 категорий, 58 подпунктов |
112
- | **Node.js / Fastify** | `package.json` | 10 категорий, 62 подпункта |
113
- | **Vite / React SPA** | `package.json`, `vite.config.*` | 9 категорий, 55 подпунктов |
114
- | **Angular** | `package.json`, `angular.json` | 12 категорий, 78 подпунктов |
115
-
116
- Автоматически определяется: язык и версия, фреймворк и версия (включая Vite как SPA-фреймворк), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy и др.), база данных (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), пакетный менеджер (Gradle, Maven, npm, yarn, pnpm, pip, poetry), архитектура (CQRS, BFF — из имён модулей), мультимодульная структура (из settings.gradle), монорепозиторий (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **конфигурация runtime из `.env.example`** (v2.2.0 — извлечение port/host/API-target из 16+ соглашений имён переменных во фреймворках Vite · Next.js · Nuxt · Angular · Node · Python).
117
-
118
- **Вам не нужно ничего указывать. Всё определяется автоматически.**
119
-
120
- ### Конфигурация runtime на основе `.env` (v2.2.0)
121
-
122
- v2.2.0 добавляет `lib/env-parser.js`, чтобы генерируемый `CLAUDE.md` отражал то, что проект действительно декларирует, а не дефолты фреймворка.
123
-
124
- - **Порядок поиска**: `.env.example` (канонический, закоммиченный) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. Вариант `.example` побеждает, потому что он является developer-neutral shape-of-truth, а не локальными переопределениями одного контрибьютора.
125
- - **Распознаваемые соглашения имён port-переменных**: `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / generic `PORT`. Framework-специфичные имена побеждают generic `PORT`, когда присутствуют оба.
126
- - **Host и API target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` и т.д.
127
- - **Приоритет**: Spring Boot `application.yml` `server.port` по-прежнему выигрывает (framework-native config), затем `.env`-декларированный порт, затем framework default (Vite 5173, Next.js 3000, Django 8000 и т.д.) в качестве последнего средства.
128
- - **Редактирование чувствительных переменных**: значения переменных, соответствующих паттернам `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT`, заменяются на `***REDACTED***` до того, как достигнут любого downstream-генератора. Defense-in-depth против случайно закоммиченных секретов в `.env.example`. `DATABASE_URL` явно внесён в whitelist для back-compat идентификации БД в stack-detector.
129
-
130
- ### Обнаружение Java-доменов (5 паттернов с фолбэком)
131
-
132
- | Приоритет | Паттерн | Структура | Пример |
133
- |---|---|---|---|
134
- | A | Layer-first | `controller/{domain}/` | `controller/user/UserController.java` |
135
- | B | Domain-first | `{domain}/controller/` | `user/controller/UserController.java` |
136
- | D | Префикс модуля | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
137
- | E | DDD/Гексагональный | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
138
- | C | Плоский | `controller/*.java` | `controller/UserController.java` → извлекает `user` из имени класса |
139
-
140
- Домены только с сервисами (без контроллеров) также обнаруживаются через директории `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Пропускаются: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2` и т.д.
141
-
142
- ### Обнаружение доменов Kotlin мультимодульных проектов
143
-
144
- Для проектов Kotlin с Gradle-мультимодульной структурой (например, CQRS-монорепо):
145
-
146
- | Шаг | Действие | Пример |
147
- |---|---|---|
148
- | 1 | Сканирование `settings.gradle.kts` на `include()` | Находит 14 модулей |
149
- | 2 | Определение типа модуля из имени | `reservation-command-server` → тип: `command` |
150
- | 3 | Извлечение домена из имени модуля | `reservation-command-server` → домен: `reservation` |
151
- | 4 | Группировка одного домена по модулям | `reservation-command-server` + `common-query-server` → 1 домен |
152
- | 5 | Определение архитектуры | Есть модули `command` + `query` → CQRS |
153
-
154
- Поддерживаемые типы модулей: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Общие библиотеки (`shared-lib`, `integration-lib`) определяются как специальные домены.
155
-
156
- ### Обнаружение фронтенд-доменов
157
-
158
- - **App Router**: `app/{domain}/page.tsx` (Next.js)
159
- - **Pages Router**: `pages/{domain}/index.tsx`
160
- - **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
161
- - **Разделение RSC/Client**: Обнаруживает паттерн `client.tsx`, отслеживает разделение Server/Client-компонентов
162
- - **Нестандартные вложенные пути**: Обнаруживает pages, components и FSD-слои под путями `src/*/` (например, `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
163
- - **Обнаружение platform-/tier-split (v2.0.0)**: Распознаёт раскладки `src/{platform}/{subapp}/` — `{platform}` может быть device-/target-ключевым словом (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) или ключевым словом уровня доступа (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Выдаёт один домен на пару `(platform, subapp)` с именем `{platform}-{subapp}` и отдельными счётчиками routes/components/layouts/hooks на каждый домен. Работает одновременно для Angular, Next.js, React и Vue (мульти-расширение glob `{tsx,jsx,ts,js,vue}`). Требует ≥2 исходных файла на subapp, чтобы избежать шумных доменов из 1 файла.
164
- - **Platform-split для монорепо (v2.0.0)**: Platform-сканирование также сопоставляет `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm-workspace с `src/`) и `{apps,packages}/{platform}/{subapp}/` (workspaces без обёртки `src/`).
165
- - **Fallback E — файл routes (v2.0.0)**: Когда основные сканеры + Fallback A–D все возвращают 0, делается glob `**/routes/*.{tsx,jsx,ts,js,vue}` с группировкой по имени родительской директории `routes`. Улавливает проекты React Router с файловым роутингом (CRA/Vite + `react-router`), не соответствующие Next.js `page.tsx` или FSD-раскладкам. Общие имена родителей (`src`, `app`, `pages`) отфильтровываются.
166
- - **Config-фолбэк**: Определяет Next.js/Vite/Nuxt из файлов конфигурации, когда их нет в `package.json` (поддержка монорепо)
167
- - **Глубокий фолбэк по директориям**: Для проектов React/CRA/Vite/Vue/RN сканирует `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` на любой глубине
168
- - **Общие ignore-списки (v2.0.0)**: Все сканеры используют общие `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) и `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`), чтобы сборочные выводы и тестовые фикстуры не раздували счётчики файлов по доменам.
169
-
170
- ### Переопределения сканеров (v2.0.0)
171
-
172
- Положите опциональный `.claudeos-scan.json` в корне проекта, чтобы расширить дефолты сканеров без редактирования тулкита. Все поля **аддитивные** — записи пользователя расширяют дефолты, никогда не заменяют их:
173
-
174
- ```json
175
- {
176
- "frontendScan": {
177
- "platformKeywords": ["kiosk"],
178
- "skipSubappNames": ["legacy"],
179
- "minSubappFiles": 3
180
- }
181
- }
46
+ До: Вы → Claude Code → "в целом хороший" код → ручные правки каждый раз
47
+ После: Вы → Claude Code → код, соответствующий ВАШЕМУ проекту → используйте как есть
182
48
  ```
183
49
 
184
- | Поле | Дефолт | Назначение |
185
- |---|---|---|
186
- | `platformKeywords` | встроенный список выше | Дополнительные ключевые слова `{platform}` для platform-сканирования (например, `kiosk`, `vr`, `embedded`) |
187
- | `skipSubappNames` | только структурные директории | Дополнительные имена subapp, исключаемые из выдачи доменов platform-сканером |
188
- | `minSubappFiles` | `2` | Переопределение минимального количества файлов, после которого subapp становится доменом |
189
-
190
- Отсутствующий файл или некорректный JSON → тихо откатывается на дефолты (без краша). Типичное использование: opt-in короткого сокращения (`adm`, `bo`), которое встроенный список исключает как слишком неоднозначное, или повышение `minSubappFiles` для шумных монорепо.
191
-
192
50
  ---
193
51
 
194
- ## Быстрый старт
195
-
196
- ### Требования
197
-
198
- - **Node.js** v18+
199
- - **Claude Code CLI** (установлен и аутентифицирован)
200
-
201
- ### Установка
202
-
203
- ```bash
204
- cd /your/project/root
205
-
206
- # Вариант A: npx (рекомендуется — установка не нужна)
207
- npx claudeos-core init
208
-
209
- # Вариант B: глобальная установка
210
- npm install -g claudeos-core
211
- claudeos-core init
212
-
213
- # Вариант C: проектная devDependency
214
- npm install --save-dev claudeos-core
215
- npx claudeos-core init
216
-
217
- # Вариант D: git clone (для разработки/контрибьюций)
218
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
219
-
220
- # Кросс-платформенно (PowerShell, CMD, Bash, Zsh — любой терминал)
221
- node claudeos-core-tools/bin/cli.js init
222
-
223
- # Linux/macOS (только Bash)
224
- bash claudeos-core-tools/bootstrap.sh
52
+ ## Демонстрация на реальном проекте
53
+
54
+ Запуск на [`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. Результат: **75 generated files**, общее время **53 минуты**, все validators ✅.
55
+
56
+ <p align="center">
57
+ <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">
58
+ </p>
59
+
60
+ <details>
61
+ <summary><strong>📺 Вывод терминала (текстовая версия, для поиска и копирования)</strong></summary>
62
+
63
+ ```text
64
+ ╔════════════════════════════════════════════════════╗
65
+ ║ ClaudeOS-Core — Bootstrap (4-Pass) ║
66
+ ╚════════════════════════════════════════════════════╝
67
+ Project root: spring-boot-realworld-example-app
68
+ Language: English (en)
69
+
70
+ [Phase 1] Detecting stack...
71
+ Language: java 11
72
+ Framework: spring-boot 2.6.3
73
+ Database: sqlite
74
+ ORM: mybatis
75
+ PackageMgr: gradle
76
+
77
+ [Phase 2] Scanning structure...
78
+ Backend: 2 domains
79
+ Total: 2 domains
80
+ Package: io.spring.infrastructure
81
+
82
+ [Phase 5] Active domains...
83
+ ✅ 00.core ✅ 10.backend ⏭️ 20.frontend
84
+ ✅ 30.security-db ✅ 40.infra
85
+ ✅ 80.verification ✅ 90.optional
86
+
87
+ [4] Pass 1 — Deep analysis per domain group...
88
+ ✅ pass1-1.json created (5m 34s)
89
+ [█████░░░░░░░░░░░░░░░] 25% (1/4)
90
+
91
+ [5] Pass 2 — Merging analysis results...
92
+ ✅ pass2-merged.json created (4m 22s)
93
+ [██████████░░░░░░░░░░] 50% (2/4)
94
+
95
+ [6] Pass 3 — Generating all files...
96
+ 🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
97
+ ✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
98
+ ✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
99
+ ✅ 3c complete (12m 35s) — 13 skills + 9 guides
100
+ ✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
101
+ 🎉 Pass 3 split complete: 4/4 stages successful
102
+ [███████████████░░░░░] 75% (3/4)
103
+
104
+ [7] Pass 4 — Memory scaffolding...
105
+ 📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
106
+ ✅ Pass 4 complete (5m)
107
+ 📋 Gap-fill: all 12 expected files already present
108
+ [████████████████████] 100% (4/4)
109
+
110
+ ╔═══════════════════════════════════════╗
111
+ ║ ClaudeOS-Core — Health Checker ║
112
+ ╚═══════════════════════════════════════╝
113
+ ✅ plan-validator pass
114
+ ✅ sync-checker pass
115
+ ✅ content-validator pass
116
+ ✅ pass-json-validator pass
117
+ ✅ All systems operational
118
+
119
+ [Lint] ✅ CLAUDE.md structure valid (25 checks)
120
+ [Content] ✅ All content validation passed
121
+ Total: 0 advisories, 0 notes
122
+
123
+ ╔════════════════════════════════════════════════════╗
124
+ ║ ✅ ClaudeOS-Core — Complete ║
125
+ ║ Files created: 75 ║
126
+ ║ Domains analyzed: 1 group ║
127
+ ║ L4 scaffolded: memory + rules ║
128
+ ║ Output language: English ║
129
+ ║ Total time: 53m 8s ║
130
+ ╚════════════════════════════════════════════════════╝
131
+ ```
132
+
133
+ </details>
134
+
135
+ <details>
136
+ <summary><strong>📄 Что попадает в ваш <code>CLAUDE.md</code> (реальный фрагмент — Section 1 + 2)</strong></summary>
137
+
138
+ ```markdown
139
+ # CLAUDE.md — spring-boot-realworld-example-app
140
+
141
+ > Reference implementation of the RealWorld backend specification on
142
+ > Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
143
+ > over a hexagonal MyBatis persistence layer.
144
+
145
+ ## 1. Role Definition
146
+
147
+ As the senior developer for this repository, you are responsible for
148
+ writing, modifying, and reviewing code. Responses must be written in English.
149
+ A Java Spring Boot REST + GraphQL API server organized around a hexagonal
150
+ (ports & adapters) architecture, with a CQRS-lite read/write split inside
151
+ an XML-driven MyBatis persistence layer and JWT-based authentication.
152
+
153
+ ## 2. Project Overview
154
+
155
+ | Item | Value |
156
+ |---|---|
157
+ | Language | Java 11 |
158
+ | Framework | Spring Boot 2.6.3 |
159
+ | Build Tool | Gradle (Groovy DSL) |
160
+ | Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
161
+ | Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
162
+ | Migration | Flyway — single baseline `V1__create_tables.sql` |
163
+ | API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
164
+ | Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
165
+ | Server Port | 8080 (default) |
166
+ | Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
225
167
  ```
226
168
 
227
- ### Язык вывода (10 языков)
169
+ Каждое значение выше точные координаты зависимостей, имя файла `dev.db`, имя миграции `V1__create_tables.sql`, «no JPA» — извлечено сканером из `build.gradle` / `application.properties` / дерева исходников ещё до того, как Claude начал писать файл. Ничего не угадано.
228
170
 
229
- Когда вы запускаете `init` без `--lang`, появляется интерактивный селектор — используйте стрелки или цифровые клавиши для выбора:
171
+ </details>
230
172
 
231
- ```
232
- ╔══════════════════════════════════════════════════╗
233
- ║ Выберите язык сгенерированных документов ║
234
- ╚══════════════════════════════════════════════════╝
235
-
236
- Сгенерированные файлы (CLAUDE.md, Standards, Rules,
237
- Skills, Guides) будут написаны на русском языке.
238
-
239
- 1. en — English
240
- 2. ko — 한국어 (Korean)
241
- 3. zh-CN — 简体中文 (Chinese Simplified)
242
- 4. ja — 日本語 (Japanese)
243
- 5. es — Español (Spanish)
244
- 6. vi — Tiếng Việt (Vietnamese)
245
- 7. hi — हिन्दी (Hindi)
246
- ❯ 8. ru — Русский (Russian)
247
- 9. fr — Français (French)
248
- 10. de — Deutsch (German)
249
-
250
- ↑↓ Движение 1-0 Переход Enter Выбрать ESC Отмена
251
- ```
173
+ <details>
174
+ <summary><strong>🛡️ Реальное автоматически загружаемое правило (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
252
175
 
253
- Описание меняется на выбранный язык при навигации. Чтобы пропустить селектор, передайте `--lang` напрямую:
176
+ ````markdown
177
+ ---
178
+ paths:
179
+ - "**/*"
180
+ ---
254
181
 
255
- ```bash
256
- npx claudeos-core init --lang ko # Корейский
257
- npx claudeos-core init --lang ja # Японский
258
- npx claudeos-core init --lang en # Английский (по умолчанию)
182
+ # Controller Rules
183
+
184
+ ## REST (`io.spring.api.*`)
185
+
186
+ - Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
187
+ Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
188
+ - Each controller method calls exactly ONE application service method. Multi-source
189
+ composition lives in the application service.
190
+ - Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
191
+ - Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
192
+ `io.spring.application.{aggregate}.*`.
193
+ - Resolve the current user via `@AuthenticationPrincipal User`.
194
+ - Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
195
+ (`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
196
+
197
+ ## GraphQL (`io.spring.graphql.*`)
198
+
199
+ - DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
200
+ Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
201
+ - Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
202
+
203
+ ## Examples
204
+
205
+ ✅ Correct:
206
+ ```java
207
+ @PostMapping
208
+ public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
209
+ @Valid @RequestBody NewArticleParam param) {
210
+ Article article = articleCommandService.createArticle(param, user);
211
+ ArticleData data = articleQueryService.findById(article.getId(), user)
212
+ .orElseThrow(ResourceNotFoundException::new);
213
+ return ResponseEntity.ok(Map.of("article", data));
214
+ }
259
215
  ```
260
216
 
261
- > **Примечание:** Это задаёт язык только для сгенерированных файлов документации. Анализ кода (Pass 1–2) всегда выполняется на английском; сгенерированный вывод (Pass 3) пишется на выбранном вами языке. Примеры кода внутри сгенерированных файлов сохраняют оригинальный синтаксис языка программирования.
262
-
263
- Готово. Через 10 минут (малый проект) — 2 часа (монорепо из 60+ доменов) вся документация будет сгенерирована и готова к использованию. CLI показывает прогресс-бар с процентом, прошедшим временем и ETA для каждого прохода. См. [Автомасштабирование по размеру проекта](#автомасштабирование-по-размеру-проекта) для детального времени по размерам проекта.
264
-
265
- ### Ручная пошаговая установка
266
-
267
- Если вам нужен полный контроль над каждой фазой или если автоматический пайплайн падает на каком-то шаге — вы можете запустить каждую стадию вручную. Это также полезно для понимания того, как ClaudeOS-Core работает внутри.
268
-
269
- #### Шаг 1: Клонирование и установка зависимостей
270
-
271
- ```bash
272
- cd /your/project/root
273
-
274
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
275
- cd claudeos-core-tools && npm install && cd ..
217
+ Incorrect:
218
+ ```java
219
+ @PostMapping
220
+ public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
221
+ try {
222
+ articleCommandService.createArticle(p, currentUser);
223
+ } catch (Exception e) { // NOlet CustomizeExceptionHandler handle it
224
+ return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
225
+ }
226
+ return ResponseEntity.ok().build();
227
+ }
276
228
  ```
229
+ ````
277
230
 
278
- #### Шаг 2: Создание структуры директорий
231
+ Glob `paths: ["**/*"]` означает, что Claude Code автоматически загружает это правило при редактировании любого файла в проекте. Каждое имя класса, путь пакета и exception handler в правиле берутся прямо из просканированного кода — включая реальные `CustomizeExceptionHandler` и `JacksonCustomizations` этого проекта.
279
232
 
280
- ```bash
281
- # Rules (v2.0.0: добавлена 60.memory)
282
- mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
233
+ </details>
283
234
 
284
- # Standards
285
- mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
235
+ <details>
236
+ <summary><strong>🧠 Автоматически сгенерированный сид <code>decision-log.md</code> (реальный фрагмент)</strong></summary>
286
237
 
287
- # Skills
288
- mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
238
+ ```markdown
239
+ ## 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
289
240
 
290
- # Guide, Database, MCP, Generated, Memory (v2.0.0: добавлена memory; v2.1.0: удалена plan)
291
- mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
292
- mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
241
+ - **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
242
+ `io.spring.core.article.ArticleRepository`) implemented by
243
+ `io.spring.infrastructure.repository.MyBatis*Repository` adapters.
244
+ The domain layer has zero `org.springframework.*` /
245
+ `org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
246
+ - **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
247
+ `BaseMapper`. None adopted.
248
+ - **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
249
+ hand-written XML statements under `src/main/resources/mapper/*.xml`.
250
+ Hexagonal port/adapter wiring keeps the domain framework-free.
251
+ - **Consequences:** Every SQL lives in XML — `@Select`/`@Insert`/`@Update`/`@Delete`
252
+ annotations are forbidden. New aggregates require both a
253
+ `core.{aggregate}.{Aggregate}Repository` port AND a
254
+ `MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
255
+ split the persistence model.
293
256
  ```
294
257
 
295
- > **Примечание v2.1.0:** Директория `claudeos-core/plan/` больше не создаётся. Генерация master plan удалена, потому что master plans были внутренним бэкапом, который Claude Code никогда не читал в рантайме, а их агрегация вызывала отказы `Prompt is too long`. Используйте `git` для бэкапа/восстановления.
296
-
297
- #### Шаг 3: Запуск plan-installer (анализ проекта)
298
-
299
- Сканирует ваш проект, определяет стек, находит домены, разбивает их на группы и генерирует промпты.
300
-
301
- ```bash
302
- node claudeos-core-tools/plan-installer/index.js
303
- ```
258
+ Pass 4 заполняет `decision-log.md` архитектурными решениями, извлечёнными из `pass2-merged.json`, чтобы будущие сессии помнили *почему* кодовая база выглядит так, как выглядит не только *как* она выглядит. Каждый рассмотренный вариант («JPA/Hibernate», «MyBatis-Plus») и каждое следствие основаны на реальном блоке зависимостей `build.gradle`.
304
259
 
305
- **Вывод (в `claudeos-core/generated/`):**
306
- - `project-analysis.json` — обнаруженный стек, домены, информация о фронтенде
307
- - `domain-groups.json` — группы доменов для Pass 1
308
- - `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — промпты анализа
309
- - `pass2-prompt.md` — промпт слияния
310
- - `pass3-prompt.md` — шаблон промпта Pass 3 с предвставленным блоком Phase 1 «Read Once, Extract Facts» (Rules A–E). Автоматический пайплайн разбивает Pass 3 на несколько стадий в рантайме; этот шаблон подаётся каждой стадии.
311
- - `pass3-context.json` — облегчённая сводка проекта (< 5 KB, собирается после Pass 2), которую промпты Pass 3 предпочитают вместо полного `pass2-merged.json` (v2.1.0)
312
- - `pass4-prompt.md` — промпт L4 memory scaffolding (v2.0.0; использует тот же `staging-override.md` для записей правил `60.memory/`)
260
+ </details>
313
261
 
314
- Вы можете изучить эти файлы, чтобы проверить точность обнаружения перед продолжением.
262
+ ---
315
263
 
316
- #### Шаг 4: Pass 1 — Глубокий анализ кода (по группам доменов)
264
+ ## Quick Start
317
265
 
318
- Запустите Pass 1 для каждой группы доменов. Проверьте `domain-groups.json` на количество групп.
266
+ **Предварительные требования:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) установлен и аутентифицирован.
319
267
 
320
268
  ```bash
321
- # Проверить количество групп
322
- cat claudeos-core/generated/domain-groups.json | node -e "
323
- const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
324
- g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
325
- "
326
-
327
- # Запустить Pass 1 для каждой группы (замените домены и номер группы)
328
- # Примечание: v1.6.1+ использует Node.js String.replace() вместо perl — perl
329
- # больше не требуется, а семантика replacement-функции предотвращает regex-инъекции
330
- # из символов $/&/$1, которые могут появиться в именах доменов.
331
- #
332
- # Для группы 1:
333
- DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
334
- const fs = require('fs');
335
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
336
- const out = tpl
337
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
338
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
339
- process.stdout.write(out);
340
- " | claude -p --dangerously-skip-permissions
341
-
342
- # Для группы 2 (если есть):
343
- DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
344
- const fs = require('fs');
345
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
346
- const out = tpl
347
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
348
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
349
- process.stdout.write(out);
350
- " | claude -p --dangerously-skip-permissions
351
-
352
- # Для фронтенд-групп замените pass1-backend-prompt.md → pass1-frontend-prompt.md
353
- ```
269
+ # 1. Перейдите в корень проекта
270
+ cd my-spring-boot-project
354
271
 
355
- **Проверка:** `ls claudeos-core/generated/pass1-*.json` должен показать по одному JSON на группу.
356
-
357
- #### Шаг 5: Pass 2 — Слияние результатов анализа
272
+ # 2. Запустите init (анализирует код и просит Claude написать rules)
273
+ npx claudeos-core init
358
274
 
359
- ```bash
360
- cat claudeos-core/generated/pass2-prompt.md \
361
- | claude -p --dangerously-skip-permissions
275
+ # 3. Готово. Откройте Claude Code и начните кодить — rules уже загружены.
362
276
  ```
363
277
 
364
- **Проверка:** `claudeos-core/generated/pass2-merged.json` должен существовать с 9+ ключами верхнего уровня.
365
-
366
- #### Шаг 6: Pass 3 — Генерация всей документации (разбита на несколько стадий)
367
-
368
- **Примечание v2.1.0:** Pass 3 **всегда запускается в split-режиме** автоматическим пайплайном. Каждая стадия — это отдельный вызов `claude -p` со свежим context window, поэтому переполнение из-за накопления вывода структурно невозможно независимо от размера проекта. Шаблон `pass3-prompt.md` собирается для каждой стадии с директивой `STAGE:`, которая говорит Claude, какой подмножество файлов выдать. Для ручного режима самый простой путь всё ещё — подать полный шаблон и позволить Claude сгенерировать всё за один вызов, но это надёжно только на малых проектах (≤5 доменов). Для всего крупнее используйте `npx claudeos-core init`, чтобы split-раннер управлял оркестрацией стадий.
278
+ **Что вы получаете** после завершения `init`:
369
279
 
370
- **Single-call режим (только малые проекты, ≤5 доменов):**
371
-
372
- ```bash
373
- cat claudeos-core/generated/pass3-prompt.md \
374
- | claude -p --dangerously-skip-permissions
375
280
  ```
281
+ your-project/
282
+ ├── .claude/
283
+ │ └── rules/ ← Claude Code загружает автоматически
284
+ │ ├── 00.core/ (общие rules — именование, архитектура)
285
+ │ ├── 10.backend/ (backend stack rules, если есть)
286
+ │ ├── 20.frontend/ (frontend stack rules, если есть)
287
+ │ ├── 30.security-db/ (конвенции безопасности и БД)
288
+ │ ├── 40.infra/ (env, логирование, CI/CD)
289
+ │ ├── 50.sync/ (напоминания о синхронизации документации — rules only)
290
+ │ ├── 60.memory/ (memory rules — Pass 4, rules only)
291
+ │ ├── 70.domains/{type}/ (rules по доменам, type = backend|frontend)
292
+ │ └── 80.verification/ (стратегия тестирования + напоминания о верификации сборки)
293
+ ├── claudeos-core/
294
+ │ ├── standard/ ← Справочные документы (зеркалят структуру категорий)
295
+ │ │ ├── 00.core/ (обзор проекта, архитектура, именование)
296
+ │ │ ├── 10.backend/ (backend reference — если backend stack)
297
+ │ │ ├── 20.frontend/ (frontend reference — если frontend stack)
298
+ │ │ ├── 30.security-db/ (security & DB reference)
299
+ │ │ ├── 40.infra/ (env / логирование / CI-CD reference)
300
+ │ │ ├── 70.domains/{type}/ (reference по доменам)
301
+ │ │ ├── 80.verification/ (build / startup / testing reference — standard only)
302
+ │ │ └── 90.optional/ (специфика стека — standard only)
303
+ │ ├── skills/ (повторно используемые паттерны, которые Claude может применить)
304
+ │ ├── guide/ (how-to гайды для типовых задач)
305
+ │ ├── database/ (обзор схемы, гайд по миграциям)
306
+ │ ├── mcp-guide/ (заметки по интеграции MCP)
307
+ │ └── memory/ (decision log, failure patterns, compaction)
308
+ └── CLAUDE.md (индекс, который Claude читает первым)
309
+ ```
310
+
311
+ Категории, разделяющие одинаковый числовой prefix между `rules/` и `standard/`, представляют одну и ту же концептуальную область (например, `10.backend` rules ↔ `10.backend` standards). Категории только-для-rules: `50.sync` (напоминания о синхронизации документации) и `60.memory` (Pass 4 memory). Категория только-для-standard: `90.optional` (специфика стека без принуждения). Все остальные prefix (`00`, `10`, `20`, `30`, `40`, `70`, `80`) присутствуют И в `rules/`, И в `standard/`. Теперь Claude Code знает ваш проект.
376
312
 
377
- **Постадийный режим (рекомендуется для всех размеров проекта):**
313
+ ---
378
314
 
379
- Автоматический пайплайн запускает эти стадии. Список стадий:
315
+ ## Кому это подходит?
380
316
 
381
- | Стадия | Записывает | Примечания |
382
- |---|---|---|
383
- | `3a` | `pass3a-facts.md` (дистиллированный fact sheet 5–10 KB) | Читает `pass2-merged.json` один раз; последующие стадии ссылаются на этот файл |
384
- | `3b-core` | `CLAUDE.md`, общие `standard/`, общие `.claude/rules/` | Кросс-проектные файлы; без доменно-специфичного вывода |
385
- | `3b-1..N` | Доменно-специфичные `standard/60.domains/*.md` + правила доменов | Батч ≤15 доменов на стадию (авто-деление при ≥16 доменов) |
386
- | `3c-core` | `guide/` (9 файлов), `skills/00.shared/MANIFEST.md`, оркестраторы `skills/*/` | Общие skills и все user-facing гайды |
387
- | `3c-1..N` | Доменные sub-skills под `skills/20.frontend-page/scaffold-page-feature/` | Батч ≤15 доменов на стадию |
388
- | `3d-aux` | `database/`, `mcp-guide/` | Фиксированного размера, независимо от количества доменов |
317
+ | Если вы... | Боль, которую это снимает |
318
+ |---|---|
319
+ | **Соло-разработчик**, начинающий новый проект с Claude Code | «Учить Claude нашим конвенциям каждую сессию» больше нет. `CLAUDE.md` + 8-категорийные `.claude/rules/` сгенерированы за один проход. |
320
+ | **Тимлид**, поддерживающий общие стандарты в нескольких repo | `.claude/rules/` расходятся по мере того, как люди переименовывают пакеты, меняют ORM или response wrapper. ClaudeOS-Core пере-синхронизирует детерминированно — один и тот же вход → byte-identical вывод, без diff-шума. |
321
+ | **Уже использующий Claude Code**, но устал править генерируемый код | Неправильный response wrapper, неправильный layout пакетов, JPA вместо MyBatis, `try/catch` повсюду, когда у вас централизованный middleware. Scanner извлекает ваши реальные конвенции; каждый pass Claude работает с явным path allowlist. |
322
+ | **Onboarding на новый repo** (существующий проект, вход в команду) | Запустите `init` на repo и получите живую architecture map: stack-таблица в CLAUDE.md, rules по слоям с примерами ✅/❌, decision log, заполненный «почему» за крупными выборами (JPA vs MyBatis, REST vs GraphQL и т. д.). Прочитать 5 файлов лучше, чем 5000 файлов исходников. |
323
+ | **Работающий на корейском / японском / китайском / ещё 7 языках** | Большинство генераторов rules для Claude Code — только английский. ClaudeOS-Core пишет полный набор на **10 языках** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) с **byte-identical структурной валидацией** одинаковый verdict `claude-md-validator` независимо от языка вывода. |
324
+ | **Работающий на monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Backend- и frontend-домены анализируются в одном запуске разными промптами; `apps/*/` и `packages/*/` обходятся автоматически; per-stack rules emit-ятся под `70.domains/{type}/`. |
325
+ | **Контрибьютор OSS или экспериментатор** | Вывод gitignore-friendly — `claudeos-core/` это ваш локальный рабочий каталог, отправлять нужно только `CLAUDE.md` + `.claude/`. Resume-safe при прерывании; идемпотентно при повторных запусках (ваши ручные правки rules сохраняются без `--force`). |
389
326
 
390
- Для проекта с 1–15 доменами это разворачивается в 4 стадии (`3a`, `3b-core`, `3c-core`, `3d-aux` без разбиения на батчи). Для 16–30 доменов разворачивается в 8 стадий (`3b` и `3c` каждая делится на 2 батча). См. [Автомасштабирование по размеру проекта](#автомасштабирование-по-размеру-проекта) для полной таблицы.
327
+ **Не подходит, если:** вы хотите универсальный preset bundle из agents/skills/rules, который работает с первого дня без шага сканирования (см. [docs/ru/comparison.md](docs/ru/comparison.md) что под какие задачи подходит), либо ваш проект пока не вписывается в один из [поддерживаемых стеков](#supported-stacks), либо вам нужен только один `CLAUDE.md` (встроенного `claude /init` достаточно нет необходимости устанавливать ещё один инструмент).
391
328
 
392
- **Проверка:** `CLAUDE.md` должен существовать в корне проекта, а маркер `claudeos-core/generated/pass3-complete.json` должен быть записан. В split-режиме маркер содержит `mode: "split"` и массив `groupsCompleted`, перечисляющий каждую завершённую стадию — логика частичного маркера использует это, чтобы возобновить с нужной стадии после краша, а не перезапускать с `3a` (что удвоило бы расход токенов).
329
+ ---
393
330
 
394
- > **Примечание о staging:** Pass 3 сначала пишет файлы правил в `claudeos-core/generated/.staged-rules/`, потому что политика чувствительных путей Claude Code блокирует прямую запись в `.claude/`. Автоматический пайплайн выполняет перемещение автоматически после каждой стадии. Если вы запускаете стадию вручную, вам нужно переместить staged-дерево самостоятельно: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (сохраняя подпути).
331
+ ## Как это работает?
395
332
 
396
- #### Шаг 7: Pass 4 — Memory scaffolding
333
+ ClaudeOS-Core инвертирует обычный workflow Claude Code:
397
334
 
398
- ```bash
399
- cat claudeos-core/generated/pass4-prompt.md \
400
- | claude -p --dangerously-skip-permissions
401
335
  ```
402
-
403
- **Проверка:** `claudeos-core/memory/` должна содержать 4 файла (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` должна содержать 4 файла правил, и к `CLAUDE.md` должна быть добавлена секция `## Memory (L4)`. Маркер: `claudeos-core/generated/pass4-memory.json`.
404
-
405
- > **Gap-fill в v2.1.0:** Pass 4 также гарантирует существование `claudeos-core/skills/00.shared/MANIFEST.md`. Если Pass 3c его пропустил (возможно на проектах с малым количеством skills, потому что шаблоны `pass3.md` стеков перечисляют `MANIFEST.md` среди целей генерации без отметки REQUIRED), gap-fill создаёт минимальную заглушку, чтобы `.claude/rules/50.sync/02.skills-sync.md` (путь v2.2.0 — количество sync-правил сокращено с 3 до 2, `03` стал `02`) всегда имел валидную целевую ссылку. Идемпотентно: пропускается, если файл уже имеет реальное содержимое (>20 символов).
406
-
407
- > **Примечание:** Если `claude -p` падает или `pass4-prompt.md` отсутствует, автоматический пайплайн использует статический фолбэк через `lib/memory-scaffold.js` (с переводом через Claude, когда `--lang` не английский). Статический фолбэк запускается только внутри `npx claudeos-core init` — ручной режим требует успеха Pass 4.
408
-
409
- #### Шаг 8: Запуск инструментов верификации
410
-
411
- ```bash
412
- # Генерация метаданных (требуется перед другими проверками)
413
- node claudeos-core-tools/manifest-generator/index.js
414
-
415
- # Запустить все проверки
416
- node claudeos-core-tools/health-checker/index.js
417
-
418
- # Или запустить отдельные проверки:
419
- node claudeos-core-tools/plan-validator/index.js --check # Согласованность Plan ↔ disk
420
- node claudeos-core-tools/sync-checker/index.js # Незарегистрированные/осиротевшие файлы
421
- node claudeos-core-tools/content-validator/index.js # Проверки качества файлов (вкл. секцию memory/ [9/9])
422
- node claudeos-core-tools/pass-json-validator/index.js # Проверки JSON Pass 1–4 + completion-маркеров
336
+ Обычно: Вы описываете проект → Claude угадывает ваш стек → Claude пишет docs
337
+ Здесь: Код читает ваш стек Код передаёт подтверждённые факты Claude Claude пишет docs из фактов
423
338
  ```
424
339
 
425
- #### Шаг 9: Проверка результатов
426
-
427
- ```bash
428
- # Подсчёт сгенерированных файлов
429
- find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
430
-
431
- # Проверить CLAUDE.md
432
- head -30 CLAUDE.md
340
+ Конвейер выполняется в **три стадии**, с кодом по обе стороны от LLM-вызова:
433
341
 
434
- # Проверить один стандартный файл
435
- cat claudeos-core/standard/00.core/01.project-overview.md | head -20
342
+ **1. Шаг A Scanner (детерминированно, без LLM).** Node.js scanner обходит корень проекта, читает `package.json` / `build.gradle` / `pom.xml` / `pyproject.toml`, парсит файлы `.env*` (с redaction чувствительных переменных вроде `PASSWORD/SECRET/TOKEN/JWT_SECRET/...`), классифицирует архитектурный паттерн (5 паттернов Java A/B/C/D/E, Kotlin CQRS / multi-module, Next.js App vs. Pages Router, FSD, components-pattern), обнаруживает домены и строит явный allowlist всех существующих путей к исходникам. Вывод: `project-analysis.json` — единственный source of truth для всего, что следует дальше.
436
343
 
437
- # Проверить правила
438
- ls .claude/rules/*/
439
- ```
344
+ **2. Шаг B — 4-Pass Claude конвейер (ограничен фактами шага A).**
345
+ - **Pass 1** читает репрезентативные файлы по группам доменов и извлекает ~50–100 конвенций на домен — response wrapper, logging library, error handling, naming convention, test pattern. Запускается один раз на группу доменов (`max 4 domains, 40 files per group`), так что context никогда не переполняется.
346
+ - **Pass 2** объединяет весь per-domain анализ в общую картину проекта и разрешает разногласия, выбирая доминирующую конвенцию.
347
+ - **Pass 3** пишет `CLAUDE.md` + `.claude/rules/` + `claudeos-core/standard/` + skills + guides — разбит на стадии (`3a` facts → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide), так что промпт каждой стадии помещается в context window LLM, даже когда `pass2-merged.json` большой. Sub-divides 3b/3c в batch-и по ≤15 доменов для проектов с ≥16 доменами.
348
+ - **Pass 4** заполняет L4 memory layer (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) и добавляет универсальные scaffold rules. Pass 4 **запрещено модифицировать `CLAUDE.md`** — Section 8 Pass 3 авторитетна.
440
349
 
441
- > **Совет:** Если какой-то шаг падает, вы можете исправить проблему и перезапустить только этот шаг. Результаты Pass 1/2 кэшируются если `pass1-N.json` или `pass2-merged.json` уже существует, автоматический пайплайн их пропускает. Используйте `npx claudeos-core init --force`, чтобы удалить предыдущие результаты и начать с чистого листа.
350
+ **3. Шаг CВерификация (детерминированно, без LLM).** Пять validator-ов проверяют вывод:
351
+ - `claude-md-validator` — 25 структурных проверок `CLAUDE.md` (8 sections, H3/H4 counts, memory file uniqueness, T1 canonical heading invariant). Language-invariant: тот же verdict независимо от `--lang`.
352
+ - `content-validator` — 10 content-проверок, включая path-claim верификацию (`STALE_PATH` ловит выдуманные ссылки `src/...`) и MANIFEST drift detection.
353
+ - `pass-json-validator` — well-formedness JSON Pass 1/2/3/4 + stack-aware section count.
354
+ - `plan-validator` — консистентность plan ↔ disk (legacy, в основном no-op с v2.1.0).
355
+ - `sync-checker` — консистентность регистраций disk ↔ `sync-map.json` по 7 отслеживаемым каталогам.
442
356
 
443
- ### Начало использования
357
+ Три уровня severity (`fail` / `warn` / `advisory`), так что warning-и не блокируют CI на LLM-галлюцинациях, которые пользователь может починить вручную.
444
358
 
445
- ```
446
- # В Claude Code — просто спрашивайте естественно:
447
- "Создай CRUD для домена order"
448
- "Добавь API аутентификации пользователя"
449
- "Отрефактори этот код под паттерны проекта"
359
+ Инвариант, связывающий всё вместе: **Claude может цитировать только пути, реально существующие в вашем коде**, потому что шаг A передаёт ему конечный allowlist. Если LLM всё-таки попытается что-то выдумать (редко, но случается на определённых seed), шаг C ловит это до отправки docs.
450
360
 
451
- # Claude Code автоматически ссылается на ваши сгенерированные Standards, Rules и Skills.
452
- ```
361
+ Подробности по pass-ам, marker-based resume, обходной путь staged-rules для блока чувствительных путей `.claude/` в Claude Code и внутренности обнаружения стека — см. [docs/ru/architecture.md](docs/ru/architecture.md).
453
362
 
454
363
  ---
455
364
 
456
- ## Как это работает — 4-Pass пайплайн
457
-
458
- ```
459
- npx claudeos-core init
460
-
461
- ├── [1] npm install ← Зависимости (~10с)
462
- ├── [2] Структура директорий ← Создание папок (~1с)
463
- ├── [3] plan-installer (Node.js) ← Сканирование проекта (~5с)
464
- │ ├── Автоопределение стека (multi-stack)
465
- │ ├── Извлечение списка доменов (тегирование: backend/frontend)
466
- │ ├── Разбиение на группы доменов (по типу)
467
- │ ├── Сборка pass3-context.json (облегчённая сводка, v2.1.0)
468
- │ └── Выбор стек-специфических промптов (по типу)
469
-
470
- ├── [4] Pass 1 × N (claude -p) ← Глубокий анализ кода (~2-8мин)
471
- │ ├── ⚙️ Backend-группы → backend-промпт
472
- │ └── 🎨 Frontend-группы → frontend-промпт
473
-
474
- ├── [5] Pass 2 × 1 (claude -p) ← Слияние анализа (~1мин)
475
- │ └── Консолидация ВСЕХ результатов Pass 1 в pass2-merged.json
476
-
477
- ├── [6] Pass 3 (split-режим, v2.1.0) ← Генерация всего
478
- │ │
479
- │ ├── 3a × 1 (claude -p) ← Извлечение фактов (~5-10мин)
480
- │ │ └── Читает pass2-merged.json один раз → pass3a-facts.md
481
- │ │
482
- │ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + общие standard/rules
483
- │ ├── 3b-1..N × N (claude -p) ← Доменные standards/rules (≤15 доменов/батч)
484
- │ │
485
- │ ├── 3c-core × 1 (claude -p) ← Гайды + общие skills + MANIFEST.md
486
- │ ├── 3c-1..N × N (claude -p) ← Доменные sub-skills (≤15 доменов/батч)
487
- │ │
488
- │ └── 3d-aux × 1 (claude -p) ← Заглушки database/ + mcp-guide/
489
-
490
- ├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30с-5мин)
491
- │ ├── Сидинг memory/ (decision-log, failure-patterns, …)
492
- │ ├── Генерация правил 60.memory/
493
- │ ├── Добавление секции "Memory (L4)" в CLAUDE.md
494
- │ └── Gap-fill: гарантировать skills/00.shared/MANIFEST.md (v2.1.0)
495
-
496
- └── [8] Верификация ← Автозапуск health-checker
497
- ```
498
-
499
- ### Почему 4 прохода?
500
-
501
- **Pass 1** — единственный проход, читающий ваш исходный код. Он выбирает репрезентативные файлы по домену и извлекает паттерны по 55–95 категориям анализа (зависит от стека). Для больших проектов Pass 1 запускается несколько раз — по одному на группу доменов. В мульти-стек проектах (например, Java backend + React frontend) backend- и frontend-домены используют **разные промпты анализа**, адаптированные к каждому стеку.
502
-
503
- **Pass 2** объединяет все результаты Pass 1 в единый анализ: общие паттерны (100% общие), паттерны большинства (50%+ общие), доменно-специфические паттерны, анти-паттерны по степени серьёзности и сквозные аспекты (именование, безопасность, БД, тестирование, логирование, производительность). Результаты backend и frontend сливаются воедино.
365
+ ## Supported Stacks
504
366
 
505
- **Pass 3** (split-режим, v2.1.0) берёт объединённый анализ и генерирует всю файловую экосистему (CLAUDE.md, rules, standards, skills, guides) через несколько последовательных вызовов `claude -p`. Ключевое наблюдение: переполнение из-за накопления вывода непредсказуемо по размеру входа — single-call Pass 3 нормально работал на проектах в 2 домена и стабильно падал около 5 доменов, а граница сбоев смещалась в зависимости от того, насколько многословным оказался каждый файл. Split-режим полностью обходит это — каждая стадия стартует со свежим context window и пишет ограниченный подмножество файлов. Кросс-стейджевая согласованность (главное преимущество single-call подхода) сохраняется через `pass3a-facts.md` — дистиллированный fact sheet размером 5–10 KB, на который ссылается каждая последующая стадия.
367
+ 12 стеков, автоматически определяемых по файлам вашего проекта:
506
368
 
507
- Шаблон промпта Pass 3 также включает блок **Phase 1 «Read Once, Extract Facts»** с пятью правилами, ещё больше ограничивающими объём вывода:
369
+ **Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
508
370
 
509
- - **Rule A** Ссылайтесь на fact table; не перечитывайте `pass2-merged.json`.
510
- - **Rule B** — Идемпотентная запись файлов (пропуск, если цель существует с реальным содержимым), что делает Pass 3 безопасно перезапускаемым после прерывания.
511
- - **Rule C** — Межфайловая согласованность обеспечивается через fact table как единственный источник истины.
512
- - **Rule D** — Сжатость вывода: одна строка (`[WRITE]`/`[SKIP]`) между записями файлов, без повторения fact table, без эха содержимого файлов.
513
- - **Rule E** — Батчевая идемпотентная проверка: один `Glob` в начале PHASE 2 вместо per-target `Read` вызовов.
371
+ **Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
514
372
 
515
- В **v2.2.0** Pass 3 также встраивает в промпт детерминированный CLAUDE.md scaffold (`pass-prompts/templates/common/claude-md-scaffold.md`). Это фиксирует заголовки и порядок 8 секций верхнего уровня, так что сгенерированный `CLAUDE.md` больше не дрейфует между проектами, при этом содержимое каждой секции по-прежнему адаптируется к проекту. Новый `.env` parser stack-detector-а (`lib/env-parser.js`) поставляет `stack.envInfo` в промпт, чтобы строки port/host/API target соответствовали тому, что проект фактически объявляет, а не framework-дефолтам.
373
+ Multi-stack проекты (например, Spring Boot backend + Next.js frontend) работают «из коробки».
516
374
 
517
- В **v2.2.0** Pass 3 также встраивает в промпт детерминированный CLAUDE.md scaffold (`pass-prompts/templates/common/claude-md-scaffold.md`). Это фиксирует заголовки и порядок 8 секций верхнего уровня, так что сгенерированный `CLAUDE.md` больше не дрейфует между проектами, при этом содержимое каждой секции по-прежнему адаптируется к проекту. Новый `.env` parser stack-detector-а (`lib/env-parser.js`) поставляет `stack.envInfo` в промпт, чтобы строки port/host/API target соответствовали тому, что проект фактически объявляет, а не framework-дефолтам.
518
-
519
- **Pass 4** создаёт каркас слоя L4 Memory: файлы персистентного командного знания (decision-log, failure-patterns, политика компакции, auto-rule-update) плюс правила `60.memory/`, которые указывают будущим сессиям, когда и как читать/записывать эти файлы. Слой памяти — это то, что позволяет Claude Code накапливать уроки между сессиями, а не открывать их заново каждый раз. Когда `--lang` не английский, статический контент фолбэка переводится через Claude перед записью. v2.1.0 добавляет gap-fill для `skills/00.shared/MANIFEST.md` на случай, если Pass 3c его пропустил.
375
+ Правила обнаружения и то, что извлекает каждый сканер, см. в [docs/ru/stacks.md](docs/ru/stacks.md).
520
376
 
521
377
  ---
522
378
 
523
- ## Структура сгенерированных файлов
524
-
525
- ```
526
- your-project/
527
-
528
- ├── CLAUDE.md ← Точка входа Claude Code (детерминированная 8-секционная структура, v2.2.0)
529
-
530
- ├── .claude/
531
- │ └── rules/ ← Правила, срабатывающие по glob
532
- │ ├── 00.core/
533
- │ ├── 10.backend/
534
- │ ├── 20.frontend/
535
- │ ├── 30.security-db/
536
- │ ├── 40.infra/
537
- │ ├── 50.sync/ ← Правила напоминания о синхронизации
538
- │ └── 60.memory/ ← Правила on-demand-scope для L4 memory (v2.0.0)
539
-
540
- ├── claudeos-core/ ← Основная выходная директория
541
- │ ├── generated/ ← JSON анализа + динамические промпты + Pass-маркеры (gitignore)
542
- │ │ ├── project-analysis.json ← Информация о стеке (multi-stack)
543
- │ │ ├── domain-groups.json ← Группы с type: backend/frontend
544
- │ │ ├── pass1-backend-prompt.md ← Backend-промпт анализа
545
- │ │ ├── pass1-frontend-prompt.md ← Frontend-промпт анализа (если обнаружен)
546
- │ │ ├── pass2-prompt.md ← Промпт слияния
547
- │ │ ├── pass2-merged.json ← Вывод Pass 2 (потребляется только Pass 3a)
548
- │ │ ├── pass3-context.json ← Облегчённая сводка (< 5 KB) для Pass 3 (v2.1.0)
549
- │ │ ├── pass3-prompt.md ← Шаблон промпта Pass 3 (с предвставленным блоком Phase 1)
550
- │ │ ├── pass3a-facts.md ← Fact sheet, записываемый Pass 3a, читаемый 3b/3c/3d (v2.1.0)
551
- │ │ ├── pass4-prompt.md ← Промпт memory scaffolding (v2.0.0)
552
- │ │ ├── pass3-complete.json ← Маркер завершения Pass 3 (split-режим: включает groupsCompleted, v2.1.0)
553
- │ │ ├── pass4-memory.json ← Маркер завершения Pass 4 (пропуск при resume)
554
- │ │ ├── rule-manifest.json ← Индекс файлов для инструментов верификации
555
- │ │ ├── sync-map.json ← Маппинг Plan ↔ disk (пустой в v2.1.0; сохранён для совместимости sync-checker)
556
- │ │ ├── stale-report.json ← Консолидированные результаты верификации
557
- │ │ ├── .i18n-cache-<lang>.json ← Кэш переводов (неанглийский `--lang`)
558
- │ │ └── .staged-rules/ ← Временная staging-директория для записей `.claude/rules/` (авто-перемещение + очистка)
559
- │ ├── standard/ ← Стандарты кодирования (15-19 файлов + per-domain в 60.domains/)
560
- │ │ ├── 00.core/ ← Обзор, архитектура, именование
561
- │ │ ├── 10.backend-api/ ← API-паттерны (стек-специфические)
562
- │ │ ├── 20.frontend-ui/ ← Frontend-паттерны (если обнаружены)
563
- │ │ ├── 30.security-db/ ← Безопасность, схема БД, утилиты
564
- │ │ ├── 40.infra/ ← Конфиг, логирование, CI/CD
565
- │ │ ├── 50.verification/ ← Верификация сборки, тестирование
566
- │ │ ├── 60.domains/ ← Per-domain стандарты (записываются Pass 3b-N, v2.1.0)
567
- │ │ └── 90.optional/ ← Опциональные конвенции (стек-специфические дополнения)
568
- │ ├── skills/ ← Skills для CRUD/page scaffolding
569
- │ │ └── 00.shared/MANIFEST.md ← Единственный источник истины для зарегистрированных skills
570
- │ ├── guide/ ← Онбординг, FAQ, troubleshooting (9 файлов)
571
- │ ├── database/ ← Схема БД, гайд миграций
572
- │ ├── mcp-guide/ ← Гайд интеграции MCP-сервера
573
- │ └── memory/ ← L4: знания команды (4 файла) — коммитить
574
- │ ├── decision-log.md ← "Почему" за дизайн-решениями
575
- │ ├── failure-patterns.md ← Повторяющиеся ошибки и фиксы (auto-score — `npx claudeos-core memory score`)
576
- │ ├── compaction.md ← Стратегия 4-stage компакции (запустить `npx claudeos-core memory compact`)
577
- │ └── auto-rule-update.md ← Предложения по улучшению правил (`npx claudeos-core memory propose-rules`)
578
-
579
- └── claudeos-core-tools/ ← Этот тулкит (не модифицировать)
580
- ```
581
-
582
- Каждый standard-файл включает ✅ правильные примеры, ❌ неправильные примеры и сводную таблицу правил — всё извлечено из ваших реальных паттернов кода, а не из общих шаблонов.
583
-
584
- > **Примечание v2.1.0:** `claudeos-core/plan/` больше не генерируется. Master plans были внутренним бэкапом, который Claude Code не потреблял в рантайме, а их агрегация в Pass 3 была основной причиной переполнения из-за накопления вывода. Используйте `git` для бэкапа/восстановления. Проекты, обновляющиеся с v2.0.x, могут безопасно удалить любую существующую директорию `claudeos-core/plan/`.
379
+ ## Повседневный workflow
585
380
 
586
- ### Рекомендации по gitignore
381
+ Три команды покрывают ~95% использования:
587
382
 
588
- **Коммитить** (командное знание — предназначено для обмена):
589
- - `CLAUDE.md` точка входа Claude Code
590
- - `.claude/rules/**` — автозагружаемые правила
591
- - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — сгенерированная документация
592
- - `claudeos-core/memory/**` — история решений, паттерны ошибок, предложения правил
383
+ ```bash
384
+ # Первый раз на проекте
385
+ npx claudeos-core init
593
386
 
594
- **НЕ коммитить** (регенерируемые артефакты сборки):
387
+ # После того как вы вручную отредактировали standards или rules
388
+ npx claudeos-core lint
595
389
 
596
- ```gitignore
597
- # ClaudeOS-Core — сгенерированный анализ и кэш переводов
598
- claudeos-core/generated/
390
+ # Health-check (запускайте перед коммитом или в CI)
391
+ npx claudeos-core health
599
392
  ```
600
393
 
601
- Директория `generated/` содержит JSON анализа (`pass1-*.json`, `pass2-merged.json`), промпты (`pass1/2/3/4-prompt.md`), Pass-маркеры завершения (`pass3-complete.json`, `pass4-memory.json`), кэш переводов (`.i18n-cache-<lang>.json`) и временную staging-директорию (`.staged-rules/`) — всё пересобирается повторным запуском `npx claudeos-core init`.
602
-
603
- ---
604
-
605
- ## Автомасштабирование по размеру проекта
606
-
607
- Split-режим Pass 3 масштабирует количество стадий по количеству доменов. Разбиение на батчи включается при 16 доменах, чтобы удерживать вывод каждой стадии под ~50 файлами — это эмпирически безопасный диапазон для `claude -p` до того, как начинается переполнение из-за накопления вывода.
608
-
609
- | Размер проекта | Домены | Стадий Pass 3 | Всего `claude -p` | Расч. время |
610
- |---|---|---|---|---|
611
- | Малый | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 стадии Pass 3 + Pass 4) | ~10–15 мин |
612
- | Средний | 5–15 | 4 | 8–9 | ~25–45 мин |
613
- | Крупный | 16–30 | **8** (3b, 3c каждая делится на 2 батча) | 11–12 | **~60–105 мин** |
614
- | X-Крупный | 31–45 | 10 | 13–14 | ~100–150 мин |
615
- | XX-Крупный | 46–60 | 12 | 15–16 | ~150–200 мин |
616
- | XXX-Крупный | 61+ | 14+ | 17+ | 200 мин+ |
617
-
618
- Формула количества стадий (при разбиении на батчи): `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, где `N = ceil(totalDomains / 15)`.
619
-
620
- Pass 4 (memory scaffolding) добавляет от ~30 секунд до 5 минут сверху, в зависимости от того, запускается ли Claude-driven генерация или статический фолбэк. Для мульти-стек проектов (например, Java + React) backend- и frontend-домены считаются вместе. Проект с 6 backend + 4 frontend доменами = 10 суммарно = уровень «Средний».
621
-
622
- ---
623
-
624
- ## Инструменты верификации
625
-
626
- ClaudeOS-Core включает 5 встроенных инструментов верификации, автоматически запускаемых после генерации:
394
+ Ещё две для обслуживания memory layer:
627
395
 
628
396
  ```bash
629
- # Запустить все проверки сразу (рекомендуется)
630
- npx claudeos-core health
631
-
632
- # Отдельные команды
633
- npx claudeos-core validate # Сравнение Plan ↔ disk
634
- npx claudeos-core refresh # Синхронизация Disk → Plan
635
- npx claudeos-core restore # Восстановление Plan → Disk
397
+ # Компактация лога failure-patterns (запускайте периодически)
398
+ npx claudeos-core memory compact
636
399
 
637
- # Или использовать node напрямую (пользователи git clone)
638
- node claudeos-core-tools/health-checker/index.js
639
- node claudeos-core-tools/manifest-generator/index.js
640
- node claudeos-core-tools/plan-validator/index.js --check
641
- node claudeos-core-tools/sync-checker/index.js
400
+ # Продвижение частых failure pattern в предложенные rules
401
+ npx claudeos-core memory propose-rules
642
402
  ```
643
403
 
644
- | Инструмент | Функция |
645
- |---|---|
646
- | **manifest-generator** | Строит JSON метаданных (`rule-manifest.json`, `sync-map.json`, инициализирует `stale-report.json`); индексирует 7 директорий, включая `memory/` (`totalMemory` в summary). v2.1.0: `plan-manifest.json` больше не генерируется, поскольку master plans были удалены. |
647
- | **plan-validator** | Валидирует блоки `<file>` из master plan против диска для проектов, у которых всё ещё есть `claudeos-core/plan/` (legacy upgrade-случай). v2.1.0: пропускает эмиссию `plan-sync-status.json`, когда `plan/` отсутствует или пуст — `stale-report.json` всё равно записывает проходящий no-op. |
648
- | **sync-checker** | Обнаруживает незарегистрированные файлы (на диске, но не в плане) и осиротевшие записи — покрывает 7 директорий (`memory/` добавлена в v2.0.0). Завершается чисто, когда `sync-map.json` не имеет маппингов (состояние по умолчанию в v2.1.0). |
649
- | **content-validator** | 9-секционная проверка качества — пустые файлы, отсутствующие ✅/❌ примеры, обязательные секции плюс целостность каркаса L4 memory (даты заголовков decision-log, обязательные поля failure-pattern, fence-aware парсинг) |
650
- | **pass-json-validator** | Валидирует структуру JSON Pass 1–4 плюс completion-маркеры `pass3-complete.json` (split-mode shape, v2.1.0) и `pass4-memory.json` |
404
+ Полные опции каждой команды см. в [docs/ru/commands.md](docs/ru/commands.md).
651
405
 
652
406
  ---
653
407
 
654
- ## Как Claude Code использует вашу документацию
655
-
656
- ClaudeOS-Core генерирует документацию, которую Claude Code действительно читает — вот как:
657
-
658
- ### Что Claude Code читает автоматически
659
-
660
- | Файл | Когда | Гарантировано |
661
- |---|---|---|
662
- | `CLAUDE.md` | В начале каждого диалога | Всегда |
663
- | `.claude/rules/00.core/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
664
- | `.claude/rules/10.backend/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
665
- | `.claude/rules/20.frontend/*` | При редактировании любого фронтенд-файла (ограничено путями компонентов/страниц/стилей) | Условно |
666
- | `.claude/rules/30.security-db/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
667
- | `.claude/rules/40.infra/*` | Только при редактировании config/infra-файлов (ограниченные пути) | Условно |
668
- | `.claude/rules/50.sync/*` | Только при редактировании claudeos-core-файлов (ограниченные пути) | Условно |
669
- | `.claude/rules/60.memory/*` | При редактировании `claudeos-core/memory/*` (ограничено путями memory) — инструктирует **как** читать/записывать on-demand memory-слой | Условно (v2.0.0) |
408
+ ## Чем это отличается
670
409
 
671
- ### Что Claude Code читает по запросу через ссылки в правилах
410
+ Большинство инструментов документации Claude Code генерируют по описанию (вы рассказываете инструменту, инструмент рассказывает Claude). ClaudeOS-Core генерирует из вашего реального исходного кода (инструмент читает, инструмент сообщает Claude, что подтверждено, Claude пишет только подтверждённое).
672
411
 
673
- Каждый файл правила ссылается на соответствующий standard через секцию `## Reference`. Claude читает только релевантный для текущей задачи standard:
412
+ Три конкретных следствия:
674
413
 
675
- - `claudeos-core/standard/**` паттерны кода, ✅/❌ примеры, конвенции именования
676
- - `claudeos-core/database/**` схема БД (для запросов, мапперов, миграций)
677
- - `claudeos-core/memory/**` (v2.0.0) — слой командного знания L4; **не** автозагружается (был бы слишком шумным для каждого диалога). Вместо этого правила `60.memory/*` указывают Claude, *когда* читать эти файлы: в начале сессии (обзор свежего `decision-log.md` + high-importance `failure-patterns.md`), и append-on-demand при принятии решений или столкновении с повторяющимися ошибками.
414
+ 1. **Детерминированное обнаружение стека.** Тот же проект + тот же код = тот же вывод. Никакого «Claude в этот раз бросил кубик иначе».
415
+ 2. **Никаких выдуманных путей.** Промпт Pass 3 явно перечисляет каждый разрешённый путь к исходникам; Claude не может процитировать несуществующий путь.
416
+ 3. **Multi-stack-aware.** Backend и frontend домены используют разные analysis prompts в одном запуске.
678
417
 
679
- `00.standard-reference.md` служит каталогом всех standard-файлов для обнаружения стандартов, у которых нет соответствующего правила.
680
-
681
- ### Что Claude Code НЕ читает (экономит контекст)
682
-
683
- Эти папки явно исключены через секцию `DO NOT Read` в правиле standard-reference:
684
-
685
- | Папка | Почему исключена |
686
- |---|---|
687
- | `claudeos-core/plan/` | Бэкапы Master Plan из legacy-проектов (v2.0.x и ранее). Не генерируется в v2.1.0. Если присутствует, Claude Code не загружает её автоматически — только чтение по запросу. |
688
- | `claudeos-core/generated/` | JSON метаданных сборки, промпты, Pass-маркеры, кэш переводов, `.staged-rules/`. Не для кодинга. |
689
- | `claudeos-core/guide/` | Онбординг-гайды для людей. |
690
- | `claudeos-core/mcp-guide/` | Документация MCP-сервера. Не для кодинга. |
691
- | `claudeos-core/memory/` (автозагрузка) | **Автозагрузка отключена** by design — раздула бы контекст на каждом диалоге. Вместо этого читается on-demand через правила `60.memory/*` (например, скан `failure-patterns.md` в начале сессии). Всегда коммитьте эти файлы. |
418
+ Бок о бок сравнение scope с другими инструментами см. в [docs/ru/comparison.md](docs/ru/comparison.md). Сравнение про **что делает каждый инструмент**, а не **что лучше** большинство дополняют друг друга.
692
419
 
693
420
  ---
694
421
 
695
- ## Ежедневный рабочий процесс
422
+ ## Верификация (post-generation)
696
423
 
697
- ### После установки
424
+ После того как Claude напишет docs, код их проверяет. Пять отдельных validator:
698
425
 
699
- ```
700
- # Просто пользуйтесь Claude Code как обычно — он автоматически ссылается на ваши стандарты:
701
- "Создай CRUD для домена order"
702
- "Добавь API обновления профиля пользователя"
703
- "Отрефактори этот код под паттерны проекта"
704
- ```
426
+ | Validator | Что проверяет | Запускается через |
427
+ |---|---|---|
428
+ | `claude-md-validator` | Структурные инварианты CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
429
+ | `content-validator` | Реальное существование заявленных путей; согласованность manifest | `health` (advisory) |
430
+ | `pass-json-validator` | Выводы Pass 1 / 2 / 3 / 4 — well-formed JSON | `health` (warn) |
431
+ | `plan-validator` | Сохранённый plan совпадает с тем, что на диске | `health` (fail-on-error) |
432
+ | `sync-checker` | Файлы на диске совпадают с регистрациями `sync-map.json` (детекция orphaned/unregistered) | `health` (fail-on-error) |
705
433
 
706
- ### После ручного редактирования стандартов
434
+ `health-checker` оркестрирует четыре runtime-validator с трёхуровневой severity (fail / warn / advisory) и завершается с подходящим кодом для CI. `claude-md-validator` запускается отдельно через команду `lint`, поскольку структурный drift — это сигнал переинициализации, а не мягкое предупреждение. Запускайте в любой момент:
707
435
 
708
436
  ```bash
709
- # После редактирования файлов стандартов или правил:
710
- npx claudeos-core refresh
711
-
712
- # Проверить согласованность всего
713
437
  npx claudeos-core health
714
438
  ```
715
439
 
716
- ### Когда документация повреждена
717
-
718
- ```bash
719
- # Рекомендация v2.1.0: используйте git для восстановления (так как master plans
720
- # больше не генерируются). Коммитьте сгенерированные документы регулярно, чтобы
721
- # можно было откатить отдельные файлы без регенерации:
722
- git checkout HEAD -- .claude/rules/ claudeos-core/
723
-
724
- # Legacy (проекты v2.0.x с всё ещё присутствующим claudeos-core/plan/):
725
- npx claudeos-core restore
726
- ```
727
-
728
- ### Обслуживание Memory-слоя (v2.0.0)
729
-
730
- Слой L4 Memory (`claudeos-core/memory/`) накапливает командное знание между сессиями. Три CLI-подкоманды поддерживают его в здоровом состоянии:
731
-
732
- ```bash
733
- # Compact: применить политику 4-stage компакции (периодически — например, ежемесячно)
734
- npx claudeos-core memory compact
735
- # Stage 1: резюмировать устаревшие записи (>30 дней, тело → одна строка)
736
- # Stage 2: слить дубликаты заголовков (частоты суммируются, последний фикс сохраняется)
737
- # Stage 3: удалить low-importance + устаревшее (importance <3 И lastSeen >60 дней)
738
- # Stage 4: применить лимит 400 строк на файл (старейшие low-importance удаляются первыми)
739
-
740
- # Score: пересчитать ранги записей failure-patterns.md по importance
741
- npx claudeos-core memory score
742
- # importance = round(frequency × 1.5 + recency × 5), ограничено 10
743
- # Запускать после добавления нескольких новых failure-паттернов
744
-
745
- # Propose-rules: выявить кандидатов на добавление правил из повторяющихся ошибок
746
- npx claudeos-core memory propose-rules
747
- # Читает записи failure-patterns.md с frequency ≥ 3
748
- # Вычисляет confidence (сигмоида на взвешенных доказательствах × anchor-множитель)
749
- # Пишет предложения в memory/auto-rule-update.md (НЕ автоприменяются)
750
- # Confidence ≥ 0.70 заслуживает серьёзного рассмотрения; принять → редактировать правило + логировать решение
751
-
752
- # v2.1.0: `memory --help` теперь маршрутизирует к справке подкоманды (раньше показывался top-level)
753
- npx claudeos-core memory --help
754
- ```
755
-
756
- > **Фиксы v2.1.0:** `memory score` больше не оставляет дублирующие строки `importance` после первого прогона (раньше auto-scored строка добавлялась сверху, а оригинальная plain-строка оставалась ниже). Маркер summary для Stage 1 в `memory compact` теперь является корректным markdown-элементом списка (`- _Summarized on ..._`), поэтому рендерится чисто и корректно повторно парсится при последующих компакциях.
757
-
758
- Когда писать в memory (Claude делает это по запросу, но можно редактировать и вручную):
759
- - **`decision-log.md`** — добавить новую запись при выборе между конкурирующими паттернами, выборе библиотеки, определении командной конвенции или решении НЕ делать что-то. Только append; никогда не редактировать исторические записи.
760
- - **`failure-patterns.md`** — добавлять при **втором появлении** повторяющейся ошибки или неочевидной root cause. Первичные ошибки не требуют записи.
761
- - `compaction.md` и `auto-rule-update.md` — генерируются/управляются указанными выше CLI-подкомандами; не редактировать вручную.
762
-
763
- ### Интеграция CI/CD
764
-
765
- ```yaml
766
- # Пример GitHub Actions
767
- - run: npx claudeos-core validate
768
- # Exit code 1 блокирует PR
769
-
770
- # Опционально: ежемесячное обслуживание memory (отдельный cron-workflow)
771
- - run: npx claudeos-core memory compact
772
- - run: npx claudeos-core memory score
773
- ```
440
+ Подробное описание проверок каждого validator см. в [docs/ru/verification.md](docs/ru/verification.md).
774
441
 
775
442
  ---
776
443
 
777
- ## Чем это отличается?
778
-
779
- ### vs. другие инструменты Claude Code
780
-
781
- | | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
782
- |---|---|---|---|---|---|
783
- | **Подход** | Код анализирует первым, затем LLM генерирует | Предсобранные Config-пресеты | LLM проектирует Agent-команды | LLM генерирует Spec-документы | LLM пишет CLAUDE.md |
784
- | **Читает ваш исходный код** | ✅ Детерминированный статический анализ | ❌ | ❌ | ❌ (LLM читает) | ❌ (LLM читает) |
785
- | **Определение стека** | Код подтверждает (ORM, БД, build-tool, pkg-manager) | Н/Д (стек-агностично) | LLM угадывает | LLM угадывает | LLM угадывает |
786
- | **Определение доменов** | Код подтверждает (Java 5 паттернов, Kotlin CQRS, Next.js FSD) | Н/Д | LLM угадывает | Н/Д | Н/Д |
787
- | **Одинаковый проект → одинаковый результат** | ✅ Детерминированный анализ | ✅ (статические файлы) | ❌ (LLM варьируется) | ❌ (LLM варьируется) | ❌ (LLM варьируется) |
788
- | **Обработка крупных проектов** | Разбиение на группы доменов (4 домена / 40 файлов на группу) | Н/Д | Без разбиения | Без разбиения | Лимит context window |
789
- | **Вывод** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ файлов) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec-документов | CLAUDE.md (1 файл) |
790
- | **Место вывода** | `.claude/rules/` (автозагружается Claude Code) | `.claude/` разное | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
791
- | **Верификация после генерации** | ✅ 5 автоматических валидаторов | ❌ | ❌ | ❌ | ❌ |
792
- | **Мультиязычный вывод** | ✅ 10 языков | ❌ | ❌ | ❌ | ❌ |
793
- | **Мульти-стек** | ✅ Backend + Frontend одновременно | ❌ Стек-агностично | ❌ | ❌ | Частично |
794
- | **Персистентный memory-слой** | ✅ L4 — decision log + failure patterns + auto-scored предложения правил (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
795
- | **Оркестрация агентов** | ❌ | ✅ 28 агентов | ✅ 6 паттернов | ❌ | ❌ |
444
+ ## Memory Layer (опционально, для долгоживущих проектов)
796
445
 
797
- ### Ключевое различие одним предложением
446
+ Начиная с v2.0, ClaudeOS-Core пишет папку `claudeos-core/memory/` с четырьмя файлами:
798
447
 
799
- **Другие инструменты дают Claude «в целом хорошие инструкции». ClaudeOS-Core даёт Claude «инструкции, извлечённые из вашего реального кода».**
448
+ - `decision-log.md` append-only «почему мы выбрали X вместо
449
+ - `failure-patterns.md` — повторяющиеся ошибки с оценками frequency/importance
450
+ - `compaction.md` — как memory автоматически компактируется со временем
451
+ - `auto-rule-update.md` — паттерны, которые должны стать новыми rules
800
452
 
801
- Именно поэтому Claude Code перестаёт генерировать JPA-код в вашем MyBatis-проекте,
802
- перестаёт использовать `success()`, когда ваша кодовая база использует `ok()`,
803
- и перестаёт создавать директории `user/controller/`, когда ваш проект использует `controller/user/`.
453
+ Можно запустить `npx claudeos-core memory propose-rules`, чтобы попросить Claude изучить недавние failure patterns и предложить новые rules.
804
454
 
805
- ### Взаимодополняющее, не конкурирующее
806
-
807
- ClaudeOS-Core фокусируется на **проектно-специфичных правилах и стандартах**.
808
- Другие инструменты фокусируются на **оркестрации агентов и workflow**.
809
-
810
- Вы можете использовать ClaudeOS-Core для генерации правил вашего проекта, а затем ECC или Harness поверх для агент-команд и автоматизации workflow. Они решают разные задачи.
455
+ Модель memory и жизненный цикл см. в [docs/ru/memory-layer.md](docs/ru/memory-layer.md).
811
456
 
812
457
  ---
813
458
 
814
459
  ## FAQ
815
460
 
816
- **В: Модифицирует ли он мой исходный код?**
817
- Нет. Создаёт только `CLAUDE.md`, `.claude/rules/` и `claudeos-core/`. Ваш существующий код никогда не модифицируется.
818
-
819
- **В: Сколько это стоит?**
820
- Он вызывает `claude -p` несколько раз на протяжении 4 проходов. В split-режиме v2.1.0 только Pass 3 разворачивается в 4–14+ стадий в зависимости от размера проекта (см. [Автомасштабирование](#автомасштабирование-по-размеру-проекта)). Типичный малый проект (1–15 доменов) использует в сумме 8–9 вызовов `claude -p`; 18-доменный проект использует 11; 60-доменный проект использует 15–17. Каждая стадия запускается со свежим context window — per-call стоимость токенов в действительности ниже, чем была у single-call Pass 3, потому что ни одна стадия не должна удерживать всё дерево файлов в одном контексте. Когда `--lang` не английский, путь статического фолбэка может вызвать несколько дополнительных `claude -p` для перевода; результаты кэшируются в `claudeos-core/generated/.i18n-cache-<lang>.json`, так что последующие запуски их переиспользуют. Это в пределах нормального использования Claude Code.
821
-
822
- **В: Что такое Pass 3 split-режим и зачем он был добавлен в v2.1.0?**
823
- До v2.1.0 Pass 3 делал один вызов `claude -p`, который должен был выдать всё сгенерированное дерево файлов (`CLAUDE.md`, стандарты, правила, skills, гайды — обычно 30–60 файлов) в одном ответе. Это работало на малых проектах, но стабильно падало с ошибкой `Prompt is too long` (переполнение из-за накопления вывода) около 5 доменов. Отказ не был предсказуем по размеру входа — он зависел от того, насколько многословным оказался каждый сгенерированный файл, и мог случаться на одном и том же проекте эпизодически. Split-режим структурно обходит проблему: Pass 3 разбивается на последовательные стадии (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), каждая из которых — отдельный вызов `claude -p` со свежим context window. Кросс-стейджевая согласованность сохраняется через `pass3a-facts.md` — дистиллированный fact sheet размером 5–10 KB, на который ссылается каждая последующая стадия вместо повторного чтения `pass2-merged.json`. Маркер `pass3-complete.json` несёт массив `groupsCompleted`, так что краш во время `3c-2` возобновляется с `3c-2` (а не с `3a`), избегая двойного расхода токенов.
824
- **В: Стоит ли коммитить сгенерированные файлы в Git?**
825
- Да, рекомендуется. Ваша команда может использовать одинаковые стандарты Claude Code. Подумайте о добавлении `claudeos-core/generated/` в `.gitignore` (JSON анализа регенерируется).
826
-
827
- **В: Что насчёт проектов со смешанным стеком (например, Java backend + React frontend)?**
828
- Полностью поддерживается. ClaudeOS-Core автоматически определяет оба стека, тегирует домены как `backend` или `frontend` и использует стек-специфические промпты анализа для каждого. Pass 2 сливает всё, а Pass 3 генерирует стандарты и backend, и frontend на своих split-стадиях — backend-домены идут в одни батчи 3b/3c, frontend-домены — в другие, и все они ссылаются на один и тот же `pass3a-facts.md` для согласованности.
829
-
830
- **В: Работает ли он с Turborepo / pnpm workspaces / Lerna-монорепо?**
831
- Да. ClaudeOS-Core обнаруживает `turbo.json`, `pnpm-workspace.yaml`, `lerna.json` или `package.json#workspaces` и автоматически сканирует файлы `package.json` в под-пакетах на фреймворк/ORM/БД-зависимости. Сканирование доменов покрывает паттерны `apps/*/src/` и `packages/*/src/`. Запускать из корня монорепо.
832
-
833
- **В: Что происходит при повторном запуске?**
834
- Если существуют предыдущие результаты Pass 1/2, интерактивный промпт позволяет выбрать: **Continue** (продолжить с места остановки) или **Fresh** (удалить всё и начать заново). Используйте `--force`, чтобы пропустить промпт и всегда начинать заново. В split-режиме v2.1.0 resume Pass 3 работает на уровне гранулярности стадий — если прогон упал во время `3c-2`, следующий `init` возобновляется с `3c-2`, а не перезапускается с `3a` (что удвоило бы расход токенов). Маркер `pass3-complete.json` записывает `mode: "split"` плюс массив `groupsCompleted`, чтобы управлять этой логикой.
835
-
836
- **В: Получает ли NestJS свой собственный шаблон или использует Express?**
837
- NestJS использует выделенный шаблон `node-nestjs` с NestJS-специфичными категориями анализа: декораторы `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI-контейнер, CQRS-паттерны и `Test.createTestingModule`. Express-проекты используют отдельный шаблон `node-express`.
461
+ **В: Нужен ли мне Claude API ключ?**
462
+ О: Нет. ClaudeOS-Core использует ваш существующий Claude Code — он отправляет промпты в `claude -p` на вашей машине. Никаких дополнительных аккаунтов.
838
463
 
839
- **В: Что насчёт проектов Vue / Nuxt?**
840
- Vue/Nuxt использует выделенный шаблон `vue-nuxt`, покрывающий Composition API, `<script setup>`, defineProps/defineEmits, Pinia-store, `useFetch`/`useAsyncData`, Nitro server routes и `@nuxt/test-utils`. Проекты Next.js/React используют шаблон `node-nextjs`.
464
+ **В: Перезапишет ли это мой существующий CLAUDE.md или `.claude/rules/`?**
465
+ О: Первый запуск на свежем проекте: создаёт. Перезапуск без `--force` сохраняет ваши правки pass-маркеры предыдущего запуска обнаруживаются, и pass-ы пропускаются. Перезапуск с `--force` стирает и регенерирует всё (ваши правки теряются — в этом и смысл `--force`). См. [docs/ru/safety.md](docs/ru/safety.md).
841
466
 
842
- **В: Поддерживает ли он Kotlin?**
843
- Да. ClaudeOS-Core автоматически обнаруживает Kotlin из `build.gradle.kts` или kotlin-плагина в `build.gradle`. Он использует выделенный шаблон `kotlin-spring` с Kotlin-специфичным анализом (data class, sealed class, coroutines, extension functions, MockK и др.).
467
+ **В: Мой стек не поддерживается. Можно добавить?**
468
+ О: Да. Новый стек требует ~3 prompt-шаблона + domain scanner. См. [CONTRIBUTING.md](CONTRIBUTING.md) гайд из 8 шагов.
844
469
 
845
- **В: Что насчёт CQRS / BFF архитектуры?**
846
- Полностью поддерживается для Kotlin мультимодульных проектов. ClaudeOS-Core читает `settings.gradle.kts`, определяет типы модулей (command, query, bff, integration) из имён модулей и группирует один домен между Command/Query модулями. Сгенерированные стандарты включают отдельные правила для command-контроллеров vs query-контроллеров, BFF/Feign паттерны и конвенции межмодульной коммуникации.
470
+ **В: Как сгенерировать docs на корейском (или другом языке)?**
471
+ О: `npx claudeos-core init --lang ko`. Поддерживается 10 языков: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
847
472
 
848
- **В: Что насчёт Gradle мультимодульных монорепо?**
849
- ClaudeOS-Core сканирует все подмодули (`**/src/main/kotlin/**/*.kt`) независимо от глубины вложенности. Типы модулей выводятся из конвенций именования (например, `reservation-command-server` домен: `reservation`, тип: `command`). Общие библиотеки (`shared-lib`, `integration-lib`) также обнаруживаются.
473
+ **В: Работает ли это с monorepo?**
474
+ О: Да — Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) и npm/yarn workspaces (`package.json#workspaces`) определяются stack-detector. Каждое приложение получает собственный анализ. Другие layout monorepo (например, NX) специально не определяются, но универсальные паттерны `apps/*/` и `packages/*/` всё равно подбираются per-stack сканерами.
850
475
 
851
- **В: Что такое слой L4 Memory (v2.0.0)? Стоит ли коммитить `claudeos-core/memory/`?**
852
- Да **всегда коммитьте** `claudeos-core/memory/`. Это персистентное командное знание: `decision-log.md` записывает *почему* за архитектурными решениями (только append), `failure-patterns.md` регистрирует повторяющиеся ошибки с оценками importance, чтобы будущие сессии их избегали, `compaction.md` определяет политику 4-stage компакции, а `auto-rule-update.md` собирает машинно-сгенерированные предложения по улучшению правил. В отличие от правил (автозагружаемых по пути), memory-файлы **on-demand** Claude читает их, только когда правила `60.memory/*` его направляют (например, скан высокоимпортных failures в начале сессии). Это держит стоимость контекста низкой, сохраняя долгосрочное знание.
476
+ **В: Что, если Claude Code сгенерирует rules, с которыми я не согласен?**
477
+ О: Редактируйте напрямую. Затем запустите `npx claudeos-core lint`, чтобы убедиться, что CLAUDE.md по-прежнему структурно валиден. Ваши правки сохраняются при последующих запусках `init` (без `--force`) — механизм resume пропускает pass-ы, у которых есть маркеры.
853
478
 
854
- **В: Что если Pass 4 падает?**
855
- Автоматический пайплайн (`npx claudeos-core init`) имеет статический фолбэк: если `claude -p` падает или `pass4-prompt.md` отсутствует, он создаёт каркас memory-слоя напрямую через `lib/memory-scaffold.js`. Когда `--lang` не английский, статический фолбэк **обязан** переводить через `claude` CLI если и это падает, запуск прерывается с `InitError` (без тихого английского фолбэка). Перезапустите, когда `claude` аутентифицирован, или используйте `--lang en`, чтобы пропустить перевод. Результаты перевода кэшируются в `claudeos-core/generated/.i18n-cache-<lang>.json`, так что последующие запуски их переиспользуют.
856
-
857
- **В: Что делают `memory compact` / `memory score` / `memory propose-rules`?**
858
- См. секцию [Обслуживание Memory-слоя](#обслуживание-memory-слоя-v200) выше. Кратко: `compact` запускает 4-stage политику (резюмирование устаревшего, слияние дубликатов, удаление устаревшего low-importance, применение лимита 400 строк); `score` пересчитывает ранги `failure-patterns.md` по importance (frequency × recency); `propose-rules` выводит кандидатов на добавление правил из повторяющихся ошибок в `auto-rule-update.md` (не автоприменяется — просмотреть и принять/отклонить вручную).
859
-
860
- **В: Почему `--force` (или режим resume «fresh») удаляет `.claude/rules/`?**
861
- v2.0.0 добавил три Guard'а Pass 3 против silent-failure (Guard 3 покрывает два варианта incomplete-output: H2 для `guide/` и H1 для `standard/skills`). Guard 1 («частичное перемещение staged-rules») и Guard 3 («неполный вывод — отсутствующие/пустые guide-файлы или отсутствующий standard-sentinel / пустые skills») не зависят от существующих правил, но Guard 2 («обнаружено ноль правил») зависит — он срабатывает, когда Claude игнорирует директиву `staging-override.md` и пытается писать напрямую в `.claude/` (где политика чувствительных путей Claude Code это блокирует). Устаревшие правила от предыдущего запуска дали бы Guard 2 false-negative — поэтому `--force`/`fresh` очищает `.claude/rules/`, чтобы обеспечить чистое обнаружение. **Ручные правки файлов правил будут потеряны** при `--force`/`fresh`; сделайте бэкап при необходимости. (Примечание v2.1.0: Guard 3 H1 больше не проверяет `plan/`, поскольку master plans больше не генерируются.)
862
-
863
- **В: Что такое `claudeos-core/generated/.staged-rules/` и зачем она существует?**
864
- Политика чувствительных путей Claude Code отказывает в прямой записи в `.claude/` из подпроцесса `claude -p` (даже с `--dangerously-skip-permissions`). v2.0.0 обходит это, заставляя промпты Pass 3/4 перенаправлять все записи `.claude/rules/` в staging-директорию; оркестратор на Node.js (не подпадающий под эту политику) затем перемещает staged-дерево в `.claude/rules/` после каждого прохода. Это прозрачно для пользователя — директория автосоздаётся, автоочищается и автоперемещается. Если предыдущий запуск упал в середине перемещения, следующий запуск очищает staging-директорию перед повтором. В split-режиме v2.1.0 stage-раннер перемещает staged-правила в `.claude/rules/` после каждой стадии (не только в конце), так что краш в середине Pass 3 всё равно оставляет правила предыдущих завершённых стадий на месте.
865
-
866
- **В: Можно ли запускать Pass 3 вручную вместо `npx claudeos-core init`?**
867
- Да для малых проектов (≤5 доменов) — инструкции для single-call ручного режима в [Шаге 6](#шаг-6-pass-3--генерация-всей-документации-разбита-на-несколько-стадий) всё ещё работают. Для более крупных проектов следует использовать `npx claudeos-core init`, потому что split-раннер — это то, что оркестрирует постадийное выполнение со свежими контекстами, обрабатывает разбиение на батчи при ≥16 доменов, записывает корректную форму маркера `pass3-complete.json` (`mode: "split"` + `groupsCompleted`) и перемещает staged-правила между стадиями. Воспроизвести эту оркестрацию вручную возможно, но утомительно. Если у вас есть причина запускать стадии вручную (например, отладка конкретной стадии), можно подставить шаблон `pass3-prompt.md` с соответствующей директивой `STAGE:` и подать его `claude -p` напрямую — но не забудьте переместить `.staged-rules/` после каждой стадии и обновить маркер самостоятельно.
868
-
869
- **В: Мой проект — апгрейд с v2.0.x, и у него есть существующая директория `claudeos-core/plan/`. Что делать?**
870
- Ничего не требуется — инструменты v2.1.0 игнорируют `plan/`, когда она отсутствует или пуста, а `plan-validator` всё ещё обрабатывает legacy-проекты с заполненными директориями `plan/` для обратной совместимости. Вы можете безопасно удалить `claudeos-core/plan/`, если не нуждаетесь в бэкапах master plan (история git всё равно лучший бэкап). Если вы сохраните `plan/`, запуск `npx claudeos-core init` не будет её обновлять — новый контент не агрегируется в master plans в v2.1.0. Инструменты верификации обрабатывают оба случая чисто.
479
+ **В: Куда сообщать о багах?**
480
+ О: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). По вопросам безопасности[SECURITY.md](SECURITY.md).
871
481
 
872
482
  ---
873
483
 
874
- ## Структура шаблонов
875
-
876
- ```
877
- pass-prompts/templates/
878
- ├── common/ # общие header/footer + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
879
- │ ├── header.md # Роль + директива формата вывода (все pass)
880
- │ ├── pass3-footer.md # Инструкция health-check после Pass 3 + 5 CRITICAL блоков guardrail (v2.2.0)
881
- │ ├── pass3-phase1.md # Блок "Read Once, Extract Facts" с Rule A-E (v2.1.0)
882
- │ ├── pass4.md # Промпт скаффолдинга памяти (v2.0.0)
883
- │ ├── staging-override.md # Перенаправляет записи .claude/rules/** в .staged-rules/** (v2.0.0)
884
- │ ├── claude-md-scaffold.md # Детерминированный шаблон CLAUDE.md из 8 секций (v2.2.0)
885
- │ └── lang-instructions.json # Директивы вывода по языкам (10 языков)
886
- ├── java-spring/ # Java / Spring Boot
887
- ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
888
- ├── node-express/ # Node.js / Express
889
- ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
890
- ├── node-fastify/ # Node.js / Fastify
891
- ├── node-nextjs/ # Next.js / React (App Router, RSC)
892
- ├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
893
- ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
894
- ├── angular/ # Angular
895
- ├── python-django/ # Python / Django (DRF)
896
- ├── python-fastapi/ # Python / FastAPI
897
- └── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
898
- ```
899
-
900
- `plan-installer` автоматически определяет ваш стек/стеки, затем собирает специфичные по типу промпты. NestJS, Vue/Nuxt, Vite SPA и Flask каждый используют выделенные шаблоны с категориями анализа, специфичными для фреймворка (например, `@Module`/`@Injectable`/Guards для NestJS; `<script setup>`/Pinia/useFetch для Vue; client-side routing/`VITE_` env для Vite; Blueprint/`app.factory`/Flask-SQLAlchemy для Flask). Для мульти-стек проектов генерируются отдельные `pass1-backend-prompt.md` и `pass1-frontend-prompt.md`, а `pass3-prompt.md` комбинирует цели генерации обоих стеков. В v2.1.0 шаблон Pass 3 дополняется `common/pass3-phase1.md` (блок «Read Once, Extract Facts» с Rules A–E) перед тем, как нарезаться по стадиям split-режима. Pass 4 использует общий шаблон `common/pass4.md` (memory scaffolding) независимо от стека.
484
+ ## Документация
901
485
 
902
- **В v2.2.0**, промпт Pass 3 также встраивает inline `common/claude-md-scaffold.md` (детерминированный шаблон CLAUDE.md из 8 секций) между блоком phase1 и stack-specific телом — это фиксирует структуру секций, так что генерируемые CLAUDE.md не дрейфуют между проектами, а содержимое всё ещё адаптируется к каждому проекту. Шаблоны написаны **English-first**; инъекция языка из `lang-instructions.json` указывает LLM переводить заголовки секций и прозу на целевой выходной язык во время emit.
486
+ | Тема | Читать |
487
+ |---|---|
488
+ | Как работает 4-pass конвейер (глубже, чем диаграмма) | [docs/ru/architecture.md](docs/ru/architecture.md) |
489
+ | Визуальные диаграммы (Mermaid) архитектуры | [docs/ru/diagrams.md](docs/ru/diagrams.md) |
490
+ | Обнаружение стека — что ищет каждый сканер | [docs/ru/stacks.md](docs/ru/stacks.md) |
491
+ | Memory layer — decision logs и failure patterns | [docs/ru/memory-layer.md](docs/ru/memory-layer.md) |
492
+ | Все 5 validator подробно | [docs/ru/verification.md](docs/ru/verification.md) |
493
+ | Все CLI-команды и опции | [docs/ru/commands.md](docs/ru/commands.md) |
494
+ | Ручная установка (без `npx`) | [docs/ru/manual-installation.md](docs/ru/manual-installation.md) |
495
+ | Override-ы сканера — `.claudeos-scan.json` | [docs/ru/advanced-config.md](docs/ru/advanced-config.md) |
496
+ | Безопасность: что сохраняется при re-init | [docs/ru/safety.md](docs/ru/safety.md) |
497
+ | Сравнение со схожими инструментами (scope, не качество) | [docs/ru/comparison.md](docs/ru/comparison.md) |
498
+ | Ошибки и восстановление | [docs/ru/troubleshooting.md](docs/ru/troubleshooting.md) |
903
499
 
904
500
  ---
905
501
 
906
- ## Поддержка монорепо
907
-
908
- ClaudeOS-Core автоматически обнаруживает JS/TS монорепо-настройки и сканирует под-пакеты на зависимости.
909
-
910
- **Поддерживаемые маркеры монорепо** (автообнаружение):
911
- - `turbo.json` (Turborepo)
912
- - `pnpm-workspace.yaml` (pnpm workspaces)
913
- - `lerna.json` (Lerna)
914
- - `package.json#workspaces` (npm/yarn workspaces)
915
-
916
- **Запуск из корня монорепо** — ClaudeOS-Core читает `apps/*/package.json` и `packages/*/package.json` для обнаружения фреймворк/ORM/БД-зависимостей в под-пакетах:
917
-
918
- ```bash
919
- cd my-monorepo
920
- npx claudeos-core init
921
- ```
922
-
923
- **Что обнаруживается:**
924
- - Зависимости из `apps/web/package.json` (например, `next`, `react`) → frontend-стек
925
- - Зависимости из `apps/api/package.json` (например, `express`, `prisma`) → backend-стек
926
- - Зависимости из `packages/db/package.json` (например, `drizzle-orm`) → ORM/БД
927
- - Пользовательские пути workspace из `pnpm-workspace.yaml` (например, `services/*`)
928
-
929
- **Сканирование доменов также покрывает раскладки монорепо:**
930
- - `apps/api/src/modules/*/` и `apps/api/src/*/` для backend-доменов
931
- - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` для frontend-доменов
932
- - `packages/*/src/*/` для доменов shared-пакетов
933
-
934
- ```
935
- my-monorepo/ ← Запускайте здесь: npx claudeos-core init
936
- ├── turbo.json ← Автообнаружение как Turborepo
937
- ├── apps/
938
- │ ├── web/ ← Next.js обнаружен из apps/web/package.json
939
- │ │ ├── app/dashboard/ ← Frontend-домен обнаружен
940
- │ │ └── package.json ← { "dependencies": { "next": "^14" } }
941
- │ └── api/ ← Express обнаружен из apps/api/package.json
942
- │ ├── src/modules/users/ ← Backend-домен обнаружен
943
- │ └── package.json ← { "dependencies": { "express": "^4" } }
944
- ├── packages/
945
- │ ├── db/ ← Drizzle обнаружен из packages/db/package.json
946
- │ └── ui/
947
- └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
948
- ```
949
-
950
- > **Примечание:** Для Kotlin/Java монорепо обнаружение мультимодулей использует `settings.gradle.kts` (см. [Обнаружение доменов Kotlin мультимодульных проектов](#обнаружение-доменов-kotlin-мультимодульных-проектов) выше) и не требует маркеров JS-монорепо.
951
-
952
- ## Устранение неполадок
953
-
954
- **«claude: command not found»** — Claude Code CLI не установлен или не в PATH. См. [документацию Claude Code](https://code.claude.com/docs/en/overview).
955
-
956
- **«npm install failed»** — Версия Node.js может быть слишком старой. Требуется v18+.
957
-
958
- **«0 domains detected»** — Структура вашего проекта может быть нестандартной. См. паттерны обнаружения выше для вашего стека.
959
-
960
- **«0 domains detected» в Kotlin-проекте** — Убедитесь, что ваш проект имеет `build.gradle.kts` (или `build.gradle` с kotlin-плагином) в корне, а исходные файлы находятся под `**/src/main/kotlin/`. Для мультимодульных проектов убедитесь, что `settings.gradle.kts` содержит `include()`-выражения. Одномодульные Kotlin-проекты (без `settings.gradle`) также поддерживаются — домены извлекаются из структуры package/class под `src/main/kotlin/`.
961
-
962
- **«Language detected as java instead of kotlin»** — ClaudeOS-Core проверяет сначала корневой `build.gradle(.kts)`, затем build-файлы подмодулей. Если корневой build-файл использует плагин `java` без `kotlin`, но подмодули используют Kotlin, инструмент проверяет до 5 build-файлов подмодулей как фолбэк. Если всё равно не обнаружено, убедитесь, что хотя бы один `build.gradle.kts` содержит `kotlin("jvm")` или `org.jetbrains.kotlin`.
963
-
964
- **«CQRS not detected»** — Обнаружение архитектуры полагается на имена модулей, содержащие ключевые слова `command` и `query`. Если ваши модули используют другое именование (например, `write-server`, `read-server`), архитектура CQRS не будет автоматически обнаружена. Вы можете вручную скорректировать сгенерированные промпты после запуска plan-installer.
965
-
966
- **«Pass 3 produced 0 rule files under .claude/rules/» (v2.0.0)** — Сработал Guard 2: Claude проигнорировал директиву `staging-override.md` и попытался писать напрямую в `.claude/`, где политика чувствительных путей Claude Code блокирует запись. Перезапустите с `npx claudeos-core init --force`. Если ошибка повторяется, проверьте `claudeos-core/generated/pass3-prompt.md`, чтобы убедиться, что блок `staging-override.md` находится в начале.
967
-
968
- **«Pass 3 finished but N rule file(s) could not be moved from staging» (v2.0.0)** — Сработал Guard 1: перемещение staging попало на временную блокировку файла (обычно Windows-антивирус или file-watcher). Маркер НЕ записан, так что следующий запуск `init` автоматически повторит Pass 3. Просто перезапустите `npx claudeos-core init`.
969
-
970
- **«Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty» (v2.0.0)** — Сработал Guard 3 (H2): Claude обрезал ответ на середине после записи CLAUDE.md + rules, но до завершения (или начала) секции `claudeos-core/guide/` (ожидается 9 файлов). Также срабатывает на файле только с BOM или только с пробелами (заголовок был записан, но тело было обрезано). Без этого guard маркер завершения всё равно был бы записан, оставив `guide/` перманентно пустым на последующих запусках. Маркер здесь НЕ записывается, так что следующий запуск `init` повторит Pass 3 с теми же результатами Pass 2. Если повторяется, перезапустите с `npx claudeos-core init --force`, чтобы регенерировать с нуля.
971
-
972
- **«Pass 3 finished but the following required output(s) are missing or empty» (v2.0.0, обновлено в v2.1.0)** — Сработал Guard 3 (H1): Claude обрезал ПОСЛЕ `claudeos-core/guide/`, но до (или во время) `claudeos-core/standard/` или `claudeos-core/skills/`. Требования: (a) `standard/00.core/01.project-overview.md` существует и не пуст (sentinel, записываемый промптом Pass 3 каждого стека), (b) `skills/` имеет ≥1 непустой `.md`. `database/` и `mcp-guide/` намеренно исключены (некоторые стеки законно производят ноль файлов). `plan/` больше не проверяется начиная с v2.1.0 (master plans были удалены). Тот же путь восстановления, что у Guard 3 (H2): перезапустить `init`, или `--force`, если повторяется.
973
-
974
- **«Pass 3 split stage crashed partway through (v2.1.0)»** — Когда одна из split-стадий (например, `3b-1`, `3c-2`) падает в середине прогона, stage-level маркер НЕ записывается, но завершённые стадии ЗАПИСЫВАЮТСЯ в `pass3-complete.json.groupsCompleted`. Следующий запуск `init` читает этот массив и возобновляется с первой незавершённой стадии, пропуская всю ранее выполненную работу. Вам не нужно делать ничего вручную — просто перезапустите `npx claudeos-core init`. Если resume продолжает падать на одной и той же стадии, проверьте `claudeos-core/generated/pass3-prompt.md` на некорректное содержимое, затем попробуйте `--force` для полного перезапуска. Форма `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) стабильна; отсутствующий или некорректный маркер приводит к повторному запуску всего Pass 3 с `3a`.
975
-
976
- **«Pass 3 stale marker (shape mismatch) — treating as incomplete» (v2.1.0)** — `pass3-complete.json` от pre-v2.1.0 single-call прогона интерпретируется по новым правилам split-режима. Проверка формы ищет `mode: "split"` и массив `groupsCompleted`; если что-то из этого отсутствует, маркер трактуется как частичный, и Pass 3 перезапускается в split-режиме. Если вы обновились с v2.0.x, это ожидаемо один раз — следующий прогон запишет корректную форму маркера. Действий не требуется.
977
-
978
- **«pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running» (v2.0.0)** — Info-лог, не ошибка. При resume `init` теперь парсит и валидирует `pass2-merged.json` (требуется ≥5 ключей верхнего уровня, зеркалируя порог `INSUFFICIENT_KEYS` из `pass-json-validator`). Скелет `{}` или некорректный JSON от предыдущего упавшего запуска автоматически удаляется, и Pass 2 перезапускается. Ручные действия не нужны — пайплайн самовосстанавливается. Если повторяется, проверьте `claudeos-core/generated/pass2-prompt.md` и попробуйте с `--force`.
502
+ ## Вклад в проект
979
503
 
980
- **«Static fallback failed while translating to lang='ko'» (v2.0.0)** Когда `--lang` не английский, Pass 4 / статический фолбэк / gap-fill все требуют `claude` CLI для перевода. Если перевод падает (CLI не аутентифицирован, тайм-аут сети или строгая валидация отклонила вывод: <40% длины, сломанные code-fence, потерянный frontmatter и т.д.), запуск прерывается вместо тихой записи на английском. Фикс: убедитесь, что `claude` аутентифицирован, или перезапустите с `--lang en`, чтобы пропустить перевод.
504
+ Вклад приветствуетсядобавление поддержки стека, улучшение промптов, исправление багов. См. [CONTRIBUTING.md](CONTRIBUTING.md).
981
505
 
982
- **«pass4-memory.json exists but memory/ is empty» (v2.0.0)** Предыдущий запуск записал маркер, но пользователь (или cleanup-скрипт) удалил `claudeos-core/memory/`. CLI автоматически обнаруживает этот устаревший маркер и перезапускает Pass 4 на следующем `init`. Ручные действия не нужны.
506
+ Кодекс поведения и политику безопасности см. в [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) и [SECURITY.md](SECURITY.md).
983
507
 
984
- **«pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4» (v2.0.0)** — Info-лог, не ошибка. Содержимое маркера Pass 4 теперь валидируется (`passNum === 4` + непустой массив `memoryFiles`), а не просто его наличие. Частичный сбой Claude, выдавший что-то вроде `{"error":"timeout"}` в теле маркера, раньше навсегда принимался бы как успех; теперь маркер удаляется, и Pass 4 автоматически перезапускается.
985
-
986
- **«Could not delete stale pass3-complete.json / pass4-memory.json» InitError (v2.0.0)** — `init` обнаружил устаревший маркер (Pass 3: CLAUDE.md был удалён извне; Pass 4: memory/ пуста или тело маркера некорректно) и попытался его удалить, но вызов `unlinkSync` упал — обычно потому что Windows-антивирус или file-watcher (редактор, IDE-индексатор) держит файловый handle. Раньше это молча игнорировалось, из-за чего пайплайн пропускал проход и переиспользовал устаревший маркер. Теперь падает громко. Фикс: закройте редактор/AV-сканер, который мог держать файл открытым, затем перезапустите `npx claudeos-core init`.
987
-
988
- **«CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation» InitError (v2.0.0)** — У вас установлена test-only env-переменная `CLAUDEOS_SKIP_TRANSLATION=1` в shell (вероятно, остаток от CI/test-настройки) И выбран неанглийский `--lang`. Эта env-переменная блокирует путь перевода, от которого зависят статический фолбэк Pass 4 и gap-fill для неанглийского вывода. `init` обнаруживает конфликт на этапе выбора языка и немедленно прерывается (вместо краша в середине Pass 4 с запутанной вложенной ошибкой). Фикс: либо `unset CLAUDEOS_SKIP_TRANSLATION` перед запуском, либо используйте `npx claudeos-core init --lang en`.
989
-
990
- **Предупреждение «⚠️ v2.2.0 upgrade detected» (v2.2.0)** — Существующий `CLAUDE.md` был сгенерирован pre-v2.2.0 версией. Regeneration в default resume mode пропустит existing файлы согласно Rule B idempotency, поэтому структурные улучшения v2.2.0 (8-секционный CLAUDE.md scaffold, per-file paths в `40.infra/*`, точность порта на основе `.env.example`, редизайн Section 8 `Common Rules & Memory (L4)` (редизайн с двумя под-секциями: Common Rules · L4 Memory), строка правил `60.memory/*`, forward-referenced `04.doc-writing-guide.md`) НЕ будут применены. Fix: перезапустите с `npx claudeos-core init --force`. Это перезапишет generated файлы (`CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, `claudeos-core/skills/`, `claudeos-core/guide/`), сохраняя при этом `claudeos-core/memory/` (накопленные decision-log, failure-patterns — append-only). Сделайте commit проекта перед `--force`, если хотите сделать diff перезаписей.
991
-
992
- **Port в CLAUDE.md отличается от `.env.example` (v2.2.0)** — Новый `.env` parser stack-detector-а (`lib/env-parser.js`) сначала читает `.env.example` (canonical, committed), затем варианты `.env` как fallback. Распознаваемые port-переменные: `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT` и т.д. Для Spring Boot `server.port` из `application.yml` по-прежнему имеет приоритет над `.env` (framework-native config выигрывает). Если проект использует нестандартное имя env-переменной, переименуйте её в распознаваемое соглашение или создайте issue для расширения `PORT_VAR_KEYS`. Framework-дефолты (Vite 5173, Next.js 3000, Django 8000) используются только когда и direct detection, и `.env` молчат.
993
-
994
- **Secret-значения redacted как `***REDACTED***` в generated docs (v2.2.0)** — Ожидаемое поведение. `.env` parser v2.2.0 автоматически redact-ит значения переменных, соответствующих паттернам `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY`, до того как они достигнут любого генератора. Это defense-in-depth против случайно закоммиченных секретов в `.env.example`. `DATABASE_URL` сохраняется as-is для back-compat идентификации DB в stack-detector. Если вы видите `***REDACTED***` где-либо в generated `CLAUDE.md`, это баг — redacted-значения не должны попадать в таблицу; пожалуйста, создайте issue. Non-sensitive runtime config (port, host, API target, NODE_ENV и т.д.) проходит без изменений.
995
-
996
- ---
997
-
998
- ## Контрибьюции
999
-
1000
- Контрибьюции приветствуются! Области, где помощь нужна больше всего:
1001
-
1002
- - **Новые шаблоны стеков** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
1003
- - **Интеграция с IDE** — расширение VS Code, плагин IntelliJ
1004
- - **CI/CD-шаблоны** — GitLab CI, CircleCI, примеры Jenkins (GitHub Actions уже поставлен — см. `.github/workflows/test.yml`)
1005
- - **Покрытие тестами** — расширение тестового пакета (в настоящее время 602 теста в 30 тестовых файлах, покрывающих сканеры, определение стека, группировку доменов, парсинг планов, генерацию промптов, CLI-селекторы, определение монорепо, определение Vite SPA, инструменты верификации, L4 memory scaffold, валидацию resume Pass 2, Pass 3 Guards 1/2/3 (H1 sentinel + H2 BOM-aware empty-file + строгий stale-marker unlink), Pass 3 split-mode разбиение на батчи, Pass 3 partial-marker resume (v2.1.0), валидацию содержимого маркера Pass 4 + строгость stale-marker unlink + scaffoldSkillsManifest gap-fill (v2.1.0), translation env-skip guard + early fail-fast + CI workflow, перемещение staged-rules, lang-aware translation fallback, regression-сюиту удаления master plan (v2.1.0), регрессию форматирования memory score/compact (v2.1.0) структуру шаблона AI Work Rules и извлечение port/host/API-target парсером `.env` + redaction чувствительных переменных (v2.2.0))
508
+ ## Лицензия
1006
509
 
1007
- См. [`CONTRIBUTING.md`](./CONTRIBUTING.md) для полного списка областей, стиля кода, конвенции коммитов и пошагового руководства по добавлению нового шаблона стека.
510
+ [ISC](LICENSE) свободно для любого использования, включая коммерческое.
1008
511
 
1009
512
  ---
1010
513
 
1011
- ## Автор
1012
-
1013
- Создано **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
1014
-
1015
- ## Лицензия
1016
-
1017
- ISC
514
+ <sub>Создано с заботой [@claudeos-core](https://github.com/claudeos-core). Если это сэкономило вам время, ⭐ на GitHub помогает сохранять видимость проекта.</sub>