# Домен C — Shell / UX / лаунчер > Лицо продукта и **UI-хост**: Wayland-композитор, который рисует home/тайлы и темы, > и в слоты которого встраивается UI всех апов/плагинов. v0-артефакт и главный > UX-дифференциатор («красиво и не лагает» против китайских блоков). Статус: **v1 (на ревью).** Связано с: [architecture.md](../architecture.md) (#6 хостинг UI) · [ipc.md](../contracts/ipc.md) (`Shell`) · [plugin-sdk.md](../contracts/plugin-sdk.md) (UI-вклад) · [tech-stack.md](../tech-stack.md) (Slint) · [security-privacy.md](../contracts/security-privacy.md) (consent UI) · [principles.md](../principles.md) (#6,#11) · домены D, E --- ## 1. Назначение и границы - **Что делает:** хост UI + лаунчер + экраны + тема + driver-distraction; **сам является Wayland-композитором**. - First-party, но с привилегированной ролью композитора (поднимается рано, Stage 1). - **Границы:** не реализует логику апов (только хостит их UI); не трогает CAN/safety. ## 2. Композитор ⚠️ (корректировка `cage`) - Shell = **кастомный минимальный multi-client Wayland-композитор на `smithay`** (Rust, ложится на Rust-first). GPU — Panfrost/Mesa. - ⚠️ **`cage` (значился в tech-stack/dev-env) НЕ подходит:** это single-app kiosk-композитор, он не умеет хостить поверхности **нескольких** клиентских процессов — а наша слот-модель (решение #6) именно про это. `cage` остаётся лишь как инструмент раннего bring-up одного приложения. → правлю tech-stack и dev-environment. (Альтернатива smithay — wlroots, но это C-библиотека и нужны биндинги; smithay роднее.) - **Объём/риск и v0:** полноценный композитор — серьёзная работа, и **v0 её не требует** (нет сторонних плагинов, почти нет отдельных surface-апов). v0-shell стартует как **Slint-приложение** (home/тайлы/настройки, без внешних поверхностей); полный smithay-композитор включаем, когда придёт первый surface-ап (нав/медиа/камера) — это де-рискует v0. ## 3. Функции | функция | MVP/later | зависит от | фаза | |---------|-----------|------------|------| | Home с крупными тайлами | **MVP** | — | v0 | | Тема день/ночь (авто) | **MVP** | — | v0 | | Быстрый boot / первый кадр (Stage 1) | **MVP** | architecture §6 | v0 | | Slint-shell: home/тайлы/настройки (без внешних поверхностей) | **MVP** | — | v0 | | Декларативный рендер тайлов/карточек | **MVP** | — | v0 | | Полный smithay-композитор (мульти-клиент) + слот-поверхности | later | — | с первым surface-апом (нав/медиа) | | Статус-бар: время, сеть | **MVP** | Connectivity | v0 | | Статус-бар: быстрый статус машины | later | E | v2 | | Анимации/переходы (полировка) | **MVP** | — | v0 | | Экран настроек (растёт: тема/единицы v0 → голос/LLM v1 → плагины v3) | **MVP** | Settings | v0+ | | Интеграция ассистента (PTT + лог диалога) | **MVP** | D | v1 | | Driver-distraction режим | **MVP** | GPS(speed)→E | v1 (GPS) / v2 (OBD) | | Ввод с мультируля (кнопки руля) | later | K/E | v1/v2 | | UI управления разрешениями (review/revoke) | later | security-privacy | v3 | | Мультидисплей · профили водителей · виджеты | later | — | later | ## 4. Слот-модель (решение #6) Слоты: **home-грид**, **полноэкранная зона**, **оверлей** (ассистент/уведомления), **статус-бар**. Ап вкладывает в слот **декларативный элемент** или **Wayland-поверхность**. ## 5. Декларативный UI-DSL *(резолв отложенного вопроса)* - **Констрейнт-набор, не произвольная вёрстка:** `tile` (icon/title/value/state/action), `card`, простой `list`/`form` (для настроек) — всё **data-bound**. - Рендерит **сам shell** в Slint → единый стиль и безопасность (чужой код не исполняем). - Что не выражается этим набором → **Wayland-поверхность** (ап рисует сам). - Покрывает частые ~80% (тайлы/карточки/настройки); богатое (карта/видео) — поверхностью. ## 6. Тема и отклик - День/ночь — **авто** (v0: по времени / GPS-восходу; датчик освещённости и сигнал машины — later, их нет на старте), токены темы. - Крупные тач-таргеты, **мгновенный отклик** (принцип #11): тяжёлое — фоном, UI-поток не блокируем. ## 7. Driver-distraction (принцип #6) - Выше порога скорости → **упрощённый UI**, приоритет голосу, блокировка сложных взаимодействий. Скорость — из **GPS уже в v1** (раньше, чем OBD), уточняется OBD-скоростью (E) в v2. Конкретные пороги/что блокируется — в открытых вопросах. ## 8. Интеграция ассистента (D) - Лаконично, **как Grok/Tesla**: всегда доступная PTT-аффорданс + оверлей диалога в отдельном слоте; не отдельное «приложение», а ткань интерфейса. ## 9. Ввод - Тач + **мультируль** (кнопки руля, чтение из K/E) → навигация по UI без касания (важно для distraction). ## 10. Зависимости - **Графика:** Wayland (smithay) + Panfrost/Mesa; **Slint** (tech-stack). - **Хостит:** UI апов/плагинов (App-Host их запускает; Shell композитит). - **Данные:** E (speed для distraction, быстрый статус), D (ассистент-UI), Settings, security-privacy (consent/permission UI), plugin-sdk (точки UI-вклада). ## 11. Открытые вопросы - 🟡 **Точная грамматика декларативного DSL** (поля tile/card/list/form) — детализировать. - ◻️ **Пороги и политика driver-distraction** (что именно блокируется и когда). → этот домен + principles #6. - ◻️ **UI управления разрешениями** (review/revoke) — из security-privacy. → этот домен + Settings. - ◻️ **Источник день/ночь** (время vs датчик освещённости vs сигнал машины). → реализация. - ◻️ **Мультидисплей, профили** — later. --- ## Журнал решений (домен C) | Решение | Выбор | Дата | |---------|-------|------| | Композитор | кастомный multi-client на **smithay** (Rust); `cage` НЕ годится (single-app) | 2026-06-16 | | Хостинг UI | слот-модель: декларативный элемент (рендерит shell) или Wayland-поверхность | 2026-06-16 | | Декларативный DSL | констрейнт data-bound набор (tile/card/list/form); сложное → поверхность | 2026-06-16 | | Тема | день/ночь авто; токены | 2026-06-16 |