Зарегистрирован вендоренный скил grilling из mattpocock/skills, MIT, skills/productivity/grilling. Установлен user-level ~/.claude/skills/grilling/ — вне репозитория, единственная копия: проектная удалена во избежание задвоения. Роль — безжалостный допрос по УЖЕ имеющемуся плану или решению: обход дерева развилок ветка за веткой, по одному вопросу за раз, к каждому вопросу свой рекомендуемый ответ, факты ищутся самостоятельно, работа не начинается до явного подтверждения заказчика. Надстройка проекта поверх немодифицированного тела апстрима, отделена заголовком: - протокол docs/grilling/ГГГГ-ММ-ДД-тема.md — разделы Решили / Отрезали и почему / Осталось открытым; пишется по ходу, перечитывается после компакта контекста. Закрывает класс «договорённость сгорела при компакте» - порядок обхода «сначала необратимое» — деньги, схема БД, что уходит клиенту - критерий остановки: пустой фронт развилок с объявлением вслух - «слушай, не защищай» Граница ADR-021 GR1 с #55 discovery-interview — разрез по наличию решения: grilling куёт решение, которое у заказчика уже есть, поэтому наводящий рекомендуемый ответ обязателен; discovery-interview вскрывает проблему, когда решения ещё нет, и там наводящие ответы запрещены. GR2 — граница с brainstorming #19. GR3 — вендоринг без модификации апстрима. Реестр: узел #90 + контракт, связка L1 между brainstorming и writing-plans, классификация planning вес 0.8 — ниже первичных решателей. Автотаблицы перегенерированы через registry-render, карта цепочек дополнена. Нормативная синхронизация квинтета: - Tooling Прил. Н v2.26 — новый §4.63, счётчик 87→88 и 107→108, off-phase +57→+58, футер - Pravila v1.45 — §13.2 новый абзац, запись в истории версий - PSR_v1 v3.25 — R10.1 Блок 1 note, запись в истории версий - CLAUDE.md v2.49 — через плагин claude-md-management, §0 версии квинтета, §3.4 +#90, §9 запись Попутно снят застарелый рассинхрон шапки Tooling: числа 84/104 остались от майской версии, приведены к 88/108, дописаны research-tooling и узлы #87–#90. Проверки: registry-render --check зелёный на обоих файлах, observer-chain-map-checker OK 17 chains in sync, загрузчик видит 90 узлов, markdownlint 0 ошибок, cspell 0 ошибок. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
9.7 KiB
ADR-021: Grilling — допрос по готовому решению (discovery-tooling, #90)
- Status: Accepted
- Date: 2026-07-28
- Deciders: Дмитрий
Context
Заказчик 27.07.2026 сформулировал повторяющуюся боль (память
feedback-priemochnyy-list-i-limit-konteksta): «фичу доделываешь, но откидываешь
90% функционала, потом пилим косяки, скрытые хрен найдёшь». Механизм боли —
список требований живёт только в контексте сессии, проверяется тем, что
контроллер сам же и написал; «скрытые» дефекты = места, где ожидание не было
записано заранее. Компакт контекста — тот же спусковой крючок: пересказ
выживает, мелочи пропадают.
В экосистеме скилов нашёлся готовый инструмент под эту задачу — grilling из
mattpocock/skills (MIT,
skills/productivity/grilling, 843 байта). Он предписывает: обход дерева
решений ветка за веткой, по одному вопросу за раз, с рекомендуемым ответом на
каждый вопрос, факты искать самостоятельно, не приступать к работе до явного
подтверждения общего понимания. Файл grill-me в том же репозитории — заглушка,
делегирующая в grilling; вся суть в grilling.
Инструмент внешне похож на существующий #55 discovery-interview — оба ведут
интервью по одному вопросу за раз. Нужно решение о границе, иначе два
интервьюера будут толкаться (нарушение CLAUDE.md §5 п.6 — «не два инструмента
на одну задачу»).
Проверка апстрима перед принятием: репозиторий 192k★, активная разработка, лицензия MIT, скил — чистый текст без кода, хуков, субагентов и сетевых обращений. Отдельно рассматривался и отклонён Understand-Anything (76,5k★) — дубль к #86 graphify, плюс хуки, впрыскивающие «не спрашивай подтверждения у пользователя», 7 открытых Windows-заявок и известные проблемы с не-ASCII путями (у нас путь проекта кириллический).
Decision
Формализовать grilling как узел #90, вторая позиция 12-й off-phase подкатегории discovery-tooling (новой подкатегории не заводим — это интервью-инструмент, как и #55).
Установка — user-level, ~/.claude/skills/grilling/SKILL.md, единственная
копия. Проектная копия сознательно удалена: две копии одного скила дают
задвоение в списке и рассинхрон при правках.
GR1 — граница с #55 discovery-interview: разрез по наличию решения
| #90 grilling | #55 discovery-interview | |
|---|---|---|
| Вход | у заказчика уже есть план/решение | есть только боль, решения нет |
| Метод | обход дерева решений | JTBD, «5 почему», прошлое поведение |
| Рекомендуемый ответ | обязателен на каждый вопрос | запрещён (правило «не наводи») |
| Артефакт | протокол docs/grilling/ |
discovery-brief / system-snapshot |
| Выход | решение выковано, фронт развилок пуст | проблема вскрыта, brief в brainstorming |
Правило разведения одной фразой: grilling куёт решение, которое уже есть; discovery-interview вскрывает проблему, когда решения ещё нет. Подсказанный ответ в первом случае ускоряет (заказчику достаточно подтвердить), во втором — отравляет (заказчик согласится из вежливости).
GR2 — граница с #19 superpowers:brainstorming
brainstorming порождает варианты решения; grilling обстреливает выбранный до пустого фронта развилок. Порядок в связке L1:
#55 discovery-interview → brainstorming → #90 grilling → writing-plans
→ subagent-driven-development
Классификация planning, вес 0.8 — ниже первичных решателей #19/#41/#42,
чтобы grilling не перехватывал обычные планировочные задачи.
GR3 — вендоринг и надстройка проекта
Тело апстрима не модифицируется. Всё добавленное проектом вынесено ниже разделителя «Добавлено нами», чтобы происхождение всегда было различимо, а обновления апстрима подтягивались ручной сверкой.
Надстройка (мотив — боль из Context):
- Протокол на диске
docs/grilling/ГГГГ-ММ-ДД-<тема>.md, три раздела: Решили / Отрезали и почему / Осталось открытым. Пишется по ходу после каждого подтверждённого ответа (обрыв сессии не должен съедать сделанное), перечитывается первым делом после компакта контекста. Раздел «Отрезали» — это и есть запрошенный заказчиком видимый список отрезанного: обход дерева решений естественно порождает отброшенные ветки, оригинал их нигде не фиксирует. - Порядок обхода «сначала необратимое» — деньги и списания, схема БД, что уходит наружу клиенту; косметика в конец очереди.
- Критерий остановки — не «кажется, понятно», а пустой фронт развилок, объявляемый вслух, чтобы заказчик мог возразить «а про это не спросил». Уточняет расплывчатое оригинальное «shared understanding».
- «Слушай, не защищай» — заимствовано из #55: критику существующего не оправдывать.
Сознательно не заимствовано из #55: запрет наводящих вопросов (убил бы главную механику grilling), JTBD/«5 почему» (метод про вскрытие боли, не про выбор из вариантов), режим SYSTEM.
Consequences
Плюсы. Закрывается класс «договорённость сгорела при компакте» — впервые у приёмочного листа появляется файловый носитель. Появляется проверяемый критерий завершённости обсуждения вместо ощущения контроллера. Отброшенные варианты перестают быть невидимыми.
Минусы и риски. Ещё один интервью-инструмент рядом с #55 — риск путаницы снят только границей GR1, её нужно соблюдать. Скил живёт вне репозитория (user-level), поэтому не попадает в резервную копию проекта и не версионируется вместе с ним; при переезде на другую машину его нужно ставить руками. Обновления апстрима не приезжают автоматически — сверка ручная (GR3).
Не сделано намеренно. Тесты триггеров (как 20/20 для #55) не прогонялись — скил ручного вызова, авто-инвокация не критична. Отдельный хук/enforcement не заводился: инструмент рекомендательный, принуждение к нему не предполагается.
Связано
- Реестр:
docs/Tooling_v8_3.mdПрил. Н §4.63 (#90), v2.26 - Узел:
docs/registry/nodes.yaml#90, контрактdocs/registry/contracts/grilling.contract.json - Routing:
docs/routing-off-phase.md— связка L1, граница #90 ↔ #55 - Соседи: ADR-009 (discovery-interview #55), ADR-017 (graphify #86 — отклонённый Understand-Anything был дублем к нему)
- Память:
feedback-priemochnyy-list-i-limit-konteksta