итог аудита: запись 59, карта домов про конвенции, план

- дом «что механизировано» называл conventions/README.md, хотя документ канона
  живёт файлом или каталогом; копия пересобрана resync
- запись 59: находки одного рода — правил механику, не правил описывающее её
  вовне. Пять выводов, включая «скелет не описывает, а порождает»
- в план добавлена пачка мелочи, оставленной сознательно, и сказано, что
  бумажная часть закрыта

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-08-09 18:48:21 +03:00
co-authored by Claude Opus 5
parent 12882911a9
commit 12b77c3393
4 changed files with 77 additions and 4 deletions
+54
View File
@@ -3593,3 +3593,57 @@ change нет — берём источником актуальные спек
ясным входом скилл не нужен, его находит описание. Скилл заводят там, где ясным входом скилл не нужен, его находит описание. Скилл заводят там, где
надо решить, кого звать, что передать, в каком объёме и что делать с надо решить, кого звать, что передать, в каком объёме и что делать с
результатом. результатом.
## 59. Аудит четырьмя сабагентами: описания отстают от механики молча (2026-08-09)
Реорганизация была объявлена законченной «на бумаге», и я запустил по аудитору на
плагин — консистентность, самостоятельность, интегрируемость. Гейт при этом был
зелёным и остался честен: он проверяет ровно то, что умеет.
Нашлось около полусотни расхождений, и они **одного рода**. Каждый раз я правил
механику — вырезал спринт из скрипта, переименовал скиллы, перенёс судей — и
каждый раз не правил то, что механику **описывает вовне**: скелеты документов,
докстринги скрипта, уставы агентов, манифесты плагинов, README.
Самое дорогое: **скелет `CLAUDE.md` уносил слоты спринта в каждый новый проект**
через две недели после отмены спринтов. Скелет не описывает, а порождает: его
отставание не читается, оно исполняется.
**Механизм приоритета не запускался ни разу.** `--section` у `move` был
обязательным, а все три места, где груминг предписывает расстановку, дают команду
без него — usage error. Скилл написан, прогнан не был, и разницы между рабочим и
бумажным процессом не видно, пока его не запустят.
**Правило границы я же и нарушал.** Восемь дословных копий «путь в дерево чужого
плагина не пишется никогда» — и пять мест, где путь написан, одно из них строкой
выше собственного «пути туда конвейер не выносит».
Отдельно: **у описания плагина было два дома**, и три из четырёх разошлись. Класс
закрыт не дисциплиной, а машиной — `frontmatter.py` теперь сверяет `plugin.json` с
`marketplace.json`, а гейт разбужен на `*.json`.
Правки разобраны четырьмя пропусками по одному сабагенту на пропуск, с проверкой
результата каждого: скелеты и канон, исполнимость учёта задач, границы и стыки,
словарь и манифесты. Скриптовые правки проверены поведением на фикстурах, включая
настоящий git-репозиторий для `reopen`.
**Чего аудит не даёт.** Это было чтение. Ни один скилл по-прежнему не исполнялся
на живом проекте, и находки вроде «чекпоинт вырождается в ритуал» такой проверкой
не берутся по построению.
### Что из этого следует
195. **Механика проверяется прогоном, описание — только чтением.** Поэтому после
каждой правки механики отстают именно описания, и отстают молча. Меняя
механику, ищи её отражения поимённо: скелеты, докстринги, уставы агентов,
манифесты, README.
196. **Скелет дороже документа: он не описывает, а порождает.** Отставший
документ врёт одному читателю; отставший скелет уезжает в каждый новый
проект и становится там обязательным.
197. **Копия правила не заставляет его исполнять.** Правило исполняется там, где
его проверяет машина или чужой глаз; восемь копий на видном месте не
помешали автору нарушить его пятью строками.
198. **Бумажный процесс неотличим от рабочего, пока его не запустили.** Команда,
которую никто не набрал, может не существовать вовсе — и именно так и было.
199. **Два дома у факта расходятся не когда-нибудь, а сразу.** Из четырёх пар
описаний плагина совпала одна — та, которую с момента заведения не правили.
+21 -2
View File
@@ -23,6 +23,9 @@
Канон документов — **версия 12**. Живые проекты стоят на 2–3 и на плагине Канон документов — **версия 12**. Живые проекты стоят на 2–3 и на плагине
`av-dev-pm`, которого больше нет. `av-dev-pm`, которого больше нет.
Бумажная часть закрыта аудитом четырёх плагинов и четырьмя пропусками правок
(DECISIONS, запись 59). Всё, что ниже, проверяется **только на живом коде**.
## 1. Живые проекты — вернуть в рабочее состояние ## 1. Живые проекты — вернуть в рабочее состояние
Блокирует всё остальное: под текущим каноном не стоит ни один проект, и ни один Блокирует всё остальное: под текущим каноном не стоит ни один проект, и ни один
@@ -78,7 +81,7 @@
канонизация в транзакции, `-1 >= -1`. Цена и ожидаемый исход — REMAINING, канонизация в транзакции, `-1 >= -1`. Цена и ожидаемый исход — REMAINING,
«Главный незакрытый риск» «Главный незакрытый риск»
## 4. Пайплайн: что осталось после `resolve` ## 4. Конвейер: что осталось после `resolve`
Сам скилл написан (`av-dev-code:resolve`, два чекпоинта, ветка разведки), Сам скилл написан (`av-dev-code:resolve`, два чекпоинта, ветка разведки),
`task-batch` удалён. Осталось то, что на бумаге не проверяется: `task-batch` удалён. Осталось то, что на бумаге не проверяется:
@@ -91,7 +94,23 @@
`rules.design`). **На живом проекте это ни разу не работало:** неизвестно, `rules.design`). **На живом проекте это ни разу не работало:** неизвестно,
хватает ли двух артефактов, чтобы объяснение не пришлось дописывать руками хватает ли двух артефактов, чтобы объяснение не пришлось дописывать руками
## 5. Обкатка ## 5. Мелочь, оставленная аудитом сознательно
Одной пачкой, когда будет повод открыть эти файлы, — не раньше:
- [ ] «чекпоинт» несёт третий смысл — точка наблюдаемости в коде
(`finding-contract.md`, `promote.md`). Слово занято дважды по своему же
правилу, но домены разные, и переименование здесь может выйти дороже
путаницы
- [ ] закрытый словарь `shared/language.md` не содержит ни «конвейера», ни
«чекпоинта», ни «груминга» — трёх рабочих терминов репозитория. Список
объявлен закрытым, и пополнять его на ходу нельзя
- [ ] `move <слаг>` без флагов теперь легален и значит «в конец своей секции» —
осмысленная операция, но в прозе не описана нигде
- [ ] `reopen` печатает «позиция это приоритет» и для целей роадмапа, где секции
очередью не являются
## 6. Обкатка
- [ ] один-два цикла healthlog на новом процессе. Наблюдения к первой обкатке - [ ] один-два цикла healthlog на новом процессе. Наблюдения к первой обкатке
два: не выродились ли «границы покрытия» в шаблон (REMAINING, «Открытые два: не выродились ли «границы покрытия» в шаблон (REMAINING, «Открытые
+1 -1
View File
@@ -33,7 +33,7 @@ color: yellow
| что необратимо | `CLAUDE.md`**не** `architecture.md` | | что необратимо | `CLAUDE.md`**не** `architecture.md` |
| единые точки проекта | `architecture.md` | | единые точки проекта | `architecture.md` |
| имя основной ветки, `testdata`, временный каталог | `CLAUDE.md` | | имя основной ветки, `testdata`, временный каталог | `CLAUDE.md` |
| что уже механизировано правилом | `conventions/README.md` | | что уже механизировано правилом | `conventions.*`, раздел «Механизировано» |
<!-- /копия: карта-домов --> <!-- /копия: карта-домов -->
**Факта нет в карте — дома у него нет**, и это находка о самом каноне, а не о **Факта нет в карте — дома у него нет**, и это находка о самом каноне, а не о
+1 -1
View File
@@ -466,7 +466,7 @@ kebab-case.** Причина не эстетическая: имя файла с
| что необратимо | `CLAUDE.md`**не** `architecture.md` | | что необратимо | `CLAUDE.md`**не** `architecture.md` |
| единые точки проекта | `architecture.md` | | единые точки проекта | `architecture.md` |
| имя основной ветки, `testdata`, временный каталог | `CLAUDE.md` | | имя основной ветки, `testdata`, временный каталог | `CLAUDE.md` |
| что уже механизировано правилом | `conventions/README.md` | | что уже механизировано правилом | `conventions.*`, раздел «Механизировано» |
<!-- /дом: карта-домов --> <!-- /дом: карта-домов -->
## Пустое называется пустым ## Пустое называется пустым