- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
10 KiB
63. Обслуживание — третий сценарий: у цикла SDD там нет входа (2026-08-13)
Задача, не меняющая поведения — тулчейн и сборка, зависимости, гит-хуки, перенос,
чистка, — шла полным циклом решения: propose, разметка, ревью дизайна,
чекпоинт, archive. Все пять шагов стоят на дельта-спеках, а у типа chore
дельта-спек нет по построению: тип определён через «наблюдаемое поведение не
меняется». Цикл не урезается ради дешевизны — он остаётся без входа, и change,
заведённый под такую задачу, пуст, а разметчик по нему называет не те темы.
Р222. Признак сценария — связка из двух проверок, и обе обязательны. Тип
записи предлагает (chore, реже fix, чьё исправление возвращает поведение к
уже записанному), отсутствие дельт подтверждает. Тип объявляет автор и может
ошибиться; отсутствие дельт — суждение исполнителя, и в одиночку оно
самообслуживающееся. Разошлись — стоп, а не выбор.
Р223. Размер признаком не стал намеренно. «Мелкая задача — короткий путь» это универсальная лазейка: скилл сам называет занижение метки и обход чекпоинта самым дешёвым способом «ускориться». Однострочная правка, меняющая поведение, идёт полным циклом; крупная чистка, не меняющая, — обслуживанием.
Р224. Планового стопа у сценария нет вовсе. Чекпоинт объясняет человеку выбор, а выбора здесь нет: что делать, сказано в записи, критерии приёмки дешёвые и проверяются командой. Объяснение свелось бы к пересказу задачи её же автору. Правило необратимого при этом действует полностью и срабатывает чаще, чем в двух других сценариях: выкладка, токены, хуки и чужие данные — обычное содержимое задач обслуживания.
Р225. Ревью идёт фиксированным планом, а разметчик не зовётся. Обе его оси
не определены: размер он выводит из артефактов change, сложность — из формы
решения, а незнакомая форма ушла в разведку ещё на первом шаге. План —
autotests (запуск гейта) и operations (сверка), плюс conventions с
техническим разбором, когда дифф трогает код, а не только оснастку:
review-code — единственный проход, который вообще говорит «здесь ошибка в
логике», и чистка без него проверена лишь на то, что она собирается.
requirements и security не смотрит никто, и это строка границ покрытия, а не
умолчание.
Р226. Найденная дельта — не поломка задачи, а обнаружение более широкого
типа. Стоп поэтому устроен как три шага, а не как доклад об отказе: назвать
тип, которым задача оказалась (fix — расходится с заявленным, feature —
снаружи появляется то, чего не было), объяснить человеку простым языком, что
нашлось, и дать два решения — переформулировать запись и решать её процессом
того типа следующим прогоном либо прекратить работу. Третьего решения, «доделать
как обслуживание», нет: оно и есть молчаливое изменение поведения. Тип при этом
исполнитель предлагает, а меняет av-dev-tasks:tasks и только после ответа
— иначе исполнитель назначает себе другой процесс и другую глубину проверки сам.
Р227. Триггеры ADR у обслуживания работают стоп-признаком, а не поводом
завести запись. Список источников ADR канон закрыл двумя — архивный
design.md и записка разведки, — и обслуживание не производит ни того ни
другого. Значит дорогой откат, намеренный отказ и пересмотр прежнего решения
означают здесь одно: сценарий выбран неверно, работа идёт разведкой, где решение
проходит чекпоинт вариантов и получает законный источник. Третьего источника
заводить не понадобилось.
Р228. Синк документации — главный шаг сценария, а не остаток. Обслуживание
не меняет поведения, значит почти всё, что оно меняет, — документация: команды,
шаги гейта, зависимости, пути, имя ветки, место механизации правила. Ровно эти
факты doc-code-drift и сверяет с кодом.
Р229. Состав гейта сверяется отдельно от цвета, а чем именно — решает
проект. Красный, ставший зелёным, виден; «проверок стало на две меньше, обе
зелёные» не виден ничем, а это единственное место конвейера, где инструмент
проверяет сам себя. Что считается составом, объявляет проект семантикой гейта в
CLAUDE.md; не объявил — строка доклада «сверен только цвет», а не догадка.
Р230. Своей capability тулчейн не получает, и своего документа канона тоже.
Граница возможностей и сопровождения проходит по тому, кто наблюдает: гейт
наблюдаем мы, а не пользователь сервиса. Всё, что попало бы в
docs/toolchain.*, уже расписано по домам — CLAUDE.md (команды, семантика
гейта, запреты, пути), architecture.* (зависимости, окружение, выкладка),
conventions.* (механизированное), ROADMAP.md (работы). Проекту, которому
этого мало, канон уже даёт механизм и без новой строки в раскладке: список тем
открытый, и свой документ заводит свою тему. Цена такой темы названа — она
попадает в план каждого прогона и на большинстве задач молчит.
Что из этого следует
С212. Короткий путь оправдан отсутствием входа, а не дешевизной. «Тут можно проще» — начало любой деградации; «этому шагу нечего обрабатывать» — проверяемое утверждение, и проверяется оно тем же признаком, что и переход между сценариями.
С213. Признак, объявляемый автором, и признак, выводимый исполнителем, держат друг друга. Первый один — ошибается в постановке; второй один — самообслуживающийся. Разрешать расхождение в чью-то пользу нельзя: это стоп.
С214. Сценарий без стопа для человека требует более жёсткого правила необратимого, а не более мягкого. Стопа, на котором «ой» заметили бы, там нет.
С215. Инструмент, проверяющий сам себя, проверяется по составу, а не по исходу. Зелёный гейт после правки гейта не значит ничего.
С216. Место для нового документа ищется не по теме, а по бездомному факту. Тема «тулчейн» звучит убедительно, а фактов без дома за ней не оказалось — значит документ был бы вторым домом четырёх чужих.
С217. Работа, переросшая свой тип, останавливается предложением, а не отказом. «Здесь нужно менять спеки» перекладывает классификацию на человека в момент, когда весь материал для неё у исполнителя. Стоп обязан принести названный тип, объяснение и закрытый список решений — иначе выбор делается вслепую или не делается вовсе, и работа доезжает до коммита не тем процессом.