План 5 ч.2: поднял Lima-VM и довёл сквозной E2E до зелёного из чистого yaml (just vm-reset && just e2e — exit 0). Приёмка §9.4 (v0.1 + v0.6 + шагающий скелет). Shell (lib+bin split): - режим --screenshot <path>: headless software-render первого кадра в PNG (Slint software-renderer, без дисплея/композитора, §6); TDD-тест «кадр не пустой + тема отражена», зелёный и на dev-Mac, и в VM (Linux). - shturman-shell.service → oneshot software-render → /run/shturman/frame.png (RemainAfterExit → is-active детерминированно, без хрупкого weston; живой weston-shell — v0.5). just shell-frame — инспекция кадра. E2E (tests/e2e/run.sh, двухфазно pre→reboot→post): - /data+power-safe опции, volatile-tmpfs, first-boot идемпотентность, per-unit active, имена на шине + GetPowerState, fake-ACC SetAcc→AccChanged, первый кадр PNG, base-бюджеты (journald volatile / zram / oomd / fake-hwclock→/data / eMMC-прокси), персист Settings + machine-id every-boot bind после reboot. Провижининг (lima/shturman.yaml) — правки по реальным ошибкам Lima: - build-deps Slint/winit на Linux (libfontconfig1-dev/libxkbcommon-dev/libwayland-dev); - linux-modules-extra (zram/vcan не в vz-ядре); systemd-oomd; rm стокового /etc/fake-hwclock.data (A11); VM-локальный CARGO_TARGET_DIR. Док-синхронизация (спека §13/§8.1/§7.5 + CLAUDE.md): швы реализации, eMMC-порог T=4096 сект, fake-hwclock masked-в-Lima, dev-mock policy не нужен. Перф-вердикт — на RK3588 (в VM — функционально, performance §2). just ci зелёный. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Alexander <akotenev2003@gmail.com>
6.5 KiB
Штурман — инструкции проекта
Open-source русскоязычный companion-слой («ОС поверх Linux») для авто на RK3588: быстрый Slint-UI + голосовой RU-ассистент, читающий OBD/CAN только на чтение + расширяемый Plugin API. Лицензия MIT. Общение и комментарии — по-русски; код-идентификаторы — как есть.
Фаза: РЕАЛИЗАЦИЯ (v0)
Проектирование завершено. Источник правды по дизайну — каталог docs/ (Tier 0–3 + 8 контрактов +
детальный roadmap.md; всё прошло многоагентный adversarial-ревью). Не противоречь докам; если
реальность расходится с доком — синхронизируй док (двунаправленные швы, как в дизайн-фазе).
КРАСНЫЕ ЛИНИИ (нерушимы)
- Никогда не safety-critical — двигатель/тормоза/ABS/ESP/руль/подушки; в системе нет actuator-путей.
- 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-конвейер · v0.3 power-safe · v0.4 MCU/thermal · v0.5 полный shell (живой weston-shell).
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 промптах агентов (закрывают строку, валят скрипт) — код-идентификаторы в одинарных кавычках.