| 1 | # ADR 0092: Трек **Visual UI** (дизайнер разметки) — отдельная крупная программная линия CIDE |
| 2 | |
| 3 | **Статус:** Accepted (направление) |
| 4 | **Дата:** 2026-04-24 |
| 5 | |
| 6 | ## Связанные ADR |
| 7 | |
| 8 | | ADR | Роль | |
| 9 | |-----|------| |
| 10 | | [0022](0022-mfd-visual-design-surface-axaml-blazor.md) | Визуальная поверхность разработки UI (AXAML / Blazor) — ориентир WinForms, размещение на MFD | |
| 11 | --- |
| 12 | |
| 13 | <a id="adr0092-context"></a> |
| 14 | |
| 15 | --- |
| 16 | ## Контекст |
| 17 | |
| 18 | Визуальный дизайнер / live preview для **Avalonia (AXAML)**, **Blazor** и (опционально) **Razor** — по объёму **не** «одна фича на спринт»: хост превью, изоляция, синхронизация с текстом, дерево, property grid, по мере зрелости — drag-and-drop. Ему нужны **свой горизонт планирования** и **явная нарезка MVP**, иначе он конкурирует за внимание с критичным путём IDE или, наоборот, **теряется** без владельца. |
| 19 | |
| 20 | Отдельное обсуждение (2026-04-24): зафиксировать **трек** в ADR, чтобы в бэклоге и обсуждениях было ясно — это **CIDE Visual UI track** (условное имя), а детали UX и размещения остаются в **0022**. |
| 21 | |
| 22 | --- |
| 23 | |
| 24 | <a id="adr0092-decision"></a> |
| 25 | |
| 26 | ## Решение |
| 27 | |
| 28 | <a id="adr0092-p1"></a> |
| 29 | |
| 30 | 1. **Принять** направление **отдельной крупной программной линии** (трек) **Visual UI** в рамках Cascade IDE: визуальная работа с декларативной разметкой пользовательского UI (в первую очередь **.NET**-стек в фокусе CIDE), с **бэклогом** и **критериями готовности** по фазам, согласованными с [0022](0022-mfd-visual-design-surface-axaml-blazor.md). |
| 31 | |
| 32 | <a id="adr0092-p2"></a> |
| 33 | |
| 34 | 2. **Канонический ADR по продукту/UX** для этой линии — **[0022](0022-mfd-visual-design-surface-axaml-blazor.md)** (модель внимания, MFD, отсутствие второго `TopLevel` под превью, фазы MVP / следующий шаг / дальше, не-цели). **0092** отвечает на вопрос «**как это вести** как трек», а не «**как выглядит** в кокпите» — при противоречии приоритет у **0022** для продуктовых правил. |
| 35 | |
| 36 | <a id="adr0092-p3"></a> |
| 37 | |
| 38 | 3. **Порядок стеков (план приоритета, не сроки):** |
| 39 | - **Первая волна (ориентир):** **Avalonia / AXAML** — ближе к существующему хосту CIDE, предсказуемый контур превью. |
| 40 | - **Вторая волна:** **Blazor** — отдельный хост (браузер / WebView / изолят), сложнее границы design-time; сценарий пользователя тот же на уровне IDE ([0022 п. 4](0022-mfd-visual-design-surface-axaml-blazor.md)). |
| 41 | - **Razor (MVC/Pages) и смежное:** **не** часть обязательного MVP трека; отдельное решение (spike / отдельная эпик-задача), т.к. чаще **HTML+шаблоны**, а не дерево визуальных контролов — иначе размытие границ трека. |
| 42 | |
| 43 | <a id="adr0092-p4"></a> |
| 44 | |
| 45 | 4. **Связь с агентом и контрактом:** трек **ортогонален** [0008](0008-mcp-contracts-and-testable-infrastructure.md) и [0052](0052-agent-contract-cli-and-snapshot-tests.md): по мере появления стабильных **снимков/команд** для design surface (файл открыт, режим превью, выбор узла) — **расширения MCP/CLI** вносятся **сознательно**, с тем же требованием паритета JSON, **без** дублирования логики. До появления таких API трек **не** блокируется на «сначала все тулы агента». |
| 46 | |
| 47 | <a id="adr0092-p5"></a> |
| 48 | |
| 49 | 5. **Граница с другими треками:** **не** относить к этому трёку EICAS/HUD, «облачный inline» и прочие контуры, перечисленные в 0022 как **не-цели** с точки зрения зоны внимания; **не** путать **Cockpit UI** (приборы CIDE) с **дизайнером пользовательского приложения** — см. [0066](0066-cockpit-ui-vs-ide-presentation-layer.md). |
| 50 | |
| 51 | --- |
| 52 | |
| 53 | <a id="adr0092-consequences"></a> |
| 54 | |
| 55 | ## Последствия |
| 56 | |
| 57 | | Плюсы | Минусы / риски | |
| 58 | |--------|-----------------| |
| 59 | | Ясная **корзина** задач: легко говорить «в треке Visual UI / вне трека» | Нужна **дисциплина** не раздувать трек «всё про UI в мире» | |
| 60 | | **0022** остаётся единым местом продуктовых правил; 0092 не дублирует таблицу фаз | Два ADR вместо одного — зато меньше дрейфа «процесс vs продукт» | |
| 61 | | Порядок Avalonia → Blazor → (опц.) Razor снижает риск **одновременного** взрыва стеков | **Открытые вопросы 0022** (минимальный v1 по технологиям, вкладка MFD, двусторонняя синхронизация) — **по-прежнему** в 0022; трек не закрывает их автоматически | |
| 62 | |
| 63 | --- |
| 64 | |
| 65 | <a id="adr0092-open-questions"></a> |
| 66 | |
| 67 | ## Открытые вопросы |
| 68 | |
| 69 | - Явные **имена** в бэклоге/метках (одна линия GitLab / теги) — на усмотрение репо; в ADR зафиксировано **смысловое** имя *Visual UI* / *design surface* в связке с 0022. |
| 70 | - **SDK / плагины** ([0024](0024-ide-sdk-and-stable-contracts.md)): если дизайнер когда-либо вынесется в расширение, это **отдельное** ADR, не 0092. |
| 71 | |
| 72 | --- |
| 73 | |
| 74 | <a id="adr0092-rejected"></a> |
| 75 | |
| 76 | ## Отклонённые альтернативы |
| 77 | |
| 78 | - **Считать дизайнер только «частью» Markdown preview или WebView-ADR** — отклонено: слишком разный предмет (авторский Markdown vs **пользовательский** AXAML/Blazor). |
| 79 | - **Расширять 0022 таблицей «как вести бэклог»** — возможно, но вынесено в 0092, чтобы 0022 оставался **коротким** продуктовым ADR. |
| 80 | |