ADR 0044: Разделение ролей — Avalonia как хост («фюзеляж»), кастомная отрисовка для чата агента (Skia как гипотеза)¶
Статус: Accepted · Implemented
Дата: 2026-04-13
Обновлено: 2026-04-13 — порядок итераций: модель первична, UI и спайк отрисовки следом. Подробности — § История.
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0031 | пакеты уточнений, выход за линейную ленту |
| 0039 | Semantic Map; ILayoutEngine, Skia в перспективе |
| 0017 | зона MFD, MfdShellView |
| 0038 | фасад агента |
| 0043 | транспорт MCP |
Вне ADR¶
| Документ | Роль |
|---|---|
| north-star — переход из Cursor | снять трение |
Контекст¶
Продуктовая цель уйти от привычки держать Cursor ради чата требует, чтобы разговор с агентом внутри CascadeIDE был удобным и обозримым — иначе трение миграции остаётся высоким независимо от силы редактора и MCP.
Параллельно обсуждается архитектурная рамка: Avalonia как надёжный хост (окно, DPI, ввод, мониторы, жизненный цикл TopLevel, общий каркас кокпита), а не как единственный носитель всей сложной визуализации навсегда. Для поверхностей вроде нестрочного чата (ветки, обзор пакета уточнений, плотная структура вместо одной ленты — см. 0031) и родственных «карт» контекста разумно рассмотреть отдельный слой отрисовки; Skia — проверяемый кандидат (в т.ч. стык с Semantic Map / укладкой).
Решение (направление, без фиксации сроков)¶
-
Явно разделить роли: слой Avalonia — фюзеляж: размещение зон, стандартные контролы там, где достаточно, интеграция с остальной кабиной. Слой кастомной отрисовки (целевой кандидат — Skia) — «приборы» в зоне чата/агента и согласованных поверхностях, без обещания переписать весь IDE на Skia.
-
Модель первична, UI не обязателен для старта: в первую очередь — каноническая модель потока диалога и сессии (события, сущности, пакеты уточнений, стабильные идентификаторы, привязки к артефактам — направление 0031). Её можно проектировать и проверять без нового UI (тесты, сериализация, сценарии). При удачном разделении слоёв набросать представление поверх — проще, чем выводить структуру из нарисованного интерфейса.
-
Спайк отрисовки (в т.ч. Skia) — после или параллельно черновику модели, на синтетических данных или на модели, когда контуры ясны; цель — риски хоста/отрисовки, а не угадывание доменной формы по пикселям.
-
Модель и пиксели ортогональны: будь то Skia или Avalonia-контролы в зоне чата, это не отменяет требований к модели; этот ADR фиксирует разделение ответственности хост/отрисовка, а не единственную библиотеку.
Последствия¶
- Возможное сосуществование двух стилей UI (Avalonia и Skia-остров) — нужны границы, общие токены цвета/типографики и дисциплина, чтобы не разъехались стиль и баги.
- Масштабирование сценария чата после выводов спайка, не до.
- Ранние автотесты на модели (без UI) снижают стоимость смены представления.
Отклонённые альтернативы (на данном этапе)¶
- Считать качество чата второстепенным по сравнению с редактором — отклонено для цели «жить в CIDE без Cursor ради разговора».
- Переписать весь чат на Skia одним махом — отклонено без измеримого спайка и модели данных.
- Начинать со слоя отрисовки без канона модели — отклонено: риск зацементировать неверную структуру в графике.
История изменений¶
| Дата | Изменение |
|---|---|
| 2026-04-13 | порядок итераций: модель первична, UI и спайк отрисовки следом. |