claudeos-core 2.3.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +736 -74
  2. package/CODE_OF_CONDUCT.md +15 -0
  3. package/README.de.md +321 -883
  4. package/README.es.md +322 -883
  5. package/README.fr.md +322 -883
  6. package/README.hi.md +322 -883
  7. package/README.ja.md +322 -883
  8. package/README.ko.md +322 -882
  9. package/README.md +321 -883
  10. package/README.ru.md +322 -885
  11. package/README.vi.md +322 -883
  12. package/README.zh-CN.md +321 -881
  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,454 @@
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)
9
+
10
+ **Автоматическая генерация документации Claude Code из вашего реального исходного кода.** CLI-инструмент, который статически анализирует ваш проект, а затем запускает 4-pass конвейер Claude для создания `.claude/rules/`, standards, skills и guides — так что Claude Code следует конвенциям **именно вашего** проекта, а не общим.
4
11
 
5
12
  ```bash
6
13
  npx claudeos-core init
7
14
  ```
8
15
 
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)
16
+ [🇺🇸 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
17
 
13
18
  ---
14
19
 
15
- ## Почему ClaudeOS-Core?
16
-
17
- Любой другой инструмент для Claude Code работает так:
18
-
19
- > **Человек описывает проект → LLM генерирует документацию**
20
-
21
- ClaudeOS-Core работает так:
22
-
23
- > **Код анализирует ваш исходник → Код строит адаптированный промпт → LLM генерирует документацию → Код верифицирует вывод**
24
-
25
- Это не мелкая разница. Вот почему это важно:
26
-
27
- ### Ключевая проблема: LLM угадывает. Код не угадывает.
20
+ ## Что это такое?
28
21
 
29
- Когда вы просите Claude «проанализировать этот проект», он **угадывает** ваш стек, ORM, структуру доменов.
30
- Он может увидеть `spring-boot` в вашем `build.gradle`, но упустить, что вы используете MyBatis (а не JPA).
31
- Он может обнаружить директорию `user/`, но не понять, что ваш проект использует layer-first упаковку (Pattern A), а не domain-first (Pattern B).
22
+ Вы используете Claude Code. Он умный, но **не знает конвенций вашего проекта**:
23
+ - Ваша команда использует MyBatis, а Claude генерирует код для JPA.
24
+ - Ваша обёртка `ApiResponse.ok()`, а Claude пишет `ResponseEntity.success()`.
25
+ - Ваши пакеты — `controller/order/`, а Claude создаёт `order/controller/`.
32
26
 
33
- **ClaudeOS-Core не угадывает.** Прежде чем Claude увидит ваш проект, код на Node.js уже:
27
+ Поэтому вы тратите немалую часть времени на правку каждого сгенерированного файла.
34
28
 
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
- - Собрал стек-специфический промпт со всеми подтверждёнными фактами
29
+ **ClaudeOS-Core решает эту проблему.** Он сканирует ваш реальный исходный код, выясняет ваши конвенции и записывает полный набор правил в `.claude/rules/` — каталог, который Claude Code читает автоматически. В следующий раз, когда вы скажете *"Создай CRUD для заказов"*, Claude последует вашим конвенциям с первой попытки.
40
30
 
41
- К моменту, когда Claude получает промпт, угадывать больше нечего. Стек подтверждён. Домены подтверждены. Паттерн структуры подтверждён. Единственная работа Claude — сгенерировать документацию, соответствующую этим **подтверждённым фактам**.
42
-
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
31
  ```
52
- Использует JPA-style репозиторий (ваш проект использует MyBatis)
53
- Создаёт ResponseEntity.success() (ваш враппер ApiResponse.ok())
54
- ❌ Размещает файлы в order/controller/ (ваш проект использует controller/order/)
55
- ❌ Генерирует английские комментарии (ваша команда пишет русские комментарии)
56
- → Вы тратите 20 минут на исправление каждого сгенерированного файла
32
+ До: Вы Claude Code целом хороший" код → правка вручную
33
+ После: Вы Claude Code код, соответствующий вашему проекту → используйте как есть
57
34
  ```
58
35
 
59
- **С ClaudeOS-Core** — `.claude/rules/` уже содержит ваши подтверждённые паттерны:
60
- ```
61
- ✅ Генерирует MyBatis mapper + XML (обнаружено из build.gradle)
62
- ✅ Использует ApiResponse.ok() (извлечено из вашего реального исходника)
63
- ✅ Размещает файлы в controller/order/ (Pattern A подтверждён сканированием структуры)
64
- ✅ Русские комментарии (применён --lang ru)
65
- → Сгенерированный код сразу соответствует конвенциям вашего проекта
66
- ```
67
-
68
- Эта разница накапливается. 10 задач/день × 20 минут экономии = **более 3 часов/день**.
69
-
70
36
  ---
71
37
 
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`, сгенерированного на английском, корейском, японском, вьетнамском, хинди, русском, испанском, китайском, французском или немецком.
79
-
80
- Кросс-языковая гарантия проверяется test-фикстурами на всех 10 языках, включая bad-case фикстуры на 6 из этих языков, производящие идентичные сигнатуры ошибок. Когда инвариант падает на вьетнамском проекте, исправление такое же, как при падении на немецком проекте.
81
-
82
- ### `content-validator [10/10]` — проверка утверждений о путях и согласованность MANIFEST
83
-
84
- Читает каждую ссылку на путь в обратных кавычках (`src/...`, `.claude/rules/...`, `claudeos-core/skills/...`) из всех сгенерированных `.md`-файлов и сверяет их с реальной файловой системой. Ловит два класса сбоев LLM, которые раньше не обнаруживал ни один инструмент:
85
-
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.
88
-
89
- Валидатор парой работает с prompt-time-предотвращением в `pass3-footer.md` и `pass4.md`: блоки anti-pattern, документирующие конкретные классы галлюцинаций (префикс родительского каталога, конвенции библиотек Vite/MSW/Vitest/Jest/RTL), и явное positive guidance — ограничивать правила уровнем каталога, когда конкретного имени файла нет в `pass3a-facts.md`.
90
-
91
- ### Запуск валидации на любом проекте
92
-
93
- ```bash
94
- npx claudeos-core health # все валидаторы — единый вердикт go/no-go
95
- npx claudeos-core lint # только структурные инварианты CLAUDE.md (любой язык)
96
- ```
97
-
38
+ ## Демонстрация на реальном проекте
39
+
40
+ Запуск на [`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 ✅.
41
+
42
+ <p align="center">
43
+ <img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
44
+ </p>
45
+
46
+ <details>
47
+ <summary><strong>📺 Вывод терминала (текстовая версия, для поиска и копирования)</strong></summary>
48
+
49
+ ```text
50
+ ╔════════════════════════════════════════════════════╗
51
+ ║ ClaudeOS-Core — Bootstrap (4-Pass) ║
52
+ ╚════════════════════════════════════════════════════╝
53
+ Project root: spring-boot-realworld-example-app
54
+ Language: English (en)
55
+
56
+ [Phase 1] Detecting stack...
57
+ Language: java 11
58
+ Framework: spring-boot 2.6.3
59
+ Database: sqlite
60
+ ORM: mybatis
61
+ PackageMgr: gradle
62
+
63
+ [Phase 2] Scanning structure...
64
+ Backend: 2 domains
65
+ Total: 2 domains
66
+ Package: io.spring.infrastructure
67
+
68
+ [Phase 5] Active domains...
69
+ ✅ 00.core ✅ 10.backend ⏭️ 20.frontend
70
+ ✅ 30.security-db ✅ 40.infra
71
+ ✅ 80.verification ✅ 90.optional
72
+
73
+ [4] Pass 1 — Deep analysis per domain group...
74
+ ✅ pass1-1.json created (5m 34s)
75
+ [█████░░░░░░░░░░░░░░░] 25% (1/4)
76
+
77
+ [5] Pass 2 — Merging analysis results...
78
+ ✅ pass2-merged.json created (4m 22s)
79
+ [██████████░░░░░░░░░░] 50% (2/4)
80
+
81
+ [6] Pass 3 — Generating all files...
82
+ 🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
83
+ ✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
84
+ ✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
85
+ ✅ 3c complete (12m 35s) — 13 skills + 9 guides
86
+ ✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
87
+ 🎉 Pass 3 split complete: 4/4 stages successful
88
+ [███████████████░░░░░] 75% (3/4)
89
+
90
+ [7] Pass 4 — Memory scaffolding...
91
+ 📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
92
+ ✅ Pass 4 complete (5m)
93
+ 📋 Gap-fill: all 12 expected files already present
94
+ [████████████████████] 100% (4/4)
95
+
96
+ ╔═══════════════════════════════════════╗
97
+ ║ ClaudeOS-Core — Health Checker ║
98
+ ╚═══════════════════════════════════════╝
99
+ ✅ plan-validator pass
100
+ ✅ sync-checker pass
101
+ ✅ content-validator pass
102
+ ✅ pass-json-validator pass
103
+ ✅ All systems operational
104
+
105
+ [Lint] ✅ CLAUDE.md structure valid (25 checks)
106
+ [Content] ✅ All content validation passed
107
+ Total: 0 advisories, 0 notes
108
+
109
+ ╔════════════════════════════════════════════════════╗
110
+ ║ ✅ ClaudeOS-Core — Complete ║
111
+ ║ Files created: 75 ║
112
+ ║ Domains analyzed: 1 group ║
113
+ ║ L4 scaffolded: memory + rules ║
114
+ ║ Output language: English ║
115
+ ║ Total time: 53m 8s ║
116
+ ╚════════════════════════════════════════════════════╝
117
+ ```
118
+
119
+ </details>
120
+
121
+ <details>
122
+ <summary><strong>📄 Что попадает в ваш <code>CLAUDE.md</code> (реальный фрагмент)</strong></summary>
123
+
124
+ ```markdown
125
+ ## 4. Core Architecture
126
+
127
+ ### Core Patterns
128
+
129
+ - **Hexagonal ports & adapters**: domain ports live in `io.spring.core.{aggregate}`
130
+ and are implemented by `io.spring.infrastructure.repository.MyBatis{Aggregate}Repository`.
131
+ The domain layer has zero MyBatis imports.
132
+ - **CQRS-lite read/write split (same DB)**: write side goes through repository ports
133
+ + entities; read side is a separate `readservice` package whose `@Mapper`
134
+ interfaces return `*Data` DTOs directly (no entity hydration).
135
+ - **No aggregator/orchestrator layer**: multi-source orchestration happens inside
136
+ application services (e.g., `ArticleQueryService`); there is no `*Aggregator`
137
+ class in the codebase.
138
+ - **Application-supplied UUIDs**: entity constructors assign their own UUID; PK is
139
+ passed via `#{user.id}` on INSERT. The global
140
+ `mybatis.configuration.use-generated-keys=true` flag is dead config
141
+ (auto-increment is unused).
142
+ - **JWT HS512 authentication**: `io.spring.infrastructure.service.DefaultJwtService`
143
+ is the sole token subject in/out; `io.spring.api.security.JwtTokenFilter`
144
+ extracts the token at the servlet layer.
145
+ ```
146
+
147
+ Примечание: каждое утверждение выше основано на реальном исходном коде — имена классов, пути пакетов, ключи конфигурации и флаг dead-config извлечены сканером ещё до того, как Claude начал писать файл.
148
+
149
+ </details>
150
+
151
+ <details>
152
+ <summary><strong>🛡️ Реальное автоматически загружаемое правило (<code>.claude/rules/10.backend/03.data-access-rules.md</code>)</strong></summary>
153
+
154
+ ````markdown
98
155
  ---
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
- }
182
- ```
183
-
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
-
156
+ paths:
157
+ - "**/*"
192
158
  ---
193
159
 
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
160
+ # Data Access Rules
222
161
 
223
- # Linux/macOS (только Bash)
224
- bash claudeos-core-tools/bootstrap.sh
225
- ```
226
-
227
- ### Язык вывода (10 языков)
162
+ ## XML-only SQL
163
+ - Every SQL statement lives in `src/main/resources/mapper/*.xml`.
164
+ NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
165
+ - Each `@Mapper` interface has exactly one XML file at
166
+ `src/main/resources/mapper/{InterfaceName}.xml`.
167
+ - `<mapper namespace="...">` MUST be the fully qualified Java interface name.
168
+ The single existing exception is `TransferData.xml` (free-form `transfer.data`).
228
169
 
229
- Когда вы запускаете `init` без `--lang`, появляется интерактивный селектор — используйте стрелки или цифровые клавиши для выбора:
230
-
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
- ```
170
+ ## Dynamic SQL
171
+ - `<if>` predicates MUST guard both null and empty:
172
+ `<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
173
+ - Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
252
174
 
253
- Описание меняется на выбранный язык при навигации. Чтобы пропустить селектор, передайте `--lang` напрямую:
175
+ ## Examples
254
176
 
255
- ```bash
256
- npx claudeos-core init --lang ko # Корейский
257
- npx claudeos-core init --lang ja # Японский
258
- npx claudeos-core init --lang en # Английский (по умолчанию)
177
+ ✅ Correct:
178
+ ```xml
179
+ <update id="update">
180
+ UPDATE articles
181
+ <set>
182
+ <if test="article.title != null and article.title != ''">title = #{article.title},</if>
183
+ updated_at = #{article.updatedAt}
184
+ </set>
185
+ WHERE id = #{article.id}
186
+ </update>
259
187
  ```
260
188
 
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 ..
189
+ Incorrect:
190
+ ```xml
191
+ <mapper namespace="article.mapper"> <!-- NOnamespace MUST be FQCN -->
276
192
  ```
193
+ ````
277
194
 
278
- #### Шаг 2: Создание структуры директорий
195
+ Glob `paths: ["**/*"]` означает, что Claude Code автоматически загружает это правило при редактировании любого файла в проекте. Примеры ✅/❌ берутся прямо из реальных конвенций этой кодовой базы и существующих паттернов багов.
279
196
 
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}
197
+ </details>
283
198
 
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}
199
+ <details>
200
+ <summary><strong>🧠 Автоматически сгенерированный сид <code>decision-log.md</code> (реальный фрагмент)</strong></summary>
286
201
 
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}
202
+ ```markdown
203
+ ## 2026-04-26 — CQRS-lite read/write split inside the persistence layer
289
204
 
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}
205
+ - **Context:** Writes go through `core.*Repository` port `MyBatis*Repository`
206
+ adapter `io.spring.infrastructure.mybatis.mapper.{Aggregate}Mapper`.
207
+ Reads bypass the domain port: application service →
208
+ `io.spring.infrastructure.mybatis.readservice.{Concept}ReadService` directly,
209
+ returning flat `*Data` DTOs from `io.spring.application.data.*`.
210
+ - **Options considered:** Single repository surface returning hydrated entities
211
+ for both reads and writes.
212
+ - **Decision:** Same database, two `@Mapper` packages — `mapper/` (write side,
213
+ operates on core entities) and `readservice/` (read side, returns `*Data` DTOs).
214
+ Read DTOs avoid entity hydration overhead.
215
+ - **Consequences:** Reads are NOT routed through the domain port — this is
216
+ intentional, not a bug. Application services may inject both a `*Repository`
217
+ (writes) and one or more `*ReadService` interfaces (reads) at the same time.
218
+ Do NOT add hydrate-then-map glue in the read path.
293
219
  ```
