Files
shturman/docs/domains/c-shell-ux.md
T
kk0t9 47d53d0956 docs(domain C): Shell/UX — спека + ревью-фиксы; cage→smithay
- спека домена C: композитор, слот-модель, декларативный UI-DSL (резолв вопроса),
  тема, driver-distraction, интеграция ассистента, ввод
- КОРРЕКЦИЯ: shell = кастомный multi-client композитор на smithay (Rust); cage
  (single-app kiosk) не годится для мульти-поверхностной слот-модели → правка
  в tech-stack и dev-environment
- ревью-де-риск v0: shell стартует как Slint-ап без внешних поверхностей, полный
  smithay-композитор — с первым surface-апом
- ревью-фазинг: статус машины в статус-баре → v2; distraction по GPS-скорости в v1
  (раньше OBD); день/ночь v0 по времени/GPS; настройки растут с фичами

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:53:05 +03:00

114 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Домен 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 |