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

8.5 KiB
Raw Blame History

Домен C — Shell / UX / лаунчер

Лицо продукта и UI-хост: Wayland-композитор, который рисует home/тайлы и темы, и в слоты которого встраивается UI всех апов/плагинов. v0-артефакт и главный UX-дифференциатор («красиво и не лагает» против китайских блоков).

Статус: v1 (на ревью). Связано с: architecture.md (#6 хостинг UI) · ipc.md (Shell) · plugin-sdk.md (UI-вклад) · tech-stack.md (Slint) · security-privacy.md (consent UI) · 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