Forge
markdowndeeb25a2
1# ADR 0044: Разделение ролей — Avalonia как хост («фюзеляж»), кастомная отрисовка для чата агента (Skia как гипотеза)
2
3**Статус:** Accepted · Implemented
4**Дата:** 2026-04-13
5**Обновлено:** 2026-04-13 — порядок итераций: **модель первична**, UI и спайк отрисовки следом. Подробности — [§ История](#adr0044-history).
6## Связанные ADR
7
8| ADR | Роль |
9|-----|------|
10| [0031](0031-agent-chat-clarification-batches-and-threading.md) | пакеты уточнений, выход за линейную ленту |
11| [0039](0039-workspace-navigation-affordances.md) | Semantic Map; `ILayoutEngine`, Skia в перспективе |
12| [0017](0017-multi-window-workspace-and-agent-surfaces.md) | зона MFD, `MfdShellView` |
13| [0038](0038-agent-facade-ai-provider-and-tool-orchestration.md) | фасад агента |
14| [0043](0043-mcp-transport-recovery-human-agent-parity.md) | транспорт MCP |
15
16### Вне ADR
17
18| Документ | Роль |
19|----------|------|
20| [north-star — переход из Cursor](../design/north-star-cursor-mcp-cascade-workbench-v1.md) | снять трение |
21
22---
23## Контекст
24
25Продуктовая цель **уйти от привычки держать Cursor ради чата** требует, чтобы разговор с агентом **внутри CascadeIDE** был **удобным и обозримым** — иначе трение миграции остаётся высоким независимо от силы редактора и MCP.
26
27Параллельно обсуждается архитектурная рамка: **Avalonia** как надёжный **хост** (окно, DPI, ввод, мониторы, жизненный цикл `TopLevel`, общий каркас кокпита), а не как единственный носитель **всей** сложной визуализации навсегда. Для поверхностей вроде **нестрочного** чата (ветки, обзор пакета уточнений, плотная структура вместо одной ленты — см. [0031](0031-agent-chat-clarification-batches-and-threading.md)) и родственных «карт» контекста разумно рассмотреть **отдельный слой отрисовки**; **Skia** — проверяемый кандидат (в т.ч. стык с [Semantic Map / укладкой](0039-workspace-navigation-affordances.md)).
28
29<a id="adr0044-p1"></a>
30
31## Решение (направление, без фиксации сроков)
32
331. **Явно разделить роли:** слой **Avalonia** — фюзеляж: размещение зон, стандартные контролы там, где достаточно, интеграция с остальной кабиной. Слой **кастомной отрисовки** (целевой кандидат — **Skia**) — «приборы» в зоне чата/агента и согласованных поверхностях, **без** обещания переписать весь IDE на Skia.
34
352. **Модель первична, UI не обязателен для старта:** в первую очередь — **каноническая модель** потока диалога и сессии (события, сущности, пакеты уточнений, стабильные идентификаторы, привязки к артефактам — направление [0031](0031-agent-chat-clarification-batches-and-threading.md)). Её можно проектировать и проверять **без** нового UI (тесты, сериализация, сценарии). При удачном разделении слоёв **набросать представление поверх** — проще, чем выводить структуру из нарисованного интерфейса.
36
373. **Спайк отрисовки** (в т.ч. Skia) — **после** или **параллельно** черновику модели, на **синтетических** данных или на модели, когда контуры ясны; цель — риски хоста/отрисовки, а не угадывание доменной формы по пикселям.
38
394. **Модель и пиксели ортогональны:** будь то Skia или Avalonia-контролы в зоне чата, это **не** отменяет требований к модели; этот ADR фиксирует **разделение ответственности хост/отрисовка**, а не единственную библиотеку.
40
41<a id="adr0044-p2"></a>
42
43## Последствия
44
45- Возможное сосуществование **двух стилей** UI (Avalonia и Skia-остров) — нужны **границы**, общие токены цвета/типографики и дисциплина, чтобы не разъехались стиль и баги.
46- Масштабирование сценария чата **после** выводов спайка, не до.
47- Ранние **автотесты на модели** (без UI) снижают стоимость смены представления.
48
49## Отклонённые альтернативы (на данном этапе)
50
51- **Считать качество чата второстепенным** по сравнению с редактором — отклонено для цели «жить в CIDE без Cursor ради разговора».
52- **Переписать весь чат на Skia одним махом** — отклонено без измеримого спайка и модели данных.
53- **Начинать со слоя отрисовки без канона модели** — отклонено: риск зацементировать неверную структуру в графике.
54
55---
56
57## История изменений
58
59<a id="adr0044-history"></a>
60
61| Дата | Изменение |
62|------|-----------|
63| 2026-04-13 | порядок итераций: **модель первична**, UI и спайк отрисовки следом. |
64
View only · write via MCP/CIDE