Проходы берут вход, потолки и состав половин из метки, а на прогоне обслуживания
метки нет — оба взяли бы их наугад и молча по-разному. План сценария теперь
называет глубину прямо: basics — сверка с потолком 2, code — вход small, потолки
3 и 2 и включённая третья половина.
Третья половина code включена не для полноты: без неё security и architecture не
смотрит вообще никто. Границы покрытия переписаны честно — requirements не
смотрел никто, две другие темы сверены только против записанных инвариантов и
только если проход по коду шёл.
Уставы review-code и review-basics знают прогон без метки, их описания тоже;
триаж знает, что план сценария встаёт на место плана разметки. В скилле задач
уточнено: тип не выбирает метку, но предлагает сценарий, а меняется он командой
edit --type, а не исполнителем по ходу. Плюс язык: заголовок, два оборота и
right-size на русском.
Задача, не меняющая поведения (тулчейн, зависимости, сборка, гит-хуки, перенос,
чистка), шла полным циклом решения. Все его шаги стоят на дельта-спеках, а у
chore их нет по построению: цикл не урезан ради дешевизны, он остаётся без входа.
Признак — связка: тип записи предлагает, отсутствие дельт подтверждает, а
расхождение признаков это стоп. Размер признаком не стал намеренно: «мелкое —
коротким путём» и есть самая дешёвая лазейка. Планового стопа у сценария нет
вовсе — объяснять человеку нечего, выбора там не делают; правило необратимого
поэтому действует жёстче, чем в двух других.
Ревью идёт фиксированным планом без метки и без разметчика — autotests и
operations, плюс conventions с техническим разбором, когда дифф трогает код.
Конвейер получил раздел «Прогон без change»: он написан вокруг change, и без
этой строки вызов упирался бы в предпосылку OpenSpec. Главный шаг сценария —
синк документации, а триггеры ADR работают стоп-признаком: своего источника у
обслуживания нет, и решение с ценой уходит в разведку.
Имя `.pm.json` пережило плагин `av-dev-pm` на два месяца и указывало в пустоту.
Правило, которое из этого вынуто: имя служебного файла — имя плагина, который
его завёл, и по нему же владельца узнают.
- `docs/.pm.json` → `docs/.docs.json`, запись 13 журнала. Прежнее имя docs.py
не читает намеренно: по этому числу upgrade решает, какие записи применять,
и два дома разъехались бы молча ровно там, где это дороже всего. Вместо
совместимости — узнавание: check видит старый файл и печатает готовую git mv
- у каталога задач появилась своя версия формата — ключ `tasks` в
`.tasks.json`, свой журнал версий и своё повышение. До сих пор её не было
вовсе, хотя docs.py в комментарии уверенно на неё ссылался: описание
опережало механику ровно так, как сказано в решении 195
- число своё, а не копия канонического: плагин ставится в одиночку, и у
проекта без docs/ версии канона нет — сверять было бы не с чем
- конфиг задач стал обязательным (init и adopt apply пишут его всегда), check
сверяет число, `check --fix` его не приписывает: приписанное объявляло бы
каталог приведённым к формату, шагов которого никто не делал
- переезды 11 и 12 в новый журнал задним числом не переписаны — версия 1
велит догнать формат по журналу канона, называя признаки отставания
поимённо (каталог в docs/tasks/, живой SPRINT.md)
- запись 60 в DECISIONS со следствиями 200–203; отдельно разведено с решением
F, где `.docs.json` отвергался как указатель путей: отвергнут был указатель,
а не имя
- «готовность» значила и «запись можно брать», и «что считается сделанным»;
второй смысл стал «определением сделанного» — своё же правило про занятое
слово запрещало это прямо
- «пайплайн» жил в 24 местах вне журналов при том, что DECISIONS фиксирует
его уход «целиком»; рабочее имя — конвейер
- «чекпоинт» в review значил стадию и проход, в resolve — остановку человеку;
слово оставлено за остановкой
- у описания плагина было два дома, и три из четырёх уже разошлись. Сведены,
и класс закрыт машиной: frontmatter.py сверяет plugin.json с marketplace,
гейт разбужен на *.json
- README врал про односторонние зависимости и терял healthcheck на диаграмме
- перечень агентов в REMAINING отстал на два поколения
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Правило границы моё, копий восемь — и нарушал его я же.
- путь в дерево чужого плагина снят из пяти мест; маркер копии, уезжающий
в проект скелетом, оставлен, но сказано, что сама пара маркеров не едет
- короткое имя чужого скилла в четырёх местах стало полным
- стык «урожай ревью → задачи» не был назван ни с одной стороны, хотя
механика написана с обеих; теперь назван, с веткой «плагина нет»
- resolve звал av-dev-git:commit без строки доклада и пересказывал формат
коммита, нарушая собственное «ссылайся, не пересказывай»
- doc-wording обещал момент вызова, которого не исполнял никто. Правило:
звонящий — тот, кто только что писал текст. Вызов появился шагом в docs,
init, adopt и upgrade; healthcheck по-прежнему его не зовёт
- openspec.py искал SHALL по всему файлу, а образец даёт его в context —
проверка молчала ровно в том случае, ради которого написана
- фаза 2 review-rubric была недостижима; проход стал судить задуманное,
а не код, и это сходится с тем, что о нём говорит конвейер
- rules.tasks в образце конфига, ветка «записи задачи нет» у review-scope,
возвраты на чекпоинт в схеме resolve, старшинство правила дельта-спек
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
doc-consistency и doc-code-drift звались шагом сессии между спринтами.
Сессия стала грумингом, груминг судит задачи, а не документы, и звать
чужих агентов не вправе — они в av-dev-docs. На живом проекте их не
звал бы никто, кроме разовых adopt и upgrade.
Момент назван у владельца. Разрез с canon check проверяемый: машина
сверяет форму, healthcheck — утверждения.
Почему скилл, а не просто описания агентов: двоим нужна оркестровка —
позвать обоих на весь канон разом, передать doc-code-drift раздел
запретов, разобрать урожай порциями, назвать границы покрытия и кого
именно позвал. Этого агент о себе не знает.
doc-wording внутрь не взят: ему оркестровка не нужна, и ритм другой —
он нужен там, где текст только что писали.
Заодно из shared/plugin-boundary.md и README убран счётчик скиллов: он
протух дважды за день.
Имя описывало устройство, а не предмет: «пайплайн» говорит, что внутри
конвейер, — а плагин занят кодом по задачам, и с появлением чекпоинтов
он уже не конвейер в чистом виде. Набор имён стал параллельным:
docs / tasks / code / git, каждое называет материал.
Заодно review-pipeline стал review — слово ушло из плагина целиком, а
не наполовину; скиллы выровнялись: resolve / review / openspec.
Журнал версий канона переписан вместе со всеми, DECISIONS.md — нет.
Разрез по типу высказывания, а не файла: наблюдение и причина
неприкосновенны, предписание и адрес обязаны оставаться исполнимыми.
Запись версии 10 велит «проверить, что плагин av-dev-pipeline
установлен» — проект, дошедший до неё, выполнил бы невыполнимое.