- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
48 lines
4.7 KiB
Markdown
48 lines
4.7 KiB
Markdown
# 39. Спринт без цели — законный случай (2026-08-07)
|
|
|
|
Цель была обязательной: `sprint start --goal` требовал слаг, `check` считал
|
|
ошибкой набор без названной цели, `sprint take` отказывал задаче под чужой
|
|
целью. Модель описывала только спринт развития — а спринт бывает под багфикс,
|
|
под техдолг, под здоровье проекта. Такой набор собран **по работоспособности, а
|
|
не по направлению**, и цели у него нет не по недосмотру.
|
|
|
|
Обходной путь существовал и был хуже прямого: завести цель-пустышку («Здоровье
|
|
проекта») и вешать под неё `fix`-и. Тогда `ROADMAP.md` — документ про то, что
|
|
приложение умеет, — обрастает строками про то, что оно не ломается, а тег
|
|
`goal:` перестаёт значить направление.
|
|
|
|
**Р159. Цель у спринта необязательна, но её отсутствие — ответ, а не молчание.**
|
|
`sprint start` принимает `--goal <слаг>` **или** `--no-goal`, и голое отсутствие
|
|
обоих — отказ с объяснением. Причина в стимуле: цель называет человек, и это
|
|
единственный продуктовый вопрос всей сессии. Разреши мы заводить спринт просто
|
|
без флага — забытый флаг, лень спросить и осознанное решение стали бы неотличимы
|
|
на выходе, а дешевле всего из трёх агенту именно не спрашивать.
|
|
|
|
**Р160. В спринте без цели цель не проверяется вовсе.** Набор берёт что угодно
|
|
готовое к взятию, включая задачи под разными целями: сверять не с чем. Правило
|
|
«набор служит одной цели» не ослаблено, оно просто не применяется — целей в
|
|
таком наборе не больше одной, их ноль. Взамен машинной проверки остаётся показ
|
|
набора человеку до заморозки: у бесцельного спринта это **единственная**
|
|
проверка состава, и в скилле это сказано прямо.
|
|
|
|
**Р161. Признак «спринт идёт» — слаг, а не цель.** Прежде код спрашивал цель и
|
|
получал заодно ответ про то, открыт ли спринт; теперь эти вопросы разошлись.
|
|
Слаг подходит на роль признака лучше цели по существу: он есть у любого спринта,
|
|
потому что без него нечем проставить `sprint:<слаг>`, то есть нечем собрать
|
|
урожай. Поле «Цель» в шапке остаётся на месте и у бесцельного набора — пишется
|
|
прозой без ссылки: **«цели нет» и «цель потерялась» обязаны различаться**.
|
|
|
|
## Что из этого следует
|
|
|
|
**С145. Необязательное поле, которое всё же решают, заводится парой «значение
|
|
или явный отказ».** Умолчанием тут был бы не выбор, а его отсутствие — и
|
|
отличить его от забывчивости уже не смог бы никто, включая автора.
|
|
|
|
**С146. Признак «сущность существует» нельзя вешать на её необязательное поле.**
|
|
Пока цель была обязательной, `sprint_goal()` отвечал сразу на два вопроса, и это
|
|
работало ровно до тех пор, пока второй ответ не понадобился отдельно.
|
|
|
|
**С147. Снятая проверка называет, что осталось вместо неё.** Цель не проверяется
|
|
— значит, за состав отвечают показ человеку и строка доклада; иначе послабление
|
|
читается как «здесь можно не думать».
|