platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
59
docs/phase-d/D4_PLATFORM_COMPATIBILITY_MATRIX.md
Normal file
59
docs/phase-d/D4_PLATFORM_COMPATIBILITY_MATRIX.md
Normal 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.
|
||||
Reference in New Issue
Block a user