Clarify gate в Jira: когда тикет не идёт в разработку, пока постановка не созрела
Заказчик пишет в Jira «сделайте интеграцию с ERP» — и эта фраза уходит в разработку и в агент в IDE без границ и проверяемого «сделано». Clarify gate держит задачу в уточнении, пока в issue нет цели, scope и AC, согласованных с заказчиком.
Проблема
Заказчик создаёт задачу в Jira в свободной форме: «сделайте интеграцию с ERP», «нужен отчёт по продажам», «ускорьте каталог». Разработка и агент в IDE получают этот текст как вход — и либо уходят в неверную реализацию, либо недели уточняют в мессенджерах то, что не попадает в систему учёта.
Корень не в модели — как в разборе #01 про «интеграцию с ERP»: постановка неявна — нет границ, нет проверяемых критериев готовности, нет ответа на «что именно считается сделанным». Уточнения в Slack не привязаны к тикету: не масштабируются и не версионируются вместе с задачей.
Нужен clarify gate на уровне процесса: задача не переходит в разработку, пока в Jira не зафиксированы цель, scope и acceptance criteria, согласованные с заказчиком.
Как это выглядит в проде
Типовой контур внедрения (один Jira project = один context profile):
[Jira Cloud] issue created / comment
↓ webhook
[Relay / API GW] (опционально: auth, rate limit, PII redaction)
↓ POST /webhooks/jira/*
[Clarify service] ElicitationEngine + LLM
↓ JiraPort
[Jira Cloud] comments, description, transition → Ready for dev
[Git] project bible (L1) + corpus export (L2)
[Jira REST / JQL] похожие закрытые тикеты (L3)
Владельцы
| Зона | Кто | Что держит в актуальном состоянии |
|---|---|---|
| L1 Project Bible | Architect / tech lead | Глоссарий, карта систем, NFR, принятые решения (10–30 стр. markdown в git) |
| L2 Corpus | Platform / docs | Экспорт Confluence, OpenAPI, ADR — обновление по расписанию, не live API в боте |
| L3 Jira graph | Delivery / PM | JQL по Done, epic, component |
| Workflow | PO | Статусы Needs clarification → Ready for dev, правило «без approve — не в спринт» |
| Интеграция | Platform team | JiraPort на Atlassian REST, ADF, кастомные поля AC |
Что измерять после внедрения
Ориентиры, не обещания из коробки:
- доля Story/Bug, ушедших в dev без явных AC в description;
- число раундов clarify до
approve; - % тикетов, возвращённых в clarify после ревью постановки;
- эскалации PO («заказчик не отвечает N раундов»).
Публичный репозиторий в этом howto — воспроизводимый след механики и контракт webhook'ов, не готовый «бот в вашей Jira из коробки».
Методика
Граница howto: контур заказчик → Jira → агент до зрелого тикета.
Что команда делает после Ready for dev, — вне разбора;
в репозитории следующий слой — SDD через
Spec Kit
(#12).
Clarify gate
Фаза clarify живёт в issue: агент ведёт структурированный диалог в комментариях (или выделенном поле), пока не выполнены критерии «постановка готова». Это gate по аналогии с eval перед релизом (разбор #10): плохой вход не проходит дальше.
Принципы
- 1. Один issue — один след уточнений. Весь диалог в Jira. История видна заказчику, PM и разработчику; при смене исполнителя контекст не теряется.
- 2. Вопросы по осям. Scope, акторы, данные, NFR, зависимости, AC — закрыть пробелы, без свободного чата.
- 3. Явный критерий готовности. В description: цель, scope, проверяемые AC, помеченные риски. До этого — статус «Needs clarification», разработка не стартует.
-
4. Человек в контуре.
Бот предлагает черновик description; заказчик или PO подтверждает (
approve). Без автозаписи «как сказал ИИ» в продакшн-поле. - 5. Выход — зрелый тикет. Description + AC в Jira — то, что уходит в разработку; черновик «для переноса в Confluence» здесь не цель.
Project context (почему без него gate слабый)
Без контекста агент задаёт универсальные вопросы — заказчик отвечает так же абстрактно. Project context — управляемая подложка: на каждый раунд собирается context pack (issue + релевантные фрагменты), без заливки всего Confluence в промпт.
| Уровень | Содержимое | Роль |
|---|---|---|
| L1 — Bible | Курируемый markdown: глоссарий, system map, интеграции, NFR | Стабильная логика проекта |
| L2 — Corpus | Экспорт wiki, docs/, OpenAPI, ADR |
Детали и контракты |
| L3 — Jira graph | Epic, component, похожие Done | Дубликаты и продолжения |
L1 не автогенерируют из Confluence целиком. L2 в проде — retrieval (keyword → hybrid, см. разбор #3). L3 — JQL.
Заземлённые вопросы (redacted intake, каталог B2B)
Сырой тикет: «отчёт по каталогу B2B за квартал, желательно быстро, может ERP».
Без context pack часто остаётся: «Какие системы затронуты?»
С context pack (фрагменты из bible + corpus + PROJ-89):
- В архитектуре каталог — Elasticsearch и B2B-витрина в PostgreSQL. Отчёт по полному индексу или только по витрине?
- SLA витрины p99 200 ms — жёсткое ограничение и для пакетной выгрузки?
- PROJ-89 закрывал квартальный отчёт B2B — расширение или новая выгрузка?
- В глоссарии ERP — 1С и SAP; интеграция в scope этого тикета?
- В документации нет политики PII для отчётов — срок хранения и доступ?
Заказчику — бизнес-язык. Citations (bible#nfr,
PROJ-89) — в internal log
аудита, не в теле комментария.
Фрагмент clarify в issue
Сценарий из reference trace · redacted intake · стилизация под Jira Cloud (не скриншот продукта)
Квартальный отчёт по каталогу B2B
Description
Нужен отчёт по каталогу B2B за квартал, желательно быстро. Возможно, выгрузка в ERP.
Activity
-
Clarify Bot App сегодня 10:14
Уточню постановку по четырём осям (раунд 1/3):
- Отчёт по полному поисковому индексу каталога или только по B2B-витрине?
- Нужна ли выгрузка «на завтра» — или достаточно до конца следующего рабочего дня?
- Тикет PROJ-89 уже закрывал квартальный отчёт — расширяем его или делаем новую выгрузку?
- ERP в scope: 1С, SAP или обе системы?
-
Марина Соколова сегодня 11:02
Только B2B-витрина. До пятницы EOD. PROJ-89 — прошлый формат, нужен новый CSV для финансов. ERP — только 1С, SAP не трогаем.
-
Clarify Bot App сегодня 11:03
Предлагаю обновить Description
Goal: CSV по продажам B2B-витрины за квартал для финансов.
Scope: PostgreSQL B2B-витрина; выгрузка в 1С; без SAP.
Acceptance criteria:
- Генерация ≤ 15 min на 50k SKU
- Файл CSV в
s3://reports-b2b/… - Без PII в выгрузке
Diff «было / предлагаю» — во вложении к комментарию. Напишите
approve, чтобы зафиксировать. -
Алексей Ким Product Owner сегодня 11:18
approve— AC ок, можно в спринт. -
Automation for Jira изменил статус Needs clarification → Ready for dev сегодня 11:18
Citations к bible и закрытым тикетам попадают в internalLog —
в комментарии заказчику остаётся только бизнес-формулировка.
Конвейер на раунд
Parse issue → route (какие уровни контекста) → retrieve (pack)
→ gap analysis → 3–5 вопросов → ответ в комментарии
→ gap analysis → черновик description + AC + diff «было / предлагаю»
→ approve → transition Ready for dev
Профиль на project (profile.yaml): пути bible/corpus,
лимит вопросов за раунд, политика citations. Один файл — один Jira project.
Артефакт
github.com/dobryakov/jira-clarify-bot
— Python, FastAPI, Docker. В git — механика clarify gate, контракт webhook'ов
(openapi.yaml, JSON Schema) и прогон
без вызовов *.atlassian.net.
Вне репозитория — то, что привязано к вашему стенду:
- регистрация webhook и авторизация в Jira Cloud;
- клиент Atlassian REST / ADF и маппинг кастомных полей AC;
- боевой pipeline корпуса (L2) и расписание его обновления;
- multi-tenant, изоляция данных, SLA.
У разных команд эти части устроены по-разному — в git фиксируется только воспроизводимая механика и контракт входа.
Redacted context в репо (context/demo-shop/) моделирует продовый bible/corpus
для e-commerce intake — те же оси вопросов, что в примере выше.
После согласованного approve в следе: description с goal/scope, измеримые AC
(например: «≤ 15 min для 50k SKU», «CSV в s3://…», «без PII»), статус
Ready for dev, internalLog с citations.
Где ломается
- Заказчик не отвечает. N раундов → эскалация PO, блокировка без молчаливого ping.
- Спам вопросами. Без осей и лимита за раунд — игнор; нужен приоритет пробелов.
- Hallucinated requirements. Diff «было / предлагаю» и human approve обязательны.
- ADF и кастомные поля AC. У каждого Jira свой контур; адаптер обязан маппить description/комментарии/AC — типичная точка поломки при внедрении.
- Approve без проверяемых AC. Gate должен отклонять «красивый текст» без фальсифицируемых критериев.
- Дублирование clarify. Параллельный поток в Confluence/Slack — второй след правды. Паттерн для команд, где тикет — точка согласования с заказчиком.
-
Устаревший bible.
Вопросы от ложной архитектуры; нужны owner и
updated. - RAG / corpus шум. Утверждения только выше порога релевантности, иначе «в документации не нашли — уточните».
- Жаргон в комментарии заказчику. Только бизнес-формулировки.
- Bible vs Confluence. Приоритет у bible для вопросов; расхождение — эскалация PO.
- Нет context pack. Generic clarify — только осознанный fallback, не режим по умолчанию.
Для кого и почему
PO, CTO, Head of AI: качество входа в delivery поднимается в Jira, без нового инструмента для заказчика. Архитектурно это gate на intake. Отличие от cross-org agent negotiation (#2): внутренний clarify «бизнес ↔ агент» в одном issue, без cross-org переговоров по API.
Ссылки:
- github.com/dobryakov/jira-clarify-bot — репозиторий с примером
- Retrieval для L2 в проде: разбор #3 — hybrid-search
- После зрелого тикета — спеки в git: разбор #12 — Spec Kit
Нужен clarify gate на intake в вашей delivery?
Процесс «тикет не в спринт без зрелой постановки»: project context, оси вопросов, human approve. Один след правды — в Jira, не в мессенджерах.
Написать на почтуДругие разборы
Серия инженерных разборов: реальная задача → методика → работающий артефакт → честный разбор, где он ломается.
К серии →