claudeos-core 2.3.2 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +736 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +321 -883
- package/README.es.md +322 -883
- package/README.fr.md +322 -883
- package/README.hi.md +322 -883
- package/README.ja.md +322 -883
- package/README.ko.md +322 -882
- package/README.md +321 -883
- package/README.ru.md +322 -885
- package/README.vi.md +322 -883
- package/README.zh-CN.md +321 -881
- 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,454 @@
|
|
|
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)
|
|
9
|
+
|
|
10
|
+
**Автоматическая генерация документации Claude Code из вашего реального исходного кода.** CLI-инструмент, который статически анализирует ваш проект, а затем запускает 4-pass конвейер Claude для создания `.claude/rules/`, standards, skills и guides — так что Claude Code следует конвенциям **именно вашего** проекта, а не общим.
|
|
4
11
|
|
|
5
12
|
```bash
|
|
6
13
|
npx claudeos-core init
|
|
7
14
|
```
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
16
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
12
17
|
|
|
13
18
|
---
|
|
14
19
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
Любой другой инструмент для Claude Code работает так:
|
|
18
|
-
|
|
19
|
-
> **Человек описывает проект → LLM генерирует документацию**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core работает так:
|
|
22
|
-
|
|
23
|
-
> **Код анализирует ваш исходник → Код строит адаптированный промпт → LLM генерирует документацию → Код верифицирует вывод**
|
|
24
|
-
|
|
25
|
-
Это не мелкая разница. Вот почему это важно:
|
|
26
|
-
|
|
27
|
-
### Ключевая проблема: LLM угадывает. Код не угадывает.
|
|
20
|
+
## Что это такое?
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
Вы используете Claude Code. Он умный, но **не знает конвенций вашего проекта**:
|
|
23
|
+
- Ваша команда использует MyBatis, а Claude генерирует код для JPA.
|
|
24
|
+
- Ваша обёртка — `ApiResponse.ok()`, а Claude пишет `ResponseEntity.success()`.
|
|
25
|
+
- Ваши пакеты — `controller/order/`, а Claude создаёт `order/controller/`.
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
Поэтому вы тратите немалую часть времени на правку каждого сгенерированного файла.
|
|
34
28
|
|
|
35
|
-
-
|
|
36
|
-
- Просканировал структуру директорий и **подтвердил** список доменов с количеством файлов
|
|
37
|
-
- Классифицировал структуру вашего проекта в один из 5 Java-паттернов, Kotlin CQRS/BFF или Next.js App Router/FSD
|
|
38
|
-
- Разбил домены на оптимально размерные группы, помещающиеся в context window Claude
|
|
39
|
-
- Собрал стек-специфический промпт со всеми подтверждёнными фактами
|
|
29
|
+
**ClaudeOS-Core решает эту проблему.** Он сканирует ваш реальный исходный код, выясняет ваши конвенции и записывает полный набор правил в `.claude/rules/` — каталог, который Claude Code читает автоматически. В следующий раз, когда вы скажете *"Создай CRUD для заказов"*, Claude последует вашим конвенциям с первой попытки.
|
|
40
30
|
|
|
41
|
-
К моменту, когда Claude получает промпт, угадывать больше нечего. Стек подтверждён. Домены подтверждены. Паттерн структуры подтверждён. Единственная работа Claude — сгенерировать документацию, соответствующую этим **подтверждённым фактам**.
|
|
42
|
-
|
|
43
|
-
### Результат
|
|
44
|
-
|
|
45
|
-
Другие инструменты создают «в целом хорошую» документацию.
|
|
46
|
-
ClaudeOS-Core создаёт документацию, которая знает, что ваш проект использует `ApiResponse.ok()` (а не `ResponseEntity.success()`), что ваши MyBatis XML-мапперы находятся в `src/main/resources/mybatis/mappers/`, и что ваша структура пакетов — `com.company.module.{domain}.controller` — потому что он прочитал ваш реальный код.
|
|
47
|
-
|
|
48
|
-
### До и после
|
|
49
|
-
|
|
50
|
-
**Без ClaudeOS-Core** — вы просите Claude Code создать Order CRUD:
|
|
51
31
|
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
❌ Размещает файлы в order/controller/ (ваш проект использует controller/order/)
|
|
55
|
-
❌ Генерирует английские комментарии (ваша команда пишет русские комментарии)
|
|
56
|
-
→ Вы тратите 20 минут на исправление каждого сгенерированного файла
|
|
32
|
+
До: Вы → Claude Code → "в целом хороший" код → правка вручную
|
|
33
|
+
После: Вы → Claude Code → код, соответствующий вашему проекту → используйте как есть
|
|
57
34
|
```
|
|
58
35
|
|
|
59
|
-
**С ClaudeOS-Core** — `.claude/rules/` уже содержит ваши подтверждённые паттерны:
|
|
60
|
-
```
|
|
61
|
-
✅ Генерирует MyBatis mapper + XML (обнаружено из build.gradle)
|
|
62
|
-
✅ Использует ApiResponse.ok() (извлечено из вашего реального исходника)
|
|
63
|
-
✅ Размещает файлы в controller/order/ (Pattern A подтверждён сканированием структуры)
|
|
64
|
-
✅ Русские комментарии (применён --lang ru)
|
|
65
|
-
→ Сгенерированный код сразу соответствует конвенциям вашего проекта
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Эта разница накапливается. 10 задач/день × 20 минут экономии = **более 3 часов/день**.
|
|
69
|
-
|
|
70
36
|
---
|
|
71
37
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
38
|
+
## Демонстрация на реальном проекте
|
|
39
|
+
|
|
40
|
+
Запуск на [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files. Результат: **75 generated files**, общее время **53 минуты**, все validators ✅.
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary><strong>📺 Вывод терминала (текстовая версия, для поиска и копирования)</strong></summary>
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
╔════════════════════════════════════════════════════╗
|
|
51
|
+
║ ClaudeOS-Core — Bootstrap (4-Pass) ║
|
|
52
|
+
╚════════════════════════════════════════════════════╝
|
|
53
|
+
Project root: spring-boot-realworld-example-app
|
|
54
|
+
Language: English (en)
|
|
55
|
+
|
|
56
|
+
[Phase 1] Detecting stack...
|
|
57
|
+
Language: java 11
|
|
58
|
+
Framework: spring-boot 2.6.3
|
|
59
|
+
Database: sqlite
|
|
60
|
+
ORM: mybatis
|
|
61
|
+
PackageMgr: gradle
|
|
62
|
+
|
|
63
|
+
[Phase 2] Scanning structure...
|
|
64
|
+
Backend: 2 domains
|
|
65
|
+
Total: 2 domains
|
|
66
|
+
Package: io.spring.infrastructure
|
|
67
|
+
|
|
68
|
+
[Phase 5] Active domains...
|
|
69
|
+
✅ 00.core ✅ 10.backend ⏭️ 20.frontend
|
|
70
|
+
✅ 30.security-db ✅ 40.infra
|
|
71
|
+
✅ 80.verification ✅ 90.optional
|
|
72
|
+
|
|
73
|
+
[4] Pass 1 — Deep analysis per domain group...
|
|
74
|
+
✅ pass1-1.json created (5m 34s)
|
|
75
|
+
[█████░░░░░░░░░░░░░░░] 25% (1/4)
|
|
76
|
+
|
|
77
|
+
[5] Pass 2 — Merging analysis results...
|
|
78
|
+
✅ pass2-merged.json created (4m 22s)
|
|
79
|
+
[██████████░░░░░░░░░░] 50% (2/4)
|
|
80
|
+
|
|
81
|
+
[6] Pass 3 — Generating all files...
|
|
82
|
+
🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
83
|
+
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
84
|
+
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
85
|
+
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
86
|
+
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
87
|
+
🎉 Pass 3 split complete: 4/4 stages successful
|
|
88
|
+
[███████████████░░░░░] 75% (3/4)
|
|
89
|
+
|
|
90
|
+
[7] Pass 4 — Memory scaffolding...
|
|
91
|
+
📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
92
|
+
✅ Pass 4 complete (5m)
|
|
93
|
+
📋 Gap-fill: all 12 expected files already present
|
|
94
|
+
[████████████████████] 100% (4/4)
|
|
95
|
+
|
|
96
|
+
╔═══════════════════════════════════════╗
|
|
97
|
+
║ ClaudeOS-Core — Health Checker ║
|
|
98
|
+
╚═══════════════════════════════════════╝
|
|
99
|
+
✅ plan-validator pass
|
|
100
|
+
✅ sync-checker pass
|
|
101
|
+
✅ content-validator pass
|
|
102
|
+
✅ pass-json-validator pass
|
|
103
|
+
✅ All systems operational
|
|
104
|
+
|
|
105
|
+
[Lint] ✅ CLAUDE.md structure valid (25 checks)
|
|
106
|
+
[Content] ✅ All content validation passed
|
|
107
|
+
Total: 0 advisories, 0 notes
|
|
108
|
+
|
|
109
|
+
╔════════════════════════════════════════════════════╗
|
|
110
|
+
║ ✅ ClaudeOS-Core — Complete ║
|
|
111
|
+
║ Files created: 75 ║
|
|
112
|
+
║ Domains analyzed: 1 group ║
|
|
113
|
+
║ L4 scaffolded: memory + rules ║
|
|
114
|
+
║ Output language: English ║
|
|
115
|
+
║ Total time: 53m 8s ║
|
|
116
|
+
╚════════════════════════════════════════════════════╝
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</details>
|
|
120
|
+
|
|
121
|
+
<details>
|
|
122
|
+
<summary><strong>📄 Что попадает в ваш <code>CLAUDE.md</code> (реальный фрагмент)</strong></summary>
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
## 4. Core Architecture
|
|
126
|
+
|
|
127
|
+
### Core Patterns
|
|
128
|
+
|
|
129
|
+
- **Hexagonal ports & adapters**: domain ports live in `io.spring.core.{aggregate}`
|
|
130
|
+
and are implemented by `io.spring.infrastructure.repository.MyBatis{Aggregate}Repository`.
|
|
131
|
+
The domain layer has zero MyBatis imports.
|
|
132
|
+
- **CQRS-lite read/write split (same DB)**: write side goes through repository ports
|
|
133
|
+
+ entities; read side is a separate `readservice` package whose `@Mapper`
|
|
134
|
+
interfaces return `*Data` DTOs directly (no entity hydration).
|
|
135
|
+
- **No aggregator/orchestrator layer**: multi-source orchestration happens inside
|
|
136
|
+
application services (e.g., `ArticleQueryService`); there is no `*Aggregator`
|
|
137
|
+
class in the codebase.
|
|
138
|
+
- **Application-supplied UUIDs**: entity constructors assign their own UUID; PK is
|
|
139
|
+
passed via `#{user.id}` on INSERT. The global
|
|
140
|
+
`mybatis.configuration.use-generated-keys=true` flag is dead config
|
|
141
|
+
(auto-increment is unused).
|
|
142
|
+
- **JWT HS512 authentication**: `io.spring.infrastructure.service.DefaultJwtService`
|
|
143
|
+
is the sole token subject in/out; `io.spring.api.security.JwtTokenFilter`
|
|
144
|
+
extracts the token at the servlet layer.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Примечание: каждое утверждение выше основано на реальном исходном коде — имена классов, пути пакетов, ключи конфигурации и флаг dead-config извлечены сканером ещё до того, как Claude начал писать файл.
|
|
148
|
+
|
|
149
|
+
</details>
|
|
150
|
+
|
|
151
|
+
<details>
|
|
152
|
+
<summary><strong>🛡️ Реальное автоматически загружаемое правило (<code>.claude/rules/10.backend/03.data-access-rules.md</code>)</strong></summary>
|
|
153
|
+
|
|
154
|
+
````markdown
|
|
98
155
|
---
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
| Стек | Обнаружение | Глубина анализа |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 паттернов пакетов | 10 категорий, 59 подпунктов |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, автоопределение CQRS/BFF | 12 категорий, 95 подпунктов |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 категорий, 57 подпунктов |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 категорий, 68 подпунктов |
|
|
108
|
-
| **Next.js / React** | `package.json`, `next.config.*`, поддержка FSD | 9 категорий, 55 подпунктов |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 категорий, 58 подпунктов |
|
|
110
|
-
| **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 категорий, 55 подпунктов |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 категорий, 58 подпунктов |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 категорий, 62 подпункта |
|
|
113
|
-
| **Vite / React SPA** | `package.json`, `vite.config.*` | 9 категорий, 55 подпунктов |
|
|
114
|
-
| **Angular** | `package.json`, `angular.json` | 12 категорий, 78 подпунктов |
|
|
115
|
-
|
|
116
|
-
Автоматически определяется: язык и версия, фреймворк и версия (включая Vite как SPA-фреймворк), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy и др.), база данных (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), пакетный менеджер (Gradle, Maven, npm, yarn, pnpm, pip, poetry), архитектура (CQRS, BFF — из имён модулей), мультимодульная структура (из settings.gradle), монорепозиторий (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **конфигурация runtime из `.env.example`** (v2.2.0 — извлечение port/host/API-target из 16+ соглашений имён переменных во фреймворках Vite · Next.js · Nuxt · Angular · Node · Python).
|
|
117
|
-
|
|
118
|
-
**Вам не нужно ничего указывать. Всё определяется автоматически.**
|
|
119
|
-
|
|
120
|
-
### Конфигурация runtime на основе `.env` (v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 добавляет `lib/env-parser.js`, чтобы генерируемый `CLAUDE.md` отражал то, что проект действительно декларирует, а не дефолты фреймворка.
|
|
123
|
-
|
|
124
|
-
- **Порядок поиска**: `.env.example` (канонический, закоммиченный) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. Вариант `.example` побеждает, потому что он является developer-neutral shape-of-truth, а не локальными переопределениями одного контрибьютора.
|
|
125
|
-
- **Распознаваемые соглашения имён port-переменных**: `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / generic `PORT`. Framework-специфичные имена побеждают generic `PORT`, когда присутствуют оба.
|
|
126
|
-
- **Host и API target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` и т.д.
|
|
127
|
-
- **Приоритет**: Spring Boot `application.yml` `server.port` по-прежнему выигрывает (framework-native config), затем `.env`-декларированный порт, затем framework default (Vite 5173, Next.js 3000, Django 8000 и т.д.) в качестве последнего средства.
|
|
128
|
-
- **Редактирование чувствительных переменных**: значения переменных, соответствующих паттернам `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT`, заменяются на `***REDACTED***` до того, как достигнут любого downstream-генератора. Defense-in-depth против случайно закоммиченных секретов в `.env.example`. `DATABASE_URL` явно внесён в whitelist для back-compat идентификации БД в stack-detector.
|
|
129
|
-
|
|
130
|
-
### Обнаружение Java-доменов (5 паттернов с фолбэком)
|
|
131
|
-
|
|
132
|
-
| Приоритет | Паттерн | Структура | Пример |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | Layer-first | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | Domain-first | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | Префикс модуля | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/Гексагональный | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | Плоский | `controller/*.java` | `controller/UserController.java` → извлекает `user` из имени класса |
|
|
139
|
-
|
|
140
|
-
Домены только с сервисами (без контроллеров) также обнаруживаются через директории `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Пропускаются: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2` и т.д.
|
|
141
|
-
|
|
142
|
-
### Обнаружение доменов Kotlin мультимодульных проектов
|
|
143
|
-
|
|
144
|
-
Для проектов Kotlin с Gradle-мультимодульной структурой (например, CQRS-монорепо):
|
|
145
|
-
|
|
146
|
-
| Шаг | Действие | Пример |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | Сканирование `settings.gradle.kts` на `include()` | Находит 14 модулей |
|
|
149
|
-
| 2 | Определение типа модуля из имени | `reservation-command-server` → тип: `command` |
|
|
150
|
-
| 3 | Извлечение домена из имени модуля | `reservation-command-server` → домен: `reservation` |
|
|
151
|
-
| 4 | Группировка одного домена по модулям | `reservation-command-server` + `common-query-server` → 1 домен |
|
|
152
|
-
| 5 | Определение архитектуры | Есть модули `command` + `query` → CQRS |
|
|
153
|
-
|
|
154
|
-
Поддерживаемые типы модулей: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Общие библиотеки (`shared-lib`, `integration-lib`) определяются как специальные домены.
|
|
155
|
-
|
|
156
|
-
### Обнаружение фронтенд-доменов
|
|
157
|
-
|
|
158
|
-
- **App Router**: `app/{domain}/page.tsx` (Next.js)
|
|
159
|
-
- **Pages Router**: `pages/{domain}/index.tsx`
|
|
160
|
-
- **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
|
|
161
|
-
- **Разделение RSC/Client**: Обнаруживает паттерн `client.tsx`, отслеживает разделение Server/Client-компонентов
|
|
162
|
-
- **Нестандартные вложенные пути**: Обнаруживает pages, components и FSD-слои под путями `src/*/` (например, `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
|
|
163
|
-
- **Обнаружение platform-/tier-split (v2.0.0)**: Распознаёт раскладки `src/{platform}/{subapp}/` — `{platform}` может быть device-/target-ключевым словом (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) или ключевым словом уровня доступа (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Выдаёт один домен на пару `(platform, subapp)` с именем `{platform}-{subapp}` и отдельными счётчиками routes/components/layouts/hooks на каждый домен. Работает одновременно для Angular, Next.js, React и Vue (мульти-расширение glob `{tsx,jsx,ts,js,vue}`). Требует ≥2 исходных файла на subapp, чтобы избежать шумных доменов из 1 файла.
|
|
164
|
-
- **Platform-split для монорепо (v2.0.0)**: Platform-сканирование также сопоставляет `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm-workspace с `src/`) и `{apps,packages}/{platform}/{subapp}/` (workspaces без обёртки `src/`).
|
|
165
|
-
- **Fallback E — файл routes (v2.0.0)**: Когда основные сканеры + Fallback A–D все возвращают 0, делается glob `**/routes/*.{tsx,jsx,ts,js,vue}` с группировкой по имени родительской директории `routes`. Улавливает проекты React Router с файловым роутингом (CRA/Vite + `react-router`), не соответствующие Next.js `page.tsx` или FSD-раскладкам. Общие имена родителей (`src`, `app`, `pages`) отфильтровываются.
|
|
166
|
-
- **Config-фолбэк**: Определяет Next.js/Vite/Nuxt из файлов конфигурации, когда их нет в `package.json` (поддержка монорепо)
|
|
167
|
-
- **Глубокий фолбэк по директориям**: Для проектов React/CRA/Vite/Vue/RN сканирует `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` на любой глубине
|
|
168
|
-
- **Общие ignore-списки (v2.0.0)**: Все сканеры используют общие `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) и `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`), чтобы сборочные выводы и тестовые фикстуры не раздували счётчики файлов по доменам.
|
|
169
|
-
|
|
170
|
-
### Переопределения сканеров (v2.0.0)
|
|
171
|
-
|
|
172
|
-
Положите опциональный `.claudeos-scan.json` в корне проекта, чтобы расширить дефолты сканеров без редактирования тулкита. Все поля **аддитивные** — записи пользователя расширяют дефолты, никогда не заменяют их:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
| Поле | Дефолт | Назначение |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | встроенный список выше | Дополнительные ключевые слова `{platform}` для platform-сканирования (например, `kiosk`, `vr`, `embedded`) |
|
|
187
|
-
| `skipSubappNames` | только структурные директории | Дополнительные имена subapp, исключаемые из выдачи доменов platform-сканером |
|
|
188
|
-
| `minSubappFiles` | `2` | Переопределение минимального количества файлов, после которого subapp становится доменом |
|
|
189
|
-
|
|
190
|
-
Отсутствующий файл или некорректный JSON → тихо откатывается на дефолты (без краша). Типичное использование: opt-in короткого сокращения (`adm`, `bo`), которое встроенный список исключает как слишком неоднозначное, или повышение `minSubappFiles` для шумных монорепо.
|
|
191
|
-
|
|
156
|
+
paths:
|
|
157
|
+
- "**/*"
|
|
192
158
|
---
|
|
193
159
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
### Требования
|
|
197
|
-
|
|
198
|
-
- **Node.js** v18+
|
|
199
|
-
- **Claude Code CLI** (установлен и аутентифицирован)
|
|
200
|
-
|
|
201
|
-
### Установка
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
cd /your/project/root
|
|
205
|
-
|
|
206
|
-
# Вариант A: npx (рекомендуется — установка не нужна)
|
|
207
|
-
npx claudeos-core init
|
|
208
|
-
|
|
209
|
-
# Вариант B: глобальная установка
|
|
210
|
-
npm install -g claudeos-core
|
|
211
|
-
claudeos-core init
|
|
212
|
-
|
|
213
|
-
# Вариант C: проектная devDependency
|
|
214
|
-
npm install --save-dev claudeos-core
|
|
215
|
-
npx claudeos-core init
|
|
216
|
-
|
|
217
|
-
# Вариант D: git clone (для разработки/контрибьюций)
|
|
218
|
-
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
219
|
-
|
|
220
|
-
# Кросс-платформенно (PowerShell, CMD, Bash, Zsh — любой терминал)
|
|
221
|
-
node claudeos-core-tools/bin/cli.js init
|
|
160
|
+
# Data Access Rules
|
|
222
161
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
162
|
+
## XML-only SQL
|
|
163
|
+
- Every SQL statement lives in `src/main/resources/mapper/*.xml`.
|
|
164
|
+
NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
|
|
165
|
+
- Each `@Mapper` interface has exactly one XML file at
|
|
166
|
+
`src/main/resources/mapper/{InterfaceName}.xml`.
|
|
167
|
+
- `<mapper namespace="...">` MUST be the fully qualified Java interface name.
|
|
168
|
+
The single existing exception is `TransferData.xml` (free-form `transfer.data`).
|
|
228
169
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
║ Выберите язык сгенерированных документов ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
Сгенерированные файлы (CLAUDE.md, Standards, Rules,
|
|
237
|
-
Skills, Guides) будут написаны на русском языке.
|
|
238
|
-
|
|
239
|
-
1. en — English
|
|
240
|
-
2. ko — 한국어 (Korean)
|
|
241
|
-
3. zh-CN — 简体中文 (Chinese Simplified)
|
|
242
|
-
4. ja — 日本語 (Japanese)
|
|
243
|
-
5. es — Español (Spanish)
|
|
244
|
-
6. vi — Tiếng Việt (Vietnamese)
|
|
245
|
-
7. hi — हिन्दी (Hindi)
|
|
246
|
-
❯ 8. ru — Русский (Russian)
|
|
247
|
-
9. fr — Français (French)
|
|
248
|
-
10. de — Deutsch (German)
|
|
249
|
-
|
|
250
|
-
↑↓ Движение 1-0 Переход Enter Выбрать ESC Отмена
|
|
251
|
-
```
|
|
170
|
+
## Dynamic SQL
|
|
171
|
+
- `<if>` predicates MUST guard both null and empty:
|
|
172
|
+
`<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
|
|
173
|
+
- Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
|
|
252
174
|
|
|
253
|
-
|
|
175
|
+
## Examples
|
|
254
176
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
177
|
+
✅ Correct:
|
|
178
|
+
```xml
|
|
179
|
+
<update id="update">
|
|
180
|
+
UPDATE articles
|
|
181
|
+
<set>
|
|
182
|
+
<if test="article.title != null and article.title != ''">title = #{article.title},</if>
|
|
183
|
+
updated_at = #{article.updatedAt}
|
|
184
|
+
</set>
|
|
185
|
+
WHERE id = #{article.id}
|
|
186
|
+
</update>
|
|
259
187
|
```
|
|
260
188
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
### Ручная пошаговая установка
|
|
266
|
-
|
|
267
|
-
Если вам нужен полный контроль над каждой фазой — или если автоматический пайплайн падает на каком-то шаге — вы можете запустить каждую стадию вручную. Это также полезно для понимания того, как ClaudeOS-Core работает внутри.
|
|
268
|
-
|
|
269
|
-
#### Шаг 1: Клонирование и установка зависимостей
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
cd /your/project/root
|
|
273
|
-
|
|
274
|
-
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
275
|
-
cd claudeos-core-tools && npm install && cd ..
|
|
189
|
+
❌ Incorrect:
|
|
190
|
+
```xml
|
|
191
|
+
<mapper namespace="article.mapper"> <!-- NO — namespace MUST be FQCN -->
|
|
276
192
|
```
|
|
193
|
+
````
|
|
277
194
|
|
|
278
|
-
|
|
195
|
+
Glob `paths: ["**/*"]` означает, что Claude Code автоматически загружает это правило при редактировании любого файла в проекте. Примеры ✅/❌ берутся прямо из реальных конвенций этой кодовой базы и существующих паттернов багов.
|
|
279
196
|
|
|
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}
|
|
197
|
+
</details>
|
|
283
198
|
|
|
284
|
-
|
|
285
|
-
|
|
199
|
+
<details>
|
|
200
|
+
<summary><strong>🧠 Автоматически сгенерированный сид <code>decision-log.md</code> (реальный фрагмент)</strong></summary>
|
|
286
201
|
|
|
287
|
-
|
|
288
|
-
|
|
202
|
+
```markdown
|
|
203
|
+
## 2026-04-26 — CQRS-lite read/write split inside the persistence layer
|
|
289
204
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
205
|
+
- **Context:** Writes go through `core.*Repository` port → `MyBatis*Repository`
|
|
206
|
+
adapter → `io.spring.infrastructure.mybatis.mapper.{Aggregate}Mapper`.
|
|
207
|
+
Reads bypass the domain port: application service →
|
|
208
|
+
`io.spring.infrastructure.mybatis.readservice.{Concept}ReadService` directly,
|
|
209
|
+
returning flat `*Data` DTOs from `io.spring.application.data.*`.
|
|
210
|
+
- **Options considered:** Single repository surface returning hydrated entities
|
|
211
|
+
for both reads and writes.
|
|
212
|
+
- **Decision:** Same database, two `@Mapper` packages — `mapper/` (write side,
|
|
213
|
+
operates on core entities) and `readservice/` (read side, returns `*Data` DTOs).
|
|
214
|
+
Read DTOs avoid entity hydration overhead.
|
|
215
|
+
- **Consequences:** Reads are NOT routed through the domain port — this is
|
|
216
|
+
intentional, not a bug. Application services may inject both a `*Repository`
|
|
217
|
+
(writes) and one or more `*ReadService` interfaces (reads) at the same time.
|
|
218
|
+
Do NOT add hydrate-then-map glue in the read path.
|
|
293
219
|
```
|
|
294
220
|
|
|
295
|
-
|
|
221
|
+
Pass 4 заполняет `decision-log.md` архитектурными решениями, извлечёнными из `pass2-merged.json`, чтобы будущие сессии помнили *почему* кодовая база выглядит так, а не только *как* она выглядит.
|
|
296
222
|
|
|
297
|
-
|
|
223
|
+
</details>
|
|
298
224
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**Вывод (в `claudeos-core/generated/`):**
|
|
306
|
-
- `project-analysis.json` — обнаруженный стек, домены, информация о фронтенде
|
|
307
|
-
- `domain-groups.json` — группы доменов для Pass 1
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — промпты анализа
|
|
309
|
-
- `pass2-prompt.md` — промпт слияния
|
|
310
|
-
- `pass3-prompt.md` — шаблон промпта Pass 3 с предвставленным блоком Phase 1 «Read Once, Extract Facts» (Rules A–E). Автоматический пайплайн разбивает Pass 3 на несколько стадий в рантайме; этот шаблон подаётся каждой стадии.
|
|
311
|
-
- `pass3-context.json` — облегчённая сводка проекта (< 5 KB, собирается после Pass 2), которую промпты Pass 3 предпочитают вместо полного `pass2-merged.json` (v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — промпт L4 memory scaffolding (v2.0.0; использует тот же `staging-override.md` для записей правил `60.memory/`)
|
|
313
|
-
|
|
314
|
-
Вы можете изучить эти файлы, чтобы проверить точность обнаружения перед продолжением.
|
|
225
|
+
---
|
|
315
226
|
|
|
316
|
-
|
|
227
|
+
## Quick Start
|
|
317
228
|
|
|
318
|
-
|
|
229
|
+
**Предварительные требования:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) установлен и аутентифицирован.
|
|
319
230
|
|
|
320
231
|
```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
|
-
```
|
|
354
|
-
|
|
355
|
-
**Проверка:** `ls claudeos-core/generated/pass1-*.json` должен показать по одному JSON на группу.
|
|
232
|
+
# 1. Перейдите в корень проекта
|
|
233
|
+
cd my-spring-boot-project
|
|
356
234
|
|
|
357
|
-
|
|
235
|
+
# 2. Запустите init (анализирует код и просит Claude написать rules)
|
|
236
|
+
npx claudeos-core init
|
|
358
237
|
|
|
359
|
-
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
238
|
+
# 3. Готово. Откройте Claude Code и начните кодить — rules уже загружены.
|
|
362
239
|
```
|
|
363
240
|
|
|
364
|
-
|
|
241
|
+
**Что вы получаете** после завершения `init`:
|
|
365
242
|
|
|
366
|
-
#### Шаг 6: Pass 3 — Генерация всей документации (разбита на несколько стадий)
|
|
367
|
-
|
|
368
|
-
**Примечание v2.1.0:** Pass 3 **всегда запускается в split-режиме** автоматическим пайплайном. Каждая стадия — это отдельный вызов `claude -p` со свежим context window, поэтому переполнение из-за накопления вывода структурно невозможно независимо от размера проекта. Шаблон `pass3-prompt.md` собирается для каждой стадии с директивой `STAGE:`, которая говорит Claude, какой подмножество файлов выдать. Для ручного режима самый простой путь всё ещё — подать полный шаблон и позволить Claude сгенерировать всё за один вызов, но это надёжно только на малых проектах (≤5 доменов). Для всего крупнее используйте `npx claudeos-core init`, чтобы split-раннер управлял оркестрацией стадий.
|
|
369
|
-
|
|
370
|
-
**Single-call режим (только малые проекты, ≤5 доменов):**
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
cat claudeos-core/generated/pass3-prompt.md \
|
|
374
|
-
| claude -p --dangerously-skip-permissions
|
|
375
243
|
```
|
|
244
|
+
your-project/
|
|
245
|
+
├── .claude/
|
|
246
|
+
│ └── rules/ ← Claude Code загружает автоматически
|
|
247
|
+
│ ├── 00.core/ (общие rules — именование, архитектура)
|
|
248
|
+
│ ├── 10.backend/ (backend stack rules, если есть)
|
|
249
|
+
│ ├── 20.frontend/ (frontend stack rules, если есть)
|
|
250
|
+
│ ├── 30.security-db/ (конвенции безопасности и БД)
|
|
251
|
+
│ ├── 40.infra/ (env, логирование, CI/CD)
|
|
252
|
+
│ ├── 50.sync/ (напоминания о синхронизации документации — rules only)
|
|
253
|
+
│ ├── 60.memory/ (memory rules — Pass 4, rules only)
|
|
254
|
+
│ ├── 70.domains/{type}/ (rules по доменам, type = backend|frontend)
|
|
255
|
+
│ └── 80.verification/ (стратегия тестирования + напоминания о верификации сборки)
|
|
256
|
+
├── claudeos-core/
|
|
257
|
+
│ ├── standard/ ← Справочные документы (зеркалят структуру категорий)
|
|
258
|
+
│ │ ├── 00.core/ (обзор проекта, архитектура, именование)
|
|
259
|
+
│ │ ├── 10.backend/ (backend reference — если backend stack)
|
|
260
|
+
│ │ ├── 20.frontend/ (frontend reference — если frontend stack)
|
|
261
|
+
│ │ ├── 30.security-db/ (security & DB reference)
|
|
262
|
+
│ │ ├── 40.infra/ (env / логирование / CI-CD reference)
|
|
263
|
+
│ │ ├── 70.domains/{type}/ (reference по доменам)
|
|
264
|
+
│ │ ├── 80.verification/ (build / startup / testing reference — standard only)
|
|
265
|
+
│ │ └── 90.optional/ (специфика стека — standard only)
|
|
266
|
+
│ ├── skills/ (повторно используемые паттерны, которые Claude может применить)
|
|
267
|
+
│ ├── guide/ (how-to гайды для типовых задач)
|
|
268
|
+
│ ├── database/ (обзор схемы, гайд по миграциям)
|
|
269
|
+
│ ├── mcp-guide/ (заметки по интеграции MCP)
|
|
270
|
+
│ └── memory/ (decision log, failure patterns, compaction)
|
|
271
|
+
└── CLAUDE.md (индекс, который Claude читает первым)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Категории, разделяющие одинаковый числовой prefix между `rules/` и `standard/`, представляют одну и ту же концептуальную область (например, `10.backend` rules ↔ `10.backend` standards). Категории только-для-rules: `50.sync` (напоминания о синхронизации документации) и `60.memory` (Pass 4 memory). Категория только-для-standard: `90.optional` (специфика стека без принуждения). Все остальные prefix (`00`, `10`, `20`, `30`, `40`, `70`, `80`) присутствуют И в `rules/`, И в `standard/`. Теперь Claude Code знает ваш проект.
|
|
376
275
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
Автоматический пайплайн запускает эти стадии. Список стадий:
|
|
380
|
-
|
|
381
|
-
| Стадия | Записывает | Примечания |
|
|
382
|
-
|---|---|---|
|
|
383
|
-
| `3a` | `pass3a-facts.md` (дистиллированный fact sheet 5–10 KB) | Читает `pass2-merged.json` один раз; последующие стадии ссылаются на этот файл |
|
|
384
|
-
| `3b-core` | `CLAUDE.md`, общие `standard/`, общие `.claude/rules/` | Кросс-проектные файлы; без доменно-специфичного вывода |
|
|
385
|
-
| `3b-1..N` | Доменно-специфичные `standard/60.domains/*.md` + правила доменов | Батч ≤15 доменов на стадию (авто-деление при ≥16 доменов) |
|
|
386
|
-
| `3c-core` | `guide/` (9 файлов), `skills/00.shared/MANIFEST.md`, оркестраторы `skills/*/` | Общие skills и все user-facing гайды |
|
|
387
|
-
| `3c-1..N` | Доменные sub-skills под `skills/20.frontend-page/scaffold-page-feature/` | Батч ≤15 доменов на стадию |
|
|
388
|
-
| `3d-aux` | `database/`, `mcp-guide/` | Фиксированного размера, независимо от количества доменов |
|
|
389
|
-
|
|
390
|
-
Для проекта с 1–15 доменами это разворачивается в 4 стадии (`3a`, `3b-core`, `3c-core`, `3d-aux` — без разбиения на батчи). Для 16–30 доменов разворачивается в 8 стадий (`3b` и `3c` каждая делится на 2 батча). См. [Автомасштабирование по размеру проекта](#автомасштабирование-по-размеру-проекта) для полной таблицы.
|
|
391
|
-
|
|
392
|
-
**Проверка:** `CLAUDE.md` должен существовать в корне проекта, а маркер `claudeos-core/generated/pass3-complete.json` должен быть записан. В split-режиме маркер содержит `mode: "split"` и массив `groupsCompleted`, перечисляющий каждую завершённую стадию — логика частичного маркера использует это, чтобы возобновить с нужной стадии после краша, а не перезапускать с `3a` (что удвоило бы расход токенов).
|
|
393
|
-
|
|
394
|
-
> **Примечание о staging:** Pass 3 сначала пишет файлы правил в `claudeos-core/generated/.staged-rules/`, потому что политика чувствительных путей Claude Code блокирует прямую запись в `.claude/`. Автоматический пайплайн выполняет перемещение автоматически после каждой стадии. Если вы запускаете стадию вручную, вам нужно переместить staged-дерево самостоятельно: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (сохраняя подпути).
|
|
395
|
-
|
|
396
|
-
#### Шаг 7: Pass 4 — Memory scaffolding
|
|
397
|
-
|
|
398
|
-
```bash
|
|
399
|
-
cat claudeos-core/generated/pass4-prompt.md \
|
|
400
|
-
| claude -p --dangerously-skip-permissions
|
|
401
|
-
```
|
|
276
|
+
---
|
|
402
277
|
|
|
403
|
-
|
|
278
|
+
## Кому это подходит?
|
|
404
279
|
|
|
405
|
-
|
|
280
|
+
| Если вы... | Это поможет вам... |
|
|
281
|
+
|---|---|
|
|
282
|
+
| **Соло-разработчик**, начинающий новый проект с Claude Code | Полностью пропустить фазу "учим Claude нашим конвенциям" |
|
|
283
|
+
| **Тимлид**, поддерживающий общие стандарты | Автоматизировать рутину поддержания `.claude/rules/` в актуальном состоянии |
|
|
284
|
+
| **Уже использующий Claude Code**, но устал править генерируемый код | Заставить Claude следовать ВАШИМ паттернам, а не "в целом хорошим" |
|
|
406
285
|
|
|
407
|
-
|
|
286
|
+
**Не подходит, если:** вы хотите универсальный preset bundle из agents/skills/rules, который работает с первого дня без шага сканирования (см. [docs/ru/comparison.md](docs/ru/comparison.md) — что под какие задачи подходит), либо ваш проект пока не вписывается в один из [поддерживаемых стеков](#supported-stacks).
|
|
408
287
|
|
|
409
|
-
|
|
288
|
+
---
|
|
410
289
|
|
|
411
|
-
|
|
412
|
-
# Генерация метаданных (требуется перед другими проверками)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
290
|
+
## Как это работает?
|
|
414
291
|
|
|
415
|
-
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
292
|
+
ClaudeOS-Core инвертирует обычный workflow Claude Code:
|
|
417
293
|
|
|
418
|
-
# Или запустить отдельные проверки:
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Согласованность Plan ↔ disk
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # Незарегистрированные/осиротевшие файлы
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # Проверки качества файлов (вкл. секцию memory/ [9/9])
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Проверки JSON Pass 1–4 + completion-маркеров
|
|
423
294
|
```
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# Подсчёт сгенерированных файлов
|
|
429
|
-
find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
|
|
430
|
-
|
|
431
|
-
# Проверить CLAUDE.md
|
|
432
|
-
head -30 CLAUDE.md
|
|
433
|
-
|
|
434
|
-
# Проверить один стандартный файл
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
436
|
-
|
|
437
|
-
# Проверить правила
|
|
438
|
-
ls .claude/rules/*/
|
|
295
|
+
Обычно: Вы описываете проект → Claude угадывает ваш стек → Claude пишет docs
|
|
296
|
+
Здесь: Код читает ваш стек → Код передаёт подтверждённые факты Claude → Claude пишет docs из фактов
|
|
439
297
|
```
|
|
440
298
|
|
|
441
|
-
|
|
299
|
+
Ключевая идея: **Node.js scanner сначала читает ваш исходный код** (детерминированно, без AI), а затем 4-pass конвейер Claude пишет документацию, ограниченную тем, что обнаружил сканер. Claude не может выдумать пути или фреймворки, которых на самом деле нет в вашем коде.
|
|
442
300
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
```
|
|
446
|
-
# В Claude Code — просто спрашивайте естественно:
|
|
447
|
-
"Создай CRUD для домена order"
|
|
448
|
-
"Добавь API аутентификации пользователя"
|
|
449
|
-
"Отрефактори этот код под паттерны проекта"
|
|
450
|
-
|
|
451
|
-
# Claude Code автоматически ссылается на ваши сгенерированные Standards, Rules и Skills.
|
|
452
|
-
```
|
|
301
|
+
Полное описание архитектуры см. в [docs/ru/architecture.md](docs/ru/architecture.md).
|
|
453
302
|
|
|
454
303
|
---
|
|
455
304
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
```
|
|
459
|
-
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← Зависимости (~10с)
|
|
462
|
-
├── [2] Структура директорий ← Создание папок (~1с)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← Сканирование проекта (~5с)
|
|
464
|
-
│ ├── Автоопределение стека (multi-stack)
|
|
465
|
-
│ ├── Извлечение списка доменов (тегирование: backend/frontend)
|
|
466
|
-
│ ├── Разбиение на группы доменов (по типу)
|
|
467
|
-
│ ├── Сборка pass3-context.json (облегчённая сводка, v2.1.0)
|
|
468
|
-
│ └── Выбор стек-специфических промптов (по типу)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← Глубокий анализ кода (~2-8мин)
|
|
471
|
-
│ ├── ⚙️ Backend-группы → backend-промпт
|
|
472
|
-
│ └── 🎨 Frontend-группы → frontend-промпт
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← Слияние анализа (~1мин)
|
|
475
|
-
│ └── Консолидация ВСЕХ результатов Pass 1 в pass2-merged.json
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3 (split-режим, v2.1.0) ← Генерация всего
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← Извлечение фактов (~5-10мин)
|
|
480
|
-
│ │ └── Читает pass2-merged.json один раз → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + общие standard/rules
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← Доменные standards/rules (≤15 доменов/батч)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Гайды + общие skills + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← Доменные sub-skills (≤15 доменов/батч)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← Заглушки database/ + mcp-guide/
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30с-5мин)
|
|
491
|
-
│ ├── Сидинг memory/ (decision-log, failure-patterns, …)
|
|
492
|
-
│ ├── Генерация правил 60.memory/
|
|
493
|
-
│ ├── Добавление секции "Memory (L4)" в CLAUDE.md
|
|
494
|
-
│ └── Gap-fill: гарантировать skills/00.shared/MANIFEST.md (v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] Верификация ← Автозапуск health-checker
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### Почему 4 прохода?
|
|
500
|
-
|
|
501
|
-
**Pass 1** — единственный проход, читающий ваш исходный код. Он выбирает репрезентативные файлы по домену и извлекает паттерны по 55–95 категориям анализа (зависит от стека). Для больших проектов Pass 1 запускается несколько раз — по одному на группу доменов. В мульти-стек проектах (например, Java backend + React frontend) backend- и frontend-домены используют **разные промпты анализа**, адаптированные к каждому стеку.
|
|
502
|
-
|
|
503
|
-
**Pass 2** объединяет все результаты Pass 1 в единый анализ: общие паттерны (100% общие), паттерны большинства (50%+ общие), доменно-специфические паттерны, анти-паттерны по степени серьёзности и сквозные аспекты (именование, безопасность, БД, тестирование, логирование, производительность). Результаты backend и frontend сливаются воедино.
|
|
305
|
+
## Supported Stacks
|
|
504
306
|
|
|
505
|
-
|
|
307
|
+
12 стеков, автоматически определяемых по файлам вашего проекта:
|
|
506
308
|
|
|
507
|
-
|
|
309
|
+
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
508
310
|
|
|
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` вызовов.
|
|
311
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
514
312
|
|
|
515
|
-
|
|
313
|
+
Multi-stack проекты (например, Spring Boot backend + Next.js frontend) работают «из коробки».
|
|
516
314
|
|
|
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 его пропустил.
|
|
315
|
+
Правила обнаружения и то, что извлекает каждый сканер, см. в [docs/ru/stacks.md](docs/ru/stacks.md).
|
|
520
316
|
|
|
521
317
|
---
|
|
522
318
|
|
|
523
|
-
##
|
|
524
|
-
|
|
525
|
-
```
|
|
526
|
-
your-project/
|
|
527
|
-
│
|
|
528
|
-
├── CLAUDE.md ← Точка входа Claude Code (детерминированная 8-секционная структура, v2.2.0)
|
|
529
|
-
│
|
|
530
|
-
├── .claude/
|
|
531
|
-
│ └── rules/ ← Правила, срабатывающие по glob
|
|
532
|
-
│ ├── 00.core/
|
|
533
|
-
│ ├── 10.backend/
|
|
534
|
-
│ ├── 20.frontend/
|
|
535
|
-
│ ├── 30.security-db/
|
|
536
|
-
│ ├── 40.infra/
|
|
537
|
-
│ ├── 50.sync/ ← Правила напоминания о синхронизации
|
|
538
|
-
│ └── 60.memory/ ← Правила on-demand-scope для L4 memory (v2.0.0)
|
|
539
|
-
│
|
|
540
|
-
├── claudeos-core/ ← Основная выходная директория
|
|
541
|
-
│ ├── generated/ ← JSON анализа + динамические промпты + Pass-маркеры (gitignore)
|
|
542
|
-
│ │ ├── project-analysis.json ← Информация о стеке (multi-stack)
|
|
543
|
-
│ │ ├── domain-groups.json ← Группы с type: backend/frontend
|
|
544
|
-
│ │ ├── pass1-backend-prompt.md ← Backend-промпт анализа
|
|
545
|
-
│ │ ├── pass1-frontend-prompt.md ← Frontend-промпт анализа (если обнаружен)
|
|
546
|
-
│ │ ├── pass2-prompt.md ← Промпт слияния
|
|
547
|
-
│ │ ├── pass2-merged.json ← Вывод Pass 2 (потребляется только Pass 3a)
|
|
548
|
-
│ │ ├── pass3-context.json ← Облегчённая сводка (< 5 KB) для Pass 3 (v2.1.0)
|
|
549
|
-
│ │ ├── pass3-prompt.md ← Шаблон промпта Pass 3 (с предвставленным блоком Phase 1)
|
|
550
|
-
│ │ ├── pass3a-facts.md ← Fact sheet, записываемый Pass 3a, читаемый 3b/3c/3d (v2.1.0)
|
|
551
|
-
│ │ ├── pass4-prompt.md ← Промпт memory scaffolding (v2.0.0)
|
|
552
|
-
│ │ ├── pass3-complete.json ← Маркер завершения Pass 3 (split-режим: включает groupsCompleted, v2.1.0)
|
|
553
|
-
│ │ ├── pass4-memory.json ← Маркер завершения Pass 4 (пропуск при resume)
|
|
554
|
-
│ │ ├── rule-manifest.json ← Индекс файлов для инструментов верификации
|
|
555
|
-
│ │ ├── sync-map.json ← Маппинг Plan ↔ disk (пустой в v2.1.0; сохранён для совместимости sync-checker)
|
|
556
|
-
│ │ ├── stale-report.json ← Консолидированные результаты верификации
|
|
557
|
-
│ │ ├── .i18n-cache-<lang>.json ← Кэш переводов (неанглийский `--lang`)
|
|
558
|
-
│ │ └── .staged-rules/ ← Временная staging-директория для записей `.claude/rules/` (авто-перемещение + очистка)
|
|
559
|
-
│ ├── standard/ ← Стандарты кодирования (15-19 файлов + per-domain в 60.domains/)
|
|
560
|
-
│ │ ├── 00.core/ ← Обзор, архитектура, именование
|
|
561
|
-
│ │ ├── 10.backend-api/ ← API-паттерны (стек-специфические)
|
|
562
|
-
│ │ ├── 20.frontend-ui/ ← Frontend-паттерны (если обнаружены)
|
|
563
|
-
│ │ ├── 30.security-db/ ← Безопасность, схема БД, утилиты
|
|
564
|
-
│ │ ├── 40.infra/ ← Конфиг, логирование, CI/CD
|
|
565
|
-
│ │ ├── 50.verification/ ← Верификация сборки, тестирование
|
|
566
|
-
│ │ ├── 60.domains/ ← Per-domain стандарты (записываются Pass 3b-N, v2.1.0)
|
|
567
|
-
│ │ └── 90.optional/ ← Опциональные конвенции (стек-специфические дополнения)
|
|
568
|
-
│ ├── skills/ ← Skills для CRUD/page scaffolding
|
|
569
|
-
│ │ └── 00.shared/MANIFEST.md ← Единственный источник истины для зарегистрированных skills
|
|
570
|
-
│ ├── guide/ ← Онбординг, FAQ, troubleshooting (9 файлов)
|
|
571
|
-
│ ├── database/ ← Схема БД, гайд миграций
|
|
572
|
-
│ ├── mcp-guide/ ← Гайд интеграции MCP-сервера
|
|
573
|
-
│ └── memory/ ← L4: знания команды (4 файла) — коммитить
|
|
574
|
-
│ ├── decision-log.md ← "Почему" за дизайн-решениями
|
|
575
|
-
│ ├── failure-patterns.md ← Повторяющиеся ошибки и фиксы (auto-score — `npx claudeos-core memory score`)
|
|
576
|
-
│ ├── compaction.md ← Стратегия 4-stage компакции (запустить `npx claudeos-core memory compact`)
|
|
577
|
-
│ └── auto-rule-update.md ← Предложения по улучшению правил (`npx claudeos-core memory propose-rules`)
|
|
578
|
-
│
|
|
579
|
-
└── claudeos-core-tools/ ← Этот тулкит (не модифицировать)
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
Каждый standard-файл включает ✅ правильные примеры, ❌ неправильные примеры и сводную таблицу правил — всё извлечено из ваших реальных паттернов кода, а не из общих шаблонов.
|
|
583
|
-
|
|
584
|
-
> **Примечание v2.1.0:** `claudeos-core/plan/` больше не генерируется. Master plans были внутренним бэкапом, который Claude Code не потреблял в рантайме, а их агрегация в Pass 3 была основной причиной переполнения из-за накопления вывода. Используйте `git` для бэкапа/восстановления. Проекты, обновляющиеся с v2.0.x, могут безопасно удалить любую существующую директорию `claudeos-core/plan/`.
|
|
319
|
+
## Повседневный workflow
|
|
585
320
|
|
|
586
|
-
|
|
321
|
+
Три команды покрывают ~95% использования:
|
|
587
322
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
-
|
|
591
|
-
- `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — сгенерированная документация
|
|
592
|
-
- `claudeos-core/memory/**` — история решений, паттерны ошибок, предложения правил
|
|
323
|
+
```bash
|
|
324
|
+
# Первый раз на проекте
|
|
325
|
+
npx claudeos-core init
|
|
593
326
|
|
|
594
|
-
|
|
327
|
+
# После того как вы вручную отредактировали standards или rules
|
|
328
|
+
npx claudeos-core lint
|
|
595
329
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
claudeos-core/generated/
|
|
330
|
+
# Health-check (запускайте перед коммитом или в CI)
|
|
331
|
+
npx claudeos-core health
|
|
599
332
|
```
|
|
600
333
|
|
|
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 встроенных инструментов верификации, автоматически запускаемых после генерации:
|
|
334
|
+
Ещё две — для обслуживания memory layer:
|
|
627
335
|
|
|
628
336
|
```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
|
|
337
|
+
# Компактация лога failure-patterns (запускайте периодически)
|
|
338
|
+
npx claudeos-core memory compact
|
|
636
339
|
|
|
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
|
|
340
|
+
# Продвижение частых failure pattern в предложенные rules
|
|
341
|
+
npx claudeos-core memory propose-rules
|
|
642
342
|
```
|
|
643
343
|
|
|
644
|
-
|
|
645
|
-
|---|---|
|
|
646
|
-
| **manifest-generator** | Строит JSON метаданных (`rule-manifest.json`, `sync-map.json`, инициализирует `stale-report.json`); индексирует 7 директорий, включая `memory/` (`totalMemory` в summary). v2.1.0: `plan-manifest.json` больше не генерируется, поскольку master plans были удалены. |
|
|
647
|
-
| **plan-validator** | Валидирует блоки `<file>` из master plan против диска для проектов, у которых всё ещё есть `claudeos-core/plan/` (legacy upgrade-случай). v2.1.0: пропускает эмиссию `plan-sync-status.json`, когда `plan/` отсутствует или пуст — `stale-report.json` всё равно записывает проходящий no-op. |
|
|
648
|
-
| **sync-checker** | Обнаруживает незарегистрированные файлы (на диске, но не в плане) и осиротевшие записи — покрывает 7 директорий (`memory/` добавлена в v2.0.0). Завершается чисто, когда `sync-map.json` не имеет маппингов (состояние по умолчанию в v2.1.0). |
|
|
649
|
-
| **content-validator** | 9-секционная проверка качества — пустые файлы, отсутствующие ✅/❌ примеры, обязательные секции плюс целостность каркаса L4 memory (даты заголовков decision-log, обязательные поля failure-pattern, fence-aware парсинг) |
|
|
650
|
-
| **pass-json-validator** | Валидирует структуру JSON Pass 1–4 плюс completion-маркеры `pass3-complete.json` (split-mode shape, v2.1.0) и `pass4-memory.json` |
|
|
344
|
+
Полные опции каждой команды см. в [docs/ru/commands.md](docs/ru/commands.md).
|
|
651
345
|
|
|
652
346
|
---
|
|
653
347
|
|
|
654
|
-
##
|
|
655
|
-
|
|
656
|
-
ClaudeOS-Core генерирует документацию, которую Claude Code действительно читает — вот как:
|
|
657
|
-
|
|
658
|
-
### Что Claude Code читает автоматически
|
|
659
|
-
|
|
660
|
-
| Файл | Когда | Гарантировано |
|
|
661
|
-
|---|---|---|
|
|
662
|
-
| `CLAUDE.md` | В начале каждого диалога | Всегда |
|
|
663
|
-
| `.claude/rules/00.core/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
|
|
664
|
-
| `.claude/rules/10.backend/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
|
|
665
|
-
| `.claude/rules/20.frontend/*` | При редактировании любого фронтенд-файла (ограничено путями компонентов/страниц/стилей) | Условно |
|
|
666
|
-
| `.claude/rules/30.security-db/*` | При редактировании любого файла (`paths: ["**/*"]`) | Всегда |
|
|
667
|
-
| `.claude/rules/40.infra/*` | Только при редактировании config/infra-файлов (ограниченные пути) | Условно |
|
|
668
|
-
| `.claude/rules/50.sync/*` | Только при редактировании claudeos-core-файлов (ограниченные пути) | Условно |
|
|
669
|
-
| `.claude/rules/60.memory/*` | При редактировании `claudeos-core/memory/*` (ограничено путями memory) — инструктирует **как** читать/записывать on-demand memory-слой | Условно (v2.0.0) |
|
|
348
|
+
## Чем это отличается
|
|
670
349
|
|
|
671
|
-
|
|
350
|
+
Большинство инструментов документации Claude Code генерируют по описанию (вы рассказываете инструменту, инструмент рассказывает Claude). ClaudeOS-Core генерирует из вашего реального исходного кода (инструмент читает, инструмент сообщает Claude, что подтверждено, Claude пишет только подтверждённое).
|
|
672
351
|
|
|
673
|
-
|
|
352
|
+
Три конкретных следствия:
|
|
674
353
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
354
|
+
1. **Детерминированное обнаружение стека.** Тот же проект + тот же код = тот же вывод. Никакого «Claude в этот раз бросил кубик иначе».
|
|
355
|
+
2. **Никаких выдуманных путей.** Промпт Pass 3 явно перечисляет каждый разрешённый путь к исходникам; Claude не может процитировать несуществующий путь.
|
|
356
|
+
3. **Multi-stack-aware.** Backend и frontend домены используют разные analysis prompts в одном запуске.
|
|
678
357
|
|
|
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` в начале сессии). Всегда коммитьте эти файлы. |
|
|
358
|
+
Бок о бок сравнение scope с другими инструментами см. в [docs/ru/comparison.md](docs/ru/comparison.md). Сравнение про **что делает каждый инструмент**, а не **что лучше** — большинство дополняют друг друга.
|
|
692
359
|
|
|
693
360
|
---
|
|
694
361
|
|
|
695
|
-
##
|
|
362
|
+
## Верификация (post-generation)
|
|
696
363
|
|
|
697
|
-
|
|
364
|
+
После того как Claude напишет docs, код их проверяет. Пять отдельных validator:
|
|
698
365
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
366
|
+
| Validator | Что проверяет | Запускается через |
|
|
367
|
+
|---|---|---|
|
|
368
|
+
| `claude-md-validator` | Структурные инварианты CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
|
|
369
|
+
| `content-validator` | Реальное существование заявленных путей; согласованность manifest | `health` (advisory) |
|
|
370
|
+
| `pass-json-validator` | Выводы Pass 1 / 2 / 3 / 4 — well-formed JSON | `health` (warn) |
|
|
371
|
+
| `plan-validator` | Сохранённый plan совпадает с тем, что на диске | `health` (fail-on-error) |
|
|
372
|
+
| `sync-checker` | Файлы на диске совпадают с регистрациями `sync-map.json` (детекция orphaned/unregistered) | `health` (fail-on-error) |
|
|
705
373
|
|
|
706
|
-
|
|
374
|
+
`health-checker` оркестрирует четыре runtime-validator с трёхуровневой severity (fail / warn / advisory) и завершается с подходящим кодом для CI. `claude-md-validator` запускается отдельно через команду `lint`, поскольку структурный drift — это сигнал переинициализации, а не мягкое предупреждение. Запускайте в любой момент:
|
|
707
375
|
|
|
708
376
|
```bash
|
|
709
|
-
# После редактирования файлов стандартов или правил:
|
|
710
|
-
npx claudeos-core refresh
|
|
711
|
-
|
|
712
|
-
# Проверить согласованность всего
|
|
713
377
|
npx claudeos-core health
|
|
714
378
|
```
|
|
715
379
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
```bash
|
|
719
|
-
# Рекомендация v2.1.0: используйте git для восстановления (так как master plans
|
|
720
|
-
# больше не генерируются). Коммитьте сгенерированные документы регулярно, чтобы
|
|
721
|
-
# можно было откатить отдельные файлы без регенерации:
|
|
722
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
723
|
-
|
|
724
|
-
# Legacy (проекты v2.0.x с всё ещё присутствующим claudeos-core/plan/):
|
|
725
|
-
npx claudeos-core restore
|
|
726
|
-
```
|
|
727
|
-
|
|
728
|
-
### Обслуживание Memory-слоя (v2.0.0)
|
|
729
|
-
|
|
730
|
-
Слой L4 Memory (`claudeos-core/memory/`) накапливает командное знание между сессиями. Три CLI-подкоманды поддерживают его в здоровом состоянии:
|
|
731
|
-
|
|
732
|
-
```bash
|
|
733
|
-
# Compact: применить политику 4-stage компакции (периодически — например, ежемесячно)
|
|
734
|
-
npx claudeos-core memory compact
|
|
735
|
-
# Stage 1: резюмировать устаревшие записи (>30 дней, тело → одна строка)
|
|
736
|
-
# Stage 2: слить дубликаты заголовков (частоты суммируются, последний фикс сохраняется)
|
|
737
|
-
# Stage 3: удалить low-importance + устаревшее (importance <3 И lastSeen >60 дней)
|
|
738
|
-
# Stage 4: применить лимит 400 строк на файл (старейшие low-importance удаляются первыми)
|
|
739
|
-
|
|
740
|
-
# Score: пересчитать ранги записей failure-patterns.md по importance
|
|
741
|
-
npx claudeos-core memory score
|
|
742
|
-
# importance = round(frequency × 1.5 + recency × 5), ограничено 10
|
|
743
|
-
# Запускать после добавления нескольких новых failure-паттернов
|
|
744
|
-
|
|
745
|
-
# Propose-rules: выявить кандидатов на добавление правил из повторяющихся ошибок
|
|
746
|
-
npx claudeos-core memory propose-rules
|
|
747
|
-
# Читает записи failure-patterns.md с frequency ≥ 3
|
|
748
|
-
# Вычисляет confidence (сигмоида на взвешенных доказательствах × anchor-множитель)
|
|
749
|
-
# Пишет предложения в memory/auto-rule-update.md (НЕ автоприменяются)
|
|
750
|
-
# Confidence ≥ 0.70 заслуживает серьёзного рассмотрения; принять → редактировать правило + логировать решение
|
|
751
|
-
|
|
752
|
-
# v2.1.0: `memory --help` теперь маршрутизирует к справке подкоманды (раньше показывался top-level)
|
|
753
|
-
npx claudeos-core memory --help
|
|
754
|
-
```
|
|
755
|
-
|
|
756
|
-
> **Фиксы v2.1.0:** `memory score` больше не оставляет дублирующие строки `importance` после первого прогона (раньше auto-scored строка добавлялась сверху, а оригинальная plain-строка оставалась ниже). Маркер summary для Stage 1 в `memory compact` теперь является корректным markdown-элементом списка (`- _Summarized on ..._`), поэтому рендерится чисто и корректно повторно парсится при последующих компакциях.
|
|
757
|
-
|
|
758
|
-
Когда писать в memory (Claude делает это по запросу, но можно редактировать и вручную):
|
|
759
|
-
- **`decision-log.md`** — добавить новую запись при выборе между конкурирующими паттернами, выборе библиотеки, определении командной конвенции или решении НЕ делать что-то. Только append; никогда не редактировать исторические записи.
|
|
760
|
-
- **`failure-patterns.md`** — добавлять при **втором появлении** повторяющейся ошибки или неочевидной root cause. Первичные ошибки не требуют записи.
|
|
761
|
-
- `compaction.md` и `auto-rule-update.md` — генерируются/управляются указанными выше CLI-подкомандами; не редактировать вручную.
|
|
762
|
-
|
|
763
|
-
### Интеграция CI/CD
|
|
764
|
-
|
|
765
|
-
```yaml
|
|
766
|
-
# Пример GitHub Actions
|
|
767
|
-
- run: npx claudeos-core validate
|
|
768
|
-
# Exit code 1 блокирует PR
|
|
769
|
-
|
|
770
|
-
# Опционально: ежемесячное обслуживание memory (отдельный cron-workflow)
|
|
771
|
-
- run: npx claudeos-core memory compact
|
|
772
|
-
- run: npx claudeos-core memory score
|
|
773
|
-
```
|
|
380
|
+
Подробное описание проверок каждого validator см. в [docs/ru/verification.md](docs/ru/verification.md).
|
|
774
381
|
|
|
775
382
|
---
|
|
776
383
|
|
|
777
|
-
##
|
|
778
|
-
|
|
779
|
-
### vs. другие инструменты Claude Code
|
|
780
|
-
|
|
781
|
-
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
782
|
-
|---|---|---|---|---|---|
|
|
783
|
-
| **Подход** | Код анализирует первым, затем LLM генерирует | Предсобранные Config-пресеты | LLM проектирует Agent-команды | LLM генерирует Spec-документы | LLM пишет CLAUDE.md |
|
|
784
|
-
| **Читает ваш исходный код** | ✅ Детерминированный статический анализ | ❌ | ❌ | ❌ (LLM читает) | ❌ (LLM читает) |
|
|
785
|
-
| **Определение стека** | Код подтверждает (ORM, БД, build-tool, pkg-manager) | Н/Д (стек-агностично) | LLM угадывает | LLM угадывает | LLM угадывает |
|
|
786
|
-
| **Определение доменов** | Код подтверждает (Java 5 паттернов, Kotlin CQRS, Next.js FSD) | Н/Д | LLM угадывает | Н/Д | Н/Д |
|
|
787
|
-
| **Одинаковый проект → одинаковый результат** | ✅ Детерминированный анализ | ✅ (статические файлы) | ❌ (LLM варьируется) | ❌ (LLM варьируется) | ❌ (LLM варьируется) |
|
|
788
|
-
| **Обработка крупных проектов** | Разбиение на группы доменов (4 домена / 40 файлов на группу) | Н/Д | Без разбиения | Без разбиения | Лимит context window |
|
|
789
|
-
| **Вывод** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ файлов) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec-документов | CLAUDE.md (1 файл) |
|
|
790
|
-
| **Место вывода** | `.claude/rules/` (автозагружается Claude Code) | `.claude/` разное | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
791
|
-
| **Верификация после генерации** | ✅ 5 автоматических валидаторов | ❌ | ❌ | ❌ | ❌ |
|
|
792
|
-
| **Мультиязычный вывод** | ✅ 10 языков | ❌ | ❌ | ❌ | ❌ |
|
|
793
|
-
| **Мульти-стек** | ✅ Backend + Frontend одновременно | ❌ Стек-агностично | ❌ | ❌ | Частично |
|
|
794
|
-
| **Персистентный memory-слой** | ✅ L4 — decision log + failure patterns + auto-scored предложения правил (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
795
|
-
| **Оркестрация агентов** | ❌ | ✅ 28 агентов | ✅ 6 паттернов | ❌ | ❌ |
|
|
384
|
+
## Memory Layer (опционально, для долгоживущих проектов)
|
|
796
385
|
|
|
797
|
-
|
|
386
|
+
Начиная с v2.0, ClaudeOS-Core пишет папку `claudeos-core/memory/` с четырьмя файлами:
|
|
798
387
|
|
|
799
|
-
|
|
388
|
+
- `decision-log.md` — append-only «почему мы выбрали X вместо Y»
|
|
389
|
+
- `failure-patterns.md` — повторяющиеся ошибки с оценками frequency/importance
|
|
390
|
+
- `compaction.md` — как memory автоматически компактируется со временем
|
|
391
|
+
- `auto-rule-update.md` — паттерны, которые должны стать новыми rules
|
|
800
392
|
|
|
801
|
-
|
|
802
|
-
перестаёт использовать `success()`, когда ваша кодовая база использует `ok()`,
|
|
803
|
-
и перестаёт создавать директории `user/controller/`, когда ваш проект использует `controller/user/`.
|
|
393
|
+
Можно запустить `npx claudeos-core memory propose-rules`, чтобы попросить Claude изучить недавние failure patterns и предложить новые rules.
|
|
804
394
|
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
ClaudeOS-Core фокусируется на **проектно-специфичных правилах и стандартах**.
|
|
808
|
-
Другие инструменты фокусируются на **оркестрации агентов и workflow**.
|
|
809
|
-
|
|
810
|
-
Вы можете использовать ClaudeOS-Core для генерации правил вашего проекта, а затем ECC или Harness поверх для агент-команд и автоматизации workflow. Они решают разные задачи.
|
|
395
|
+
Модель memory и жизненный цикл см. в [docs/ru/memory-layer.md](docs/ru/memory-layer.md).
|
|
811
396
|
|
|
812
397
|
---
|
|
813
398
|
|
|
814
399
|
## FAQ
|
|
815
400
|
|
|
816
|
-
**В:
|
|
817
|
-
Нет.
|
|
818
|
-
|
|
819
|
-
**В: Сколько это стоит?**
|
|
820
|
-
Он вызывает `claude -p` несколько раз на протяжении 4 проходов. В split-режиме v2.1.0 только Pass 3 разворачивается в 4–14+ стадий в зависимости от размера проекта (см. [Автомасштабирование](#автомасштабирование-по-размеру-проекта)). Типичный малый проект (1–15 доменов) использует в сумме 8–9 вызовов `claude -p`; 18-доменный проект использует 11; 60-доменный проект использует 15–17. Каждая стадия запускается со свежим context window — per-call стоимость токенов в действительности ниже, чем была у single-call Pass 3, потому что ни одна стадия не должна удерживать всё дерево файлов в одном контексте. Когда `--lang` не английский, путь статического фолбэка может вызвать несколько дополнительных `claude -p` для перевода; результаты кэшируются в `claudeos-core/generated/.i18n-cache-<lang>.json`, так что последующие запуски их переиспользуют. Это в пределах нормального использования Claude Code.
|
|
821
|
-
|
|
822
|
-
**В: Что такое Pass 3 split-режим и зачем он был добавлен в v2.1.0?**
|
|
823
|
-
До v2.1.0 Pass 3 делал один вызов `claude -p`, который должен был выдать всё сгенерированное дерево файлов (`CLAUDE.md`, стандарты, правила, skills, гайды — обычно 30–60 файлов) в одном ответе. Это работало на малых проектах, но стабильно падало с ошибкой `Prompt is too long` (переполнение из-за накопления вывода) около 5 доменов. Отказ не был предсказуем по размеру входа — он зависел от того, насколько многословным оказался каждый сгенерированный файл, и мог случаться на одном и том же проекте эпизодически. Split-режим структурно обходит проблему: Pass 3 разбивается на последовательные стадии (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), каждая из которых — отдельный вызов `claude -p` со свежим context window. Кросс-стейджевая согласованность сохраняется через `pass3a-facts.md` — дистиллированный fact sheet размером 5–10 KB, на который ссылается каждая последующая стадия вместо повторного чтения `pass2-merged.json`. Маркер `pass3-complete.json` несёт массив `groupsCompleted`, так что краш во время `3c-2` возобновляется с `3c-2` (а не с `3a`), избегая двойного расхода токенов.
|
|
824
|
-
**В: Стоит ли коммитить сгенерированные файлы в Git?**
|
|
825
|
-
Да, рекомендуется. Ваша команда может использовать одинаковые стандарты Claude Code. Подумайте о добавлении `claudeos-core/generated/` в `.gitignore` (JSON анализа регенерируется).
|
|
826
|
-
|
|
827
|
-
**В: Что насчёт проектов со смешанным стеком (например, Java backend + React frontend)?**
|
|
828
|
-
Полностью поддерживается. ClaudeOS-Core автоматически определяет оба стека, тегирует домены как `backend` или `frontend` и использует стек-специфические промпты анализа для каждого. Pass 2 сливает всё, а Pass 3 генерирует стандарты и backend, и frontend на своих split-стадиях — backend-домены идут в одни батчи 3b/3c, frontend-домены — в другие, и все они ссылаются на один и тот же `pass3a-facts.md` для согласованности.
|
|
829
|
-
|
|
830
|
-
**В: Работает ли он с Turborepo / pnpm workspaces / Lerna-монорепо?**
|
|
831
|
-
Да. ClaudeOS-Core обнаруживает `turbo.json`, `pnpm-workspace.yaml`, `lerna.json` или `package.json#workspaces` и автоматически сканирует файлы `package.json` в под-пакетах на фреймворк/ORM/БД-зависимости. Сканирование доменов покрывает паттерны `apps/*/src/` и `packages/*/src/`. Запускать из корня монорепо.
|
|
832
|
-
|
|
833
|
-
**В: Что происходит при повторном запуске?**
|
|
834
|
-
Если существуют предыдущие результаты Pass 1/2, интерактивный промпт позволяет выбрать: **Continue** (продолжить с места остановки) или **Fresh** (удалить всё и начать заново). Используйте `--force`, чтобы пропустить промпт и всегда начинать заново. В split-режиме v2.1.0 resume Pass 3 работает на уровне гранулярности стадий — если прогон упал во время `3c-2`, следующий `init` возобновляется с `3c-2`, а не перезапускается с `3a` (что удвоило бы расход токенов). Маркер `pass3-complete.json` записывает `mode: "split"` плюс массив `groupsCompleted`, чтобы управлять этой логикой.
|
|
835
|
-
|
|
836
|
-
**В: Получает ли NestJS свой собственный шаблон или использует Express?**
|
|
837
|
-
NestJS использует выделенный шаблон `node-nestjs` с NestJS-специфичными категориями анализа: декораторы `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI-контейнер, CQRS-паттерны и `Test.createTestingModule`. Express-проекты используют отдельный шаблон `node-express`.
|
|
401
|
+
**В: Нужен ли мне Claude API ключ?**
|
|
402
|
+
О: Нет. ClaudeOS-Core использует ваш существующий Claude Code — он отправляет промпты в `claude -p` на вашей машине. Никаких дополнительных аккаунтов.
|
|
838
403
|
|
|
839
|
-
**В:
|
|
840
|
-
|
|
404
|
+
**В: Перезапишет ли это мой существующий CLAUDE.md или `.claude/rules/`?**
|
|
405
|
+
О: Первый запуск на свежем проекте: создаёт. Перезапуск без `--force` сохраняет ваши правки — pass-маркеры предыдущего запуска обнаруживаются, и pass-ы пропускаются. Перезапуск с `--force` стирает и регенерирует всё (ваши правки теряются — в этом и смысл `--force`). См. [docs/ru/safety.md](docs/ru/safety.md).
|
|
841
406
|
|
|
842
|
-
**В:
|
|
843
|
-
Да.
|
|
407
|
+
**В: Мой стек не поддерживается. Можно добавить?**
|
|
408
|
+
О: Да. Новый стек требует ~3 prompt-шаблона + domain scanner. См. [CONTRIBUTING.md](CONTRIBUTING.md) — гайд из 8 шагов.
|
|
844
409
|
|
|
845
|
-
**В:
|
|
846
|
-
|
|
410
|
+
**В: Как сгенерировать docs на корейском (или другом языке)?**
|
|
411
|
+
О: `npx claudeos-core init --lang ko`. Поддерживается 10 языков: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
847
412
|
|
|
848
|
-
**В:
|
|
849
|
-
|
|
413
|
+
**В: Работает ли это с monorepo?**
|
|
414
|
+
О: Да — Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) и npm/yarn workspaces (`package.json#workspaces`) определяются stack-detector. Каждое приложение получает собственный анализ. Другие layout monorepo (например, NX) специально не определяются, но универсальные паттерны `apps/*/` и `packages/*/` всё равно подбираются per-stack сканерами.
|
|
850
415
|
|
|
851
|
-
**В:
|
|
852
|
-
|
|
416
|
+
**В: Что, если Claude Code сгенерирует rules, с которыми я не согласен?**
|
|
417
|
+
О: Редактируйте напрямую. Затем запустите `npx claudeos-core lint`, чтобы убедиться, что CLAUDE.md по-прежнему структурно валиден. Ваши правки сохраняются при последующих запусках `init` (без `--force`) — механизм resume пропускает pass-ы, у которых есть маркеры.
|
|
853
418
|
|
|
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. Инструменты верификации обрабатывают оба случая чисто.
|
|
419
|
+
**В: Куда сообщать о багах?**
|
|
420
|
+
О: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). По вопросам безопасности — [SECURITY.md](SECURITY.md).
|
|
871
421
|
|
|
872
422
|
---
|
|
873
423
|
|
|
874
|
-
##
|
|
875
|
-
|
|
876
|
-
```
|
|
877
|
-
pass-prompts/templates/
|
|
878
|
-
├── common/ # общие header/footer + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
|
|
879
|
-
│ ├── header.md # Роль + директива формата вывода (все pass)
|
|
880
|
-
│ ├── pass3-footer.md # Инструкция health-check после Pass 3 + 5 CRITICAL блоков guardrail (v2.2.0)
|
|
881
|
-
│ ├── pass3-phase1.md # Блок "Read Once, Extract Facts" с Rule A-E (v2.1.0)
|
|
882
|
-
│ ├── pass4.md # Промпт скаффолдинга памяти (v2.0.0)
|
|
883
|
-
│ ├── staging-override.md # Перенаправляет записи .claude/rules/** в .staged-rules/** (v2.0.0)
|
|
884
|
-
│ ├── claude-md-scaffold.md # Детерминированный шаблон CLAUDE.md из 8 секций (v2.2.0)
|
|
885
|
-
│ └── lang-instructions.json # Директивы вывода по языкам (10 языков)
|
|
886
|
-
├── java-spring/ # Java / Spring Boot
|
|
887
|
-
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
888
|
-
├── node-express/ # Node.js / Express
|
|
889
|
-
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
890
|
-
├── node-fastify/ # Node.js / Fastify
|
|
891
|
-
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
892
|
-
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
893
|
-
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
894
|
-
├── angular/ # Angular
|
|
895
|
-
├── python-django/ # Python / Django (DRF)
|
|
896
|
-
├── python-fastapi/ # Python / FastAPI
|
|
897
|
-
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
898
|
-
```
|
|
899
|
-
|
|
900
|
-
`plan-installer` автоматически определяет ваш стек/стеки, затем собирает специфичные по типу промпты. NestJS, Vue/Nuxt, Vite SPA и Flask каждый используют выделенные шаблоны с категориями анализа, специфичными для фреймворка (например, `@Module`/`@Injectable`/Guards для NestJS; `<script setup>`/Pinia/useFetch для Vue; client-side routing/`VITE_` env для Vite; Blueprint/`app.factory`/Flask-SQLAlchemy для Flask). Для мульти-стек проектов генерируются отдельные `pass1-backend-prompt.md` и `pass1-frontend-prompt.md`, а `pass3-prompt.md` комбинирует цели генерации обоих стеков. В v2.1.0 шаблон Pass 3 дополняется `common/pass3-phase1.md` (блок «Read Once, Extract Facts» с Rules A–E) перед тем, как нарезаться по стадиям split-режима. Pass 4 использует общий шаблон `common/pass4.md` (memory scaffolding) независимо от стека.
|
|
424
|
+
## Документация
|
|
901
425
|
|
|
902
|
-
|
|
426
|
+
| Тема | Читать |
|
|
427
|
+
|---|---|
|
|
428
|
+
| Как работает 4-pass конвейер (глубже, чем диаграмма) | [docs/ru/architecture.md](docs/ru/architecture.md) |
|
|
429
|
+
| Визуальные диаграммы (Mermaid) архитектуры | [docs/ru/diagrams.md](docs/ru/diagrams.md) |
|
|
430
|
+
| Обнаружение стека — что ищет каждый сканер | [docs/ru/stacks.md](docs/ru/stacks.md) |
|
|
431
|
+
| Memory layer — decision logs и failure patterns | [docs/ru/memory-layer.md](docs/ru/memory-layer.md) |
|
|
432
|
+
| Все 5 validator подробно | [docs/ru/verification.md](docs/ru/verification.md) |
|
|
433
|
+
| Все CLI-команды и опции | [docs/ru/commands.md](docs/ru/commands.md) |
|
|
434
|
+
| Ручная установка (без `npx`) | [docs/ru/manual-installation.md](docs/ru/manual-installation.md) |
|
|
435
|
+
| Override-ы сканера — `.claudeos-scan.json` | [docs/ru/advanced-config.md](docs/ru/advanced-config.md) |
|
|
436
|
+
| Безопасность: что сохраняется при re-init | [docs/ru/safety.md](docs/ru/safety.md) |
|
|
437
|
+
| Сравнение со схожими инструментами (scope, не качество) | [docs/ru/comparison.md](docs/ru/comparison.md) |
|
|
438
|
+
| Ошибки и восстановление | [docs/ru/troubleshooting.md](docs/ru/troubleshooting.md) |
|
|
903
439
|
|
|
904
440
|
---
|
|
905
441
|
|
|
906
|
-
##
|
|
907
|
-
|
|
908
|
-
ClaudeOS-Core автоматически обнаруживает JS/TS монорепо-настройки и сканирует под-пакеты на зависимости.
|
|
909
|
-
|
|
910
|
-
**Поддерживаемые маркеры монорепо** (автообнаружение):
|
|
911
|
-
- `turbo.json` (Turborepo)
|
|
912
|
-
- `pnpm-workspace.yaml` (pnpm workspaces)
|
|
913
|
-
- `lerna.json` (Lerna)
|
|
914
|
-
- `package.json#workspaces` (npm/yarn workspaces)
|
|
915
|
-
|
|
916
|
-
**Запуск из корня монорепо** — ClaudeOS-Core читает `apps/*/package.json` и `packages/*/package.json` для обнаружения фреймворк/ORM/БД-зависимостей в под-пакетах:
|
|
917
|
-
|
|
918
|
-
```bash
|
|
919
|
-
cd my-monorepo
|
|
920
|
-
npx claudeos-core init
|
|
921
|
-
```
|
|
922
|
-
|
|
923
|
-
**Что обнаруживается:**
|
|
924
|
-
- Зависимости из `apps/web/package.json` (например, `next`, `react`) → frontend-стек
|
|
925
|
-
- Зависимости из `apps/api/package.json` (например, `express`, `prisma`) → backend-стек
|
|
926
|
-
- Зависимости из `packages/db/package.json` (например, `drizzle-orm`) → ORM/БД
|
|
927
|
-
- Пользовательские пути workspace из `pnpm-workspace.yaml` (например, `services/*`)
|
|
928
|
-
|
|
929
|
-
**Сканирование доменов также покрывает раскладки монорепо:**
|
|
930
|
-
- `apps/api/src/modules/*/` и `apps/api/src/*/` для backend-доменов
|
|
931
|
-
- `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` для frontend-доменов
|
|
932
|
-
- `packages/*/src/*/` для доменов shared-пакетов
|
|
933
|
-
|
|
934
|
-
```
|
|
935
|
-
my-monorepo/ ← Запускайте здесь: npx claudeos-core init
|
|
936
|
-
├── turbo.json ← Автообнаружение как Turborepo
|
|
937
|
-
├── apps/
|
|
938
|
-
│ ├── web/ ← Next.js обнаружен из apps/web/package.json
|
|
939
|
-
│ │ ├── app/dashboard/ ← Frontend-домен обнаружен
|
|
940
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
941
|
-
│ └── api/ ← Express обнаружен из apps/api/package.json
|
|
942
|
-
│ ├── src/modules/users/ ← Backend-домен обнаружен
|
|
943
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
944
|
-
├── packages/
|
|
945
|
-
│ ├── db/ ← Drizzle обнаружен из packages/db/package.json
|
|
946
|
-
│ └── ui/
|
|
947
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
948
|
-
```
|
|
949
|
-
|
|
950
|
-
> **Примечание:** Для Kotlin/Java монорепо обнаружение мультимодулей использует `settings.gradle.kts` (см. [Обнаружение доменов Kotlin мультимодульных проектов](#обнаружение-доменов-kotlin-мультимодульных-проектов) выше) и не требует маркеров JS-монорепо.
|
|
951
|
-
|
|
952
|
-
## Устранение неполадок
|
|
953
|
-
|
|
954
|
-
**«claude: command not found»** — Claude Code CLI не установлен или не в PATH. См. [документацию Claude Code](https://code.claude.com/docs/en/overview).
|
|
955
|
-
|
|
956
|
-
**«npm install failed»** — Версия Node.js может быть слишком старой. Требуется v18+.
|
|
957
|
-
|
|
958
|
-
**«0 domains detected»** — Структура вашего проекта может быть нестандартной. См. паттерны обнаружения выше для вашего стека.
|
|
959
|
-
|
|
960
|
-
**«0 domains detected» в Kotlin-проекте** — Убедитесь, что ваш проект имеет `build.gradle.kts` (или `build.gradle` с kotlin-плагином) в корне, а исходные файлы находятся под `**/src/main/kotlin/`. Для мультимодульных проектов убедитесь, что `settings.gradle.kts` содержит `include()`-выражения. Одномодульные Kotlin-проекты (без `settings.gradle`) также поддерживаются — домены извлекаются из структуры package/class под `src/main/kotlin/`.
|
|
961
|
-
|
|
962
|
-
**«Language detected as java instead of kotlin»** — ClaudeOS-Core проверяет сначала корневой `build.gradle(.kts)`, затем build-файлы подмодулей. Если корневой build-файл использует плагин `java` без `kotlin`, но подмодули используют Kotlin, инструмент проверяет до 5 build-файлов подмодулей как фолбэк. Если всё равно не обнаружено, убедитесь, что хотя бы один `build.gradle.kts` содержит `kotlin("jvm")` или `org.jetbrains.kotlin`.
|
|
963
|
-
|
|
964
|
-
**«CQRS not detected»** — Обнаружение архитектуры полагается на имена модулей, содержащие ключевые слова `command` и `query`. Если ваши модули используют другое именование (например, `write-server`, `read-server`), архитектура CQRS не будет автоматически обнаружена. Вы можете вручную скорректировать сгенерированные промпты после запуска plan-installer.
|
|
965
|
-
|
|
966
|
-
**«Pass 3 produced 0 rule files under .claude/rules/» (v2.0.0)** — Сработал Guard 2: Claude проигнорировал директиву `staging-override.md` и попытался писать напрямую в `.claude/`, где политика чувствительных путей Claude Code блокирует запись. Перезапустите с `npx claudeos-core init --force`. Если ошибка повторяется, проверьте `claudeos-core/generated/pass3-prompt.md`, чтобы убедиться, что блок `staging-override.md` находится в начале.
|
|
967
|
-
|
|
968
|
-
**«Pass 3 finished but N rule file(s) could not be moved from staging» (v2.0.0)** — Сработал Guard 1: перемещение staging попало на временную блокировку файла (обычно Windows-антивирус или file-watcher). Маркер НЕ записан, так что следующий запуск `init` автоматически повторит Pass 3. Просто перезапустите `npx claudeos-core init`.
|
|
969
|
-
|
|
970
|
-
**«Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty» (v2.0.0)** — Сработал Guard 3 (H2): Claude обрезал ответ на середине после записи CLAUDE.md + rules, но до завершения (или начала) секции `claudeos-core/guide/` (ожидается 9 файлов). Также срабатывает на файле только с BOM или только с пробелами (заголовок был записан, но тело было обрезано). Без этого guard маркер завершения всё равно был бы записан, оставив `guide/` перманентно пустым на последующих запусках. Маркер здесь НЕ записывается, так что следующий запуск `init` повторит Pass 3 с теми же результатами Pass 2. Если повторяется, перезапустите с `npx claudeos-core init --force`, чтобы регенерировать с нуля.
|
|
971
|
-
|
|
972
|
-
**«Pass 3 finished but the following required output(s) are missing or empty» (v2.0.0, обновлено в v2.1.0)** — Сработал Guard 3 (H1): Claude обрезал ПОСЛЕ `claudeos-core/guide/`, но до (или во время) `claudeos-core/standard/` или `claudeos-core/skills/`. Требования: (a) `standard/00.core/01.project-overview.md` существует и не пуст (sentinel, записываемый промптом Pass 3 каждого стека), (b) `skills/` имеет ≥1 непустой `.md`. `database/` и `mcp-guide/` намеренно исключены (некоторые стеки законно производят ноль файлов). `plan/` больше не проверяется начиная с v2.1.0 (master plans были удалены). Тот же путь восстановления, что у Guard 3 (H2): перезапустить `init`, или `--force`, если повторяется.
|
|
973
|
-
|
|
974
|
-
**«Pass 3 split stage crashed partway through (v2.1.0)»** — Когда одна из split-стадий (например, `3b-1`, `3c-2`) падает в середине прогона, stage-level маркер НЕ записывается, но завершённые стадии ЗАПИСЫВАЮТСЯ в `pass3-complete.json.groupsCompleted`. Следующий запуск `init` читает этот массив и возобновляется с первой незавершённой стадии, пропуская всю ранее выполненную работу. Вам не нужно делать ничего вручную — просто перезапустите `npx claudeos-core init`. Если resume продолжает падать на одной и той же стадии, проверьте `claudeos-core/generated/pass3-prompt.md` на некорректное содержимое, затем попробуйте `--force` для полного перезапуска. Форма `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) стабильна; отсутствующий или некорректный маркер приводит к повторному запуску всего Pass 3 с `3a`.
|
|
975
|
-
|
|
976
|
-
**«Pass 3 stale marker (shape mismatch) — treating as incomplete» (v2.1.0)** — `pass3-complete.json` от pre-v2.1.0 single-call прогона интерпретируется по новым правилам split-режима. Проверка формы ищет `mode: "split"` и массив `groupsCompleted`; если что-то из этого отсутствует, маркер трактуется как частичный, и Pass 3 перезапускается в split-режиме. Если вы обновились с v2.0.x, это ожидаемо один раз — следующий прогон запишет корректную форму маркера. Действий не требуется.
|
|
977
|
-
|
|
978
|
-
**«pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running» (v2.0.0)** — Info-лог, не ошибка. При resume `init` теперь парсит и валидирует `pass2-merged.json` (требуется ≥5 ключей верхнего уровня, зеркалируя порог `INSUFFICIENT_KEYS` из `pass-json-validator`). Скелет `{}` или некорректный JSON от предыдущего упавшего запуска автоматически удаляется, и Pass 2 перезапускается. Ручные действия не нужны — пайплайн самовосстанавливается. Если повторяется, проверьте `claudeos-core/generated/pass2-prompt.md` и попробуйте с `--force`.
|
|
442
|
+
## Вклад в проект
|
|
979
443
|
|
|
980
|
-
|
|
444
|
+
Вклад приветствуется — добавление поддержки стека, улучшение промптов, исправление багов. См. [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
981
445
|
|
|
982
|
-
|
|
446
|
+
Кодекс поведения и политику безопасности см. в [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) и [SECURITY.md](SECURITY.md).
|
|
983
447
|
|
|
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))
|
|
448
|
+
## Лицензия
|
|
1006
449
|
|
|
1007
|
-
|
|
450
|
+
[ISC](LICENSE) — свободно для любого использования, включая коммерческое.
|
|
1008
451
|
|
|
1009
452
|
---
|
|
1010
453
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
Создано **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
1014
|
-
|
|
1015
|
-
## Лицензия
|
|
1016
|
-
|
|
1017
|
-
ISC
|
|
454
|
+
<sub>Создано с заботой [@claudeos-core](https://github.com/claudeos-core). Если это сэкономило вам время, ⭐ на GitHub помогает сохранять видимость проекта.</sub>
|