resolve: третий сценарий — обслуживание, у цикла SDD там нет входа

Задача, не меняющая поведения (тулчейн, зависимости, сборка, гит-хуки, перенос,
чистка), шла полным циклом решения. Все его шаги стоят на дельта-спеках, а у
chore их нет по построению: цикл не урезан ради дешевизны, он остаётся без входа.

Признак — связка: тип записи предлагает, отсутствие дельт подтверждает, а
расхождение признаков это стоп. Размер признаком не стал намеренно: «мелкое —
коротким путём» и есть самая дешёвая лазейка. Планового стопа у сценария нет
вовсе — объяснять человеку нечего, выбора там не делают; правило необратимого
поэтому действует жёстче, чем в двух других.

Ревью идёт фиксированным планом без метки и без разметчика — autotests и
operations, плюс conventions с техническим разбором, когда дифф трогает код.
Конвейер получил раздел «Прогон без change»: он написан вокруг change, и без
этой строки вызов упирался бы в предпосылку OpenSpec. Главный шаг сценария —
синк документации, а триггеры ADR работают стоп-признаком: своего источника у
обслуживания нет, и решение с ценой уходит в разведку.
This commit is contained in:
av
2026-08-13 09:22:50 +03:00
parent f22e7ed829
commit 42849c13eb
10 changed files with 579 additions and 47 deletions
+84
View File
@@ -3820,3 +3820,87 @@ change по нему не будет никогда, — и такое реше
211. **Шаг, собирающий пачку, стоит после последнего, кто в неё кладёт.** Вычитка
на шаге записи проверила бы половину написанного, а после коммита — уже
историю.
## 63. Обслуживание — третий сценарий: у цикла SDD там нет входа (2026-08-13)
Задача, не меняющая поведения — тулчейн и сборка, зависимости, гит-хуки, перенос,
чистка, — шла полным циклом решения: `propose`, разметка, ревью дизайна,
чекпоинт, `archive`. Все пять шагов стоят на дельта-спеках, а у типа `chore`
дельта-спек **нет по построению**: тип определён через «наблюдаемое поведение не
меняется». Цикл не урезается ради дешевизны — он остаётся без входа, и change,
заведённый под такую задачу, пуст, а разметчик по нему называет не те темы.
**Признак сценария — связка из двух проверок, и обе обязательны.** Тип записи
предлагает (`chore`, реже `fix`, чьё исправление возвращает поведение к уже
записанному), отсутствие дельт подтверждает. Тип объявляет автор и может
ошибиться; отсутствие дельт — суждение исполнителя, и в одиночку оно
самообслуживающееся. Разошлись — стоп, а не выбор.
**Размер признаком не стал намеренно.** «Мелкая задача — короткий путь» это
универсальная лазейка: скилл сам называет занижение метки и обход чекпоинта самым
дешёвым способом «ускориться». Однострочная правка, меняющая поведение, идёт
полным циклом; крупная чистка, не меняющая, — обслуживанием.
**Планового стопа у сценария нет вовсе.** Чекпоинт объясняет человеку выбор, а
выбора здесь нет: что делать, сказано в записи, критерии приёмки дешёвые и
проверяются командой. Объяснение свелось бы к пересказу задачи её же автору.
Правило необратимого при этом действует полностью и срабатывает чаще, чем в двух
других сценариях: выкладка, токены, хуки и чужие данные — обычное содержимое
задач обслуживания.
**Ревью идёт фиксированным планом, а разметчик не зовётся.** Обе его оси не
определены: размер он выводит из артефактов change, сложность — из формы решения,
а незнакомая форма ушла в разведку ещё на первом шаге. План — `autotests`
(запуск гейта) и `operations` (сверка), плюс `conventions` с техническим разбором,
когда дифф трогает код, а не только оснастку: `review-code` — единственный проход,
который вообще говорит «здесь ошибка в логике», и чистка без него проверена лишь
на то, что она собирается. `requirements` и `security` не смотрит никто, и это
строка границ покрытия, а не умолчание.
**Триггеры ADR у обслуживания работают стоп-признаком, а не поводом завести
запись.** Список источников ADR канон закрыл двумя — архивный `design.md` и
записка разведки, — и обслуживание не производит ни того ни другого. Значит
дорогой откат, намеренный отказ и пересмотр прежнего решения означают здесь одно:
сценарий выбран неверно, работа идёт разведкой, где решение проходит чекпоинт
вариантов и получает законный источник. Третьего источника заводить не
понадобилось.
**Синк документации — главный шаг сценария, а не остаток.** Обслуживание не
меняет поведения, значит почти всё, что оно меняет, — документация: команды, шаги
гейта, зависимости, пути, имя ветки, место механизации правила. Ровно эти факты
`doc-code-drift` и сверяет с кодом.
**Состав гейта сверяется отдельно от цвета, а чем именно — решает проект.**
Красный, ставший зелёным, виден; «проверок стало на две меньше, обе зелёные» не
виден ничем, а это единственное место конвейера, где инструмент проверяет сам
себя. Что считается составом, объявляет проект семантикой гейта в `CLAUDE.md`;
не объявил — строка доклада «сверен только цвет», а не догадка.
**Своей capability тулчейн не получает, и своего документа канона тоже.**
Граница возможностей и сопровождения проходит по тому, кто наблюдает: гейт
наблюдаем мы, а не пользователь сервиса. Всё, что попало бы в `docs/toolchain.*`,
уже расписано по домам — `CLAUDE.md` (команды, семантика гейта, запреты, пути),
`architecture.*` (зависимости, окружение, выкладка), `conventions.*`
(механизированное), `ROADMAP.md` (работы). Проекту, которому этого мало, канон
уже даёт механизм и без новой строки в раскладке: список тем открытый, и свой
документ заводит свою тему. Цена такой темы названа — она попадает в план каждого
прогона и на большинстве задач молчит.
### Что из этого следует
212. **Короткий путь оправдан отсутствием входа, а не дешевизной.** «Тут можно
проще» — начало любой деградации; «этому шагу нечего обрабатывать» —
проверяемое утверждение, и проверяется оно тем же признаком, что и переход
между сценариями.
213. **Признак, объявляемый автором, и признак, выводимый исполнителем, держат
друг друга.** Первый один — ошибается в постановке; второй один —
самообслуживающийся. Разрешать расхождение в чью-то пользу нельзя: это
стоп.
214. **Сценарий без стопа для человека требует более жёсткого правила
необратимого, а не более мягкого.** Стопа, на котором «ой» заметили бы, там
нет.
215. **Инструмент, проверяющий сам себя, проверяется по составу, а не по
исходу.** Зелёный гейт после правки гейта не значит ничего.
216. **Место для нового документа ищется не по теме, а по бездомному факту.**
Тема «тулчейн» звучит убедительно, а фактов без дома за ней не оказалось —
значит документ был бы вторым домом четырёх чужих.