# 🎯 `goal` — возможность приложения Цель отвечает на **«что приложение будет уметь»**. Не область работ и не имя подсистемы: не «Работа со слиянием», а «Исход слияния не зависит от порядка доставки». Свойство поведения — тоже возможность. Общая форма записи (мета, слаг, строка индекса) — [task-format.md](task-format.md). Здесь только то, что у этого типа своё. ## Схема | | | | --- | --- | | Заголовок отвечает на | что приложение будет уметь | | Обязательные разделы | `Завершение` | | Допустимые сверх того | — | | Поле места | **Секция** — часть роадмапа | | Цель (`goal:<слаг>`) | запрещена: цель и есть цель | | Индекс | `ROADMAP.md`, и никогда `BACKLOG.md` или `SPRINT.md` | | Берётся в спринт | нет — берутся её задачи | Поле места у цели называется **«Секция»**, а не «Категория», и это не разнобой: у задачи оно называет полку домена, в которую она вернётся из спринта, а у цели — часть роадмапа, то есть состояние очереди. Одно имя на два смысла и было конфляцией. ## «Завершение» — списком, а не абзацем Это признаки того, что приложение **уже умеет**, и на строки этого раздела ссылаются задачи цели: «двигает пункт 2 «Завершения» — накопительная метрика перестаёт уменьшаться». Абзацем такая ссылка не берётся, поэтому список. Отсюда же читается обратное и более полезное: **строка «Завершения», к которой не относится ни одна задача, — незакрытая часть возможности**. Достаточность набора задач видна из самой цели, а не из чьей-то памяти. ## Алгоритм 1. **Проверить, что это возможность, а не работа.** Работа, которой держат проект, на вопрос «что приложение будет уметь» не отвечает; состав перечислен [в каноне](../../canon/references/canon.md), раздел «Сопровождение и эксплуатация». Ей отведена секция `Сопровождение` — там она видна в том же экране и не читается как обещание продукта. Граница проходит по тому, **кто наблюдает**: «приложение сообщает о своём состоянии» — возможность, «дежурный видит состояние на одном экране» — сопровождение. 2. **Выбрать секцию.** Очередь значима и обоснована прозой — `Запланировано`; тянется долго и очереди не имеет — `Направления`; про то, чем держат проект, — `Сопровождение`. В `Готово` кладёт сам `close`. 3. **Написать «Завершение»** — 2–5 наблюдаемых признаков списком. Пишутся до декомпозиции: иначе задачи придумают себе цель задним числом. 4. **Разложить на задачи** и проставить им `goal:<слаг>`. Перечень задач в теле цели **не хранится** — он был бы третьим индексом и поехал бы на первой же закрытой задаче; выводит `tasks.py list --goal <слаг>`. 5. **Пометить `decomposed`.** Тег отличает «ещё не разобрана» от «все задачи закрыты» — два состояния с одним внешним признаком. `check --fix` ставит его сам цели, у которой задачи есть. 6. **Закрыть достигнутой** — `close <слаг> --implemented`, когда не осталось открытых задач. Файл удаляется, строка с датой переезжает в `Готово`. Скрипт откажет, если задачи ещё живы. ## Что видит машина, а что человек `check` считает цели, различает разобранные и пустые, ставит `decomposed`, запрещает закрыть цель с живыми задачами и держит `Секцию` в согласии с заголовком роадмапа. **Годность формулировки — не машине**: «возможность это или область работ» решает [агент вычитки](../SKILL.md#вычитка-два-прохода-а-не-один). Достигнутая цель **не исчезает**: «что приложение умеет» — половина вопроса, ради которого роадмап открывают. Вторым домом поведения роадмап при этом не становится: нормативное поведение живёт в `openspec/specs/`, роадмап отвечает, **когда и в каком порядке** оно появилось.