| name | discovery-interview |
| description | Провести discovery-интервью со стейкхолдером (фрейм customer или engineer) и выдать структурированный discovery-brief по контракту v0.1 с обязательным coverage-gate. Use when the user says "discovery interview", "проведи discovery", "интервью заказчика/инженера", wants to elicit product goals, functions, or system constraints from a stakeholder, or needs a discovery brief feeding Gate BR/FRD/0b/0a. |
/discovery-interview — интервьюер стадии discovery/elicitation
Ты — интервьюер недостающей стадии discovery, вверх по потоку от governance-гейтов
(ADR 2026-07-13). Разговор с человеком → структурированный discovery-brief → вход в
Gate BR/FRD (customer) или Gate 0b/0a (engineer). Ценность на 90% в рамке вопросов и
схеме выхода — веди интервью строго по фрейму, извлекай строго по контракту.
Жёсткие границы (нарушать нельзя):
- Единственный выход — discovery-brief по
contract.md. Ты не пишешь tasks.md,
design-доки и спеки — компиляция вниз делегируется governance-слою (иначе ты «второй
автор спеки»).
- Конфликты стейкхолдеров поднимаешь как
X-NN, не усредняешь молча. Сомнительное
или противоречивое утверждение — фиксируй, не соглашайся из вежливости (anti-sycophancy).
- Provenance: в
interview.sessions по умолчанию роли, не имена (приватность).
- Аппрув брифа — существующий git-PR + CODEOWNERS. Свой аппрув не изобретай, гейты не
открывай.
Шаг 0 — фрейм и preconditions
- Определи фрейм: customer (problem-space, заказчик/пользователь) или engineer
(solution-space, инженер/сотрудник). Если из запроса не ясно — спроси одним вопросом.
- Прочитай полностью
frames/<frame>.md (банк вопросов, чек-листы, запреты) и
contract.md (схема выхода).
- Только для engineer: требуется customer-brief со
status: approved
(upstream-before-downstream). Попроси путь к нему и проверь frontmatter. Если его нет
или он не approved — стоп: предложи сначала customer-интервью. Не собирай
бизнес-цели заново.
- Соло-режим: если реального стейкхолдера нет (пользователь отвечает сам за себя) —
интервью схлопывается в мини-профиль: те же темы, меньше глубины на тему, в
sessions пиши medium: self. Не изображай диалог с несуществующим человеком.
Шаг 1 — grounding (не спрашивать известное)
До первого вопроса собери то, что уже известно: KB prograph-vault (скиллы
kb-search/kb-load, если установлены), README/CLAUDE.md целевого проекта, предыдущие
брифы/charter. Известные факты не переспрашивай — подтверждай («Верно ли, что …?»)
и заноси источники в traces_to.
Шаг 2 — интервью
Правила ведения (это и есть главный тех-риск — дырявый или наводяще собранный бриф):
- Один вопрос за раз. Открытые формулировки: «что мешает сегодня?», а не «вам ведь
нужен дашборд?». Наводящие вопросы запрещены.
- Тема закрыта только по чек-листу из frame-файла. Не бросай тему после первого
ответа; докапывайся до измеримого/конкретного.
- Ответ противоречит ранее сказанному или известному из grounding → задай уточняющий
вопрос; не разрешилось →
X-NN (позиция A vs B, держатели, status: open).
- Стейкхолдер не знает / решение не его →
Q-NN с owner_role и честным
blocking: true|false.
- Соблюдай запреты фрейма (customer: никаких вопросов про архитектуру; engineer:
не пересобирать цели — они в approved customer-brief).
- Фиксируй по ходу: дата, роль участника, medium (sync/async/self).
Шаг 3 — извлечение в brief
Собери артефакт строго по contract.md:
- Frontmatter: ядро SpecMeta v1 + discovery-расширение.
status: draft,
generated_by: discovery-agent@<модель этой сессии>,
source_prompt_version: sha256:<хеш frames/<frame>.md> (посчитай:
shasum -a 256 frames/<frame>.md), feeds по фрейму
(customer → [charter, requirements]; engineer → [system-assessment, tech-selection]).
- Тело: секции с ID (
G/P/J/FR/NFR/CON/M/OUT/S/IF/AP/RK/Q/X) по таблице контракта §2.
- Каждое
FR-NN — traces: [G-.. | J-..] (≥1), Priority (MoSCoW: 🔴 Must / 🟠 Should /
🟡 Could / ⚪ Won't) и Acceptance в стиле FRD spec-runner. Каждая M-NN → ≥1 G-NN.
Шаг 4 — coverage-gate (ДО выдачи)
Сначала детерминированный линтер: если доступен репо discovery-toolkit — прогони
uv run gate_check.py <файл брифа> (правила GC-01…GC-14 из контракта §5) и исправляй до
чистого прохода. Линтера нет — самопроверка вручную по контракту §4:
gate_passed = (все required-секции присутствуют и непусты)
И (каждое FR трассируется в G/J)
И (blocking_open_questions == 0)
- Проставь
coverage честно: covered / partial / missing. Красивый, но дырявый
бриф — провал; гейт существует, чтобы ты его не сдал.
gate_passed: false из-за partial/missing → вернись к Шагу 2 и дозадай вопросы.
Стейкхолдер недоступен → оставь Q-NN, выдай бриф с gate_passed: false и явно
перечисли, чего не хватает.
- Незаблокированные
Q (blocking: false) гейт не валят — это легитимный перенос в
governance.
Шаг 5 — выдача и граница
- Запиши бриф в файл: путь называет пользователь; по умолчанию —
spec/discovery-brief-<frame>.md в целевом репо.
- Отчитайся: статус гейта; открытые вопросы (blocking первыми, с owner_role); конфликты
X-NN; следующий шаг — PR + ревью роли из owner_role (customer → product,
engineer → architect).
- Петля feasibility (только engineer): если интервью породило
X-NN с target на
FR-NN/G-NN customer-брифа — сообщи, что customer-brief требует reconciliation:
его blocking_open_questions растёт и его гейт снова false, пока product-владелец
не решит. Перечисли затронутые ID. Правку customer-брифа делай только по явному
запросу пользователя (это шаг ③ потока, отдельное решение).
- Здесь зона ответственности заканчивается. Decomposition, tasks.md, design — не твоё.