fb4e585152
Новый домен G: Connectivity-core (WiFi/LTE/tethering + BT-адаптер/паринг) + Phone-ап (HFP-звонки/контакты). Многоагентный adversarial-ревью: 24 находки, 15 подтверждено (default-refute; tech-измерение — 0, техника устояла), все применены. Ключевое из ревью: - BT-шов резолвнут двунаправленно: владелец BlueZ — Connectivity-core (G §3 ↔ H §6/§15 ✅). - Граница голоса: только HFP спаренного телефона; встроенный модем — data-only (VoLTE/eCall вне скоупа). - SIM PIN/PUK-флоу (sim_locked/no_sim) + captive-portal детект (portal/limited, не ложный online) — модем v1. - Connectivity поднимается на Stage 2 (синхр. с architecture §6). - Мультипаринг: ровно один active-телефон для HFP/PBAP (Dial/CallStateChanged однозначны). - SCO-loss mid-call → CallState=audio_lost + снятие роли phone_call → H раскорчивает медиа (не залипает). - Входящий-оверлей не перекрывает реверс-вид (z-order overlay-слота → C); tethering-петля AP+tether запрещена. - PBAP-синк фоновый; отказ-пути паринга/no_service симметрично J/H. Кросс-док: H §6/§15 (BlueZ ✅) + якоря D §147/§148→§10; architecture §3 (Connectivity+BT) /§6 (Stage 2); ipc §3 (Type+tether, State enum, CallState=audio_lost); security-privacy §7 (контакты/журнал/SMS local-first); hardware §4 (Bluetooth); tech-stack (NM/MM/BlueZ); C §11 (z-order overlay). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.8 KiB
5.8 KiB
Технический стек
Канонический список технологий Штурмана с обоснованием — источник правды по «на чём пишем». Архитектурные решения — в architecture.md; здесь — конкретные технологии и крейты.
Статус: v1 (на ревью). Связано с: architecture.md · principles.md (#11 отзывчивость, #12 лицензии) · dev-environment.md
Язык: Rust-first, один прод-рантайм
Всё, что мы шипим, — на Rust. Core, SDK, shell и весь прикладной слой, включая ассистента.
- Почему: один тулчейн, минимальный footprint (важно на RK3588 и 16 ГБ-dev), единый sandbox-профиль, безопасность памяти, перформанс (принцип #11 — отзывчивость).
- ML без Python в проде: STT/TTS/VAD — через ONNX Runtime (крейт
ort) и нативные биндинги (Vosk, llama.cpp); облачные LLM — обычный HTTP. PyTorch в прод не тащим. - Python — только в dev: прототипы, Vehicle Simulator, скрипты, CI-утилиты.
- Escape-hatch: если у конкретной ML-возможности нет вменяемого Rust-пути — она шипится изолированным Python-sidecar процессом (архитектура позволяет: всё и так отдельные процессы на D-Bus + sandbox). Это исключение, не правило.
- SDK язык-агностичен для плагинов: транспорт — D-Bus, поэтому сторонний плагин можно писать на любом языке. Биндинги: Rust — first-class, другие (Python…) — по мере нужды экосистемы.
Полный стек
| Слой / концерн | Выбор | Примечание |
|---|---|---|
| Языки (прод) | Rust | единственный шипимый рантайм |
| Языки (dev) | Python | прототипы, Vehicle Simulator, скрипты — не в проде |
| UI | Slint | декларативный, GPU-ускоренный, Rust-native |
| Графика | Wayland — shell = кастомный композитор на smithay (Rust) · Panfrost/Mesa |
cage не годится (single-app) — только ранний bring-up |
| Аудио/видео plane | PipeWire + WirePlumber (+ module-echo-cancel — AEC) |
микрофон, TTS, медиа, BT-аудио; политика ducking — домен H |
| IPC (control plane) | D-Bus | низкополосное управление и события |
| Песочница | bubblewrap + systemd-hardening | апы/плагины; WASM-тир — позже |
| OS base | Armbian/Debian (RK3588), ядро ближе к mainline | read-only rootfs + overlay |
| Init / lifecycle | systemd | ядро; апы/плагины — App-Host |
| CAN/OBD (read-only) | SocketCAN (socketcan) + ISO-TP (can-isotp/CAN_ISOTP) для нативного OBD |
ELM327 (мульти-протокол, прячет ISO-TP) на старте; python-OBD — в симуляторе |
| Связь / BT | NetworkManager · ModemManager · BlueZ (+ obexd; опц. oFono) | GPL-демоны через D-Bus (изолированы, #12); HFP-аудио — PipeWire bluez5 |
| Wake-word | openWakeWord | RU-фраза «Штурман»; Porcupine отвергнут (проприетарный, #12) |
| VAD | Silero VAD | через ONNX Runtime |
| STT | Vosk · Silero | офлайн, RU; через биндинги / ort |
| TTS | Silero | офлайн, RU |
| LLM онлайн | GigaChat · YandexGPT | HTTP, provider-agnostic, 152-ФЗ |
| LLM офлайн | llama.cpp / Ollama | квантованная мелкая модель |
| Карты (v4) | MapLibre + Valhalla/OSRM | офлайн |
| Dev VM | Lima (vz-backend) | ARM64, нативная виртуализация |
| CI | GitHub Actions, ARM64-Linux | совпадает с таргетом |
| Сборка / оркестрация | Cargo (workspace) + justfile |
|
| Лицензия / гигиена | MIT · cargo-deny |
без AGPL-заразы (принцип #12) |
Ключевые крейты (Rust)
| Концерн | Крейт |
|---|---|
| D-Bus | zbus |
| UI | slint |
| Async-рантайм | tokio |
| SocketCAN | socketcan |
| ONNX-инференс (STT/TTS/VAD) | ort (ONNX Runtime) |
| Локальная LLM | биндинги llama.cpp |
| STT (Vosk) | vosk |
| HTTP (облачные LLM) | reqwest |
| Сериализация | serde |
| Логи/трейсинг | tracing |
| Аудио-декод (медиа) | symphonia (MP3/AAC/FLAC/Vorbis/WAV/ALAC) + audiopus (Opus) |
Список крейтов уточняется при проектировании доменов; здесь — опорные.
Журнал решений (stack)
| Решение | Выбор | Дата |
|---|---|---|
| Язык прод-рантайма | Rust-first, один рантайм (Python — dev-only; sidecar как escape-hatch) | 2026-06-16 |
| ML в проде | ONNX Runtime (ort) + нативные биндинги, без PyTorch |
2026-06-16 |
| SDK для плагинов | язык-агностичен (D-Bus); Rust — first-class | 2026-06-16 |