# 12. Механическая проверка копий (2026-08-03) ## Что было Разделение плагинов оставлено ([тема 11](11-plugin-dependencies.md)), но цена его названа: пять симметричных контрактов в двух домах, два уже разошлись — форма журнала дефектов потеряла в копии поле «Причина», список читателей `docs/research/` потерял `specs`. Оба раза копия выглядела актуальной, и оба раза расхождение прошло мимо трёх ревью подряд. ## Решено **Р41. Копия допустима, но обязана быть дословной и помеченной.** Разметка — HTML-комментарии, невидимые в отрендеренном markdown: `` … `` и `` … ``. `scripts/copies.py` требует побайтового совпадения текста между маркерами. *Почему комментарии, а не манифест копий отдельным файлом:* маркер уезжает в репозиторий проекта вместе со скелетом, и там он **полезен** — говорит читателю, что у текста есть дом и правится он там. Манифест остался бы в маркетплейсе и проекту ничего не сказал. **Р42. Идентификатор строгий — буквы, цифры, дефис — и повторяется в закрывающем маркере.** Иначе документация о самом механизме объявляет дом и роняет проверку: это случилось на первом же прогоне, `README.md` объявил дом примером. Теперь пример пишется ``, угловые скобки под шаблон не подходят. **Р43. Ограда блока кода в сверку не входит.** В доме текст обрамлён своей ```, а в скелете тот же текст лежит внутри чужой, объемлющей ограды. Сверяется содержимое, а не разметка вокруг него. **Р44. Коды выхода — общий словарь** (0 сошлось, 1 расхождение, 2 разметка, 3 не тот каталог, 4 сбой). Третий скрипт репозитория, и третий по тем же кодам. ## Что из этого следует **С50. Помечены два контракта:** форма записи журнала дефектов (дом — конвейер ревью, копия — скелет канона; это кросс-плагинная пара) и «когда заводить ADR» (дом — канон, копия — его же скелет). Второй пришлось сперва **сделать** дословным: копия говорила «обязателен статус», дом — «обязателен статус „заменено на"», и это ровно тот класс, который и ищется. **С51. Чего проверка не ловит — копию, которую забыли пометить.** Помечать остаётся решением человека, и это названо в `README.md` вслух: иначе зелёный прогон читался бы как «копий больше нет». **С52. Дом без копий — расхождение, а не замечание.** Маркер, обещающий дисциплину, за которой не за чем следить, — такая же ложная запись, как разошедшаяся копия. **С53. Запись в журнал версий канона проверка не заменяет.** Она видит, что копия отстала, но не видит, что проект уже унёс старую версию к себе. Это остаётся на человеке и сказано в обоих домах.