294
220
 
295
- > **Примечание v2.1.0:** Директория `claudeos-core/plan/` больше не создаётся. Генерация master plan удалена, потому что master plans были внутренним бэкапом, который Claude Code никогда не читал в рантайме, а их агрегация вызывала отказы `Prompt is too long`. Используйте `git` для бэкапа/восстановления.
221
+ Pass 4 заполняет `decision-log.md` архитектурными решениями, извлечёнными из `pass2-merged.json`, чтобы будущие сессии помнили *почему* кодовая база выглядит так, а не только *как* она выглядит.
296
222
 
297
- #### Шаг 3: Запуск plan-installer (анализ проекта)
223
+ </details>
298
224
 
299
- Сканирует ваш проект, определяет стек, находит домены, разбивает их на группы и генерирует промпты.
300
-
301
- ```bash
302
- node claudeos-core-tools/plan-installer/index.js
303
- ```
304
-
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/`)
313
-
314
- Вы можете изучить эти файлы, чтобы проверить точность обнаружения перед продолжением.
225
+ ---
315
226
 
316
- #### Шаг 4: Pass 1 — Глубокий анализ кода (по группам доменов)
227
+ ## Quick Start
317
228
 
318
- Запустите Pass 1 для каждой группы доменов. Проверьте `domain-groups.json` на количество групп.
229
+ **Предварительные требования:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) установлен и аутентифицирован.
319
230
 
320
231
  ```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
