- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
2.5 KiB
52. Валидатор поехал за файлом: у конвейера появился свой скрипт (2026-08-09)
Р200. Названный остаток закрыт, и закрыт он ценой первого скрипта в
конвейере. Решение 51 отдало OpenSpec конвейеру и честно оставило хвост:
проверка формы config.yaml и сторож версии остались в docs.py, потому что
своего скрипта у пайплайна не было ни одного. Хвост оказался не косметическим —
это ровно то состояние, против которого написан весь канон: у файла два
владельца, один заводит, другой проверяет, и разойтись они могут молча. 252
строки переехали в av-dev-pipeline/skills/openspec/scripts/openspec.py; в
docs.py от темы не осталось ни константы.
Переезд оплатился сразу, и не тем, чего ждали. Прежняя проверка требовала,
чтобы context называл docs/passport.md и CLAUDE.md, безусловно — то есть
на проекте без канона документов требовала ссылку на несуществующий файл. Пока
проверка жила в скрипте канона, допущение «канон есть» было незаметным: скрипт
канона запускают там, где канон есть. В скрипте конвейера то же допущение стало
видно на первом же прогоне. Теперь адрес требуется только к документу, который в
проекте есть, а его отсутствие идёт строкой «не проверялось» с названной ценой.
Что из этого следует
С177. Неявное допущение видно из другого дома, а не изнутри своего. «Канон есть» было верно всюду, где код лежал, и потому не читалось как допущение вовсе. Переезд — самый дешёвый способ его обнаружить: не разбор, а смена места, из которого на код смотрят.