kk0t9
e9bff7f4c8
docs(catalog): v1 — мастер-индекс 170 функций + capability-карта, после adversarial-ревью (9 находок) + кросс-док-швы (F/C)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 16:52:01 +03:00
kk0t9
2eaa561892
docs(domain I): v2 — навигация (offline OSM/роутинг/turn-by-turn), после adversarial-ревью (24 находки) + кросс-док
...
Последний домен. Offline-first навигация: OSM-карты (MapLibre GL Native),
оффлайн-роутинг (Valhalla), turn-by-turn, поиск/POI, связка с ассистентом.
Не safety/ADAS (#1 ). Фаза v4. Многоагентный adversarial-ревью: 28 находок,
24 подтверждены (default-refute), все применены.
Ключевое из ревью:
- stale нав-промпт под звонком (проигрался бы ПОСЛЕ поворота) → продюсер I снимает заявку по окну релевантности; H остаётся контент-агностичным.
- Нет секции отказ-путей → добавлена (no-route/geocoder-fail/битые-тайлы/ENOSPC, симметрично J/H/L).
- Маршрут через границу регионов / назначение в нескачанном регионе → детект покрытия + предложение докачать / маршрут до края.
- reroute-шторм в urban-canyon → детект схода с гистерезисом + HDOP/FixQuality-гейт; dead_reckoning трактуется как нет-фикса.
- Якорь RDS-TMC G §7 → H §7 (FM-радио живёт в медиа-тракте H, не в сетевом G).
- MapLibre Native = BSD-2-Clause (не BSD-3); ODbL-атрибуция (#12 ); единицы км/мили из локали (data-model §4, #10 ).
- Интент «домой» разведён: D §6 = домашний экран (v1), навигация-домой = Nav-интент (v4).
- Добавлены секции Зависимости и last-parked (K §2/L §5 ждали); Boot-Stage 2; speed-limit — пассивный бейдж, не предупреждение (#1 ).
Кросс-док: d-assistant §6 («домой» = домашний экран; навигация-домой → Nav v4).
(architecture §3/§6 уже содержат Nav; a-base apps-storage уже покрывает нав-PII.)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 14:23:34 +03:00
kk0t9
1eaa0b8896
docs(domain L): v2 — облако/компаньон (Companion+OTA-канал+телеметрия), после adversarial-ревью (21 находка) + кросс-док
...
Новый домен L: device-Companion-сервис + моб.приложение + опц.self-hostable облако.
Облако опционально, local-first, никогда не управляет машиной. Многоагентный
adversarial-ревью: 30 находок, 21 подтверждена (default-refute), все применены.
Ключевое из ревью:
- OTA untrusted-host неполон без anti-rollback → добавлена монотонность security-version (downgrade/replay-защита); подпись ≠ свежесть. Зеркально в a-base §5.
- fscrypt-ключ eFuse-bound непереносим → честно: cross-device restore требует отдельного backup-ключа (открыто); убрана ложная «ключ у пользователя».
- DOWNLOAD(L) ≠ APPLY(A): разведены фазы; download-fail-safe (ENOSPC/resume/отбраковка битого до RAUC) симметрично J/H.
- Time-gate (a-base §7): холодный boot 1970 → TLS «not yet valid» — OTA/sync/телеметрия ждут вменяемых часов.
- Captive-portal (G): egress только при State==online, не на portal/limited.
- Телеметрия: consent/буфер стираются на factory-reset (инвариант «после reset все opt-in выкл»); не ретроспективна; отзыв → дроп буфера; облако: retention+удаление (152-ФЗ).
- Поездки — из trip-плагина (app-storage), не из core E.
- dashcam-бэкап: отдельный носитель + consent-гейт J §4.
- Staged-rollout halt-петля + парадокс с opt-in телеметрией; push-доставка; модель аккаунта (recovery/multi-vehicle/multi-user); version-skew моб↔головблок — зафиксированы.
Кросс-док: a-base §5 (anti-rollback + Журнал), §12 (telemetry-consent в wipe);
architecture §3 (Companion first-party) + §5 (ребро Companion→Connectivity).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 13:55:40 +03:00
kk0t9
3fd9b42bb0
docs(tails): закрыть кросс-док хвосты (a-base/b/dev-env/J/hardware) + наполнить glossary
...
Закрыты накопленные мелкие хвосты из ревью F/J/H/G:
- Stage-нормализация: Stage-0/1/2 → Stage 0/1/2 по 6 докам (a/b/f/h/j/hardware); каноническая запись Stage 0/1/2 в glossary.
- a-base §8: видео-пайплайн (DMABUF камер / VPU dashcam) внесён в OOM-порядок — задняя защищена (Stage 1), dashcam/surround throttleable.
- a-base §12: dashcam-медиа (отдельный носитель) + контакты/журнал (G) в список factory-reset wipe.
- b §12: grace-hold резолвнут ✅ — J запросчик (J §7), B владелец/арбитр (§4 шаг 2, §7).
- dev-environment: моки fake-камера (J)/аудио (H)/BT-телефон (G) + plugin-host-харнесс; just-цели plugin-dev-run/sideload.
- J §3/§11/§13 + hardware §4: сигнал реверса ✅ GPIO фонаря з.х. (выбранный дефолт); CAN-gear отложен (нет gear-сигнала в E).
- glossary.md: наполнен (~55 терминов в 7 областях: машина/CAN, платформа/IPC, ассистент/аудио, питание/boot, хранилище/OTA, связь/телефон, безопасность).
Tier-3 capability-catalog + roadmap не трогаются — зависят от доменов I+L.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 12:46:36 +03:00
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
kk0t9
77d9a5a0ee
docs(domain H): v2 — медиа/аудио + арбитр ducking, после adversarial-ревью (20 находок) + кросс-док
...
Новый домен H (медиа/аудио). Ядро — сквозной арбитр аудио (политика
фокуса/ducking поверх PipeWire, role-based), плюс медиаплеер (локальное/BT
A2DP/AVRCP/радио/стриминг). Многоагентный adversarial-ревью: 24 находки,
20 подтверждено (default-refute), все применены.
Ключевое из ревью:
- symphonia НЕ декодирует Opus → отдельный audiopus (libopus, BSD).
- AEC: module-echo-cancel (≠ filter-chain) в audio-plane, не в ассистенте — резолв D §147.
- media.role (арбитраж) vs media.category (Playback/Capture) разведены.
- Кнопки громкости мультируля — uinput→Wayland-input (C/K), не интенты ассистента.
- Crash-safe по двум осям (source: жизнь ноды + проактивный cork по NameOwnerChanged/watchdog; sink: пересчёт при возврате output).
- intra-role media-фокус (один media-продюсер), гистерезис фокуса (анти-pumping), duck = относит. аттенюатор.
- boot аудио-плоскости на Stage 1; отказ-пути плеера (битый файл/обрыв A2DP/ENOSPC/underrun); resume без авто-старта.
Кросс-док: D §147 AEC→✅ ; tech-stack (symphonia/audiopus/module-echo-cancel);
hardware §4 (amp-mute-GPIO + FM-тюнер + откр. вопросы); B §4 (amp-mute перед
cut); architecture §9 (аудио-арбитр → H); domains/README (строка H).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 18:08:36 +03:00
kk0t9
b9747ee66d
docs(domains F+J): v2 после adversarial-ревью (37 находок) + кросс-док
...
F (plugin-host, 17):
- exec-путь плагина (/data/apps/<id>/, код exec-поддерево / данные noexec); IPC-передача
Install→App-Host (LoadApp/UnloadApp); teardown с явным StopApp+отзыв грантов; атомарный
install/update (staging+rename, a-base §3); ре-валидация манифеста на каждом activate +
capability-pin; sideload-гигиена распаковки; бюджет ресурсов (cgroup+OOM); аудит операций;
namespace manifest-id ru.shturman.* vs OWN-экспорт ru.shturman.plugin.<id>.*; WASM↔identity-конфликт;
PluginManager в ipc; dev-tools/тест-харнесс (#13 ); фазы (SDK/dev v0, экосистема v3)
J (cameras, 20):
- Stage 0 ранний путь = DRM/KMS из initramfs (не Wayland) + DRM-master handoff smithay без
чёрного кадра; реверс-сигнал owner=Power/GPIO (CAN-gear требует сигнал в E); camera_in
capability + per-node видео-гейтинг (/dev/videoN only first-party); fail-safe frame-watchdog
→ no_signal (не stale DMABUF); dashcam privacy (152-ФЗ, fscrypt, retention, factory-reset,
индикатор); lifecycle (не пишет в sleep, ShutdownImminent-флаш сегментами, grace-hold via B);
surround/video ресурсы (VPU/DMABUF/a-base §8); dev-симулятор камер (#13 ); Camera в ipc
Кросс-док: ipc (AppHost.LoadApp/UnloadApp, PluginManager, Camera), security-privacy
(namespace-фикс ru.shturman.*, camera_in, audit-scope), a-base §3 (dashcam в at-rest fscrypt)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 15:57:54 +03:00
kk0t9
5ba19cde46
docs(domain K): v2 после adversarial-ревью (18 находок) + кросс-док
...
- GPS-скорость: zero-clamp <~2-3 км/ч (на стоянке Doppler-шум, не ноль) — distraction v1
получал бы ложный on; FixQuality многоуровневый (no_fix/2d/3d/augmented/dead_reckoning
+ HDOP/sats); dead_reckoning не валиден для distraction/Nav; валидность времени ≠ позиции
- приватность локации: эфемерна (без трека в v1), audit-log, исключена из LLM-промпта,
while-in-use грант, on-device
- антенна (внешняя/активная), TTFF cold/warm-start, окно без GPS на старте поездки;
питание GPS в sleep/battery-cutoff (обесточивание+cold-start по умолчанию)
- резистивная ADC-лесенка руля: контракт window-table + кондиционирование + collision-drop
+ темп-дрейф; транспорт ввода = uinput/evdev (не Shell-D-Bus, иначе surface-апы не покрыты);
гейтинг руль-действий в distraction
- IMU опционален/не гарантирован → dashcam (J) = непрерывный ring-buffer, не на g-sensor
- точность времени SHM (~десятки-сотни мс), PPS опц./hardware-gated; Nav «фаза 2»→v4
- кросс-док: a-base §7/§14 (SHM, split time-row + K-dep), hardware §4 (антенна/1PPS),
domains/README (K-cell без TPMS/климата), ipc Location (enum), c-shell §7/§9/§11
(clamped speed, uinput-ввод, закрыт Location-вопрос)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 15:30:08 +03:00
kk0t9
7a30ed7a7d
docs(domain B): v2 после adversarial-ревью (22 находки) + кросс-док
...
Существенная переработка power-lifecycle:
- детект running по НАПРЯЖЕНИЮ бортсети (~14В генератор vs ~12.4В покой), не RPM (v2);
Power.IgnitionState — единственный канон lifecycle-состояния
- триггер shutdown ≠ rate-of-change: ACC-off / under-voltage-held / thermal-trip;
cold-crank до ~6В — НОРМА (ride-through), не индикатор обрыва
- SoC↔MCU shutdown-протокол специфицирован СЕЙЧАС: hold-up-таймер + heartbeat +
safe-to-cut + fail-safe при потере линка (обе стороны); MCU — fail-safe-авторитет
- abort при re-power до PONR (ShutdownAborted); shutting-down разбит abortable/committed
- НОВОЕ: thermal shutdown (триггер/гистерезис/UX); ordered teardown (E закрывает ISO-TP);
таблица MCU-vs-supercap; battery deep-discharge cutoff; монотонные часы для таймеров;
первый boot без времени; периодическое сохранение времени
- watchdog по фазам (runtime + shutdown RebootWatchdogSec/MCU-дедлайн + boot-окно);
v0=SoC+MCU+reboot, bootcount=v4
- фазы: MCU HW fail-safe-таймер = v0 (не v1); save-time = v0
- кросс-док: security-privacy (mic power-gated), ipc Power (enum/reason/ShutdownAborted),
e/data-model (engine_running не дублирует IgnitionState), a-base §7 (периодич. save)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-21 01:53:57 +03:00
kk0t9
c66ccf08ea
docs: ретро-ревью pass-2 остаточные (data-model/plugin-sdk/hardware/C)
...
- data-model: структура DTC-кода исправлена (буква + 2-битная категория + 3 hex, не
«4 hex»; P0/P2 generic, P1/P3000-33FF производитель); module_voltage путь →
Vehicle.OBD.ControlModuleVoltage (был неверный LowVoltageBattery)
- plugin-sdk: пример id → dev.example.* (ru.shturman.* зарезервирован); i18n строк
манифеста (per-locale, ru обязателен); ui_screens capability + гейт RegisterScreen
- hardware: камера «фаза 2» → v2; требования к MCU-копилоту (обновляемость прошивки,
fail-safe при его отказе, позиция в цепочке доверия)
- tech-stack: карты «фаза 2» → v4 (нормализация фазовой номенклатуры)
- C-shell: день/ночь v0 = время, GPS-восход v1 (был конфликт фаз); ui_screens-гейтинг
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-21 01:30:00 +03:00
kk0t9
08d787d977
docs(domain E): v2 — ретро-ревью pass-2 (5 находок) + tech-stack ISO-TP
...
- ISO-TP (ISO 15765-2): нативный CAN-OBD требует can-isotp/CAN_ISOTP для multiframe
(Mode 03 DTC, Mode 09 VIN), не голый socketcan; адресация 0x7DF/0x7E8..0x7EF
- планировщик опроса: бюджет req/s на транспорт (ELM327 half-duplex) + приоритеты PID,
round-robin при насыщении; эффективная частота = min(desired, потолок, доля бюджета)
- §5a безопасность активного опроса: гейт по движению, предпочтение passive listen-only,
fail-safe при аномалиях шины, риск ретрофита; «безобидность» read-запросов условна
- §5b отказ/восстановление транспорта: bus-off + restart-ms, ELM327 reconnect,
Online=false → unavailable, без зависания (#4 )
- владение computed: core (состояние/мгновенный расход) vs плагин (trip-производные)
- tech-stack: CAN/OBD row + ISO-TP
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-21 01:27:25 +03:00
kk0t9
02f13db1f3
docs(domain D): v2 — ретро-ревью pass-2 (9 находок) + кросс-док
...
- AEC (эхоподавление, loopback-ref из PipeWire) добавлен в пайплайн — нужен для
wake-word во время воспроизведения и barge-in (был полностью пропущен)
- auto-fallback: v1 = online degradation UX, офлайн-фолбэк (llama.cpp) = v3 (раньше
фолбэкать в v1 было некуда); offline-first (#3 ) в v1 частично, полный — v3
- инференс: ONNX (Silero) + Vosk через нативный Kaldi (не «всё через ONNX»)
- vehicle-context: контракт инъектора — только quality=valid, гейт по состоянию машины,
ассистент декларирует vehicle_read через прокси; деградация на простых авто
- wake-word по состояниям питания (не безусловно always-on, риск разряда; Stage 2; гейт Power/B)
- distraction: owner Shell §7, скорость K(GPS v1)/E(OBD v2); журнал wake-word/mic
- кросс-док: tech-stack (Porcupine отвергнут), principles #3 (фазировка офлайн-диалога)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-21 01:25:11 +03:00
kk0t9
d112f5397d
docs(C-shell + кросс-док): ретро-ревью (6 находок) + синхронизация
...
C-shell v2:
- GPS-скорость для distraction — домен K (ru.shturman.Location), не E (E это OBD, v2);
E — уточнение OBD-скорости в v2 + быстрый статус машины
- механизм поверхности: Wayland slot-протокол ru.shturman.shell_slot + slot-token,
не «handle по D-Bus»
- fail-safe distraction при потере/устаревании скорости (консервативный дефолт,
гистерезис, арбитраж GPS/OBD)
- контракт статус-бара: network «unknown» до Connectivity; часы — до синка времени
Кросс-док:
- architecture §1 (ELM327-оговорка к «физическому» read-only), §5 (положение/GPS из
Location/K, не Vehicle-Data), §7 (Perm-Broker = грантодатель, статика — прокси+sandbox),
§8 (surface через Wayland slot-протокол)
- ipc Shell.RegisterScreen → slot_token
- dev-environment: cage → smithay/weston в журнале и списке пакетов
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-21 01:06:05 +03:00
kk0t9
231a64300d
docs(domain A): v2 после adversarial-ревью (24 находки) + кросс-док
...
Существенная переработка base-system по итогам multi-agent ревью:
- A/B-единица = весь boot-юнит (kernel+dtb+initramfs+rootfs) на слот; загрузчик вне A/B
- bootcount/bootlimit + mark-good (Shell-кадр) — иначе откат не срабатывает
- overlay upper/work на tmpfs; персист только через /data
- ФС /data: f2fs(рек)/ext4 + power-safe mount + durable-write (fsync/rename)
- at-rest шифрование /data (fscrypt, eFuse-bound, v4)
- watchdog: SoC+MCU разведены, вооружён в boot-окне, единственный владелец
- boot-порядок исправлен под architecture §6 (splash в Stage 0, ядро в Stage 1)
- secure boot = OTP-eFuse необратим + key-mgmt (не «мягкий переключатель»)
- НОВОЕ: время (RTC/NTP/GPS, TLS-gating), память (zram/OOM/cgroup), логи
(journald volatile + критичное в /data + pstore), first-boot, factory-reset, локаль
- OTA: A=механизм/подпись, L=канал; verified-boot в бюджете boot; SD-тир; образ v0≠v4
Кросс-док: roadmap (образ v4 = флешируемый релиз), hardware (тепло/eMMC ✅ резолв),
security-privacy (at-rest шифрование как открытый→направлен в A §3).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-20 21:12:35 +03:00
kk0t9
47d53d0956
docs(domain C): Shell/UX — спека + ревью-фиксы; cage→smithay
...
- спека домена C: композитор, слот-модель, декларативный UI-DSL (резолв вопроса),
тема, driver-distraction, интеграция ассистента, ввод
- КОРРЕКЦИЯ: shell = кастомный multi-client композитор на smithay (Rust); cage
(single-app kiosk) не годится для мульти-поверхностной слот-модели → правка
в tech-stack и dev-environment
- ревью-де-риск v0: shell стартует как Slint-ап без внешних поверхностей, полный
smithay-композитор — с первым surface-апом
- ревью-фазинг: статус машины в статус-баре → v2; distraction по GPS-скорости в v1
(раньше OBD); день/ночь v0 по времени/GPS; настройки растут с фичами
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-20 20:53:05 +03:00
kk0t9
a8895ab99f
docs(domain D): Assistant — спека + ревью-фиксы
...
- спека домена D: пайплайн (wake→VAD→STT→router→[локальные/LLM]→TTS, ONNX Runtime),
функции (MVP/later), vehicle-context injection (killer), provider-agnostic LLM,
интенты, память о водителе (.md), приватность
- ревью: openWakeWord вместо проприетарного Porcupine (принцип #12 ); мягкая
деградация при нестабильной сети до офлайн-фолбэка; креды LLM — свои у пользователя;
+ контекст-размер, офлайн-STT в шуме, function-calling, обучение wake-word
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-20 20:45:20 +03:00
kk0t9
01119a4ccf
docs(domain E): Vehicle-Data — спека + ревью-фиксы
...
- спека домена E по шаблону: назначение/границы, функции (MVP/later),
данные/интерфейсы, зависимости, открытые вопросы, журнал решений
- MVP-ядро killer-фичи: MIL-статус (PID 01) + чтение DTC (Mode 03), универсально
- ревью: покрытие OBD-протоколов (не-CAN старые авто → ELM327 мульти-протокол),
OBD-порт ≠ все шины, коалесцированный опрос, объём DTC-базы, ELM327-клоны, staleness
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-20 20:29:07 +03:00
kk0t9
9e685edd02
docs: заложить фундамент проектирования Штурмана
...
Каркас документации + содержательный фундамент (фаза проектирования,
реализация отложена):
- 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 >
2026-06-20 19:28:16 +03:00