- ```
354
-
355
- **Проверка:** `ls claudeos-core/generated/pass1-*.json` должен показать по одному JSON на группу.
232
+ # 1. Перейдите в корень проекта
233
+ cd my-spring-boot-project
356
234
 
357
- #### Шаг 5: Pass 2 Слияние результатов анализа
235
+ # 2. Запустите init (анализирует код и просит Claude написать rules)
236
+ npx claudeos-core init
358
237
 
359
- ```bash
360
- cat claudeos-core/generated/pass2-prompt.md \
361
- | claude -p --dangerously-skip-permissions
238
+ # 3. Готово. Откройте Claude Code и начните кодить — rules уже загружены.
362
239
  ```
363
240
 
364
- **Проверка:** `claudeos-core/generated/pass2-merged.json` должен существовать с 9+ ключами верхнего уровня.
241
+ **Что вы получаете** после завершения `init`:
365
242
 
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-раннер управлял оркестрацией стадий.
369
-
370
- **Single-call режим (только малые проекты, ≤5 доменов):**
371
-
372
- ```bash
373
- cat claudeos-core/generated/pass3-prompt.md \
374
- | claude -p --dangerously-skip-permissions
375
243
  ```
244
+ your-project/
245
+ ├── .claude/
246
+ │ └── rules/ ← Claude Code загружает автоматически
247
+ │ ├── 00.core/ (общие rules — именование, архитектура)
248
+ │ ├── 10.backend/ (backend stack rules, если есть)
249
+ │ ├── 20.frontend/ (frontend stack rules, если есть)
250
+ │ ├── 30.security-db/ (конвенции безопасности и БД)
251
+ │ ├── 40.infra/ (env, логирование, CI/CD)
252
+ │ ├── 50.sync/ (напоминания о синхронизации документации — rules only)
253
+ │ ├── 60.memory/ (memory rules — Pass 4, rules only)
254
+ │ ├── 70.domains/{type}/ (rules по доменам, type = backend|frontend)
255
+ │ └── 80.verification/ (стратегия тестирования + напоминания о верификации сборки)
256
+ ├── claudeos-core/
257
+ │ ├── standard/ ← Справочные документы (зеркалят структуру категорий)
258
+ │ │ ├── 00.core/ (обзор проекта, архитектура, именование)
259
+ │ │ ├── 10.backend/ (backend reference — если backend stack)
260
+ │ │ ├── 20.frontend/ (frontend reference — если frontend stack)
261
+ │ │ ├── 30.security-db/ (security & DB reference)
262
+ │ │ ├── 40.infra/ (env / логирование / CI-CD reference)
263
+ │ │ ├── 70.domains/{type}/ (reference по доменам)
264
+ │ │ ├── 80.verification/ (build / startup / testing reference — standard only)
265
+ │ │ └── 90.optional/ (специфика стека — standard only)
266
+ │ ├── skills/ (повторно используемые паттерны, которые Claude может применить)
267
+ │ ├── guide/ (how-to гайды для типовых задач)
268
+ │ ├── database/ (обзор схемы, гайд по миграциям)
269
+ │ ├── mcp-guide/ (заметки по интеграции MCP)
270
+ │ └── memory/ (decision log, failure patterns, compaction)
271
+ └── CLAUDE.md (индекс, который Claude читает первым)
272
+ ```
273
+
274
+ Категории, разделяющие одинаковый числовой 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
275
 
