Files
kk0t9 b9500356b0 docs(v0.3): синхронизация швов power-safe + статус
Двунаправленные швы (спека v0.3 §10) после реализации Плана 7:
- domain B: banner «Реализация (v0.3)» (B01–B07, VM-модель abort/PONR=stop+umount+remount);
  §12 — MCU/supercap (B08/B09) → v0.4.
- ipc.md §3: Power оживлён из FSM (не mock); Sleep/Wake/RequestSleep зарезервированы.
- foundation §5.2: «Power-стаб» → реальный PowerFsm (проекции state/ignition/source из FSM);
  dev-mock кормит входы FSM.
- CLAUDE.md: статус v0.3 ГОТОВО; «Следующее» → v0.5 shell / v0.4 MCU-thermal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Alexander <akotenev2003@gmail.com>
2026-06-25 00:21:10 +03:00

91 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Штурман — инструкции проекта
Open-source русскоязычный companion-слой («ОС поверх Linux») для авто на **RK3588**: быстрый
Slint-UI + голосовой RU-ассистент, читающий OBD/CAN **только на чтение** + расширяемый Plugin API.
Лицензия **MIT**. Общение и комментарии — по-русски; код-идентификаторы — как есть.
## Фаза: РЕАЛИЗАЦИЯ (v0)
Проектирование завершено. **Источник правды по дизайну — каталог `docs/`** (Tier 0–3 + 8 контрактов +
детальный `roadmap.md`; всё прошло многоагентный adversarial-ревью). Не противоречь докам; если
реальность расходится с доком — **синхронизируй док** (двунаправленные швы, как в дизайн-фазе).
## КРАСНЫЕ ЛИНИИ (нерушимы)
1. **Никогда не safety-critical** — двигатель/тормоза/ABS/ESP/руль/подушки; в системе нет actuator-путей.
2. **CAN только на чтение** — стандартные OBD-II read-запросы (Mode 01/03/07/09/0A) допустимы; запрещены
write/actuator/Mode-04/UDS-write. Граница и энфорсмент — `docs/contracts/safety.md`.
## Стек (canonical — `docs/tech-stack.md`)
Rust везде в проде (Python — только dev/симуляторы). **D-Bus** control-plane; **PipeWire**+WirePlumber
(аудио); **Wayland** + **smithay**-композитор (Shell); **Slint** (UI); **bubblewrap** + Perm-Broker
(песочница плагинов); NM/MM + BlueZ (GPL-демоны через D-Bus, изолированы). License-гигиена — `cargo-deny`.
## Dev-окружение (`docs/dev-environment.md`)
Всё в **Lima ARM64-VM** (Ubuntu) — нативно к таргету RK3588, **разработка без машины** (принцип #13):
vcan + Vehicle Simulator + моки (аудио/BT/камера/GPS/сеть/plugin-host/нав/облако). `justfile` — единые
команды (`just vm-up`, `just sim`, `just test`, … — создаём по ходу). **Перф-вердикт — на реальном RK3588**
(не на dev-Mac), бюджеты — `docs/contracts/performance.md`.
## Как работаем (реализация)
- **Roadmap ведёт.** Идём по вехам `docs/roadmap.md`. Текущая цель — **v0** (критпуть: образ → power-safe → shell).
- **Цикл на веху:** спека (раскладка/границы/D-Bus-интерфейсы/тест-план/acceptance) → **TDD** → реализация
**verify в Lima-VM** → коммит. **Не писать код до утверждённой спеки.**
- Скиллы: `test-driven-development`, `writing-plans`/`executing-plans`, `verification-before-completion`,
`systematic-debugging`, `requesting-code-review`.
- **Коммиты:** `feat/fix/chore(<area>): …`; ветка от `main` (без явного «ок» в `main` не коммитим);
в конце — `Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>`.
- Сквозные гейты каждой вехи: safety (red-lines/distraction), performance (бюджеты), design-system (визуальный язык).
## Текущая цель — v0 (см. `docs/roadmap.md` § v0)
**Фундамент готов и в `main`** (Планы 1–5 ч.1; спека `docs/specs/v0.1-v0.6-foundation.md` + планы `docs/specs/plans/`):
воркспейс + `shturman-common`/`ipc`/`sdk` + стаб-сервисы `firstboot`/`settings`/`power` (интеграция на D-Bus) +
первый Slint-кадр (`shell`) + dev-tools (валидатор/scaffolding) + systemd/Lima/E2E-файлы. `just ci` зелёный.
**План 5 ч.2 — ГОТОВО (ветка `feat/v0.6-lima-e2e`):** Lima-VM поднимается (`just vm-up`), сквозной `just e2e`
зелёный с нуля (`just vm-reset && just e2e`): boot → `data.mount` → firstboot → machine-id bind → `Power`/`Settings`
на системной шине → fake-ACC `AccChanged`**первый Slint-кадр** (software-render → PNG, oneshot-сервис) →
base-бюджеты (journald volatile / zram / oomd / fake-hwclock→/data / eMMC-прокси) → **reboot**: персист Settings +
machine-id стабилен. Приёмка §9.4 (v0.1 + v0.6 + шагающий скелет) выполнена. Швы реализации — спека §13.
**v0.2 Boot-конвейер — ГОТОВО (ветка `feat/v0.2-boot-pipeline`):** спека `docs/specs/v0.2-boot-pipeline.md` + план
`docs/specs/plans/06-v0.2-boot-pipeline.md`. `shturman.target`**зонтик** фаз Stage 0/1/2; `shturman-splash` (Stage 0,
software-render → `/run/shturman/splash.png`, `Before=shell` → до первого кадра) + `shturman-stage2-warmup` (деферред
`After=shell`); общий рендер-хелпер `shturman-render` (shell+splash). `just vm-reset && just e2e` зелёный с нуля:
фазы разделены (splash ≤ frame ≤ stage2), регресс v0.1/v0.6 цел. Приёмка спека v0.2 §9.3 выполнена.
**v0.3 Power-safe ядро — ГОТОВО (ветка `feat/v0.3-power-safe`):** спека `docs/specs/v0.3-power-safe.md` + план
`docs/specs/plans/07-v0.3-power-safe.md`. Стаб `Power`**реальный lifecycle-FSM**: чистый `PowerFsm`
(`off↔accessory↔running→shutting_down{abortable→committed}→off`, abort до PONR) + сервис `ru.shturman.Power`
оживлён из FSM (dev-mock кормит события, grace-таймер + durable-barrier `sync` на commit); watchdog-конфиг (B05/A14) +
save-time timer (B07). `just vm-reset && just e2e` зелёный с нуля: **N=3 цикла зажигания** (`/data` + счётчик целы),
**abort до PONR** (`ShutdownAborted`, `/data` RW, running), **power-cut-сим** (SIGKILL → `fsck` clean, durable-value цел);
регресс v0.1/v0.2 + machine-id-стабильность цел. prod-build-gate: `--no-default-features` без `PowerMock1`. Приёмка спека
v0.3 §9.4 выполнена. **VM-модель** (abort/PONR = stop+umount+remount); аппаратное (MCU/hold-up/fail-safe-таймер, **B08/B09**) → v0.4.
**Следующее:** `v0.5` полный shell (живой weston-shell) и `v0.4` MCU/thermal (замыкает B08/B09) — параллельно поверх v0.2/v0.3.
> CI: GitHub-Actions-конфиг **удалён** (его ловит Gitea). Гейт — локальный `just ci`. CI на Gitea — решение позже.
## Карта документации
- **Архитектура/процессы/шина:** `docs/architecture.md` · **стек:** `docs/tech-stack.md` · **принципы (13):** `docs/principles.md`.
- **Контракты** (`docs/contracts/`): `ipc` · `data-model` · `security-privacy` · `plugin-sdk` · `hardware` · `safety` · `performance` · `design-system`.
- **Домены** (`docs/domains/`): A base-system · B power-lifecycle · C shell-ux · D assistant · E vehicle-data · F plugin-host · G…L.
- **План:** `docs/capability-catalog.md` (170 функций, ID `<буква><NN>`) · `docs/roadmap.md` (вехи v0.1…v4.5) + `docs/roadmap.html`.
## Решения-🟡 (всплывут по ходу — НЕ блокеры старта)
`A01` Armbian/Debian vs Yocto, `A02` f2fs vs ext4 — на сборке **прод-образа** (dev использует Lima Ubuntu).
`B08/B09` MCU vs supercap-only — на `v0.4` (вероятно нужна аппаратная проверка). Полный реестр — `docs/roadmap.md` «Риск-реестр».
## Гочи
- §-якоря в доках = номера **РАЗДЕЛОВ**, не строк.
- Adversarial-ревью через Workflow: **НЕ** ставить сырые backticks в template-literal промптах агентов
(закрывают строку, валят скрипт) — код-идентификаторы в одинарных кавычках.