Forge
markdowndeeb25a2
1# Monaco presentation projection (v1) — companion
2
3**Статус:** companion к канону
4**Дата:** 2026-06-24
5**Канон:** [ADR 0164](../adr/0164-monaco-editor-presentation-projection-and-dock-chrome.md)
6
7Краткая шпаргалка по push-DTO и файлам. Полный контекст, альтернативы и последствия — в ADR.
8
9## Три слоя
10
11| Слой | Владелец |
12|------|----------|
13| Substrate | `WorkspaceDiagnosticsCoordinator`, LSP hosts |
14| Presentation projection (C#) | `MonacoEditorPresentationProjector`, `MonacoEditor*Mapper` |
15| Thin host (JS) | `decoration-layer-manager.js`, `cide-editor-bridge.js` |
16
17## Контракт push-DTO
18
19- **Whole-line decorations:** `startLine` / `endLine` (1-based); offset не используется.
20- **Token spans:** `startOffset` + `length`.
21- **Inlay:** `atEndOfLine: true` → column только в JS (`getLineMaxColumn`).
22- **Version:** `expectedModelVersion` на `setDecorations` / `setInlayHints`.
23
24## Политика inline (0085)
25
26`MonacoEditorPresentationProjector.MergeInlayHints`: без var-inlay на строках с диагностикой.
27
28## Файлы
29
30| Файл | Роль |
31|------|------|
32| `MonacoEditorPresentationProjector.cs` | Единая точка HUD push |
33| `MonacoEditorDiagnosticsMapper.cs` | strips → line decorations + EOL inlays |
34| `decoration-layer-manager.js` | CECB decoration layers |
35| `DocumentsWorkspaceViewModel.cs` | `BindDockChrome` / `UnbindDockChrome` |
36
View only · write via MCP/CIDE