Перейти к содержанию

ADR 0011: Ситуационная осведомлённость в отладке (приоритет над «полной» нижней панелью)

Статус: Accepted (направление; конкретные экраны и хоткеи — по итерациям реализации)
Дата: 2026-04-02

Связанные ADR

ADR Роль
0002 единый слой состояния
0003 режим Debug
0012 плавающий хром — куда выносить полоски без конкуренции с высотой редактора

Вне ADR

Документ Роль
MCP-PROTOCOL.md команды отладки

Контекст

Пользователь при отладке нуждается в состоянии процесса (остановлен / выполняется, где остановка, зачем) и в ситуационной осведомлённости — без постоянного разворачивания нижней зоны на большую высоту.

Факт: увеличение высоты нижней панели (вывод, инструментирование, отладка) неизбежно съедает вертикаль редактора. Если единственный способ «понять отладку» — читать полный список locals/stack внизу, страдает чтение кода. При этом агент уже может получать стек и переменные через MCP; для человека нужен UX, который даёт осведомлённость в зоне взгляда и по месту в коде, не требуя держать панель раздутой.

Решение

1. Приоритет продукта в зоне отладки: состояние и ситуационная осведомлённость важнее, чем привычка «всегда видеть полную нижнюю панель. Детальный список переменных/стека остаётся нужен, но как вторичный**, раскрываемый слой.

2. Первичный слой (направление реализации): - Явное состояние отладки в постоянной или почти постоянной зоне: paused / running, по возможности причина остановки (breakpoint, step, exception), краткий контекст кадра (хотя бы верх стека одной строкой: метод / файл:строка). - Текущая строка в редакторе (подсветка, стрелка) остаётся обязательным якорем «где я в коде» — без ослабления 0002.

3. Компактная «полоска отладки» (или эквивалент: статус-бар / узкая зона под тулбаром): высота мала относительно редактора; при необходимости одна строка ключевой информации (например топ кадра + paused). Полная панель с вкладками — по явному действию (клик, хоткей, режим «детально»), а не единственный способ узнать состояние.

4. Углубление по месту в коде (направление): подсказки со значениями у идентификатора при наведении / у курсора (аналог Data Tips в VS), на базе DAP evaluate (или эквивалента адаптера) в контексте текущего кадра. Это снижает зависимость от списка locals в нижней панели для типичного «что в этой переменной».

5. Нижняя панель не объявляется вредной; она объявляется не обязательной для базовой осведомлённости. Разумные дефолты: не разворачивать автоматически на максимальную высоту при остановке, если есть полоска/статус; при желании — отдельная настройка «показать вкладку отладки при stop» (опционально, не блокер для п. 2п. 4).

6. Паритет с агентом (0002): текстовые ответы MCP (debug_stack_trace, debug_variables с раскрытием детей) остаются каналом полноты; UX человека дополняет их сжатым постоянным слоем и inline/hover, а не дублирует полный список везде.

Последствия

  • Появятся отдельные задачи на UI (полоска/статус), на evaluate при hover (связка с DAP и картой символов/смещений в редакторе), на политику высоты нижней зоны — без отмены существующей панели отладки.
  • Документация пользователя (позже): кратко описать «где смотреть состояние» и «как открыть полный стек/locals».
  • Конфликт с вертикальным сплиттером остаётся инженерным ограничением; этот ADR не требует отдельного окна вывода, но не запрещает его как последующую опцию.

Отклонённые альтернативы (как единственный ответ)

  • Только нижняя панель как источник правды об отладке для человека — отклонено как противоречащее приоритету осведомлённости без потери кода на экране.
  • Только MCP/агент без улучшения UI — отклонено: человек и агент остаются равноправными потребителями одного слоя состояния (0002), но UX человека должен быть самодостаточным без обязательного чата.