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>
This commit is contained in:
2026-06-22 15:57:54 +03:00
parent 5ba19cde46
commit b9747ee66d
5 changed files with 293 additions and 8 deletions
+16 -3
View File
@@ -73,9 +73,16 @@
- Статическая фильтрация — прокси + sandbox (§5, владеет App-Host); broker — политика и рантайм-согласия.
### `ru.shturman.AppHost` — запуск/супервизия апов и плагинов
- **Методы:** `ListApps() → [(id, status)]`, `StartApp(id)`, `StopApp(id)`, `GetStatus(id) → status`.
- **Сигналы:** `AppStarted(id)`, `AppStopped(id)`, `AppCrashed(id, reason)`.
- (Установка/дистрибуция плагинов — домен F, не здесь.)
- **Методы:** `ListApps() → [(id, status)]`, **`LoadApp(id)`** (читает манифест `/data/apps/<id>/`,
конфигурит sandbox+прокси+`sender→манифест`; затем доступен `StartApp`), `StartApp(id)`, `StopApp(id)`,
**`UnloadApp(id)`** (снести sandbox/прокси/identity-binding), `GetStatus(id) → status`.
- **Сигналы:** `AppStarted(id)`, `AppStopped(id)`, `AppCrashed(id, reason)`, `AppLoaded(id)`.
- Установка/жизненный цикл плагинов — `ru.shturman.PluginManager` (ниже, домен F): зовёт `LoadApp`/`UnloadApp` после install/remove/update.
### `ru.shturman.PluginManager` — установка/жизненный цикл плагинов (домен F)
- **Методы:** `InstallPlugin(pkg)`, `RemovePlugin(id)`, `UpdatePlugin(id)`, `ListPlugins() → [(id, version, status)]`.
- **Сигналы:** `PluginInstalled(id)`, `PluginRemoved(id)`, `PluginUpdated(id)` (+ эмит нормативных audit-записей, A §9).
- **Привилегированная операция** — недоступна самим плагинам через прокси. Контракт детально — домен F.
### `ru.shturman.Connectivity` — сеть (обёртка NM/MM)
- **Методы:** `GetStatus() → status`, `ListNetworks() → [...]`, `Connect(id)`, `Disconnect()`.
@@ -104,6 +111,12 @@
### `ru.shturman.Media` / `…Nav` / `…Phone`
- Свои интерфейсы (play/pause/route; navigateTo/cancel; dial/answer/hangup). **Детали — в спеках доменов** H/I/G; здесь — только факт регистрации на шине.
### `ru.shturman.Camera` — камеры/виды (владелец — домен J)
- **Методы:** `ListSources()`, `SelectView(id)`.
- **Сигналы:** `ReverseEngaged(on)` (источник — `Power`/GPIO, см. J §3).
- **Properties:** `SignalState` per-source (`live`/`no_signal`/`acquiring`).
- Видео — НЕ здесь (PipeWire/V4L2, data-plane); гейтится `camera_in` (security-privacy). До домена J — мок-стаб. Детали — [domains/j-cameras-video.md](../domains/j-cameras-video.md).
---
## 5. Брокеринг доступа песочных апов (портал-паттерн)