Files
shturman/CLAUDE.md
T
kk0t9 9b87751ab8 feat(v0.6): Lima E2E зелёный с нуля + shell software-render screenshot
План 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>
2026-06-24 17:14:31 +03:00

6.5 KiB
Raw Blame History

Штурман — инструкции проекта

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-конвейер · 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 промптах агентов (закрывают строку, валят скрипт) — код-идентификаторы в одинарных кавычках.