377
- **Постадийный режим (рекомендуется для всех размеров проекта):**
378
-
379
- Автоматический пайплайн запускает эти стадии. Список стадий:
380
-
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/` | Фиксированного размера, независимо от количества доменов |
389
-
390
- Для проекта с 1–15 доменами это разворачивается в 4 стадии (`3a`, `3b-core`, `3c-core`, `3d-aux` — без разбиения на батчи). Для 16–30 доменов разворачивается в 8 стадий (`3b` и `3c` каждая делится на 2 батча). См. [Автомасштабирование по размеру проекта](#автомасштабирование-по-размеру-проекта) для полной таблицы.
391
-
392
- **Проверка:** `CLAUDE.md` должен существовать в корне проекта, а маркер `claudeos-core/generated/pass3-complete.json` должен быть записан. В split-режиме маркер содержит `mode: "split"` и массив `groupsCompleted`, перечисляющий каждую завершённую стадию — логика частичного маркера использует это, чтобы возобновить с нужной стадии после краша, а не перезапускать с `3a` (что удвоило бы расход токенов).
393
-
394
- > **Примечание о staging:** Pass 3 сначала пишет файлы правил в `claudeos-core/generated/.staged-rules/`, потому что политика чувствительных путей Claude Code блокирует прямую запись в `.claude/`. Автоматический пайплайн выполняет перемещение автоматически после каждой стадии. Если вы запускаете стадию вручную, вам нужно переместить staged-дерево самостоятельно: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (сохраняя подпути).
395
-
396
- #### Шаг 7: Pass 4 — Memory scaffolding
397
-
398
- ```bash
399
- cat claudeos-core/generated/pass4-prompt.md \
400
- | claude -p --dangerously-skip-permissions
401
- ```
276
+ ---
402
277
 
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`.
278
+ ## Кому это подходит?
404
279
 
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 символов).
280
+ | Если вы... | Это поможет вам... |
281
+ |---|---|
282
+ | **Соло-разработчик**, начинающий новый проект с Claude Code | Полностью пропустить фазу "учим Claude нашим конвенциям" |
283
+ | **Тимлид**, поддерживающий общие стандарты | Автоматизировать рутину поддержания `.claude/rules/` в актуальном состоянии |
284
+ | **Уже использующий Claude Code**, но устал править генерируемый код | Заставить Claude следовать ВАШИМ паттернам, а не "в целом хорошим" |
406
285
 
