Files
shturman/docs/roadmap.md
T

22 KiB
Raw Blame History

Роадмапа (детальный план исполнения)

Фазы реализации лестницей: каждая ступень — законченный демонстрируемый артефакт. Каждая фаза разложена на упорядоченные вехи с зависимостями, способом теста без машины (принцип #13) и проверяемым критерием готовности. Порядок диктуется зависимостями из architecture.md и capability-catalog.md.

Как читать

  • ID (A01, D10…) — строки capability-catalog.md; фазы оттуда, roadmap их секвенирует.
  • Веха vN.k — атомарный шаг внутри фазы: что заработало · ID · зависит-от · тест без машины · готово-когда (acceptance).
  • Тест без машины ссылается на dev-симуляторы (dev-environment.md): Vehicle Simulator, fake-GPS/аудио/BT/камера, plugin-host-харнесс, нав-сим, мок-облако/OTA.
  • Все 170 функций: 150 в вехах v0–v4 + 20 «за горизонтом».
  • Числа-бюджеты (латентность/пороги) — из performance.md и safety.md (помечены 🟡, финал на железе/HMI).

Сводная лестница

Фаза Демо (killer-артефакт) Вехи Критпуть-звено
v0 вкл/выкл в машине → мгновенный красивый UI, переживает срыв питания v0.1v0.6 образ → power-safe → shell
v1 «Штурман, …» → устный RU-ответ; аудио с ducking; distraction по GPS v1.1v1.7 ассистент-онлайн
v2 «прочитай ошибки / что значит лампочка» → live OBD+DTC по-человечески v2.1v2.7 контекст машины (killer)
v3 ответ без сети + установка стороннего плагина + companion-телефон v3.1v3.5 офлайн + Plugin API
v4 офлайн-навигация + OTA + документированный ретрофит на реальное авто v4.1v4.5 первый «продукт»

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

Демо: подаём питание → RK3588 за < 10 c (потолок; цель — быстрее) в красивый Slint-лаунчер (день/ночь, крупные тайлы); глушим зажигание → graceful shutdown без повреждения eMMC; повторяем цикл.

Веха Заработало ID Зависит Тест без машины Готово, когда
v0.1 Образ-болванка грузится, /data монтируется A01 A02 A06 A17 hardware/BSP Lima-VM init поднялся; RO-rootfs A/B + overlay + /data ок
v0.2 Boot-конвейер splash → таргет фазами A04 A05 A15 v0.1 VM boot Stage 0/1/2 разделены; splash мгновенно
v0.3 Power-safe ядро переживает срыв питания B01 B03 B04 B02 B06 B07 A14 B05 v0.2, hold-up (hw §3) fake-ACC + power-cut в VM N циклов зажигания без потери /data; abort до PONR
v0.4 MCU/thermal fail-safe аппаратный фундамент питания/тепла B08 B09 B10 A12 v0.3, мок-MCU мок-MCU/sensor thermal-trip → graceful; MCU-таймер режет питание, если SoC завис
v0.5 Shell первый кадр красивый home, день/ночь C03 C04 C01 C05 C02 C07 C09 C10 v0.2, design-system нативный Slint + VM до интерактива < бюджет (perf §3); авто день/ночь
v0.6 База-доводка + dev-харнесс память/лог/eMMC + dev-цикл A09 A10 A11 A07 A16 F01 F02 F03 F04 J06 паралл. v0.1v0.5 сам harness dev-итерация без железа работает; память/лог/eMMC в бюджете

Порядок/параллелизм: v0.1→v0.2 строго; затем v0.3 (power) и v0.5 (shell) параллельно поверх v0.2; v0.4 после v0.3; v0.6 — сквозной enabling-трек (нужен для разработки всех остальных). 🟡 гейты: A01 (Armbian/Debian vs Yocto) · A02 (f2fs vs ext4) · B08/B09 (MCU vs supercap-only — определяет v0.4). Закрыть в v0: это фундамент.


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

Демо: «Штурман, …» → корректный устный RU-ответ через online-LLM; аудио-арбитр (TTS с ducking); сеть в статус-баре; громкость с руля; distraction-режим по GPS-скорости.

Веха Заработало ID Зависит Тест без машины Готово, когда
v1.1 Аудио-плоскость роли + ducking + вывод H01 H02 H05 H04 v0 (PipeWire/WirePlumber) fake-аудио (H §12) ducking-лестница работает; громкость с руля (perf: ducking ≤150 ms)
v1.2 Location/датчики валидная скорость/курс K01 K02 K03 K04 A08 v0, fake-GPS NMEA-реплей ru.shturman.Location публикует zero-clamp-скорость; time-sync от GPS
v1.3 Связь-core online/portal/offline G01 G02 G03 v0, NM/MM мок-сеть (управляемые состояния) portal/limited не врёт «online»; статус в баре (C07)
v1.4 Ассистент-пайплайн (офлайн-узлы) wake→STT→TTS локально D01 D02 D03 D04 D05 H03 v1.1, mic моки STT(текст)/TTS(лог) «Штурман»→STT→TTS офлайн; AEC держит wake во время медиа (wake ≤400 ms)
v1.5 Интенты + онлайн-LLM устный ответ при сети D06 D07 D08 D09 D11 v1.4, v1.3 (для D08) мок-LLM (canned) + мок-сеть голос→ответ; «нет сети» graceful; локальный интент ≤300 ms без LLM
v1.6 Distraction + руль безопасный UI на ходу C11 C12 D12 C13 K05 v1.2 (скорость), v1.4, safety §4 fake-GPS speed + мок-руль distraction по порогам safety §4; навигация/громкость рулём
v1.7 База-доводка v1 lifecycle-гейты A13 B11 B12 B13 v0.4 мок wake-word гейтится состояниями; sleep/wake базово

Порядок/параллелизм: v1.1/v1.2/v1.3 — параллельно поверх v0; v1.4 после v1.1 (аудио); v1.5 после v1.4+v1.3; v1.6 после v1.2+v1.4; v1.7 параллельно. 🟡 гейты: K05 (маппинг руля / ADC-калибровка — per-BSP) · B08/B09 (если MCU не закрыт в v0). distraction-числа (safety §4) — подтвердить на HMI. Офлайн-LLM — НЕ здесь (v3).


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

Демо: «Штурман, прочитай ошибки» / «что значит эта лампочка» → ассистент читает live-OBD + DTC и объясняет по-человечески (vehicle-context injection). Плюс hands-free звонки, локальная/BT-музыка, задняя камера.

Веха Заработало ID Зависит Тест без машины Готово, когда
v2.1 CAN-транспорт live-сигналы E01 E04 E06 E05 v0/v1, data-model, hw(CAN), ISO-TP Vehicle Simulator (ELM327-emu + vcan) live-сигналы с rate-cap ~1020 Гц; engine_running (не дублирует Power)
v2.2 DTC + диагностика чтение ошибок E02 E03 E07 E08 v2.1, DTC-база симулятор инжектит P0420 читает реальные DTC + RU-расшифровка
v2.3 Vehicle-context (KILLER) объяснение по голосу D10 C08 v2.2, v1-ассистент (D06/D08) симулятор P0420 → объяснение по-русски killer-demo: голос «что за ошибка» → live OBD+DTC → человеческое объяснение
v2.4 Телефон hands-free G04 G05 G06 G07 G08 G09 G10 v1.1 (phone_call), v1.6 (руль), BT, D §6 fake-BT-стек (G §12) звонок руль/тач; контакты PBAP; входящий-оверлей vs реверс
v2.5 Медиа музыка + now-playing H06 H07 H08 H09 H10 C06 v2.4 (BT-адаптер), v1.1, storage синтет-медиа + fake-A2DP локальный трек + BT-музыка; now-playing как первая Wayland-поверхность
v2.6 Камера задняя камера + парктроник A18 J01 J02 J03 J04 J05 K06 B14 v2.1 (E), C06 (surface), A §4/B §7 fake-камера (паттерн/no-signal/реверс) реверс→камера приоритетно; парктроник-оверлей; fail-safe «нет сигнала»
v2.7 Телеметрия-задел opt-in, выключена L07 security-privacy §7, consent мок-телеметрия-sink по умолчанию ноль egress; consent-гейт

Порядок/параллелизм: v2.1→v2.2→v2.3 (killer-цепочка, критпуть); v2.4→v2.5 (BT-адаптер раньше A2DP); v2.6 после v2.1+C06; v2.4/v2.5/v2.6/v2.7 — параллельно killer-цепочке. 🟡 гейты: E03 (DTC-база: своя RU vs готовая) · H06 (декодер/AAC-патент — legal) · J01 (DRM-master handoff Stage 0→1).


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

Демо: ассистент отвечает без сети (локальная модель); сторонний плагин (intent/tile) ставится в песочнице с ревью разрешений; companion-приложение на телефоне видит данные машины/поездки.

Веха Заработало ID Зависит Тест без машины Готово, когда
v3.1 Plugin host песочница + lifecycle F05 F06 F07 F08 F09 F10 C14 v0 (App-Host, a-base §3), plugin-sdk, sec-priv plugin-host-харнесс (F) сторонний плагин install/update/remove в песочнице; ревью разрешений (perm-UI C14)
v3.2 Plugin-интенты + подпись расширение ассистента D15 F11 v3.1, v1-ассистент (D06) тест-плагин с intent плагин регистрирует интент, ассистент его зовёт; подпись манифеста
v3.3 Офлайн-ассистент работает без сети D13 D14 v1-пайплайн, storage мок-сеть off + локальная мелкая модель сеть выключена → локальный ответ; память водителя (.md)
v3.4 Companion телефон видит машину L01 L02 L03 L04 L05 L06 L08 v1.3 (G), v2 (E/trip-плагин) фейк-companion-peer + мок-облако паринг; синк настроек/памяти/поездок local-first; бэкап
v3.5 Связь+медиа-расширения hotspot/SMS/радио/стриминг G11 G12 H11 H12 H13 H14 v1.3, v3.1 (для H14), network моки сети/медиа WiFi-hotspot; SMS-чтение; media-source через плагин

Порядок/параллелизм: v3.1→v3.2 (host перед интентами/подписью); v3.3 поверх v1-пайплайна (независимо); v3.4 после v3.1+v2; v3.5 после v3.1. 🟡 гейты: D13 (офлайн-модель) · D14 (схема памяти/consent) · F11 (схема подписи) · L03 (моб-стек) · L06 (push-транспорт) · H11 (FM-тюнер: аппаратно vs отказаться).


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

Демо: офлайн-навигация OSM с голосовым turn-by-turn; флешируемый релиз-образ; OTA A/B с откатом; документированный ретрофит на одну реальную машину. («образ» здесь = флешируемый прод-релиз, отличать от bring-up base-образа v0 — a-base §2.)

Веха Заработало ID Зависит Тест без машины Готово, когда
v4.1 Карты + рендер карта офлайн I01 I02 I04 I08 tech-stack, хранилище, C §4, G §2 нав-сим (тест-регион PMTiles) карта рендерится офлайн (GPU); детект «вне региона»; геокодер
v4.2 Роутинг + ведение маршрут с голосом I03 I05 I06 I07 I09 I10 I11 I12 I13 K09 v4.1, v1.2 (Location), v1.1 (аудио), D §6 мок-маршрут (rerouting/maneuver) turn-by-turn-ведение; map-matching; назначение голосом; resume
v4.3 Прод-образ + secure boot флешируемый релиз A03 A20 A21 A22 v0-образ, hardware флеш на железо (HW-in-the-loop) релиз-образ прошивается; verified boot; /data шифрован; factory reset
v4.4 OTA-канал обновления с откатом A19 L09 L10 L11 L12 L13 v4.3 (trust-anchor), v3.4 (паринг), F11 мок-облако/OTA (подписанные/битые/downgrade) OTA доставляет/применяет/откатывает; anti-rollback; каналы stable/beta
v4.5 Ретрофит + опц. первый продукт на авто G13 всё v0–v4 на реальном авто реальная установка документированный ретрофит на одну машину (BSP/калибровка/гайд)

Порядок/параллелизм: v4.1→v4.2 (карты перед роутингом); v4.3→v4.4 (secure boot trust-anchor перед signed OTA); нав-ветка (v4.1/v4.2) и OTA-ветка (v4.3/v4.4) параллельны; v4.5 — финал, требует всего. 🟡 гейты: I03 (Valhalla vs OSRM) · I01 (карты + ODbL-атрибуция + размещение данных) · G13 (проекция — scope/legal).


Сквозной критический путь (по вехам)

hardware/BSP → v0.1(образ) → v0.2(boot) → v0.3(power-safe) ┬→ v0.5(shell)        ⟶ v0
                                                            └→ v0.4(MCU/thermal)
   → v1.1(аудио)+v1.2(Location)+v1.3(сеть) → v1.4(пайплайн) → v1.5(LLM онлайн)   ⟶ v1
   → v2.1(CAN) → v2.2(DTC) → v2.3(контекст — KILLER)                             ⟶ v2
   → v3.1(plugin-host) → v3.3(офлайн-LLM)                                        ⟶ v3
   → v4.1(карты) → v4.2(роутинг)  ‖  v4.3(secure boot) → v4.4(OTA) → v4.5(ретрофит) ⟶ v4

Параллельно (не на критпути): телефон/медиа/камера (v2.4v2.6), companion (v3.4), расширения (v3.5), нав- и OTA-ветки v4 идут одновременно. Сквозной enabling-трек — dev-environment (v0.6, далее везде).

Риск-реестр (🟡-гейты: что выбрать и к какой фазе)

Гейт Выбор между Решить к Владелец-док
A01 база-образ Armbian/Debian vs Yocto v0 a-base §2
A02 ФС /data f2fs vs ext4 v0 a-base §3
B08/B09 питание MCU-копилот vs supercap-only v0 b-power §5, hardware §3
distraction-пороги числа км/ч + список блокируемого v1 (на HMI) safety §4
перф-бюджеты латентные числа (кадр/голос/ввод…) по фазам performance §3
K05 мультируль маппинг кнопок / ADC-калибровка v1/v2 k-sensors §3
E03 DTC-база своя RU из открытых списков vs готовая v2 e-vehicle-data §5
H06 декодер symphonia + AAC-патент (юр-проверка) v2 h-media §5
J01 камера DRM-master handoff Stage 0→1 v2 j-cameras §3
D13 офлайн-LLM YandexGPT Lite / T-lite / Qwen + квантизация v3 d-assistant §5
D14 память водителя что авто-запоминать / схема / consent v3 d-assistant §7
F11 подпись формат / keyring / ревокация v3 f-plugin §3, sec-priv §6
L03 моб-стек Flutter vs Rust-core+native v3 l-cloud §3
L06 push-транспорт self-relay vs APNs/FCM vs локально v3 l-cloud §5
H11 FM-тюнер добавить аппаратно vs отказаться v3 h-media §7, hardware §4
A19 OTA-тул RAUC vs Mender/swupdate/OSTree v4 (раньше подтвердить) a-base §5
I03 роутинг Valhalla vs OSRM v4 i-nav §4
I01 карты ODbL-атрибуция + размещение данных v4 i-nav §2
G13 проекция not-first-party / плагин / вне скоупа v4 g-conn §8

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

  • Dev-environment + моки (с v0.6, параллельно всему). Разблокирует разработку без железа: Vehicle Simulator (E), fake-аудио/BT/камера, plugin-host-харнесс, нав-сим, мок-облако/OTA. Не на критпути.
  • Security/privacy-гейтинг (растёт по фазам): audio_in (v1) → camera_in/location-consent (v2) → plugin-capability-review + perm-UI (v3) → secure-boot/at-rest/trust-anchor (v4). Контракт — security-privacy.md.
  • Цепочка доверия OTA: подпись плагинов F11 (v3.2) → secure boot A20 + signed OTA A19/L09 (v4.3/v4.4) — единая trust-цепочка с anti-rollback.
  • Бюджеты/безопасность как gate: performance.md (CI perf-gate, регрессия = баг) и safety.md (distraction, red-line-энфорсмент) — сквозные требования к каждой вехе.
  • Дизайн-система (язык — до v0.5): визуальный язык/токены (design-system.md) опережает первый видимый кадр (v0.5); прод-скин/значения итерируются на железе. AMG-leaning премиум, dark-first; плагины наследуют через Shell.

За горизонтом v4

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

  • База: 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 датчики).