platform: modularize api/gui, add docs-tests-web foundation, and refresh root config

This commit is contained in:
beckline
2026-03-26 22:40:54 +03:00
parent 0e2d7f61ea
commit 6a56d734c2
562 changed files with 70151 additions and 16423 deletions

View File

@@ -0,0 +1,59 @@
# D4.3 Матрица совместимости (Web + iOS + Android)
Дата: 2026-03-07
Статус: done
Владелец: Engineering
## 1) Цель
- Зафиксировать единый контракт, чтобы `web`, `iOS`, `Android` переиспользовали одно Go-ядро (`/api/v1`) без платформенных форков бизнес-логики.
- Явно обозначить ограничения transport-runtime и ожидания к клиентам.
## 2) Инвариант архитектуры
- Все transport-клиенты (`singbox`, `dnstt`, `phoenix`) запускаются на стороне хоста с `selective-vpn-api` через backend-адаптеры.
- `web/iOS/Android` являются control-plane клиентами: вызывают API, читают состояние, запускают validate/apply flow.
- Платформы не должны управлять локальными `systemd`/бинарями напрямую.
## 3) Платформенная матрица API-контракта
| Контур | Web (`Vite + React + TS`) | iOS | Android |
| --- | --- | --- | --- |
| Базовый API | `GET/POST /api/v1/*` | `GET/POST /api/v1/*` | `GET/POST /api/v1/*` |
| Realtime | SSE (`/api/v1/events/stream`) в foreground | SSE в foreground, polling fallback в background | SSE в foreground, polling fallback в background |
| Transport capabilities | `GET /api/v1/transport/capabilities` | тот же endpoint | тот же endpoint |
| Policy flow | `GET /policies`, `POST /validate`, `POST /apply`, `POST /rollback` | тот же flow | тот же flow |
| Auth/TLS | gateway/proxy + token | gateway/proxy + token + secure storage | gateway/proxy + token + secure storage |
| Error contract | `ok/code/message/exitCode/stderr` | идентично | идентично |
## 4) Матрица transport backend vs платформы
| Transport backend (в Go-ядре) | Web UI | iOS UI | Android UI | Ограничения |
| --- | --- | --- | --- | --- |
| `singbox` | Поддержан через API | Поддержан через API | Поддержан через API | runtime на сервере, не в мобильном UI |
| `dnstt` (+ `ssh_overlay`) | Поддержан через API | Поддержан через API | Поддержан через API | SSH overlay оркестрируется backend-ом |
| `phoenix` -> `slipstream` | Поддержан через API | Поддержан через API | Поддержан через API | подключение/health/metrics только через backend |
## 5) Runtime/packaging ограничения
- Поддерживаемый runtime mode на текущем этапе: `exec=true`.
- `embedded=false`, `sidecar=false` (зарезервировано, без silent fallback).
- Packaging profiles: `system=true`, `bundled=true`.
- Практический вывод для платформ:
- UI показывает capabilities и ограничения из backend.
- UI не должен предполагать поддержку `embedded/sidecar` до явного включения в capabilities.
## 6) Проверка совместимости (smoke)
- Скрипт: `tests/transport_platform_compatibility_smoke.py`.
- Проверяет:
- наличие `singbox/dnstt/phoenix` в `/transport/capabilities`,
- `runtime_modes.exec=true`,
- `packaging_profiles.system=true`, `packaging_profiles.bundled=true`,
- рабочий policy-контракт (`/transport/policies`, `/validate`, `/conflicts`).
Команда запуска:
```bash
API_URL=http://127.0.0.1:8080 ./tests/transport_platform_compatibility_smoke.py
```
## 7) Итог D4.3
- Совместимость `web + iOS + Android` зафиксирована как единый API-контракт control-plane.
- Все transport-runtime различия остаются в Go-ядре.
- Это позволяет продолжать backend-first реализацию и затем переиспользовать ту же логику в desktop/web/mobile UI.