Files
shturman/docs/roadmap.md
T

14 KiB
Raw Blame History

Роадмапа

Фазы реализации лестницей: каждая ступень — законченный, демонстрируемый артефакт. Порядок диктуется зависимостями из architecture.md и capability-catalog.md.

Как читать

  • ID (A01, D10, …) ссылаются на строки capability-catalog.md. Фазы там — источник; роадмапа их секвенирует и группирует в треки, не переопределяет.
  • Каждая фаза = ступень-демо, по шаблону: Цель/демо · Входит (ID по параллельным трекам) · Зависимости/порядок · Готово, когда · 🟡 гейты.
  • Составные фазы каталога (vN/vM) размещены по старту; завершение/доводка — пометкой в поздней фазе.
  • dev-environment проектируется рано (до v0-реализации) и идёт сквозным треком — не на критическом пути, но разблокирует каждую фазу.
  • Учтены все 170 функций: 150 в v0v4 + 20 «за горизонтом v4».

v0 — База + Shell · критпуть: образ/power-safe → UI

  • Цель/демо: RK3588 стартует < 10 c в красивый Slint-лаунчер (день/ночь, крупные тайлы) и переживает отключение зажигания без повреждения eMMC. Демо: вкл/выкл в машине → мгновенный UI, без fsck-боли.
  • Входит:
    • Образ / ФС / boot (A): A01 A02 A04 A05 A06 A07 A09 A10 A11 A12 A14 A15 A16 A17
    • Power / lifecycle (B): B01 B02 B03 B04 B05 B06 B07 B08 B09 + старт thermal B10
    • Shell (C): C01 C02 C03 C04 C05 C07 C09 + зародыш настроек C10
    • Dev-enabling (F/J, параллельно): F01 F02 F03 F04 + камера-сим J06
  • Зависимости/порядок: hardware HAL/BSP → образ A → power B (graceful shutdown требует hold-up, hardware §3) → shell C (первый кадр Stage 1 поверх boot Stage 0). Power-safe — гейт демо.
  • Готово, когда: холодный boot < 10 c до интерактивного home · N циклов зажигания без потери /data · автопереключение день/ночь.
  • 🟡 гейты: A01 (Armbian/Debian vs Yocto), A02 (f2fs vs ext4), B08/B09 (MCU vs supercap-only — определяет архитектуру питания). Фундамент — закрыть в v0.

v1 — Ассистент онлайн + связь + аудио + Location · критпуть: ассистент-онлайн

  • Цель/демо: «Штурман, …» → корректный устный RU-ответ через online-LLM; аудио-арбитр жив (TTS с ducking); статус сети в баре; громкость с руля; distraction по GPS-скорости. Демо: голосовой Q&A в машине.
  • Входит:
    • Ассистент (D): D01 D02 D03 D04 D05 D06 D07 D08 D09 D11 + distraction D12
    • Связь — core (G): G01 G02 G03
    • Аудио-плоскость — core (H): H01 H02 H03 H04 H05
    • Location / датчики (K): K01 K02 K03 K04 + старт мультируль-ADC K05
    • Shell-интеграция (C): C11 (PTT+лог) + старт distraction C12 + старт мультируль C13
    • База-доводка (A/B): A08 (GPS-время) A13 (thermal-тюнинг) B11 (MCU firmware) B12 (старт sleep/wake) B13 (гейт wake-word)
  • Зависимости/порядок: G01(сеть) → D08(online-LLM); H01(аудио-плоскость) → D04(TTS); K01(Location) → C12/D12(distraction по GPS-скорости); B13D (гейт wake-word по lifecycle). Всё поверх v0-базы/shell.
  • Готово, когда: голосовой вопрос → устный RU-ответ при сети · «нет сети» graceful (D11) · громкость с руля (K05) · distraction-режим по GPS-скорости.
  • 🟡 гейты: B08/B09 (если MCU не закрыт в v0 — гейтит B11/B12); K05 (маппинг кнопок руля / калибровка ADC — per-BSP). Офлайн-LLM ещё НЕ здесь (→ v3).

