Forge
markdowndeeb25a2
1# ADR 0003: Отдельный UI-режим Debug (не кокпит Power)
2
3**Статус:** Accepted (продуктовое направление); **реализация** — по плану релизов
4**Дата:** 2026-04-02
5## Связанные ADR
6
7| ADR | Роль |
8|-----|------|
9| [0001](0001-debug-hypotheses-json-storage.md) | Хранение гипотез отладки в одном JSON-файле |
10
11### Вне ADR
12
13| Документ | Роль |
14|----------|------|
15| [ux/cascade-ide-ui-layout-v1.md](../ui-ux/cascade-ide-ui-layout-v1.md) | текущие Focus / Balanced / Power |
16
17---
18## Контекст
19
20Режим **Power** перегружен телеметрией, trace агента, очередью задач и кокпитом автономного сценария. Сценарий «**в основном отладка**» (брейкпоинты, стек, переменные, гипотезы, воспроизведение бага) не должен требовать включения всего этого слоя. IDE в таком сценарии — **наблюдатель и исполнитель MCP** (состояние отладки, команды, UI под агента), а **диалог с агентом и автономные сценарии** остаются в **Cursor**; встроенный чат IDE не дублирует роль основного чата.
21
22## Решение
23
24Ввести отдельный **UI-режим Debug** (имя в меню/реестре режимов уточняется при реализации):
25
26- Сфокусированная раскладка под отладку и связанные панели (в т.ч. гипотезы — [ADR 0001](0001-debug-hypotheses-json-storage.md)).
27- **Минимальный хром:** без Quick Actions, без нижней панели «терминал / сборка / git / …» по умолчанию; сборка и консоль по сценарию — в **Cursor** или по явному включению в «Вид», не как постоянная оболочка режима.
28- Скрытие или сильное сокращение Power-специфики (очередь задач кокпита, лишняя телеметрия агента там, где не нужна задаче отладки).
29- Сохранение общего принципа [0002-debug-human-agent-parity.md](0002-debug-human-agent-parity.md): состояние отладки одно для человека и MCP.
30
31### Карта видимости панелей (целевое состояние)
32
33Ориентир по зонам главного окна — [ux/cascade-ide-ui-layout-v1.md](../ui-ux/cascade-ide-ui-layout-v1.md). Таблица ниже — не «комментарии», а **два ответа на строку**: что режим Debug **оставляет на экране** и что в этом режиме **не показываем** (относительно Power и частично Balanced). Детали хоткеев и биндингов — в спецификации UI при появлении режима в коде.
34
35| Зона | Показываем в Debug | Не показываем в Debug |
36| --- | --- | --- |
37| **Task cockpit** (строка под тулбаром) | Минимум: то, что нужно для **запуска под отладчиком** и навигации по задаче (без дублирования полноценной «рабочей» полосы) | **Quick Actions** (Balanced / capability `quick_actions`); блок **Autonomous** и остальная разметка кокпита при семье **Power** (`UiModeFamily.Power`) |
38| **Solution Explorer** | Дерево решения, навигация по файлам | Очередь **PowerTaskQueueItems** под деревом (в Power — да, в Debug — нет) |
39| **Колонка редактора** | 1–2 группы редакторов; панель **стек/переменные** при активной DAP-сессии | Третья группа по умолчанию (как в Power); **встроенный вывод сборки** под редактором — по умолчанию **не показываем** (сборка вне фокуса режима); Power-хром доков, если только для Power |
40| **Правая колонка (чат)** | По умолчанию **не занимаем место под чат**: `ChatPanelExpanded: false` в спеке режима, ширина колонки **0 px** (без узкой полоски), сплиттер перед чатом скрыт; площадь отдаём редактору и отладочным панелям. Вернуть чат — «Вид → Чат», кнопка **Show chat** на тулбаре или MCP | Развёрнутый встроенный чат как в Balanced/Power; **Agent Trace**; **Agent Operations**; Power-разметка чата. Смысл: основной чат — в **Cursor**, автономность в IDE **отложена**, дублировать ленту диалога в окне отладки не нужно |
41| **Полоса телеметрии** | Минимум информации; **статус отладки** уместен, остальное (сборка/тесты/git) — по желанию или скрыто, чтобы не дублировать сценарий «всё в Cursor» | Расширенный Power-cockpit и дубли, которые есть только в Power |
42| **Нижняя панель** | По умолчанию **свёрнута** или только смысловые для отладки: вкладка **«Отладка»** (стек/переменные в доке), рядом — вкладка **«Гипотезы»** (список из [0001](0001-debug-hypotheses-json-storage.md)); см. ниже | **Терминал**, **Build output**, **Git**, **События**, **Тесты** — **не разворачиваем** по умолчанию; доступ через «Вид», если без них никак (воспроизведение, ручной git и т.д.) |
43
44### Гипотезы: зона UI (решено)
45
46- **Правая колонка чата** — не используем для списка гипотез (чат в Cursor; колонка в Debug по умолчанию свёрнута).
47- **Целевой вариант:** отдельная вкладка **«Гипотезы»** в **нижней панели**, на одной полосе с **«Отладка»** — общий отладочный контекст; разворот нижней панели — через «Вид», когда нужен список или стек в доке.
48- **Запасной вариант** (только если при реализации окажется тесно): часть списка или дубль — в колонке редактора рядом со стек/переменными; приоритет всё равно у вкладки в нижней панели.
49
50### Брейкпоинты: зона UI, модель данных, агент
51
52- **Зона окна:** отдельная колонка под «список брейкпоинтов» не требуется. Сейчас точки задаются **в gutter** колонки редактора; если позже появится список с действиями — логично разместить его в **отладочной** зоне (нижняя панель / рядом с панелью стек/переменные), а не как четвёртая колонка главного окна.
53- **Модель:** одна запись в хранилище (`.dotnet-debug-mcp-breakpoints.json` / `BreakpointEntry`) — **активная** точка; переключение в UI снимает запись или добавляет её, **без** состояния «выключено, но строка на месте» как в Visual Studio.
54- **Граница продукта:** режим **enabled/disabled** без удаления из JSON **сознательно не в scope**, пока нет явного запроса и отдельного решения по схеме и DAP. Если понадобится — отдельный ADR или дополнение к хранилищу брейкпоинтов.
55- **Агент (Cursor / MCP):** источник правды для списка — **файл на диске** и инструменты вроде `debug_list_breakpoints`; push в чат нет. После правок человеком в IDE агент увидит актуальное состояние при **следующем** чтении файла или вызове инструмента, не мгновенно.
56
57### Начальная раскладка (реестр режимов)
58
59При добавлении в `UiModeLayoutRegistry` (или аналога) режим Debug задаётся отдельной `UiModeLayoutSpec`: **дерево включено**, **`TerminalVisible: false`**, **`BuildOutputVisible: false`**, **`ChatPanelExpanded: false`**, **число групп редактора** — 1–2; нижняя панель и встроенный вывод сборки под редактором — по умолчанию выключены в спеке или свёрнуты. Точные значения фиксируются в коммите, который вводит режим.
60
61Точная карта контролов и хоткеи — в обновлении `cascade-ide-ui-layout-v1` (или преемника) после появления режима в коде.
62
63## Последствия
64
65- Потребуется расширение `UiModeLayoutRegistry` / аналога и условной видимости, а не только новая вкладка внутри Power.
66- Документация режимов обновляется, когда режим появится в коде.
67
68## Отклонённые альтернативы
69
70- **Только Power + новая вкладка** без отдельного режима — отклонено как не дающее нужной изоляции сценария «только отладка».
71- **Полное дублирование окна** — не требуется; достаточно режима в том же главном окне.
72
View only · write via MCP/CIDE