проверка копий правил: маркеры дома и копии, побайтовая сверка
Разделение плагинов оставлено, цена названа: пять симметричных контрактов в двух домах, два уже разошлись — форма журнала дефектов потеряла в копии поле «Причина», список читателей docs/research/ потерял specs. Оба раза копия выглядела актуальной и прошла мимо трёх ревью. scripts/copies.py требует побайтового совпадения текста между маркерами. Комментарии, а не манифест копий: маркер уезжает в репозиторий проекта вместе со скелетом и там полезен — говорит, что у текста есть дом. Идентификатор строгий и повторяется в закрывающем маркере. Иначе документация о самом механизме объявляет дом и роняет проверку: это случилось на первом же прогоне, README объявил дом примером. Ограда блока кода в сверку не входит: в доме текст обрамлён своей оградой, в скелете лежит внутри чужой, объемлющей. Помечены два контракта. Второй пришлось сперва сделать дословным: копия говорила «обязателен статус», дом — «обязателен статус „заменено на“». Проверка не ловит копию, которую забыли пометить, — это сказано вслух, иначе зелёный прогон читался бы как «копий больше нет». И не заменяет запись в журнал версий канона: она видит, что копия отстала, но не что проект унёс старую версию. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -138,3 +138,32 @@ uv run pyrefly check # типы
|
||||
`av-dev-backlog` из проверки исключён намеренно: плагин помечен устаревшим и
|
||||
живёт до перевода последнего проекта, после чего удаляется целиком. Правки в
|
||||
замороженный код — риск без выгоды.
|
||||
|
||||
## Проверка копий правил
|
||||
|
||||
«Один факт — один дом» держалось вниманием и трижды не удержалось. Копии всё же
|
||||
нужны: скелеты канона уезжают в репозиторий проекта и обязаны там что-то
|
||||
говорить. Значит копия допустима, но **дословная и помеченная**:
|
||||
|
||||
```
|
||||
uv run python scripts/copies.py # 0 сошлось, 1 расхождение, 2 разметка, 3 не тот каталог
|
||||
```
|
||||
|
||||
Разметка — HTML-комментарии, невидимые в отрендеренном markdown:
|
||||
|
||||
```
|
||||
<!-- дом: <id> --> …текст… <!-- /дом: <id> -->
|
||||
<!-- копия: <id> из <путь к дому> --> …тот же текст… <!-- /копия: <id> -->
|
||||
```
|
||||
|
||||
Идентификатор — буквы, цифры и дефис, и он повторяется в закрывающем маркере.
|
||||
Строгость нужна ровно затем, чтобы этот абзац сам не объявил дом: `<id>` под
|
||||
шаблон не подходит.
|
||||
|
||||
Сверяется текст между маркерами; ограда блока кода и пустые строки по краям в
|
||||
сверку не входят. Маркер, уехавший в проект вместе со скелетом, там полезен: он
|
||||
говорит, что у текста есть дом и правится он там.
|
||||
|
||||
Скрипт ловит четыре вещи: копия разошлась с домом (с диффом), копия указывает не
|
||||
на тот файл, дом остался без копий, разметка сломана. Чего он **не** ловит —
|
||||
копию, которую забыли пометить: помечать — по-прежнему решение человека.
|
||||
|
||||
Reference in New Issue
Block a user