ADR 0059: Профили Roslyn MCP, Manager, тактика/стратегия и EFB (MFD)¶
Статус: Proposed
Дата: 2026-04-18
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0058 | секция [agent.roslyn_mcp], оси лимитов/kinds/таймаутов/пресетов — этот ADR не дублирует ключи TOML, а описывает поведение и сценарии поверх них |
| 0010 | UI-режимы — отдельная ось |
| 0017 | окна, presentation, MFD |
| 0021 | PFD / MFD |
| 0050 | инструмент → слот |
| 0051 | intent routing |
| 0053 | Semantic Map, control flow |
| 0055 | declutter на PFD |
Контекст¶
0058 вводит декларативные параметры сопряжения агент ↔ Roslyn MCP в settings.toml. Отдельно нужно зафиксировать продуктовое поведение: несколько именованных профилей, кто переключает активный профиль, режимы (тактические сигналы среды) и использование дополнительного монитора как «стратегической» карты — без раздувания 0058.
Решение¶
1. Несколько профилей в TOML и Manager¶
Помимо плоского набора ключей в [agent.roslyn_mcp] (0058), предполагаются несколько именованных профилей сопряжения — целостных наборов параметров (лимиты, depth, фильтры kinds, таймауты, пресеты запросов к MCP), заранее описанных и проверяемых в TOML. Имена в духе Profile.Flight, Profile.Debug, Profile.DeepScan, Profile.GlobalMap — иллюстрации; в реализации — таблицы вроде [[agent.roslyn_mcp.profiles]] с полем id (схема при внедрении).
Инвариант: переключение активного профиля — выбор одного из заранее валидных наборов для контракта с Roslyn MCP, а не подмена произвольных ключей «на лету» как при агрессивном hot-reload всего конфига. Слой Manager (рабочее имя) в IDE:
- держит ссылку на текущий профиль;
- применяет его к запросам к Roslyn MCP и к согласованному слою Semantic Map: тактика — PFD/Forward (0053); стратегия (EFB) — MFD, не PFD (см. §3);
- не генерирует недетерминированные комбинации параметров в обход TOML.
Ось UI 0010 и ось профилей сопряжения — разные. Допустимы независимое переключение, политика маппинга «UI-режим → профиль по умолчанию», явная таблица в TOML. Без явной политики не считать Profile.Flight синонимом mode = "Flight" в workspace.
Переключение тактических режимов (§2) — по намерению и/или автоматически по сигналам среды; гистерезис и приоритеты сигналов относятся только к этому контуру (Forward / PFD), а не к EFB на MFD.
2. Режимы: Auto-Focus, Combat, Echelon¶
| Режим (рабочие имена) | Триггер (идея) | Эффект на контракт / карту |
|---|---|---|
| Auto-Focus | Движение курсора / смена символа в Forward | Сужение контракта: семантика вокруг текущего метода; соседи в пределах scoping без графа всего решения. |
| Combat Mode | Диагностика Roslyn (ошибка в релевантном блоке) | Расширение контракта (depth++, доп. kinds/рёбра) для поиска причины в зависимостях; на PFD — связи, скрытые declutter в спокойном профиле (0055). |
| Echelon | Спокойный ввод без «войны» диагностик | Минимум шума: реже обновлять граф, не пульсировать карту на каждый keystroke. |
Имя Echelon: спокойный «эшелон» работы (ровный слой), без путаницы с glide path ILS; черновое имя Glide Slope отброшено как двусмысленное.
Связь с 0051: переключение профиля из UI-команды, MCP или политики «intent → профиль» — фиксировать явно, без скрытой магии.
3. EFB на MFD (третий монитор): стратегический профиль¶
Норма зон: EFB — это режим и поверхность MFD, не PFD. PFD (0021) остаётся зоной тактики (текущий контекст, control flow, combat-declutter — §2). MFD — зона стратегической карты (глобальный/слойный скелет), в том числе на отдельном мониторе (0017).
Намерение: вынести на третий монитор (типично второй TopLevel под MFD) профиль в статичном режиме — по смыслу Electronic Flight Bag (EFB): иной масштаб времени и пространства, чем у PFD впереди (в авиации: PFD — часто, планшет маршрута — реже; здесь аналог: тактика на PFD vs карта на MFD).
| Зона | Роль | Профиль (идея) | Частота обновления |
|---|---|---|---|
| Forward / PFD | Тактический | Динамический профиль, узкий MCP, граф под курсор / controlFlow (0053). |
Высокая (с учётом Echelon / debounce). |
MFD (в т.ч. третий монитор / TopLevel) |
Стратегический, EFB | Условно Profile.GlobalMap: скелет модуля/слоя. |
Низкая: не от каждого движения курсора; после фоновой компиляции (структура изменилась) или явного запроса; переключение профиля на этом контуре — по намерению, не в общем контуре эвристик §2. |
Инвариант: экран EFB не «мигает» в ритме курсора и не разделяет с PFD одну и ту же цепочку автоматических эвристик — смысл статики и намеренного обновления. Раздельные частоты — сопоставление поверхности (0017) и профиля, не дублирование одного состояния.
Открытый момент: привязка «профиль → окно / surface_id» (0050) и fallback без третьего монитора.
Последствия¶
- Реализация Manager и режимов может идти после появления секции 0058 в коде.
- Тесты: сценарии переключения профиля, отсутствие мигания стратегического вида при тактических событиях (политика).
Открытые вопросы¶
- Combat Mode: гистерезис при исчезновении ошибки.
- Echelon vs Auto-Focus: приоритет при одновременном движении курсора и наборе текста.
- Таблица UI-режим 0010 ↔ профиль: глобальная политика или только оверлей пользователя.
- Привязка стратегического профиля к TopLevel /
surface_id; поведение без третьего монитора.