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

ADR 0003: Отдельный UI-режим Debug (не кокпит Power)

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

Связанные ADR

ADR Роль
0001 Хранение гипотез отладки в одном JSON-файле

Вне ADR

Документ Роль
ux/cascade-ide-ui-layout-v1.md текущие Focus / Balanced / Power

Контекст

Режим Power перегружен телеметрией, trace агента, очередью задач и кокпитом автономного сценария. Сценарий «в основном отладка» (брейкпоинты, стек, переменные, гипотезы, воспроизведение бага) не должен требовать включения всего этого слоя. IDE в таком сценарии — наблюдатель и исполнитель MCP (состояние отладки, команды, UI под агента), а диалог с агентом и автономные сценарии остаются в Cursor; встроенный чат IDE не дублирует роль основного чата.

Решение

Ввести отдельный UI-режим Debug (имя в меню/реестре режимов уточняется при реализации):

  • Сфокусированная раскладка под отладку и связанные панели (в т.ч. гипотезы — ADR 0001).
  • Минимальный хром: без Quick Actions, без нижней панели «терминал / сборка / git / …» по умолчанию; сборка и консоль по сценарию — в Cursor или по явному включению в «Вид», не как постоянная оболочка режима.
  • Скрытие или сильное сокращение Power-специфики (очередь задач кокпита, лишняя телеметрия агента там, где не нужна задаче отладки).
  • Сохранение общего принципа 0002-debug-human-agent-parity.md: состояние отладки одно для человека и MCP.

Карта видимости панелей (целевое состояние)

Ориентир по зонам главного окна — ux/cascade-ide-ui-layout-v1.md. Таблица ниже — не «комментарии», а два ответа на строку: что режим Debug оставляет на экране и что в этом режиме не показываем (относительно Power и частично Balanced). Детали хоткеев и биндингов — в спецификации UI при появлении режима в коде.

Зона Показываем в Debug Не показываем в Debug
Task cockpit (строка под тулбаром) Минимум: то, что нужно для запуска под отладчиком и навигации по задаче (без дублирования полноценной «рабочей» полосы) Quick Actions (Balanced / capability quick_actions); блок Autonomous и остальная разметка кокпита при семье Power (UiModeFamily.Power)
Solution Explorer Дерево решения, навигация по файлам Очередь PowerTaskQueueItems под деревом (в Power — да, в Debug — нет)
Колонка редактора 1–2 группы редакторов; панель стек/переменные при активной DAP-сессии Третья группа по умолчанию (как в Power); встроенный вывод сборки под редактором — по умолчанию не показываем (сборка вне фокуса режима); Power-хром доков, если только для Power
Правая колонка (чат) По умолчанию не занимаем место под чат: ChatPanelExpanded: false в спеке режима, ширина колонки 0 px (без узкой полоски), сплиттер перед чатом скрыт; площадь отдаём редактору и отладочным панелям. Вернуть чат — «Вид → Чат», кнопка Show chat на тулбаре или MCP Развёрнутый встроенный чат как в Balanced/Power; Agent Trace; Agent Operations; Power-разметка чата. Смысл: основной чат — в Cursor, автономность в IDE отложена, дублировать ленту диалога в окне отладки не нужно
Полоса телеметрии Минимум информации; статус отладки уместен, остальное (сборка/тесты/git) — по желанию или скрыто, чтобы не дублировать сценарий «всё в Cursor» Расширенный Power-cockpit и дубли, которые есть только в Power
Нижняя панель По умолчанию свёрнута или только смысловые для отладки: вкладка «Отладка» (стек/переменные в доке), рядом — вкладка «Гипотезы» (список из 0001); см. ниже Терминал, Build output, Git, События, Тестыне разворачиваем по умолчанию; доступ через «Вид», если без них никак (воспроизведение, ручной git и т.д.)

Гипотезы: зона UI (решено)

  • Правая колонка чата — не используем для списка гипотез (чат в Cursor; колонка в Debug по умолчанию свёрнута).
  • Целевой вариант: отдельная вкладка «Гипотезы» в нижней панели, на одной полосе с «Отладка» — общий отладочный контекст; разворот нижней панели — через «Вид», когда нужен список или стек в доке.
  • Запасной вариант (только если при реализации окажется тесно): часть списка или дубль — в колонке редактора рядом со стек/переменными; приоритет всё равно у вкладки в нижней панели.

Брейкпоинты: зона UI, модель данных, агент

  • Зона окна: отдельная колонка под «список брейкпоинтов» не требуется. Сейчас точки задаются в gutter колонки редактора; если позже появится список с действиями — логично разместить его в отладочной зоне (нижняя панель / рядом с панелью стек/переменные), а не как четвёртая колонка главного окна.
  • Модель: одна запись в хранилище (.dotnet-debug-mcp-breakpoints.json / BreakpointEntry) — активная точка; переключение в UI снимает запись или добавляет её, без состояния «выключено, но строка на месте» как в Visual Studio.
  • Граница продукта: режим enabled/disabled без удаления из JSON сознательно не в scope, пока нет явного запроса и отдельного решения по схеме и DAP. Если понадобится — отдельный ADR или дополнение к хранилищу брейкпоинтов.
  • Агент (Cursor / MCP): источник правды для списка — файл на диске и инструменты вроде debug_list_breakpoints; push в чат нет. После правок человеком в IDE агент увидит актуальное состояние при следующем чтении файла или вызове инструмента, не мгновенно.

Начальная раскладка (реестр режимов)

При добавлении в UiModeLayoutRegistry (или аналога) режим Debug задаётся отдельной UiModeLayoutSpec: дерево включено, TerminalVisible: false, BuildOutputVisible: false, ChatPanelExpanded: false, число групп редактора — 1–2; нижняя панель и встроенный вывод сборки под редактором — по умолчанию выключены в спеке или свёрнуты. Точные значения фиксируются в коммите, который вводит режим.

Точная карта контролов и хоткеи — в обновлении cascade-ide-ui-layout-v1 (или преемника) после появления режима в коде.

Последствия

  • Потребуется расширение UiModeLayoutRegistry / аналога и условной видимости, а не только новая вкладка внутри Power.
  • Документация режимов обновляется, когда режим появится в коде.

Отклонённые альтернативы

  • Только Power + новая вкладка без отдельного режима — отклонено как не дающее нужной изоляции сценария «только отладка».
  • Полное дублирование окна — не требуется; достаточно режима в том же главном окне.