журнал решений: разложен по теме на файл, метки решений стали номерами
- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# 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. Отказ читать документ — тоже граница покрытия, и её пишет сток.** Строку
|
||||
«этого не смотрел никто» некому подать снизу: проход, которого нет, отчёта не
|
||||
присылает.
|
||||
Reference in New Issue
Block a user