Files
kk0t9 fb4e585152 docs(domain G): v2 — связь/телефон (Connectivity+Phone), после adversarial-ревью (15 находок) + кросс-док
Новый домен 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>
2026-06-22 19:08:52 +03:00

5.8 KiB
Raw Permalink Blame History

Технический стек

Канонический список технологий Штурмана с обоснованием — источник правды по «на чём пишем». Архитектурные решения — в 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