docs: черновики deliderra-cleanup и app-path-split-legacy-fix спеки и планы plus bag wall-read-block

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-17 20:10:14 +03:00
parent f6d0544277
commit 7ae53216bf
10 changed files with 534 additions and 0 deletions
@@ -0,0 +1,29 @@
# План: чистка CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Выполнить правки `CLAUDE.md` по дизайну: добавить в начало указатель на онбординг-гайд,
удалить из шапки и `§5` продуктовые пункты (объекта в `claude-brain` нет), перенумеровать `§5`
сквозной нумерацией с починкой внутренних ссылок. `§9` не трогается. Каждая правка проверяется
read-only командой; финальная проверка ищет все удалённые продуктовые термины разом.
```skills-json
["claude-md-management"]
```
```steps-json
[
{"op":"Edit","object":"CLAUDE.md","ref":"ct"},
{"op":"Bash","object":"grep -c router-mentor-wall-GUIDE CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"sc"},
{"op":"Bash","object":"grep -ci forest CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"cv"},
{"op":"Bash","object":"grep -ci -e vuetify -e pa11y -e lighthouse -e inertia -e livewire -e filament -e motion -e schema.sql -e production CLAUDE.md","ref":"cr"}
]
```
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,33 @@
# План: чистка CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Выполнить правки `CLAUDE.md` по дизайну: добавить в начало указатель на онбординг-гайд,
удалить из шапки и `§5` продуктовые пункты (объекта в `claude-brain` нет), перенумеровать `§5`
сквозной нумерацией с починкой внутренних ссылок. `§9` не трогается. Каждая правка проверяется
read-only командой; финальная проверка ищет все удалённые продуктовые термины разом.
Формат указателя согласован с владельцем заранее — **жирный блок-цитата**
(`> **❗ ПЕРВОЕ — прочитай гайд:** [router-mentor-wall-GUIDE.md](...) — …`). Единый стиль
применяется в шаге `ct`; дополнительного уточнения по ходу не требуется.
```skills-json
["claude-md-management"]
```
```steps-json
[
{"op":"Edit","object":"CLAUDE.md","ref":"ct"},
{"op":"Bash","object":"grep -c router-mentor-wall-GUIDE CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"sc"},
{"op":"Bash","object":"grep -ci forest CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"cv"},
{"op":"Bash","object":"grep -ci -e vuetify -e pa11y -e lighthouse -e inertia -e livewire -e filament -e motion -e schema.sql -e production CLAUDE.md","ref":"cr"}
]
```
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,33 @@
# План: чистка CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Выполнить правки `CLAUDE.md` по дизайну: добавить в начало указатель на онбординг-гайд,
удалить из шапки и `§5` продуктовые пункты (объекта в `claude-brain` нет), перенумеровать `§5`
сквозной нумерацией с починкой внутренних ссылок. `§9` не трогается. Каждая правка проверяется
read-only командой; финальная проверка ищет все удалённые продуктовые термины разом.
Формат указателя согласован с владельцем заранее — **жирный блок-цитата**
(`> **❗ ПЕРВОЕ — прочитай гайд:** [router-mentor-wall-GUIDE.md](...) — …`). Единый стиль
применяется в шаге `ct`; дополнительного уточнения по ходу не требуется.
```skills-json
["claude-md-management"]
```
```steps-json
[
{"op":"Edit","object":"CLAUDE.md","ref":"ct"},
{"op":"Bash","object":"grep -cF router-mentor-wall-GUIDE CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"sc"},
{"op":"Bash","object":"grep -ci forest CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"cv"},
{"op":"Bash","object":"grep -ci -e vuetify -e pa11y -e lighthouse -e inertia -e livewire -e filament -e motion -e schema.sql -e production CLAUDE.md","ref":"cr"}
]
```
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,31 @@
# План: чистка CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Выполнить правки `CLAUDE.md` по дизайну: добавить в начало указатель на онбординг-гайд,
удалить из шапки и `§5` продуктовые пункты (объекта в `claude-brain` нет), перенумеровать `§5`
сквозной нумерацией с починкой внутренних ссылок, добавить датированную запись в `§9`. Каждая
правка проверяется read-only командой.
```skills-json
["claude-md-management"]
```
```steps-json
[
{"op":"Edit","object":"CLAUDE.md","ref":"ct"},
{"op":"Bash","object":"grep -c router-mentor-wall-GUIDE CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"sc"},
{"op":"Bash","object":"grep -c Forest CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"cv"},
{"op":"Bash","object":"grep -c Boost CLAUDE.md","ref":"cr"},
{"op":"Edit","object":"CLAUDE.md","ref":"sc"},
{"op":"Bash","object":"grep -c Vuetify CLAUDE.md","ref":"cr"}
]
```
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,29 @@
# План: фикс хардкода `app/` в `run-test-json` + диагностика расписки
## Цель
Мигрировать выбор корня и конфига сюиты в `tools/run-test-json.mjs` с захардкоженного `app/`
на общий `resolveVitestConfig` (от корня репозитория), покрыть чистую построительницу аргументов
тестами по TDD и эмпирически наблюдать исход производителя verify-расписки в текущем окружении.
```skills-json
["test-driven-development"]
```
```steps-json
[
{"op":"Edit","object":"tools/run-test-json.test.mjs","ref":"ct1"},
{"op":"Bash","object":"npx vitest run tools/run-test-json.test.mjs --config vitest.config.tools.mjs --reporter dot","ref":"ct1"},
{"op":"Edit","object":"tools/run-test-json.mjs","ref":"al1"},
{"op":"Bash","object":"npx vitest run tools/run-test-json.test.mjs --config vitest.config.tools.mjs --reporter tap","ref":"al1"},
{"op":"Bash","object":"node tools/produce-verify-receipt.mjs","ref":"dg1"},
{"op":"Bash","object":"npx vitest run --config vitest.config.tools.mjs --no-file-parallelism","ref":"cr1"}
]
```
```verified-context-json
[
{"id":"ax1","kind":"EXTRACTED","ref":"tools/run-test-json.mjs","anchor":"export function runVitestJson"},
{"id":"ax2","kind":"EXTRACTED","ref":"tools/produce-verify-receipt.mjs","anchor":"export function resolveVitestConfig"}
]
```
@@ -0,0 +1,70 @@
# Чистка оперативной карты CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Привести `CLAUDE.md` в соответствие с фактом: репозиторий `claude-brain` — дом управляющего
слоя Claude (router / mentor / observer / registry / `tools/`), продукта в нём нет
(`app/` / `db/` / `web/` отсутствуют). Убрать из файла продуктовые инструкции, у которых в
этом репозитории нет объекта, и поднять в начало файла указатель на онбординг-гайд, который
новая сессия должна прочитать первым.
## Контракт изменений {#ct}
- В начало файла (над разделом «ГЛАВНОЕ») добавляется однострочный выделенный указатель:
первое чтение для новой сессии — `docs/superpowers/router-mentor-wall-GUIDE.md`. Указатель —
кликабельная markdown-ссылка относительным путём.
- Сохраняемые разделы (`§0`, `§1`, остаток `§5`, `§9`) сохраняют смысл; правки — только
удаление продуктовых пунктов, перенумерация `§5` и починка внутренних ссылок на номера.
- Файл остаётся валидным markdown; нумерованный список `§5` идёт без пропусков (1..N).
## Что удаляется и что остаётся {#sc}
Удаляется (продуктовое, объекта в `claude-brain` нет):
- в шапке — заголовок «техконтекст Лидерры» (заменяется нейтральным «оперативная карта мозга»)
и блок-нота про ребрендинг названия/палитры/шрифтов;
- в строке статуса файла — формулировка про «отложенный разбор тела» (разбор выполнен);
- в `§5` — пункт про подключение внешнего DB-помощника к production-БД; пункт про запрет
фронтовых библиотек чужого стека в пользу Vue+Vuetify; пункт про инструмент a11y; пункт про
расширенный UI-пул из координирующего свода; пункт про правку `db/schema.sql`; резервный
пункт про motion-runtime.
Остаётся (машинерия управляющего слоя, актуальна для brain):
- `§0` нормативный квинтет; `§1` цепочка приоритета правил;
- в `§5` — запрет ПДн/секретов в коммитах (gitleaks); запрет дублей инструментов; правило
синхронизации этого файла с Pravila/Tooling; запрет закрывать открытые вопросы без команды;
канал правок через плагин `claude-md-management`; обязательность Superpowers-skill; правило
docs-only коммитов; правило `/graphify query` перед codebase-вопросом; правило coverage для
записи памяти;
- `§9` история версий — без изменений.
## Крайние случаи {#ec}
- Внутренние ссылки вида «§5 п.N» в шапке и внутри `§5` после перенумерации обязаны указывать на
актуальные номера (иначе появятся битые перекрёстные ссылки).
- Удаление продуктовых пунктов не должно задеть соседние сохраняемые пункты: правки `§5`
выполняются одним аккуратным контурным фрагментом.
- Версии нормативного квинтета (Pravila/Tooling) не трогаются — их синхронизация отдельная
задача владельца.
## Конвенция и нумерация {#cv}
- `§5` перенумеровывается сквозной нумерацией 1..9 в порядке следования сохранённых пунктов.
- Внутренние перекрёстные ссылки на номера пунктов `§5` приводятся к новой нумерации
(правило-синхронизации, канал-правок, отсылки «flow п.N», «пп.N»).
- Терминология сохраняемых пунктов — «владелец» (вместо устаревшего «заказчик»), без иной
переформулировки смысла.
## Критерий приёмки {#cr}
- В начале файла присутствует строка-указатель на `router-mentor-wall-GUIDE.md`.
- В файле больше нет упоминаний продуктовых сущностей удалённых пунктов (внешний DB-помощник,
Vuetify-стек, инструмент a11y, ребрендинг-палитра, `db/schema.sql`, motion-runtime).
- `§5` — непрерывный список 1..9; внутренние ссылки на номера пунктов согласованы.
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,72 @@
# Чистка оперативной карты CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Привести `CLAUDE.md` в соответствие с фактом: репозиторий `claude-brain` — дом управляющего
слоя Claude (router / mentor / observer / registry / `tools/`), продукта в нём нет
(`app/` / `db/` / `web/` отсутствуют). Убрать из файла продуктовые инструкции, у которых в
этом репозитории нет объекта, и поднять в начало файла указатель на онбординг-гайд, который
новая сессия должна прочитать первым.
## Контракт изменений {#ct}
- В начало файла (над разделом «ГЛАВНОЕ») добавляется однострочный выделенный указатель:
первое чтение для новой сессии — `docs/superpowers/router-mentor-wall-GUIDE.md`. Указатель —
кликабельная markdown-ссылка относительным путём.
- Сохраняемые разделы (`§0`, `§1`, остаток `§5`, `§9`) сохраняют смысл; правки — только
удаление продуктовых пунктов, перенумерация `§5` и починка внутренних ссылок на номера.
- Файл остаётся валидным markdown; нумерованный список `§5` идёт без пропусков (1..N).
## Что удаляется и что остаётся {#sc}
Удаляется (продуктовые инструкции, объекта в `claude-brain` нет):
- в шапке — заголовок «техконтекст Лидерры» (заменяется нейтральным «оперативная карта мозга»)
и блок-нота про ребрендинг названия/палитры/шрифтов;
- в строке статуса файла — формулировка про «отложенный разбор тела» (разбор выполнен);
- в `§5` — пункт про подключение внешнего DB-помощника к production-БД; пункт про запрет
фронтовых библиотек чужого стека в пользу Vue+Vuetify; пункт про инструмент a11y; пункт про
расширенный UI-пул из координирующего свода; пункт про правку `db/schema.sql`; резервный
пункт про motion-runtime.
Остаётся (машинерия управляющего слоя, актуальна для brain):
- `§0` нормативный квинтет; `§1` цепочка приоритета правил;
- в `§5` — запрет ПДн/секретов в коммитах (gitleaks); запрет дублей инструментов; правило
синхронизации этого файла с Pravila/Tooling; запрет закрывать открытые вопросы без команды;
канал правок через плагин `claude-md-management`; обязательность Superpowers-skill; правило
docs-only коммитов; правило `/graphify query` перед codebase-вопросом; правило coverage для
записи памяти;
- `§9` история версий — **без изменений**. Историческая запись о прошлой компакции может
упоминать прошлый продуктовый контекст как факт истории — это вне области чистки.
## Крайние случаи {#ec}
- Внутренние ссылки вида «§5 п.N» в шапке и внутри `§5` после перенумерации обязаны указывать на
актуальные номера (иначе появятся битые перекрёстные ссылки).
- Удаление продуктовых пунктов не должно задеть соседние сохраняемые пункты: правки `§5`
выполняются одним аккуратным контурным фрагментом.
- Версии нормативного квинтета (Pravila/Tooling) и историческая запись `§9` не трогаются.
## Конвенция и нумерация {#cv}
- `§5` перенумеровывается сквозной нумерацией 1..9 в порядке следования сохранённых пунктов.
- Внутренние перекрёстные ссылки на номера пунктов `§5` приводятся к новой нумерации
(правило-синхронизации, канал-правок, отсылки «flow п.N», «пп.N»).
- Терминология сохраняемых пунктов — «владелец» (вместо устаревшего «заказчик»), без иной
переформулировки смысла.
## Критерий приёмки {#cr}
- В начале файла присутствует строка-указатель на `router-mentor-wall-GUIDE.md`.
- В файле больше нет продуктовых инструкций удалённых пунктов: внешний DB-помощник к
production-БД, Vuetify-стек, инструмент a11y, ребрендинг-палитра, `db/schema.sql`,
motion-runtime. Историческая запись `§9` о прошлой компакции — вне области (факт истории,
не инструкция).
- `§5` — непрерывный список 1..9; внутренние ссылки на номера пунктов согласованы.
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,71 @@
# Чистка оперативной карты CLAUDE.md от продуктового контекста + указатель на онбординг-гайд
## Цель
Привести `CLAUDE.md` в соответствие с фактом: репозиторий `claude-brain` — дом управляющего
слоя Claude (router / mentor / observer / registry / `tools/`), продукта в нём нет
(`app/` / `db/` / `web/` отсутствуют). Убрать из файла продуктовые инструкции, у которых в
этом репозитории нет объекта, и поднять в начало файла указатель на онбординг-гайд, который
новая сессия должна прочитать первым.
## Контракт изменений {#ct}
- В начало файла (над разделом «ГЛАВНОЕ») добавляется однострочный выделенный указатель:
первое чтение для новой сессии — `docs/superpowers/router-mentor-wall-GUIDE.md`. Указатель —
кликабельная markdown-ссылка относительным путём.
- Все прочие сохраняемые разделы (`§0`, `§1`, остаток `§5`, `§9`) сохраняют смысл; правки —
только удаление продуктовых пунктов, перенумерация и починка внутренних ссылок на номера.
- Файл остаётся валидным markdown; нумерованный список `§5` идёт без пропусков (1..N).
## Что удаляется и что остаётся {#sc}
Удаляется (продуктовое, объекта в `claude-brain` нет):
- в шапке — заголовок «техконтекст Лидерры» (заменяется нейтральным «оперативная карта мозга»)
и блок-нота про ребрендинг названия/палитры/шрифтов;
- в строке статуса файла — формулировка про «отложенный разбор тела» (разбор выполнен);
- в `§5` — пункт про подключение внешнего DB-помощника к production-БД; пункт про запрет
фронтовых библиотек чужого стека в пользу Vue+Vuetify; пункт про инструмент a11y; пункт про
расширенный UI-пул из координирующего свода; пункт про правку `db/schema.sql`; резервный
пункт про motion-runtime.
Остаётся (машинерия управляющего слоя, актуальна для brain):
- `§0` нормативный квинтет; `§1` цепочка приоритета правил;
- в `§5` — запрет ПДн/секретов в коммитах (gitleaks); запрет дублей инструментов; правило
синхронизации этого файла с Pravila/Tooling; запрет закрывать открытые вопросы без команды;
канал правок через плагин `claude-md-management`; обязательность Superpowers-skill; правило
docs-only коммитов; правило `/graphify query` перед codebase-вопросом; правило coverage для
записи памяти;
- `§9` история версий.
## Крайние случаи {#ec}
- Внутренние ссылки вида «§5 п.N» в шапке и внутри `§5` после перенумерации обязаны указывать на
актуальные номера (иначе появятся битые перекрёстные ссылки).
- Раздел `§9` пополняется датированной записью о выполненной чистке — без поднятия версий
нормативного квинтета (синхронизация версий Pravila/Tooling — отдельная задача владельца).
- Удаление продуктовых пунктов не должно задеть соседние сохраняемые пункты: правки `§5`
выполняются одним аккуратным контурным фрагментом.
## Конвенция и нумерация {#cv}
- `§5` перенумеровывается сквозной нумерацией 1..9 в порядке следования сохранённых пунктов.
- Внутренние перекрёстные ссылки на номера пунктов `§5` приводятся к новой нумерации
(правило-синхронизации, канал-правок, отсылки «flow п.N», «пп.N»).
- Терминология сохраняемых пунктов — «владелец» (вместо устаревшего «заказчик»), без иной
переформулировки смысла.
## Критерий приёмки {#cr}
- В начале файла присутствует строка-указатель на `router-mentor-wall-GUIDE.md`.
- В файле больше нет упоминаний продуктовых сущностей удалённых пунктов (внешний DB-помощник,
Vuetify-стек, инструмент a11y, ребрендинг-палитра, `db/schema.sql`, motion-runtime).
- `§5` — непрерывный список 1..9; внутренние ссылки на номера пунктов согласованы.
- В `§9` есть датированная запись о чистке.
```verified-context-json
[
{"id":"vc1","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
@@ -0,0 +1,71 @@
# Фикс наследия сплита: хардкод `app/` в инструментах прогона тестов
## Цель {#goal}
После разделения управляющего слоя из проекта Лидерра часть инструментов прогона тестов
осталась с жёстко прописанным путём `app/` — это подпапка layout'а Лидерры. В этом
репозитории папки `app/` нет: конфиг сюиты лежит в корне (`vitest.config.tools.mjs`).
Из-за хардкода прогон одного тест-файла через `tools/run-test-json.mjs` не находит конфиг,
возвращает `loadError`, и по-критерийный зелёный (`produce-criterion-greens`) выходит
никогда не зелёным. Цель — выбирать корень и конфиг сюиты ОТ КОРНЯ репозитория (как уже
делает `tools/produce-verify-receipt.mjs`), единым источником истины, и эмпирически
проверить, подписывает ли производитель verify-расписки расписку при дочернем прогоне сюиты
в этом окружении.
## Контракт buildVitestJsonArgs {#ct1}
Новая чистая экспортируемая функция в `tools/run-test-json.mjs`:
`buildVitestJsonArgs(testFile, gitCwd, exists)` → массив аргументов для `npx`:
`['vitest', 'run', testFile, '--root', <root>, '--config', <config>, '--reporter', 'json']`,
где `<root>` и `<config>` берутся из `resolveVitestConfig(gitCwd, exists)`. Параметр `exists`
инъектируется (для теста), по умолчанию — `existsSync`. Функция чистая: никакого исполнения,
никакого fs кроме инъектируемого предиката.
## Алгоритм {#al1}
1. `resolveVitestConfig` импортируется из `tools/produce-verify-receipt.mjs` — единый источник
выбора: есть `app/vitest.config.tools.mjs` → app-режим (`root=<repo>/app`); иначе корень
репозитория (`root=<repo>`, `config=<repo>/vitest.config.tools.mjs`).
2. `buildVitestJsonArgs` строит массив аргументов на основе результата (1).
3. I/O-функция `runVitestJson` вызывает `buildVitestJsonArgs(testFile, gitCwd)` и передаёт
результат в `execFileSync('npx', args, …)` вместо захардкоженного `app/`. Разбор stdout
(`parseVitestJson`) — без изменений.
## Крайние случаи {#ec1}
- Есть `app/vitest.config.tools.mjs` (layout Лидерры) → `root=<repo>/app`, config из `app`
обратная совместимость сохранена.
- Нет `app/`-конфига (этот репозиторий) → `root=<repo>`, config из корня.
- `exists` инъектируем — выбор детерминирован и тестируем без файловой системы.
## Конвенция заголовка {#cn1}
Шапка-комментарий модуля `run-test-json` сохраняет существующий стиль (назначение, анти-вакуум
SE-LB-1/11). Новая функция документируется одной строкой назначения над сигнатурой.
## Диагностика производителя расписки {#dg1}
Эмпирически проверить под текущим окружением: запуск `node tools/produce-verify-receipt.mjs`
печатает `signed GREEN` (дочерний прогон сюиты отработал — выбор пути достаточен) либо
`NOT signed: suite-not-passed` (дочерний прогон не отработал — выбор пути верен, но нужна
отдельная стратегия прогона). Наблюдаемый исход фиксирует, достаточно ли одного выбора пути.
## Граница задачи {#bd1}
В границах: миграция выбора конфига в `run-test-json` на `resolveVitestConfig` (через TDD) и
наблюдение исхода производителя расписки. ВНЕ границ: если дочерний прогон не отрабатывает —
сама стратегия прогона (чтение готового результата вместо своего прогона / неколлапсирующая
конфигурация пула воркеров) — отдельная задача; здесь не реализуется.
## Критерий приёмки {#cr1}
- В построении аргументов прогона в `tools/run-test-json.mjs` нет литерала `'app'`.
- `buildVitestJsonArgs` покрыт тестами: app-режим и корневой режим (через инъекцию `exists`).
- Полная сюита (`vitest.config.tools.mjs`) зелёная.
```verified-context-json
[
{"id":"ax1","kind":"EXTRACTED","ref":"tools/run-test-json.mjs","anchor":"export function runVitestJson"},
{"id":"ax2","kind":"EXTRACTED","ref":"tools/produce-verify-receipt.mjs","anchor":"export function resolveVitestConfig"}
]
```