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