ADR 0056: Semantic Map adoption of Skia composition pipeline¶
Статус: Accepted · Implemented
Дата: 2026-04-17
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0053 | controlFlow intent, раскладка |
| 0055 | Общий Skia pipeline |
| 0067 | Контракт graph-backed surface |
Контекст¶
После внедрения controlFlow для Semantic Map выяснилось:
- Layout и политика плотности были частично размазаны между VM/контролом/движком.
- На компактном PFD viewport узлы слипались, чтение маршрута ухудшалось.
- Поведение MCP без явных
line/columnтребовало предсказуемого fallback к текущему курсору.
Решение¶
1) Перевести Semantic Map на отдельный композитор инструмента¶
Введён CodeNavigationMapCompositor как первый доменный адаптер общего подхода из ADR 0055:
- выбор layout по
semantic_map.level; - вычисление рекомендуемой высоты viewport для читаемости;
- возврат scene + параметров отображения.
2) Явно разделить file/controlFlow композицию¶
fileиспользует компактную схему (исторический star layout);controlFlowиспользует вертикальный flight-plan layout с большим шагом между уровнями.
3) Сохранить семантику метода "под курсором"¶
Для controlFlow:
- без валидной позиции не делать fallback на "первый метод файла";
- если
line/columnне переданы через MCP, подставлять текущую позицию каретки; - при отсутствии позиции и каретки возвращать пустой подграф, а не ложный контент.
Последствия¶
Плюсы¶
- Semantic Map стала первым валидированным потребителем общего pipeline.
- Граница "instrument internals vs host surface" стала прозрачной в коде.
- Улучшена читаемость controlFlow в узком viewport.
Минусы¶
- Появился дополнительный слой композиции и новые тесты.
- Declutter-policy пока минимальный и требует дальнейшей эволюции.
Реализация (срез)¶
Services/Navigation/CodeNavigationMapCompositor.csServices/Navigation/ICodeNavigationMapCompositor.csViewModels/MainWindowViewModel.WorkspaceNavigationMap.csViews/WorkspaceNavigationMapView.axamlServices/Navigation/CodeNavigationMapControlFlowGraphLayoutEngine.csServices/CodeNavigation/CodeNavigationControlFlowSubgraphBuilder.cs
Тесты¶
CodeNavigationMapCompositorTestsCodeNavigationMapControlFlowGraphLayoutEngineTestsCodeNavigationControlFlowSubgraphBuilderTestsCodeNavigationControlFlowMcpCursorFallbackTests