docs(roadmap): v1 — лестница v0–v4 (170 функций по фазам/трекам + критпуть + сквозные треки), после adversarial-ревью (2 находки)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+168
-10
@@ -1,18 +1,176 @@
|
||||
# Роадмапа
|
||||
|
||||
> Фазы реализации лестницей: каждая ступень — законченный, демонстрируемый
|
||||
> Фазы реализации лестницей: каждая ступень — законченный, **демонстрируемый**
|
||||
> артефакт. Порядок диктуется зависимостями из [architecture.md](architecture.md)
|
||||
> и [capability-catalog.md](capability-catalog.md).
|
||||
|
||||
Статус: **заготовка** (наполняем в конце, когда домены и связи ясны).
|
||||
## Как читать
|
||||
|
||||
## Черновая лестница (из vision — уточним и развернём)
|
||||
- **ID** (`A01`, `D10`, …) ссылаются на строки [capability-catalog.md](capability-catalog.md).
|
||||
Фазы там — источник; роадмапа их **секвенирует и группирует в треки**, не переопределяет.
|
||||
- Каждая фаза = **ступень-демо**, по шаблону: **Цель/демо · Входит** (ID по параллельным
|
||||
трекам) **· Зависимости/порядок · Готово, когда · 🟡 гейты**.
|
||||
- **Составные фазы каталога** (`vN/vM`) размещены по **старту**; завершение/доводка —
|
||||
пометкой в поздней фазе.
|
||||
- **dev-environment проектируется рано** (до v0-реализации) и идёт сквозным треком —
|
||||
не на критическом пути, но разблокирует каждую фазу.
|
||||
- Учтены все **170** функций: 150 в v0–v4 + 20 «[за горизонтом v4](#за-горизонтом-v4-laterongoing)».
|
||||
|
||||
- **v0 — Shell.** Быстрый красивый лаунчер на RK3588, день/ночь, быстрый boot.
|
||||
- **v1 — Ассистент онлайн.** wake-word → STT → RU-LLM (GigaChat/YandexGPT) → TTS.
|
||||
- **v2 — OBD read-only + контекст машины.** «Прочитай ошибки / что значит лампочка». **Killer-демо.**
|
||||
- **v3 — Офлайн-фолбэк + Plugin API.** Локальная модель без сети + расширяемость.
|
||||
- **v4 — Навигация (OSM) + флешируемый релиз-образ + документированный ретрофит на одну машину.** Первый «продукт». *(«образ» здесь = флешируемый прод-релиз, отличать от bring-up/base-образа v0 — см. [a-base-system](domains/a-base-system.md) §2.)*
|
||||
---
|
||||
|
||||
> TODO: развернуть каждую фазу в задачи с явными зависимостями после проработки
|
||||
> доменов. Учесть, что dev-environment проектируется рано (до v0-реализации).
|
||||
## 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-скорости); `B13`↔`D` (гейт 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-адаптер `G04` → `H08`(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](domains/a-base-system.md) §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 датчики).
|
||||
|
||||
Reference in New Issue
Block a user