журнал решений: разложен по теме на файл, метки решений стали номерами

- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель;
- буквенные метки решений заменены сквозными Р1–Р234, следствия получили
  префикс С при прежних номерах: схема букв выродилась до пятибуквенных и
  сломалась — `АЕАКЛ` была занята и темой 53, и темой 65;
- 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер
  означал тему, а слово стояло «решение», формулировка исправлена.
This commit is contained in:
av
2026-08-13 12:40:56 +03:00
parent b411d4edb8
commit bf6a173115
72 changed files with 4253 additions and 4053 deletions
+101
View File
@@ -0,0 +1,101 @@
# 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. Работа, переросшая свой тип, останавливается предложением, а не
отказом.** «Здесь нужно менять спеки» перекладывает классификацию на человека в
момент, когда весь материал для неё у исполнителя. Стоп обязан принести
названный тип, объяснение и закрытый список решений — иначе выбор делается
вслепую или не делается вовсе, и работа доезжает до коммита не тем процессом.