# 40. Три категории документов: не всякий документ — тема ревью (2026-08-07) Решение 36 объявило: **каждый документ проекта — тема ревью**. Правило дало открытый список тем и сделало `docs/` конфигурацией конвейера — это работает и остаётся. Но оно же оказалось неверным ровно наполовину, и потому вредным целиком. Паспорт и схему хранилища ревью читает, но темами они не являются: по ним нельзя сказать «в этом изменении сделано не так», они задают границу, по которой судит **чужая** тема. Журнал решений и журнал наблюдений ревью изменения не нужны вовсе: ADR объясняет прошлое решение, а не предъявляет требование к изменению. Ломалось это механически. Разметчик, применявший правило буквально, обязан был либо завести фантомные темы `passport`, `adr`, `database`, `research` и продублировать ими работу тем `architecture` и `operations`, либо потерять четыре документа молча. Обе ветки случались; в собственном образце плана разметчика `docs/passport.md` не попадал ни строкой, а его же обязательная арифметика покрытия («документов найдено N, все N разнесены») при этом не сходилась. **Р162. Разрез один и проверяемый: можно ли по документу сказать «в этом изменении сделано не так».** Отсюда три категории. **Тема** — да, прямо (`conventions`, `security`, `architecture`, свои документы проекта). **Источник темы** — нет, но он задаёт границу для чужой темы (`passport`, `database`, `CLAUDE.md`, `openspec/specs/`). **Процессный документ** — нет, он про то, как мы работаем (`tasks/`, `review.*`, `adr.*`, `research.*`, `.pm.json`). **Р163. Открыта одна категория из трёх.** `источник` и `процессный` перечислены поимённо и проектом не пополняются; открыта только `тема`. Прежняя формулировка «не темы ровно две» противоречила собственной раскладке канона — `.pm.json` был третьим, и правило-исправление жило в чужом плагине, в коде `docs.py`. Теперь документ, которого нет в раскладке, — однозначно своя тема проекта, и решать нечего. **Р164. «Не судит по нему» и «не открывает» — разные вещи.** `docs/review.*` проходы читают на каждом прогоне: там вопросы по темам, журнал дефектов, типовые узлы, типовые ложноположительные. Это чтение конвейером **своей обвязки**, а не критерия. `adr/`, `research/` и `tasks/` не открывает никто. **Р165. Цена решения записана, а не подразумевается.** Расхождение изменения с записанным решением прогоном больше не ловится — это работа сверки документации между спринтами. Измеренные числа проекта из ревью тоже ушли: проход, опирающийся на число, обязан **снять его сам, на этом прогоне**, и приложить команду замера. Обе потери идут обязательными строками в границы покрытия каждого прогона, и пишет их триаж — не проход, потому что проход о том, чего в конвейере нет, пожаловаться не может. ## Что из этого следует **С148. Плоское правило, верное наполовину, хуже двух правил.** Оно не даёт половине случаев легального ответа, и исполнитель выбирает между двумя плохими ветками — фантомной сущностью и молчащей потерей. Заметно это становится не на определении, а на первом же образце вывода. **С149. Открытым делается одно множество, а не все.** Открытый список ценен тем, что в него попадает незнакомое; если открыты все категории, незнакомое попадает в произвольную. **С150. Отказ читать документ — тоже граница покрытия, и её пишет сток.** Строку «этого не смотрел никто» некому подать снизу: проход, которого нет, отчёта не присылает.