- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
72 lines
7.2 KiB
Markdown
72 lines
7.2 KiB
Markdown
# 55. `task-pipeline` стал `resolve`: два плановых стопа вместо полной автономии (2026-08-09)
|
||
|
||
**Р203. Автоматическое решение задач агентом признано утопией — «работает, но
|
||
работает плохо», — и хуже того, автор перестал ориентироваться в собственном
|
||
процессе.** Отсюда разворот: задачи решаются по одной, а в цикл возвращается
|
||
человек. `task-batch` удалён целиком; `task-pipeline` переписан в `resolve`.
|
||
|
||
**Прежняя доктрина звучала «умолчание — делать, а не спрашивать», и она не
|
||
отменена, а ограничена.** Полностью автономный прогон плох не тем, что ошибается,
|
||
а тем, что ошибку видно на готовом коде: развилка, стоившая бы абзаца до
|
||
`propose`, стоит переписывания после `apply`. Постоянное же согласование
|
||
возвращает ту цену, ради ухода от которой пайплайн и писался. Разрез поэтому по
|
||
**месту**, а не по важности решения: развилка, найденная до ближайшего чекпоинта,
|
||
копится в него; найденная после последнего — по-прежнему уходит вопросом в запись,
|
||
и задача доводится в объявленных границах.
|
||
|
||
**Чекпоинтов два, и второй обязателен всегда.**
|
||
|
||
- **«варианты»** — у исследовательской задачи, до первого требования. Признак
|
||
ветки не объём работы, а **отсутствие одного очевидного способа решения**:
|
||
обсуждать варианты после `propose` поздно, предложение уже воплотило один из
|
||
них, и разговор пойдёт не о выборе, а о переделке. Форма ограничена сверху —
|
||
2–4 варианта: больше четырёх человек не сравнивает, а признаёт неспособность
|
||
сравнить и просит рекомендацию.
|
||
- **«объяснение»** — у всякой задачи, **после** ревью дизайна. Порядок обоснован:
|
||
человек читает то, что уже просеяла машина, и не тратит внимание на выловимое
|
||
`review-specs`. Внимание здесь самый дорогой ресурс процесса.
|
||
|
||
**Объяснение не стало новым артефактом, и это главная правка первоначального
|
||
замысла.** Задумывалось отдельным разделом в `design.md`; при разборе оказалось,
|
||
что оно там было бы **третьим домом** одного и того же: в `proposal.md` уже есть
|
||
`## Why` («в чём проблема»), в `design.md` — рассмотренные варианты. Поэтому
|
||
объяснение **собирается из двух существующих артефактов**, а требование к их
|
||
форме уехало в `openspec/config.yaml` — `rules.proposal` и `rules.design`. Это
|
||
единственное место, применяющееся **в момент написания**, а не после.
|
||
Побочная выгода: `design.md` с названными причинами отказа — половина будущего
|
||
ADR, а промоут ADR читает именно архивный `design.md`.
|
||
|
||
**Закрыт вопрос, висевший в плане открытым: что делает автоматический участок,
|
||
когда ревью кода спорит с одобренным дизайном.** Признак проверяемый —
|
||
**меняются ли дельта-спеки**. Не меняются: находка внутри дизайна, дожимается
|
||
сама. Меняются: решение стало другим, а одобрено было прежнее — разметка
|
||
пересчитывается (правило уже было) и **чекпоинт повторяется**. Чекпоинт, который
|
||
можно обойти находкой ревью, не значит ничего, и хуже того — человек уверен, что
|
||
одобрил именно то, что уехало в коммит.
|
||
|
||
**Удаление `task-batch` обошлось дороже своего каталога.** На нём держались:
|
||
третий режим `review-specs` (стык после слияния) вместе с исключением «живого
|
||
change нет — берём источником актуальные спеки»; единственное исключение из
|
||
правила `review-triage` «плана нет — не запускаюсь»; и обоснование имени основной
|
||
ветки в каноне — «в неё вливает батч». Первые два — послабления, существовавшие
|
||
только ради батча, и с ним они исчезли, сделав оба правила строже.
|
||
|
||
## Что из этого следует
|
||
|
||
**С184. Автономность ограничивается местом, а не важностью решения.**
|
||
«Спрашивать о важном» неисполнимо: важность оценивает тот же, кто хочет
|
||
закончить. «Копить до ближайшего планового стопа» проверяемо и не требует
|
||
суждения.
|
||
|
||
**С185. Чекпоинт ставится после машинной проверки, а не до неё.** Внимание
|
||
человека тратится только на то, чего машина не ловит; порядок наоборот сжигает
|
||
его на выловимом и обесценивает саму остановку.
|
||
|
||
**С186. Объяснение для человека не заводит своего артефакта.** Если оно
|
||
собирается из уже существующих, оно не может с ними разойтись; отдельный текст
|
||
«то же, но понятнее» — третий дом, и расходится он молча.
|
||
|
||
**С187. Послабление, введённое ради одного потребителя, уходит вместе с ним.**
|
||
Исключение переживает своего заказчика и выглядит общим правилом; удаляя
|
||
потребителя, ищи его исключения — они и есть настоящий хвост.
|