Files
shturman/docs/dev-environment.md
T
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

133 lines
8.0 KiB
Markdown
Raw 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.
# Среда разработки
> Как вести разработку Штурмана корректно и изолированно — не выходя с Mac,
> ничего не ломая, со спокойным тестированием подсистем без реального железа.
Статус: **v1 (на ревью).**
Связано с: [architecture.md](architecture.md) · [principles.md](principles.md) (#13) · [contracts/hardware.md](contracts/hardware.md)
---
## Цель
- Вся разработка и тестирование с текущего **Mac**.
- **Изоляция:** эксперименты не трогают хост.
- **Безопасное тестирование** подсистем без машины.
## Хост и что это даёт
**Apple M4 (ARM64), 10 ядер, 16 ГБ, macOS 26.5.**
- **ARM64-хост ↔ ARM64-таргет (RK3588).** Linux в ARM64-VM крутится нативно-быстро
через Apple Virtualization (без эмуляции). Бинари, собранные в VM, уже целевой
архитектуры.
- **QEMU-эмуляция** нужна только если захотим эмулировать сами периферии RK3588 —
редкий случай, не базовый поток.
- **16 ГБ RAM — единственное ограничение.** VM держим лёгкой; локальную офлайн-LLM
по умолчанию **мокаем**, реальную квантованную модель гоняем точечно (закрыв
лишнее) или уже на железке.
## Изоляция «ничего не сломать» — бесплатно
Весь Linux / CAN / systemd живёт **в VM**. Хост-Mac держит только редактор,
нативный Slint и менеджер VM. Сломал что-то в стеке — **сбросил VM, хост цел**.
---
## Четыре слоя
```
L1 Mac host редактор · git · Rust-тулчейн · НАТИВНЫЙ Slint (быстрый UI) · justfile · Lima
L2 Linux dev-VM systemd · D-Bus · SocketCAN(vcan) · PipeWire · Wayland(shell/smithay)
(Lima, vz, ← интегрированный стек; сервисы = systemd-юниты + bubblewrap (как в проде)
ARM64)
L3 Симуляция Vehicle Simulator (vcan) · моки LLM/STT/TTS · фейк-GPS · мок-сеть
L4 Реальный RK3588 (позже) сборка образа → флеш → путь «VM → железка»
```
## Стек инструментов
| Задача | Инструмент | Зачем |
|--------|-----------|-------|
| Linux dev-VM | **Lima** (vz-backend) | нативная ARM64-виртуализация, open-source, scriptable YAML |
| Итерация UI | **нативный Slint на macOS** + shell-композитор (`smithay`), вложенно в `weston`, в VM | гибрид: быстрый дизайн-цикл + проверка реального Wayland |
| Виртуальный CAN | **SocketCAN `vcan`** (в VM) | тест Vehicle-Data без железа |
| Симуляция OBD | **ELM327-emulator** + `python-can` + `can-utils` | OBD-II PID и DTC без авто |
| Сборка Rust | **в VM** (та же арка) + кросс `aarch64-unknown-linux-gnu` с хоста | target-arch бинари |
| Аудио | **PipeWire** в VM | тест аудио-пайплайна |
| Изоляция сервисов | **systemd-юниты + bubblewrap** | dev зеркалит прод, а не Docker-огород |
| Оркестрация | **`justfile`** | единые dev-команды (`just vm-up`, `just sim`, `just test`…) |
| CI | **GitHub Actions, ARM64-Linux** | совпадает с таргетом |
| License-check | **`cargo-deny`** | принцип #12 (без AGPL-заразы) |
---
## Vehicle Simulator (first-class актив)
«Виртуальная машина» — то, чем тестируется killer-фича без авто. Реализует
принцип #13. Умеет:
- писать реалистичные кадры в **vcan**;
- отвечать на **OBD-II PID-запросы** (ELM327-стиль и raw CAN);
- **инжектить/чистить DTC** (set/clear) — для теста расшифровки и объяснения;
- проигрывать реальные **CAN-дампы** (`candump``canplayer`);
- гонять сценарии: холостой / езда / неисправность.
Строим тонко поверх `can-utils` (`cangen`/`candump`/`canplayer`), `python-can`,
ELM327-emulator. **Эталонный тест killer-фичи:** симулятор инжектит `P0420`
ассистент через Vehicle-Data → контекст → объясняет по-русски.
## Моки
- **LLM** — заглушка (canned-ответы/echo) или крошечная локальная модель.
- **STT** — обход голоса вводом текста; **TTS** — тихий/лог-режим.
- **GPS** — NMEA-реплей; **модем/сеть** — управляемые состояния (для теста offline-first).
---
## Воспроизводимость
- **Lima-шаблон** (`lima.yaml`): Ubuntu ARM64, модули (`vcan`), пакеты (systemd,
dbus, pipewire, weston (вложенный композитор для dev), can-utils, rust, python).
- **Provisioning-скрипт** + **`justfile`** с целями для подъёма/симуляции/тестов.
- Минимальный порог входа для контрибьюторов.
- **Nix** — опция *позже* для эталонно-пиннутого тулчейна (power-users), не сейчас.
## CI
GitHub Actions на ARM64-Linux-раннерах:
- **lint** (clippy + rustfmt), **unit**, **интеграция** (vcan + симулятор + моки,
сервисы на шине), **license** (`cargo-deny`), позже — **сборка образа**.
- *Если ARM64-раннеры вне бесплатного тира — фолбэк: x86 + кросс или self-hosted.*
## Пирамида тестов
- **Unit** — на хосте/в VM, по крейтам/модулям.
- **Интеграция** — сервисы на шине против Vehicle Simulator и моков. Здесь
тестируется контекст машины без авто.
- **E2E** — полный стек в VM: boot < 10 c, graceful shutdown по ACC, реверс→камера,
поток «почему горит чек» (`P0420`), офлайн-фолбэк при выключенной мок-сети.
- **HW-in-the-loop** — на реальном RK3588 (позже).
---
## Связи
- Процессная модель и planes, которые здесь воспроизводим, — [architecture.md](architecture.md).
- Тестируемость-без-машины как принцип — [principles.md](principles.md) #13.
- Путь «VM → железка», флеш, board support — [contracts/hardware.md](contracts/hardware.md).
- Vehicle Simulator кормит домен — [domains/](domains/README.md) (E: Vehicle-Data).
## Журнал решений (dev-environment)
| Решение | Выбор | Дата |
|---------|-------|------|
| Linux-окружение | Lima (vz-backend), ARM64, нативная виртуализация | 2026-06-16 |
| Итерация UI | гибрид: нативный Slint на macOS + shell-композитор (`smithay`, вложенно в `weston`) в VM; `cage` — только bring-up одного апа | 2026-06-16 |
| Изоляция сервисов в dev | systemd-юниты + bubblewrap (зеркало прода) | 2026-06-16 |
| Воспроизводимость | Lima-шаблон + provisioning + `justfile` (Nix — позже) | 2026-06-16 |
| CI | GitHub Actions, ARM64-Linux | 2026-06-16 |