v2 — Контекст машины (killer) + телефон + медиа + камера · критпуть: контекст машины

  • Цель/демо: «Штурман, прочитай ошибки» / «что значит эта лампочка» → ассистент читает live-OBD + DTC и объясняет по-человечески (vehicle-context injection). Killer-демо. Плюс: hands-free звонки, локальная/BT-музыка с now-playing, задняя камера с парктроником.
  • Входит:
    • Vehicle-Data (E): E01 E02 E03 E04 E05 E06 + E07 (pending/permanent) + старт расход E08
    • Контекст-ассистент (D): D10 (vehicle-context injection)
    • Телефон (G): G04 G05 G06 G07 G08 G09 + старт tethering G10
    • Медиа (H): H06 H07 H08 H09 H10 + первый Wayland-surface C06 (now-playing)
    • Камера (J): J01 J02 J03 J04 J05 + Stage 0 boot-инфра A18
    • Прочее: статус машины в баре C08 · CAN-кнопки руля K06 · старт реверс-wake B14 · старт телеметрии (opt-in, выключена) L07
  • Зависимости/порядок: E(CAN-транспорт)+data-model → D10(контекст), поверх v1-ассистента (D06/D08). BT-адаптер G04H08(A2DP) и G05(HFP). A18(Stage 0) → J01(ранний путь камеры). C06(полный композитор) → первая поверхность H07/J04.
  • Готово, когда: ассистент по голосу читает реальные DTC и объясняет · hands-free звонок (руль/тач) · локальный трек и BT-музыка с now-playing · задняя камера с парктроник-оверлеем и fail-safe «нет сигнала».
  • 🟡 гейты: E03 (DTC-база: своя RU vs готовая), H06 (декодер / AAC-патент — legal), J01 (DRM-master handoff Stage 0→1).

v3 — Офлайн-фолбэк + Plugin API + companion · критпуть: офлайн + расширяемость

  • Цель/демо: ассистент отвечает без сети (локальная модель); сторонний плагин (intent/tile) ставится в песочнице с ревью разрешений; companion-приложение на телефоне видит данные машины/поездки. Демо: офлайн + экосистема.
  • Входит:
    • Офлайн-ассистент (D): D13 (provider-switch + офлайн-фолбэк llama.cpp) D14 (память водителя) D15 (plugin-интенты)
    • Plugin host (F): F05 F06 F07 F08 F09 F10 + старт подписи F11
    • Связь — later (G): G11 (WiFi-hotspot) G12 (SMS/MAP + чтение вслух)
    • Медиа-расширения (H): H11 (FM-радио) H12 (стриминг) H13 (интернет-радио) H14 (media-source-плагины)
    • Companion (L): L01 L02 L03 L04 L05 + старт уведомлений L06 + старт бэкапа L08
    • Shell: C14 (UI управления разрешениями)
  • Зависимости/порядок: F(lifecycle плагина) поверх App-Host + atomic-install (a-base §3); D15(plugin-интенты) → F + plugin-sdk; L01(companion) → G(транспорт) + паринг L02; C14(perm-UI) → F10(capability-review) + security-privacy. Офлайн-LLM поверх v1-пайплайна; companion читает E(v2) / trip-плагин.
  • Готово, когда: сеть выключена → ассистент локально отвечает (D13) · сторонний плагин ставится/песочница/ревью разрешений · телефон-companion синкает настройки/память/поездки (local-first).
  • 🟡 гейты: D13 (выбор офлайн-модели — бенч на железе), D14 (схема памяти / consent), F11 (схема подписи / keyring / ревокация), H11 (FM-тюнер: аппаратно добавить vs отказаться — нет в hardware §4), L03 (моб.стек: Flutter vs Rust-core+native), L06 (push-транспорт: relay vs APNs/FCM vs локально).

