валидатор config.yaml переехал в конвейер: у пайплайна свой скрипт

Решение 51 отдало OpenSpec конвейеру и честно оставило хвост: проверка формы и
сторож версии остались в docs.py, потому что своего скрипта у пайплайна не было
ни одного. Хвост не косметический — это ровно то состояние, против которого
написан весь канон: у файла два владельца, один заводит, другой проверяет, и
разойтись они могут молча.

252 строки переехали в av-dev-pipeline/skills/openspec/scripts/openspec.py: пять
проверок формы, сторож версии, сверка слепка с живым инструментом. Команды две —
check --dir <корень> и form; коды выхода общие со всеми скриптами av-dev. Из
docs.py удалены константы OPENSPEC_*, check_openspec, openspec_cli,
check_openspec_fresh, rules_keys и подкоманда openspec-form; про config.yaml он
больше не говорит ничего, кроме строки границы механизируемого — что форму
смотрит чужой скрипт. openspec/specs/ он по-прежнему знает: это дом темы
requirements и часть карты тем.

Переезд оплатился сразу, и не тем, чего ждали. Прежняя проверка требовала, чтобы
context называл docs/passport.md и CLAUDE.md, безусловно — то есть на проекте без
канона документов требовала ссылку на несуществующий файл. Пока код жил в скрипте
канона, допущение «канон есть» было незаметным: скрипт канона запускают там, где
канон есть. В скрипте конвейера то же допущение стало видно на первом прогоне.
Теперь адрес требуется только к существующему документу, отсутствие идёт строкой
«не проверялось» с названной ценой — без канона конвейер работает вслепую.

Заодно починен хвост от раскола плагинов: pyrefly project-includes в pyproject
всё ещё указывали на av-dev-pm. Линтер на явных файлах работал, а на обходе
проекта не проверял ничего.

Проверено пятью случаями: нет openspec (1), годный конфиг (0), опечатка в имени
артефакта под rules (1), проект без канона (0, с двумя строками «не
проверялось»), неизвестная команда (2).

Канон повышен до версии 10. Главное в записи — тихая потеря: форму раньше
проверял docs.py check заодно, теперь нужен отдельный шаг openspec.py check в
гейте, иначе незаменённый пример в config.yaml перестанет ловиться. Решение — 52.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-08-09 14:28:12 +03:00
co-authored by Claude Opus 5
parent 9453a218d1
commit fdadfb65ac
11 changed files with 534 additions and 358 deletions
+27
View File
@@ -3247,3 +3247,30 @@ JJJ): у профиля обязан быть один правильный от
кто о нём написал.** Канон описывал OpenSpec подробнее всех и потому казался
его владельцем; работает по нему конвейер, и слот принадлежит конвейеру.
## 52. Валидатор поехал за файлом: у конвейера появился свой скрипт (2026-08-09)
**АЕАКК. Названный остаток закрыт, и закрыт он ценой первого скрипта в
конвейере.** Решение 51 отдало OpenSpec конвейеру и честно оставило хвост:
проверка формы `config.yaml` и сторож версии остались в `docs.py`, потому что
своего скрипта у пайплайна не было ни одного. Хвост оказался не косметическим —
это ровно то состояние, против которого написан весь канон: **у файла два
владельца, один заводит, другой проверяет**, и разойтись они могут молча. 252
строки переехали в `av-dev-pipeline/skills/openspec/scripts/openspec.py`; в
`docs.py` от темы не осталось ни константы.
**Переезд оплатился сразу, и не тем, чего ждали.** Прежняя проверка требовала,
чтобы `context` называл `docs/passport.md` и `CLAUDE.md`, **безусловно** — то есть
на проекте без канона документов требовала ссылку на несуществующий файл. Пока
проверка жила в скрипте канона, допущение «канон есть» было незаметным: скрипт
канона запускают там, где канон есть. В скрипте конвейера то же допущение стало
видно на первом же прогоне. Теперь адрес требуется только к документу, который в
проекте есть, а его отсутствие идёт строкой «не проверялось» с названной ценой.
### Что из этого следует
177. **Неявное допущение видно из другого дома, а не изнутри своего.** «Канон
есть» было верно всюду, где код лежал, и потому не читалось как допущение
вовсе. Переезд — самый дешёвый способ его обнаружить: не разбор, а смена
места, из которого на код смотрят.