# ✨ `feature` — снаружи появляется то, чего не было Задача, после которой наблюдаемое поведение меняется в сторону новой возможности. Отвечает на **«что нужно сделать»** и пишется глаголом в неопределённой форме. Общая форма записи (мета, слаг, строка индекса) — [task-format.md](task-format.md). Здесь только то, что у этого типа своё. ## Схема | | | | --- | --- | | Заголовок отвечает на | что нужно сделать («Печатать поле одним куском кода») | | Обязательные разделы | `Затрагивает`, `Критерии приёмки` | | Допустимые сверх того | `Рамки`, `Вопросы` | | Поле места | **Категория** — полка домена беклога | | Цель (`goal:<слаг>`) | **обязательна** | | Индекс | `BACKLOG.md` → `SPRINT.md` | | Берётся в спринт | да | **Цель обязательна, и это единственный тип, у которого так.** Новая возможность и есть содержание цели: подходящей нет — либо она заводится, либо перед тобой не `feature`. `sprint take` без цели откажет. ## Алгоритм 1. **Найти цель или завести её.** Задача без цели, названная функцией, — самый частый способ пронести в беклог работу, которой никто не заказывал. 2. **Назвать границы** в разделе `Затрагивает`: эндпоинт или команда, таблица и миграция, формат на диске, публичный тип пакета, внешний сервис. Названы **границы, а не замысел**: «переписать хранилище на новый драйвер» — замысел, `таблица points и её миграция` — граница. Проверяется вопросом «это можно назвать до того, как решено *как* делать?». 3. **Написать критерии приёмки** — 2–5 проверяемых утверждений списком, у каждого назван оракул. Не «работает корректно», а «повторный прогон даёт тот же отпечаток — оракул: команда сверки». 4. **Сказать, какую строку «Завершения» цели задача двигает.** Одной строкой в теле. Это защита от задачи «отрефакторить X»: она проваливается не потому, что невидима снаружи, а потому, что не находит строки, к которой относится. 5. **Проверить, что задача одна.** Отвечается всё, но задача не делается одним заходом и не мерджится целиком — это несколько задач под одной целью, дроби сразу ([split.md](split.md)). Промежуточного зонтика между целью и задачей нет. 6. **Реализация** — дело пайплайна проекта, не этого скилла. Закрывается `close <слаг> --implemented`: файл и строка удаляются, суть переезжает в `openspec/specs/` и документацию. ## Что видит машина, а что человек `check` и `sprint take` смотрят на **наличие непустого** раздела `Затрагивает`, на **число** критериев (меньше двух — отказ, больше пяти — замечание) и на цель. Наличие оракула проверяется **эвристикой** — словом «оракул» в пункте. Полнота перечня границ машине не видна: границу, которую забыли назвать, она от отсутствующей не отличает. Настоящий оракул от слова «оракул» тоже не отличает. Поэтому в докладе это называется как есть: «проверено число пунктов и наличие границ, годность оракулов и полнота границ — глазами». **Критерии — пол, но расхождение с ними есть дефект критериев.** Видишь, что критерии закрыты, а суть задачи не достигнута — **правь критерии и возвращай задачу**, а не держи невидимое сверх-требование: иначе исполнитель никогда не знает, закончил ли, и мотивирован занижать критерии заранее.