Files
seaca/docs/ROADMAP.md
T

113 lines
5.9 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.
# Roadmap — Seaca
Мобильный клиент SAC (Kotlin). Серверные задачи (API, настройки в веб-SAC, FCM с бэкенда) — в [security-alert-center](https://git.kalinamall.ru/PapaTramp/security-alert-center), фаза **v0.6 — Mobile**.
---
## Принятые решения
| Тема | Решение |
|------|---------|
| UI | Kotlin + Jetpack Compose (нативно) |
| Push | FCM (бесплатный канал доставки) |
| Привязка | Код регистрации от администратора (+ URL сервера; QR опционально позже) |
| Оповещения | Те же правила SAC: `min_severity`, cooldown, dedup — канал `push_mobile` в policy |
| Админка устройств | Только веб-SAC: список, отзыв, способ логина, выдача кодов |
| Роли | `viewer` — просмотр; `operator` — ack/resolve; admin-функции — не в приложении |
---
## v0.1 — Каркас приложения ✅
- [x] Gradle-проект: Compose, Navigation, Retrofit, DataStore (DI-фреймворк не используем — `SacRepository` вручную)
- [x] Экран «Подключение»: URL SAC, код регистрации, логин/пароль
- [x] `POST /api/v1/mobile/enroll` + refresh-сессия
- [x] Secure storage: `base_url`, access/refresh token, `device_id`
- [x] Ошибки сети / `GET /health` перед enroll
- [x] Базовая навигация: Обзор, События, Проблемы, Хосты, Отчёты
- [ ] CI: сборка debug APK (локально — `gradlew assembleDebug`, JDK 17+)
**Зависимость:** SAC **≥ 0.9.0** — `mobile_devices_allowed`, enrollment codes, `POST /api/v1/mobile/enroll`
---
## v0.2 — Паритет с веб-UI (чтение) ✅
- [x] Списки с пагинацией: events, problems, hosts, reports
- [x] Карточки: event, problem (+ связанные events), host (+ inventory)
- [x] Dashboard: виджеты как `GET /api/v1/dashboards/summary`
- [x] Фильтры events/problems (severity, status) — упрощённый набор
- [x] Pull-to-refresh
- [x] Тёмная тема (системная)
- [x] Локализация: русский
---
## v0.3 — Действия оператора ✅
- [x] `POST /api/v1/problems/{id}/ack` и `/resolve`
- [x] Обновление карточки после действия
- [x] Admin-only API не вызываем из приложения
- [x] Биометрический замок при возврате в приложение
- [x] «Доверять сертификату» для внутреннего TLS (self-signed)
---
## v0.4 — Push (FCM) ✅ (частично)
- [x] Firebase-проект, конфиг в app/ (не в git; шаблон `*.example`)
- [x] Регистрация FCM-токена: `PUT /api/v1/mobile/devices/me/fcm`
- [x] Обработка data message: `kind`, `id`, `severity`, deep link `seaca://…`
- [x] Notification channels по severity (critical / high / default)
- [ ] Actions в уведомлении: «Подтвердить» / «Закрыть» problem (operator+) — **после первого APK**
- [x] Тестовый push из веб-SAC («Проверить push на устройстве») — на стороне SAC
**Зависимость:** SAC worker — `use_mobile` в notification policy, `SAC_FCM_*` в `sac-api.env` (включается после первого APK)
---
## v0.5 — Полировка ✅ (основное)
- [x] Refresh token rotation (`POST /api/v1/mobile/auth/refresh`) — уже в v0.1
- [x] Биометрия при **запуске** и при возврате в приложение
- [x] Pull-to-refresh на обзоре и в списках
- [x] Формат даты/времени (несколько пресетов + системный локаль)
- [x] Режимы push на устройстве: звук / без звука / выкл.
- [x] Звук push: системный или пользовательский (ringtone picker)
- [x] Экран «Моё устройство»: сервер, пользователь, роль, версия, настройки, «Выйти»
- [ ] Виджет: число open problems
- [ ] Offline-кэш последних N событий (Room)
- [ ] Минимальная версия приложения (проверка с сервера)
---
## Сервер SAC (отдельный репозиторий) — чеклист v0.6
Эти пункты реализуются в **security-alert-center**, не в Seaca:
- [x] `mobile_settings`: `devices_allowed`, max devices, min app version
- [x] Таблицы `mobile_devices`, `mobile_enrollment_codes`, `mobile_refresh_tokens`
- [x] Веб: **Настройки → Мобильные устройства** — вкл/выкл, коды, список, отзыв, способ логина
- [x] API enrollment: создать код (admin), погасить, список устройств, revoke, test push
- [x] JWT refresh + привязка к `device_id`
- [x] FCM HTTP v1 из worker (`SAC_FCM_*` в `sac-api.env`)
- [ ] Audit: выдача кода, enroll, revoke, смена FCM
---
## Не в плане (пока)
- iOS
- UnifiedPush без FCM
- Управление пользователями SAC из телефона
- Настройки Telegram/SMTP с телефона
- Несколько SAC-серверов в одном приложении
---
## KPI
- От события на SAC до push на телефон: p95 < 45 с (как Telegram)
- Pairing по коду: < 2 минут для оператора
- Отзыв устройства: push прекращается в течение 1 минуты