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

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; поведение без третьего монитора.