Files
dev-skills/decisions/28-slug-check-and-judge.md
T
av bf6a173115 журнал решений: разложен по теме на файл, метки решений стали номерами
- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель;
- буквенные метки решений заменены сквозными Р1–Р234, следствия получили
  префикс С при прежних номерах: схема букв выродилась до пятибуквенных и
  сломалась — `АЕАКЛ` была занята и темой 53, и темой 65;
- 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер
  означал тему, а слово стояло «решение», формулировка исправлена.
2026-08-13 12:40:56 +03:00

6.3 KiB
Raw Blame History

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> -->; нашлось это первой же попыткой ими воспользоваться. Пример в докстроке — тот же образец, что плейсхолдер в схеме.