ADR 0057: Chat surface adoption of Skia composition pipeline¶
Статус: Accepted · Implemented
Дата: 2026-04-17
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0031 | пакеты уточнений, threading |
| 0044 | ранняя гипотеза host/render split |
| 0055 | общий pipeline |
| 0056 | первый внедрённый consumer |
| 0072 | overview/detail layout и keyboard-first intent для тем поверх pipeline |
Контекст¶
После внедрения pipeline в Semantic Map (0056) следующий запланированный consumer — chat surface:
- треды,
- подтверждения (confirmations),
- приоритизация и declutter в режиме высокой плотности событий.
Чат в MfdShellView остаётся продуктовой MFD-поверхностью, но канонический surface теперь строится вокруг Skia pipeline snapshot, а не вокруг Avalonia list/tree.
Новый слой Skia нужен не для "замены ради замены", а для сценариев, где линейная лента не даёт достаточной ситуационной читаемости и не показывает ширину ветвления.
Решение¶
1) Принять chat surface как следующий pipeline-consumer¶
Чат переводится на тот же composition-подход из 0055:
- Intent: построение модели текущего состояния диалога (треды, pending confirmations, активные ветви).
- Declutter: приоритизация сообщений/подтверждений и компрессия шумовых элементов.
- Layout: раскладка узлов разговора и карточек подтверждений.
- Render: Skia-отрисовка сцены.
2) Зафиксировать single product path через Skia surface¶
После появления snapshot-композитора:
ChatPanelViewостаётся host-контейнером и формой ввода, но не альтернативной лентой;- продуктовый рендер чата идёт через единый Skia surface;
- legacy Avalonia list-path не считается обязательным fallback.
Avalonia остаётся shell/host-слоем, а не параллельной продуктовой реализацией chat scene.
3) Выделить чатовые intent-единицы как first-class¶
Минимальный набор доменных сущностей для v1:
ThreadNode,MessageNode,ConfirmationNode,DecisionEdge(ask,confirm,resolve,supersede).
Слой layout не должен вычислять эти сущности из UI-дерева; он получает их из Intent-stage.
Последствия¶
Плюсы¶
- Чат становится консистентным с общей моделью Skia-инструментов (0055).
- Треды/подтверждения получают явно управляемую композицию, а не "плоскую ленту с костылями".
- Reuse pipeline-практик, уже проверенных на Semantic Map.
Минусы¶
- Увеличивается сложность chat-подсистемы.
- Требуется держать строгие snapshot/contract tests, потому что surface больше не дублируется вторым UI-путём.
Не-цели¶
- Не возвращать параллельный Avalonia list-path как "страховочный" baseline без новой ADR.
- Не фиксировать здесь итоговый visual language (цвета, типографика, анимации) — это отдельные UX-итерации.
- Не менять MCP-контракты чата в этой ADR без отдельной контрактной фиксации.
План внедрения (минимум)¶
- Ввести каркас
ChatSurfaceCompositorи stage-контракты (Intent/Declutter/Layout) в стиле 0055. - Поднять intent-слой:
ThreadNode/MessageNode/ConfirmationNode/DecisionEdgeповерх канонической истории диалога. - Подключить
ClarificationBatch/ClarificationResponseк реальному chat flow и MCP entrypoints, без строкового схлопывания как единственной правды. - Добавить snapshot/contract-тесты композиции и threading/clarification сценариев.