Чек спеки перед кодом и итерации с агентом
Самый дешёвый этап для правок — пока кода ещё нет. Гоняем спеку через clarify-цикл: пусть агент задаёт вопросы, подсвечивает дыры и противоречия, а вы дорабатываете формулировки. Чек-лист готовности спеки: однозначность, покрытие edge-кейсов, измеримые критерии приёмки. Несколько раундов уточнений в Cursor/Claude Code, пока спека не перестанет вызывать вопросы.
Чек спеки перед кодом и итерации с агентом
Спека написана — но это ещё не значит, что она готова. У вас первый черновик. Пробелы и неоднозначности в нём почти всегда есть, и сейчас — пока ни строки кода не написано — их исправить дешевле всего. Правка требования в Markdown занимает минуту. Правка готового модуля, который агент реализовал на основе неверной интерпретации, может занять час.
Clarify-промпт: отдаём спеку агенту на разбор
Самый прямой способ найти дыры — попросить агента сыграть роль въедливого инженера, который читает спеку с единственной целью: задать вопросы, без которых реализация будет неоднозначной.
В Claude Code откройте новую сессию, добавьте CLAUDE.md и нужную спеку в контекст, затем отправьте:
Прочитай specs/[feature].md. Не пиши код и не предлагай реализацию.
Задай мне все вопросы, которые делают реализацию неоднозначной или неполной.
Сгруппируй по разделам: Требования, Граничные случаи, Критерии готовности.
Начни с самых критичных.В Cursor — то же самое, но в режиме чата (Chat), а не Agent/Composer: так агент не начнёт редактировать файлы самостоятельно.
Пример того, что агент может вернуть на спеку авторизации из прошлого подмодуля:
> Требования:
> — Неясно, чувствителен ли email к регистру. User@example.com и user@example.com — один пользователь или разные?
> — Что происходит, если верный пароль вводится во время периода блокировки?
>
> Критерии готовности:
> — «Блокировка после 5 ошибок» — подряд или суммарно за сессию?
Это именно те дыры, которые агент иначе заполнил бы своей догадкой — молча.
flowchart TD
A[Черновик спеки готов] --> B[Clarify-промпт агенту]
B --> C{Агент нашёл вопросы?}
C -- Да --> D[Отвечаете / правите спеку]
D --> B
C -- "Нет или только\nтехнические детали" --> E[Спека готова к декомпозиции]Важный нюанс: первый раунд редко вытаскивает всё. После того как вы ответили и обновили спеку — запустите промпт снова. Второй раунд часто открывает новые вопросы, которые стали видны только после ответов на первые. Два раунда — норма, три — бывает.
Три типа проблем, которые агент находит
Вопросы агента почти всегда попадают в одну из трёх категорий.
Размытые требования — формулировки, допускающие несколько интерпретаций. «Система должна быть быстрой» — не требование. «P95 ответа < 300 мс при нагрузке 100 RPS» — требование. Агент спросит: «Что значит быстрой?» Это хороший знак.
Непокрытые граничные случаи — ситуации, которые вы не предусмотрели. Спека описывает счастливый путь, но молчит о таймауте, пустом вводе или невалидных данных. Агент либо спросит — либо, что хуже, придумает что-то сам и не скажет.
Конфликты между требованиями — редкость в небольших спеках, но встречается: «все запросы требуют авторизации» плюс «API-документация доступна без токена» — противоречие. Агент его заметит, если вы попросите.
Как работать с ответами агента
Не каждый вопрос требует нового пункта в спеке. Разбирайте по схеме:
- Вопрос про поведение фичи → дополнить «Требования» или «Граничные случаи»
- Вопрос про технический выбор → дополнить «Дизайн» или
CLAUDE.md - Вопрос про что-то вне скоупа → добавить явно в «Не-цели»
- Вопрос, на который агент сам может принять разумное решение → написать «Оставляю на усмотрение агента, предпочтительно X»
Последнее важно: не каждый пробел нужно закрывать жёстким требованием. Если решение действительно не критично — напишите это явно. Тогда агент не переспросит и не выдумает ничего неожиданного.
Чек-лист готовности: потренируйте инстинкт
Прежде чем двигаться к декомпозиции, пройдите по пяти критериям.
Однозначность. Каждое требование допускает ровно одну интерпретацию. Если два разработчика прочитают одно требование и придут к разным выводам — его нужно переписать.
Покрытие edge-кейсов. Для каждого основного сценария описан хотя бы один сценарий ошибки или граничный случай.
Измеримые критерии приёмки. Каждый пункт в «Критериях готовности» можно проверить — тестом, запросом к API, вручную. «Работает корректно» — не критерий. «Возвращает 401 при неверном пароле» — критерий.
Отсутствие конфликтов. Требования не противоречат друг другу и не противоречат CLAUDE.md.
Явные не-цели. Всё, что могло войти в эту фичу, но не войдёт — написано явно. Это защищает от разрастания скоупа прямо во время реализации.
Когда останавливаться
Спека готова, когда агент перестаёт задавать вопросы по существу. Если после второго раунда остались только технические вопросы — «какой HTTP-клиент использовать?», «как назвать файл?» — продуктовая часть закрыта. Технические детали уходят в «Дизайн» или решаются по умолчанию.
Если после третьего раунда вопросы не кончаются — скорее всего, фича слишком большая или смешивает несколько независимых сценариев. Стоит разбить спеку на две.
Задание
Возьмите спеку из прошлого подмодуля. Загрузите CLAUDE.md и спеку в контекст Cursor или Claude Code, запустите clarify-промпт. Обновите спеку по ответам — и запустите снова. Когда вопросов не останется или останутся только технические детали — спека готова. В следующем подмодуле она пойдёт в декомпозицию на задачи.
Самопроверка
- Почему в статье подчёркивается, что проверку спеки нужно делать ДО написания кода?
- Почему в clarify-промпте просят агента играть роль «въедливого инженера»?
- Агент спросил: «Что происходит, если верный пароль вводится во время блокировки?» К какому типу проблем это относится?
- На вопрос агента о техническом выборе, где правильнее поместить ответ согласно статье?
- Какой из примеров лучше всего соответствует определению ИЗМЕРИМОГО критерия приёмки?
- Требование в спеке: «Приложение должно быть оптимальным». Какой тип проблемы выявит агент?
- Почему статья рекомендует запускать clarify-промпт несколько раз?
- В какой ситуации спеку стоит разбить на две части?
Домашние задания
Clarify-цикл раунд 1: вытаскиваем скрытые вопросыtext
Возьмите простую спеку (напишите сами или используйте одну из примеров: API авторизации, система сохранения заметок, очередь задач). Откройте Claude Code или Cursor в новой сессии. Добавьте спеку в контекст. Отправьте агенту промпт: 'Прочитай спеку. Не пиши код. Задай все вопросы, которые делают реализацию неоднозначной или неполной. Сгруппируй по разделам: Требования, Граничные случаи, Критерии готовности. Начни с критичных.' Запишите все вопросы агента. Распределите их по трём разделам. Выделите 3–5 самых критичных — без ответа на которые невозможно начать код.
1) Clarify-промпт отправлен в Claude Code/Cursor (не в чат с Claude, а в среду разработки). 2) Все вопросы агента записаны полностью. 3) Вопросы разделены на три раздела логично. 4) Выделены критичные вопросы. 5) Формулировки ясные, без потери смысла.
Спека готовна: две итерации и зелёный чек-листdocument
Возьмите спеку и вопросы из Assignment 1. Обновите спеку: напишите ясный ответ на каждый критичный вопрос. Раздел может вырасти, появятся новые пункты — это нормально. Запустите clarify-промпт второй раз на обновлённой спеке. Запишите новые вопросы. Если их много — обновите спеку ещё раз и запустите третий раунд (можно кратко). Когда вопросов не останется или останутся только технические детали ('какой статус-код использовать', 'как назвать переменную'), спека готова. Проверьте по чек-листу из статьи: (1) однозначность — два разработчика прочитают требование и придут к одному выводу; (2) edge-case — для каждого основного сценария описана ошибка или граничный случай; (3) измеримость критериев — каждый пункт в 'Критериях готовности' проверяется тестом или запросом, а не на глаз; (4) отсутствие конфликтов — требования не противоречат друг другу; (5) явные не-цели — всё, что могло войти, но не войдёт. Обновляйте спеку, пока не закроете хотя бы 4 из 5 пунктов.
1) Спека обновлена и адресует критичные вопросы из Assignment 1. 2) Второй clarify-раунд запущен, вопросы записаны. 3) Видна итерация: какие вопросы закрылись, какие новые появились. 4) Чек-лист заполнен для всех 5 пунктов (✓ или описание проблемы). 5) Минимум 4 из 5 критериев отмечены ✓. 6) Если есть недоработки — описан план закрытия или обоснование, почему вывели в не-цели.
Сдача и проверка заданий — в приложении Learn (Almost) Anything.
