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