Перейти к содержанию

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 / укладкой).

Решение (направление, без фиксации сроков)

  1. Явно разделить роли: слой Avalonia — фюзеляж: размещение зон, стандартные контролы там, где достаточно, интеграция с остальной кабиной. Слой кастомной отрисовки (целевой кандидат — Skia) — «приборы» в зоне чата/агента и согласованных поверхностях, без обещания переписать весь IDE на Skia.

  2. Модель первична, UI не обязателен для старта: в первую очередь — каноническая модель потока диалога и сессии (события, сущности, пакеты уточнений, стабильные идентификаторы, привязки к артефактам — направление 0031). Её можно проектировать и проверять без нового UI (тесты, сериализация, сценарии). При удачном разделении слоёв набросать представление поверх — проще, чем выводить структуру из нарисованного интерфейса.

  3. Спайк отрисовки (в т.ч. Skia) — после или параллельно черновику модели, на синтетических данных или на модели, когда контуры ясны; цель — риски хоста/отрисовки, а не угадывание доменной формы по пикселям.

  4. Модель и пиксели ортогональны: будь то Skia или Avalonia-контролы в зоне чата, это не отменяет требований к модели; этот ADR фиксирует разделение ответственности хост/отрисовка, а не единственную библиотеку.

Последствия

  • Возможное сосуществование двух стилей UI (Avalonia и Skia-остров) — нужны границы, общие токены цвета/типографики и дисциплина, чтобы не разъехались стиль и баги.
  • Масштабирование сценария чата после выводов спайка, не до.
  • Ранние автотесты на модели (без UI) снижают стоимость смены представления.

Отклонённые альтернативы (на данном этапе)

  • Считать качество чата второстепенным по сравнению с редактором — отклонено для цели «жить в CIDE без Cursor ради разговора».
  • Переписать весь чат на Skia одним махом — отклонено без измеримого спайка и модели данных.
  • Начинать со слоя отрисовки без канона модели — отклонено: риск зацементировать неверную структуру в графике.

История изменений

Дата Изменение
2026-04-13 порядок итераций: модель первична, UI и спайк отрисовки следом.