Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
22 KiB
Роадмапа (детальный план исполнения)
Фазы реализации лестницей: каждая ступень — законченный демонстрируемый артефакт. Каждая фаза разложена на упорядоченные вехи с зависимостями, способом теста без машины (принцип #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.1–v0.6 | образ → power-safe → shell |
| v1 | «Штурман, …» → устный RU-ответ; аудио с ducking; distraction по GPS | v1.1–v1.7 | ассистент-онлайн |
| v2 | «прочитай ошибки / что значит лампочка» → live OBD+DTC по-человечески | v2.1–v2.7 | контекст машины (killer) |
| v3 | ответ без сети + установка стороннего плагина + companion-телефон | v3.1–v3.5 | офлайн + Plugin API |
| v4 | офлайн-навигация + OTA + документированный ретрофит на реальное авто | v4.1–v4.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.1–v0.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 ~10–20 Гц; 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.4–v2.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 bootA20+ signed OTAA19/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 датчики).