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

72 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Послабление, введённое ради одного потребителя, уходит вместе с ним.**
Исключение переживает своего заказчика и выглядит общим правилом; удаляя
потребителя, ищи его исключения — они и есть настоящий хвост.