# 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. Неявное допущение видно из другого дома, а не изнутри своего.** «Канон есть» было верно всюду, где код лежал, и потому не читалось как допущение вовсе. Переезд — самый дешёвый способ его обнаружить: не разбор, а смена места, из которого на код смотрят.