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 + новая вкладка без отдельного режима — отклонено как не дающее нужной изоляции сценария «только отладка».
- Полное дублирование окна — не требуется; достаточно режима в том же главном окне.