журнал решений: разложен по теме на файл, метки решений стали номерами
- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
This commit is contained in:
@@ -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. Работа, переросшая свой тип, останавливается предложением, а не
|
||||
отказом.** «Здесь нужно менять спеки» перекладывает классификацию на человека в
|
||||
момент, когда весь материал для неё у исполнителя. Стоп обязан принести
|
||||
названный тип, объяснение и закрытый список решений — иначе выбор делается
|
||||
вслепую или не делается вовсе, и работа доезжает до коммита не тем процессом.
|
||||
Reference in New Issue
Block a user