v4 — Навигация + OTA + прод-образ + ретрофит · критпуть: первый «продукт»

  • Цель/демо: офлайн-навигация OSM с голосовым turn-by-turn; флешируемый релиз-образ; OTA A/B с откатом; документированный ретрофит на одну реальную машину. Демо: первый продукт. («образ» здесь = флешируемый прод-релиз, отличать от bring-up/base-образа v0 — см. a-base-system §2.)
  • Входит:
    • Навигация (I): I01 I02 I03 I04 I05 I06 I07 I08 I09 I10 I11 I12 I13 + nav-позиционирование K09
    • OTA / прод-образ / безопасность (A): A03 (флеш-образ RAUC) A19 (OTA) A20 (secure boot) A21 (at-rest шифрование) A22 (factory reset)
    • OTA-канал / облако (L): L09 L10 L11 L12 L13
    • Проекция (опционально): G13 (CarPlay/Android Auto — вне скоупа / плагин / неопр.)
  • Зависимости/порядок: I(роутинг) → движок (🟡); I(карты) → хранилище + покрытие; I06(map-matching) → K(Location, v1); I05(turn-by-turn) → аудио (H §3) + D. OTA: A19(механизм/применение) ↔ L09(канал/доставка); A20(secure boot) → A21(at-rest) → trust-anchor для F11(подпись, v3). Nav поверх K/H/D (v1).
  • Готово, когда: маршрут офлайн с голосовым ведением в загруженном регионе · релиз-образ прошивается · OTA доставляет/применяет/откатывает (anti-rollback) · ретрофит на одну машину задокументирован (BSP / калибровка / гайд).
  • 🟡 гейты: I03 (Valhalla vs OSRM), I01 (карты + ODbL-атрибуция + размещение данных), G13 (проекция — решить scope/legal).

Сквозные треки (не привязаны к одной фазе)

  • Dev-environment + моки (проектируется до v0, параллельно всем фазам). Разблокирует разработку без железа: fake-аудио/BT/камера/plugin-host (внесены) + хвост: L мок-облако/OTA и I нав-сим (тест-регион/мок-маршрут). ID: F02 F03 F04 J06 + доменные dev-симуляторы (G/H/I/L §«Dev-симулятор»). Не на критпути.
  • Security/privacy-гейтинг (растёт по фазам). Capability-модель (security-privacy §3) включается с первого чувствительного ресурса: audio_in (v1) → camera_in/location-consent (v2) → plugin-capability-review + perm-UI C14 (v3) → secure-boot/at-rest/trust-anchor (v4).
  • Цепочка доверия OTA. Подпись плагинов F11 (v3) → secure boot A20 + signed OTA A19/L09 (v4) образуют единую trust-цепочку с anti-rollback.

Критический путь (узким списком)

hardware/BSP → A(образ) → B(power-safe) → C(shell)            ⟶ v0
   → G01(сеть) + H01(аудио) → D(ассистент)                    ⟶ v1
        ∟ K01(Location) → distraction (C12/D12) — параллельно
   → E(CAN read) → D10(контекст — killer)                     ⟶ v2
   → D13(офлайн-LLM) + F(Plugin API)                          ⟶ v3
   → I(навигация) + A19/L09(OTA) + ретрофит                   ⟶ v4

Параллельно (не на критпути): телефон/медиа/камера (v2-треки рядом с E), companion (v3), dev-environment (сквозной).

За горизонтом v4 (later/ongoing)

Доразвитие из тех же доменов по мере спроса — не входит в лестницу v0–v4:

  • База: A23 (мульти-BSP) · A24 (kernel/dtb-тюнинг — ongoing).
  • Shell/ассистент: C15 (мультидисплей / профили / виджеты) · D16 (barge-in).
  • Vehicle-Data: E09 (trip-производные — у плагина) · E10 (fuel-trim) E11 (VIN) E12 (DBC-сниффинг) E13 (vendor-DTC) E14 (лог поездок).
  • Экосистема/медиа: F12 (курируемый стор) · H15 (мульти-зона / EQ / A2DP-source).
  • Навигация: I14 (трафик TMC/RDS) I15 (онлайн-трафик/поиск) I16 (DR в тоннелях).
  • Камеры/датчики: J07 (0..N источников) J08 (dashcam) J09 (surround/360°) · K07 (IMU) K08 (выделенные не-CAN датчики).