- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
66 lines
6.3 KiB
Markdown
66 lines
6.3 KiB
Markdown
# 28. Слаг подкреплён проверкой, обещанный судья заведён (2026-08-05)
|
||
|
||
Два пункта заметок, оба про одно: правило было записано и никем не исполнялось.
|
||
|
||
**Р113. Правило про английские слаги существовало и не проверялось ничем.**
|
||
`canon.md` говорил «слаги файлов, capability и задач — английские, kebab-case»
|
||
одной строкой в хвосте раскладки; `docs.py` имён файлов не смотрел вовсе. Итог
|
||
предсказуем и нашёлся в самом плагине: единственный пример ADR в скилле `docs`
|
||
назывался `ADR-2026-08-03-ochered-tablicej`. Раскладка канона при этом
|
||
приглашала к нарушению — в схеме стояли плейсхолдеры `<тема>.md`, то есть слово
|
||
«тема» по-русски там, где надо было писать `<slug>`.
|
||
|
||
Разрез проверки — по тому, что машина знает точно: кириллица в имени и не-kebab-case
|
||
**жёстко**, форма `ADR-ГГГГ-ММ-ДД-slug.md` жёстко, транслит **эвристикой**, то есть
|
||
замечанием. Набор маркеров транслита подобран так, чтобы **ложных срабатываний не
|
||
было вовсе**: выброшены `ost` (ловит `post`, `cost`), `sch` (`schema`), `ya`
|
||
(`yaml`), `nost` (`nostalgia`), хвост `ii` (`radii`). Цена названа: `sostoyanie-partii`
|
||
проходит мимо. Правило, краснеющее на правде, приучает пролистывать весь блок —
|
||
это дороже пропуска.
|
||
|
||
**Р114. Канон три версии обещал судью, которого не было.** В `canon.md` есть
|
||
таблица «Что проверяет машина, а что человек», и её правая колонка — смысловой
|
||
дубль, поведение в `architecture.md`, протухший факт, достаточность честной
|
||
строки — описывала работу, которую никто не делал: скилл `canon` предлагал
|
||
агенту судить об этом самому, то есть проверять то, что он же и писал. Заведены
|
||
`doc-consistency` и `doc-code-drift`, а колонка получила третий столбец с именем
|
||
судьи: обещание без адресата и есть тот способ, которым правило перестаёт
|
||
исполняться.
|
||
|
||
**Р115. Агентов двое, разрез по глубине, а не по охвату.** Тот же довод, что
|
||
развёл `task-form` и `doc-wording`: сверка текста с текстом дёшева и зовётся на
|
||
каждом синке документации, сверка с кодом требует читать репозиторий и зовётся
|
||
раз в спринт. Слитый агент делает дешёвую половину редкой либо дорогую —
|
||
поверхностной.
|
||
|
||
**Р116. Перечень фактов, сверяемых с кодом, закрыт.** Имя основной ветки,
|
||
команды, пути, зависимости поимённо, настройки с числовым значением, единые
|
||
точки проекта, capability, проверяемые инварианты. «Сверить архитектуру с кодом»
|
||
— задача без дна, и агент, которому её поставили, выдаёт правдоподобную труху
|
||
вместо находок. Отсюда и форма доклада `doc-code-drift`: он начинается
|
||
**таблицей проверенного**, а не находками, — по ней видно, чего он не смотрел.
|
||
|
||
**Р117. Карта домов уехала в устав агента помеченной копией.** Устав ссылался на
|
||
файл плагина, а агент работает в репозитории проекта, где плагина может не быть.
|
||
Копия дословная, под маркерами `дом`/`копия`, и `copies.py` теперь её сторожит —
|
||
механизм для этого в репозитории уже был.
|
||
|
||
## Что из этого следует
|
||
|
||
**С105. Записанное правило без проверки не исполняется даже автором.** Слаг ADR
|
||
нарушен в единственном примере, который плагин показывает как образец. Тот же
|
||
класс, что «прозаический триггер ADR дал 6 записей на 43 изменения»: умолчание
|
||
становится отличимым только когда его проверяют.
|
||
|
||
**С106. Плейсхолдер — часть правила.** `<тема>.md` в схеме раскладки перевешивал
|
||
строку правила, стоявшую двумя абзацами ниже: образец читают вместо текста.
|
||
|
||
**С107. Эвристика настраивается по ложным срабатываниям, а не по полноте.** Ноль
|
||
ложных при одном пропуске лучше, чем наоборот: пропуск стоит одной ненайденной
|
||
находки, ложное срабатывание — доверия ко всему блоку.
|
||
|
||
**С108. Докстрока разошлась с кодом ровно там, где её читают.** `copies.py`
|
||
показывал закрывающие маркеры как `<!-- /дом -->`, а требовал `<!-- /дом: <id>
|
||
-->`; нашлось это первой же попыткой ими воспользоваться. Пример в докстроке —
|
||
тот же образец, что плейсхолдер в схеме.
|