9e685edd02
Каркас документации + содержательный фундамент (фаза проектирования, реализация отложена): - vision: видение, позиционирование, границы (вариант B, 2 красные линии) - principles: 13 сквозных принципов (red lines, offline-first, power-safe…) - architecture: тонкое ядро + SDK, planes, lifecycle, песочница, хостинг UI, карта связей + журнал из 6 решений - dev-environment: разработка с Mac (Lima/ARM64, vcan, Vehicle Simulator) - индексы contracts/ и domains/ (+ единый шаблон домена, заделы по камерам) - заготовки glossary, capability-catalog, roadmap Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
76 lines
6.9 KiB
Markdown
76 lines
6.9 KiB
Markdown
# Принципы и сквозные ограничения
|
||
|
||
> Правила, которым подчиняется **каждый** домен. Если домен их нарушает — это баг
|
||
> дизайна, а не исключение. Спеки доменов ссылаются сюда.
|
||
|
||
Статус: **v1 (на ревью).**
|
||
Связано с: [architecture.md](architecture.md) · [dev-environment.md](dev-environment.md) · [contracts/security-privacy.md](contracts/security-privacy.md)
|
||
|
||
Формат: **принцип → почему → как держим/проверяем.**
|
||
|
||
---
|
||
|
||
## Красные линии (нерушимы)
|
||
|
||
### 1. Никогда не safety-critical
|
||
- **Почему:** безопасность людей, юридическая ответственность, сертификационная яма функциональной безопасности.
|
||
- **Как держим:** нет интеграций с управляющими ECU; в системе нет actuator-путей; каждая фича проходит ревью «не управляет ли узлом».
|
||
|
||
### 2. CAN только на чтение
|
||
- **Почему:** тот же риск + юридическая чистота. Это то, что делает проект подъёмным для малой команды.
|
||
- **Как держим:** в Vehicle-Data нет write-кода; он единственный владелец CAN; на шине D-Bus нет метода записи в CAN; в SDK нет capability вида `can_write` — её просто не существует.
|
||
|
||
---
|
||
|
||
## Сквозные принципы
|
||
|
||
### 3. Offline-first
|
||
- **Почему:** салон часто без сети (тоннели, глушь); ассистент не должен умолкать, навигация — теряться.
|
||
- **Как держим:** STT/TTS локальны; у ассистента офлайн-LLM фолбэк; карты офлайн; ключевые функции **деградируют, а не падают** без сети.
|
||
|
||
### 4. Изоляция и graceful degradation
|
||
- **Почему:** устойчивость; падение одного компонента не должно ронять систему.
|
||
- **Как держим:** процесс-на-компонент; App-Host рестартит упавшее; ап переживает недоступность зависимости (показывает «нет данных», а не крэшит).
|
||
|
||
### 5. Power-safe by design
|
||
- **Почему:** машина рубит питание резко → corruption памяти (так умирают одноплатники).
|
||
- **Как держим:** read-only rootfs + overlay **с дня 1**; graceful shutdown по ACC; запись только в журналируемый `/data`.
|
||
|
||
### 6. Driver-distraction discipline
|
||
- **Почему:** безопасность вождения (и потенциальная регуляторика).
|
||
- **Как держим:** на скорости выше порога — упрощённый UI, приоритет голосу, блокировка сложных взаимодействий; правило едино для всех апов через shell/SDK. Конкретика — в домене Shell.
|
||
|
||
### 7. Приватность / 152-ФЗ
|
||
- **Почему:** закон + доверие пользователя.
|
||
- **Как держим:** обработка локальна по умолчанию (голос → текст локально); в облако уходит **только текст запроса** при онлайн-LLM; RU-провайдеры, данные в РФ; телеметрия **opt-in**, по умолчанию выключена; память о водителе (`.md`) — локальная, не уходит в облако без явного согласия.
|
||
|
||
### 8. Provider-agnostic
|
||
- **Почему:** не привязываемся к одному вендору; ИИ — коммодити; устойчивость к отвалу провайдера.
|
||
- **Как держим:** LLM за единым интерфейсом-бэкендом с авто-fallback; то же для STT/TTS/карт, где разумно.
|
||
|
||
### 9. Расширяемость через API, не через правку ядра
|
||
- **Почему:** суть платформы; даже свои апы — на SDK.
|
||
- **Как держим:** ядро тонкое; новая функция = ап/плагин. Если «для фичи нужно лезть в ядро» — это сигнал, что **API недостаточен**: чиним API, а не хардкодим в ядро.
|
||
|
||
### 10. RU-first, i18n-ready
|
||
- **Почему:** русский — наш моат и приоритет №1; но платформа (и автопроизводители) не должны быть заперты в одном языке.
|
||
- **Как держим:** русский — первоклассный и дефолтный; **строки и локаль не хардкодим** — инфраструктура i18n заложена изначально.
|
||
- ⚠️ *На подтверждение: оставляем i18n-ready, а не строго RU-only?*
|
||
|
||
### 11. Отзывчивость (no-lag) — требование, не пожелание
|
||
- **Почему:** медленный лагучий UI — главный изъян китайских блоков и наш ключевой дифференциатор.
|
||
- **Как держим:** бюджет на отклик (цель: мгновенный UI, boot < 10 c до интерактива); тяжёлое — фоном/лениво; не блокируем UI-поток. Регрессии производительности — это баги, а не «потом».
|
||
|
||
### 12. Лицензионная гигиена (MIT)
|
||
- **Почему:** adoption, без AGPL-боли.
|
||
- **Как держим:** зависимости — MIT/Apache/BSD-совместимые; заражающий дистрибуцию copyleft (GPL/AGPL) избегаем или изолируем как отдельный процесс; проверка лицензий в CI.
|
||
|
||
### 13. Разрабатываемо и тестируемо без машины
|
||
- **Почему:** итерации малой командой с Mac; нельзя зависеть от наличия авто под рукой.
|
||
- **Как держим:** симуляция CAN/OBD (vcan + дампы), моки LLM/STT/TTS; **каждый домен поставляет симулятор/мок**. Детали — [dev-environment.md](dev-environment.md).
|
||
|
||
---
|
||
|
||
> Изменения этого списка — осознанные: принцип влияет на все домены, поэтому
|
||
> правка здесь = ревизия их всех.
|