407
- > **Примечание:** Если `claude -p` падает или `pass4-prompt.md` отсутствует, автоматический пайплайн использует статический фолбэк через `lib/memory-scaffold.js` (с переводом через Claude, когда `--lang` не английский). Статический фолбэк запускается только внутри `npx claudeos-core init` ручной режим требует успеха Pass 4.
286
+ **Не подходит, если:** вы хотите универсальный preset bundle из agents/skills/rules, который работает с первого дня без шага сканирования (см. [docs/ru/comparison.md](docs/ru/comparison.md) что под какие задачи подходит), либо ваш проект пока не вписывается в один из [поддерживаемых стеков](#supported-stacks).
408
287
 
409
- #### Шаг 8: Запуск инструментов верификации
288
+ ---
410
289
 
411
- ```bash
412
- # Генерация метаданных (требуется перед другими проверками)
413
- node claudeos-core-tools/manifest-generator/index.js
290
+ ## Как это работает?
414
291
 
415
- # Запустить все проверки
416
- node claudeos-core-tools/health-checker/index.js
292
+ ClaudeOS-Core инвертирует обычный workflow Claude Code:
417
293
 
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-маркеров
423
294
  ```
424
-
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
433
-
434
- # Проверить один стандартный файл
435
- cat claudeos-core/standard/00.core/01.project-overview.md | head -20
436
-
437
- # Проверить правила
438
- ls .claude/rules/*/
295
+ Обычно: Вы описываете проект → Claude угадывает ваш стек → Claude пишет docs
296
+ Здесь: Код читает ваш стек → Код передаёт подтверждённые факты Claude → Claude пишет docs из фактов
439
297
  ```
440
298
 
441
- > **Совет:** Если какой-то шаг падает, вы можете исправить проблему и перезапустить только этот шаг. Результаты Pass 1/2 кэшируются если `pass1-N.json` или `pass2-merged.json` уже существует, автоматический пайплайн их пропускает. Используйте `npx claudeos-core init --force`, чтобы удалить предыдущие результаты и начать с чистого листа.
299
+ Ключевая идея: **Node.js scanner сначала читает ваш исходный код** (детерминированно, без AI), а затем 4-pass конвейер Claude пишет документацию, ограниченную тем, что обнаружил сканер. Claude не может выдумать пути или фреймворки, которых на самом деле нет в вашем коде.
442
300
 
443
- ### Начало использования
444
-
445
- ```
446
- # В Claude Code — просто спрашивайте естественно:
447
- "Создай CRUD для домена order"
448
- "Добавь API аутентификации пользователя"
449
- "Отрефактори этот код под паттерны проекта"
450
-
451
- # Claude Code автоматически ссылается на ваши сгенерированные Standards, Rules и Skills.
452
- ```
301
+ Полное описание архитектуры см. в [docs/ru/architecture.md](docs/ru/architecture.md).
453
302
 
454
303
  ---
455
304
 
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 сливаются воедино.
305
+ ## Supported Stacks
504
306
 
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, на который ссылается каждая последующая стадия.
307
+ 12 стеков, автоматически определяемых по файлам вашего проекта:
506
308
 
507
- Шаблон промпта Pass 3 также включает блок **Phase 1 «Read Once, Extract Facts»** с пятью правилами, ещё больше ограничивающими объём вывода:
309
+ **Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
508
310
 
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` вызовов.
311
+ **Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
514
312
 
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-дефолтам.
313
+ Multi-stack проекты (например, Spring Boot backend + Next.js frontend) работают «из коробки».
516
314
 
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 его пропустил.
315
+ Правила обнаружения и то, что извлекает каждый сканер, см. в [docs/ru/stacks.md](docs/ru/stacks.md).
520
316
 
521
317
  ---
522
318
 
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/`.
319
+ ## Повседневный workflow
585
320
 
586
- ### Рекомендации по gitignore
321
+ Три команды покрывают ~95% использования:
587
322
 
588
- **Коммитить** (командное знание — предназначено для обмена):
589
- - `CLAUDE.md` точка входа Claude Code
590
- - `.claude/rules/**` — автозагружаемые правила
591
- - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — сгенерированная документация
592
- - `claudeos-core/memory/**` — история решений, паттерны ошибок, предложения правил
323
+ ```bash
324
+ # Первый раз на проекте
325
+ npx claudeos-core init
593
326
 
594
- **НЕ коммитить** (регенерируемые артефакты сборки):
327
+ # После того как вы вручную отредактировали standards или rules
328
+ npx claudeos-core lint
595
329
 
596
- ```gitignore
597
- # ClaudeOS-Core — сгенерированный анализ и кэш переводов
598
- claudeos-core/generated/
330
+ # Health-check (запускайте перед коммитом или в CI)
331
+ npx claudeos-core health
599
332
  ```
600
333
 
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 встроенных инструментов верификации, автоматически запускаемых после генерации:
334
+ Ещё две для обслуживания memory layer:
627
335
 
628
336
  ```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
337
+ # Компактация лога failure-patterns (запускайте периодически)
338
+ npx claudeos-core memory compact
636
339
 
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
340
+ # Продвижение частых failure pattern в предложенные rules
341
+ npx claudeos-core memory propose-rules
642
342
  ```
643
343
 
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` |
344
+ Полные опции каждой команды см. в [docs/ru/commands.md](docs/ru/commands.md).
651
345
 
652
346
  ---
653
347
 
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) |
348
+ ## Чем это отличается
670
349
 
671
- ### Что Claude Code читает по запросу через ссылки в правилах
350
+ Большинство инструментов документации Claude Code генерируют по описанию (вы рассказываете инструменту, инструмент рассказывает Claude). ClaudeOS-Core генерирует из вашего реального исходного кода (инструмент читает, инструмент сообщает Claude, что подтверждено, Claude пишет только подтверждённое).
672
351
 
673
- Каждый файл правила ссылается на соответствующий standard через секцию `## Reference`. Claude читает только релевантный для текущей задачи standard:
352
+ Три конкретных следствия:
674
353
 
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 при принятии решений или столкновении с повторяющимися ошибками.
354
+ 1. **Детерминированное обнаружение стека.** Тот же проект + тот же код = тот же вывод. Никакого «Claude в этот раз бросил кубик иначе».
355
+ 2. **Никаких выдуманных путей.** Промпт Pass 3 явно перечисляет каждый разрешённый путь к исходникам; Claude не может процитировать несуществующий путь.
356
+ 3. **Multi-stack-aware.** Backend и frontend домены используют разные analysis prompts в одном запуске.
678
357
 
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` в начале сессии). Всегда коммитьте эти файлы. |
358
+ Бок о бок сравнение scope с другими инструментами см. в [docs/ru/comparison.md](docs/ru/comparison.md). Сравнение про **что делает каждый инструмент**, а не **что лучше** большинство дополняют друг друга.
692
359
 
693
360
  ---
694
361
 
695
- ## Ежедневный рабочий процесс
362
+ ## Верификация (post-generation)
696
363
 
697
- ### После установки
364
+ После того как Claude напишет docs, код их проверяет. Пять отдельных validator:
698
365
 
699
- ```
700
- # Просто пользуйтесь Claude Code как обычно — он автоматически ссылается на ваши стандарты:
701
- "Создай CRUD для домена order"
702
- "Добавь API обновления профиля пользователя"
703
- "Отрефактори этот код под паттерны проекта"
704
- ```
366
+ | Validator | Что проверяет | Запускается через |
367
+ |---|---|---|
368
+ | `claude-md-validator` | Структурные инварианты CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
369
+ | `content-validator` | Реальное существование заявленных путей; согласованность manifest | `health` (advisory) |
370
+ | `pass-json-validator` | Выводы Pass 1 / 2 / 3 / 4 — well-formed JSON | `health` (warn) |
371
+ | `plan-validator` | Сохранённый plan совпадает с тем, что на диске | `health` (fail-on-error) |
372
+ | `sync-checker` | Файлы на диске совпадают с регистрациями `sync-map.json` (детекция orphaned/unregistered) | `health` (fail-on-error) |
705
373
 
706
- ### После ручного редактирования стандартов
374
+ `health-checker` оркестрирует четыре runtime-validator с трёхуровневой severity (fail / warn / advisory) и завершается с подходящим кодом для CI. `claude-md-validator` запускается отдельно через команду `lint`, поскольку структурный drift — это сигнал переинициализации, а не мягкое предупреждение. Запускайте в любой момент:
707
375
 
708
376
  ```bash
709
- # После редактирования файлов стандартов или правил:
710
- npx claudeos-core refresh
711
-
712
- # Проверить согласованность всего
713
377
  npx claudeos-core health
714
378
  ```
715
379
 
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
- ```
380
+ Подробное описание проверок каждого validator см. в [docs/ru/verification.md](docs/ru/verification.md).
774
381
 
775
382
  ---
776
383
 
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 паттернов | ❌ | ❌ |
384
+ ## Memory Layer (опционально, для долгоживущих проектов)
796
385
 
797
- ### Ключевое различие одним предложением
386
+ Начиная с v2.0, ClaudeOS-Core пишет папку `claudeos-core/memory/` с четырьмя файлами:
798
387
 
799
- **Другие инструменты дают Claude «в целом хорошие инструкции». ClaudeOS-Core даёт Claude «инструкции, извлечённые из вашего реального кода».**
388
+ - `decision-log.md` append-only «почему мы выбрали X вместо
389
+ - `failure-patterns.md` — повторяющиеся ошибки с оценками frequency/importance
390
+ - `compaction.md` — как memory автоматически компактируется со временем
391
+ - `auto-rule-update.md` — паттерны, которые должны стать новыми rules
800
392
 
801
- Именно поэтому Claude Code перестаёт генерировать JPA-код в вашем MyBatis-проекте,
802
- перестаёт использовать `success()`, когда ваша кодовая база использует `ok()`,
803
- и перестаёт создавать директории `user/controller/`, когда ваш проект использует `controller/user/`.
393
+ Можно запустить `npx claudeos-core memory propose-rules`, чтобы попросить Claude изучить недавние failure patterns и предложить новые rules.
804
394
 
805
- ### Взаимодополняющее, не конкурирующее
806
-
807
- ClaudeOS-Core фокусируется на **проектно-специфичных правилах и стандартах**.
808
- Другие инструменты фокусируются на **оркестрации агентов и workflow**.
809
-
810
- Вы можете использовать ClaudeOS-Core для генерации правил вашего проекта, а затем ECC или Harness поверх для агент-команд и автоматизации workflow. Они решают разные задачи.
395
+ Модель memory и жизненный цикл см. в [docs/ru/memory-layer.md](docs/ru/memory-layer.md).
811
396
 
812
397
  ---
813
398
 
814
399
  ## FAQ
815
400
 
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`.
401
+ **В: Нужен ли мне Claude API ключ?**
402
+ О: Нет. ClaudeOS-Core использует ваш существующий Claude Code — он отправляет промпты в `claude -p` на вашей машине. Никаких дополнительных аккаунтов.
838
403
 
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`.
404
+ **В: Перезапишет ли это мой существующий CLAUDE.md или `.claude/rules/`?**
405
+ О: Первый запуск на свежем проекте: создаёт. Перезапуск без `--force` сохраняет ваши правки pass-маркеры предыдущего запуска обнаруживаются, и pass-ы пропускаются. Перезапуск с `--force` стирает и регенерирует всё (ваши правки теряются — в этом и смысл `--force`). См. [docs/ru/safety.md](docs/ru/safety.md).
841
406
 
842
- **В: Поддерживает ли он Kotlin?**
843
- Да. ClaudeOS-Core автоматически обнаруживает Kotlin из `build.gradle.kts` или kotlin-плагина в `build.gradle`. Он использует выделенный шаблон `kotlin-spring` с Kotlin-специфичным анализом (data class, sealed class, coroutines, extension functions, MockK и др.).
407
+ **В: Мой стек не поддерживается. Можно добавить?**
408
+ О: Да. Новый стек требует ~3 prompt-шаблона + domain scanner. См. [CONTRIBUTING.md](CONTRIBUTING.md) гайд из 8 шагов.
844
409
 
845
- **В: Что насчёт CQRS / BFF архитектуры?**
846
- Полностью поддерживается для Kotlin мультимодульных проектов. ClaudeOS-Core читает `settings.gradle.kts`, определяет типы модулей (command, query, bff, integration) из имён модулей и группирует один домен между Command/Query модулями. Сгенерированные стандарты включают отдельные правила для command-контроллеров vs query-контроллеров, BFF/Feign паттерны и конвенции межмодульной коммуникации.
410
+ **В: Как сгенерировать docs на корейском (или другом языке)?**
411
+ О: `npx claudeos-core init --lang ko`. Поддерживается 10 языков: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
847
412
 
848
- **В: Что насчёт Gradle мультимодульных монорепо?**
849
- ClaudeOS-Core сканирует все подмодули (`**/src/main/kotlin/**/*.kt`) независимо от глубины вложенности. Типы модулей выводятся из конвенций именования (например, `reservation-command-server` домен: `reservation`, тип: `command`). Общие библиотеки (`shared-lib`, `integration-lib`) также обнаруживаются.
413
+ **В: Работает ли это с monorepo?**
414
+ О: Да — 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
415
 
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 в начале сессии). Это держит стоимость контекста низкой, сохраняя долгосрочное знание.
416
+ **В: Что, если Claude Code сгенерирует rules, с которыми я не согласен?**
417
+ О: Редактируйте напрямую. Затем запустите `npx claudeos-core lint`, чтобы убедиться, что CLAUDE.md по-прежнему структурно валиден. Ваши правки сохраняются при последующих запусках `init` (без `--force`) — механизм resume пропускает pass-ы, у которых есть маркеры.
853
418
 
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. Инструменты верификации обрабатывают оба случая чисто.
419
+ **В: Куда сообщать о багах?**
420
+ О: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). По вопросам безопасности[SECURITY.md](SECURITY.md).
871
421
 
872
422
  ---
873
423
 
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) независимо от стека.
424
+ ## Документация
901
425
 
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.
426
+ | Тема | Читать |
427
+ |---|---|
428
+ | Как работает 4-pass конвейер (глубже, чем диаграмма) | [docs/ru/architecture.md](docs/ru/architecture.md) |
429
+ | Визуальные диаграммы (Mermaid) архитектуры | [docs/ru/diagrams.md](docs/ru/diagrams.md) |
430
+ | Обнаружение стека — что ищет каждый сканер | [docs/ru/stacks.md](docs/ru/stacks.md) |
431
+ | Memory layer — decision logs и failure patterns | [docs/ru/memory-layer.md](docs/ru/memory-layer.md) |
432
+ | Все 5 validator подробно | [docs/ru/verification.md](docs/ru/verification.md) |
433
+ | Все CLI-команды и опции | [docs/ru/commands.md](docs/ru/commands.md) |
434
+ | Ручная установка (без `npx`) | [docs/ru/manual-installation.md](docs/ru/manual-installation.md) |
435
+ | Override-ы сканера — `.claudeos-scan.json` | [docs/ru/advanced-config.md](docs/ru/advanced-config.md) |
436
+ | Безопасность: что сохраняется при re-init | [docs/ru/safety.md](docs/ru/safety.md) |
437
+ | Сравнение со схожими инструментами (scope, не качество) | [docs/ru/comparison.md](docs/ru/comparison.md) |
438
+ | Ошибки и восстановление | [docs/ru/troubleshooting.md](docs/ru/troubleshooting.md) |
903
439
 
904
440
  ---
905
441
 
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`.
442
+ ## Вклад в проект
979
443
 
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`, чтобы пропустить перевод.
444
+ Вклад приветствуетсядобавление поддержки стека, улучшение промптов, исправление багов. См. [CONTRIBUTING.md](CONTRIBUTING.md).
981
445
 
982
- **«pass4-memory.json exists but memory/ is empty» (v2.0.0)** Предыдущий запуск записал маркер, но пользователь (или cleanup-скрипт) удалил `claudeos-core/memory/`. CLI автоматически обнаруживает этот устаревший маркер и перезапускает Pass 4 на следующем `init`. Ручные действия не нужны.
446
+ Кодекс поведения и политику безопасности см. в [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) и [SECURITY.md](SECURITY.md).
983
447
 
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))
448
+ ## Лицензия
1006
449
 
1007
- См. [`CONTRIBUTING.md`](./CONTRIBUTING.md) для полного списка областей, стиля кода, конвенции коммитов и пошагового руководства по добавлению нового шаблона стека.
450
+ [ISC](LICENSE) свободно для любого использования, включая коммерческое.
1008
451
 
1009
452
  ---
1010
453
 
1011
- ## Автор
1012
-
1013
- Создано **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
1014
-
1015
- ## Лицензия
1016
-
1017
- ISC
454
+ <sub>Создано с заботой [@claudeos-core](https://github.com/claudeos-core). Если это сэкономило вам время, ⭐ на GitHub помогает сохранять видимость проекта.</sub>