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

10 KiB
Raw Blame History

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. Работа, переросшая свой тип, останавливается предложением, а не отказом. «Здесь нужно менять спеки» перекладывает классификацию на человека в момент, когда весь материал для неё у исполнителя. Стоп обязан принести названный тип, объяснение и закрытый список решений — иначе выбор делается вслепую или не делается вовсе, и работа доезжает до коммита не тем процессом.