Files
portal/docs/adr/ADR-021-grilling-tooling.md
T
Дмитрий 05c22b3364 feat(инструменты): #90 grilling — допрос по готовому решению + нормативная синхронизация
Зарегистрирован вендоренный скил 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>
2026-07-28 16:16:25 +03:00

9.7 KiB
Raw Blame History

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-interviewbrainstorming#90 grillingwriting-planssubagent-driven-development

Классификация planning, вес 0.8 — ниже первичных решателей #19/#41/#42, чтобы grilling не перехватывал обычные планировочные задачи.

GR3 — вендоринг и надстройка проекта

Тело апстрима не модифицируется. Всё добавленное проектом вынесено ниже разделителя «Добавлено нами», чтобы происхождение всегда было различимо, а обновления апстрима подтягивались ручной сверкой.

Надстройка (мотив — боль из Context):

  1. Протокол на диске docs/grilling/ГГГГ-ММ-ДД-<тема>.md, три раздела: Решили / Отрезали и почему / Осталось открытым. Пишется по ходу после каждого подтверждённого ответа (обрыв сессии не должен съедать сделанное), перечитывается первым делом после компакта контекста. Раздел «Отрезали» — это и есть запрошенный заказчиком видимый список отрезанного: обход дерева решений естественно порождает отброшенные ветки, оригинал их нигде не фиксирует.
  2. Порядок обхода «сначала необратимое» — деньги и списания, схема БД, что уходит наружу клиенту; косметика в конец очереди.
  3. Критерий остановки — не «кажется, понятно», а пустой фронт развилок, объявляемый вслух, чтобы заказчик мог возразить «а про это не спросил». Уточняет расплывчатое оригинальное «shared understanding».
  4. «Слушай, не защищай» — заимствовано из #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