62 lines
2.5 KiB
Markdown
62 lines
2.5 KiB
Markdown
# Архитектурный baseline AWatch-rus
|
||
|
||
Дата фиксации: 2026-06-05
|
||
|
||
## Целевая архитектура
|
||
|
||
```text
|
||
Backend/API: Rust
|
||
Agent: Rust
|
||
Portal: Rust SSR + HTML + HTMX
|
||
Future Enterprise UI: React + TypeScript
|
||
Future Desktop Forensics: Tauri + React + Rust core
|
||
```
|
||
|
||
## Поддерживаемый контур
|
||
|
||
- Текущий production/pilot портал: Rust server-rendered HTML с HTMX-ready
|
||
поведением и обычным JavaScript без отдельного frontend framework.
|
||
- Контрактный слой для будущих интерфейсов: JSON API, OpenAPI 3.1 и
|
||
TypeScript declarations.
|
||
- Бизнес-логика, расчёты, workflow и работа с JSON-хранилищами остаются на
|
||
стороне Rust backend/API.
|
||
- Future Enterprise UI может быть реализован на React + TypeScript только
|
||
поверх опубликованных JSON API.
|
||
- Future Desktop Forensics может быть реализован как Tauri + React + Rust core,
|
||
не ломая текущий портал.
|
||
|
||
## Исключено из roadmap
|
||
|
||
Экспериментальные Rust UI/prototype mirror направления исключены из
|
||
архитектурного roadmap проекта.
|
||
|
||
Это означает:
|
||
|
||
- новые crate для экспериментальных UI/prototype mirror направлений не
|
||
добавляются;
|
||
- устаревшие mirror-prefix маршруты не являются частью публичного
|
||
API-контракта;
|
||
- будущий UI не должен парсить HTML текущего портала;
|
||
- новые UI-фреймворки требуют отдельного architecture decision;
|
||
- breaking changes API требуют version bump контракта и migration window.
|
||
|
||
## Compatibility baseline
|
||
|
||
Обязательные production endpoints:
|
||
|
||
- `/portal`;
|
||
- `/reports`;
|
||
- `/portal/reports`;
|
||
- `/api/reports`;
|
||
- `/api/contracts`;
|
||
- `/api/contracts/openapi.json`;
|
||
- `/api/contracts/typescript.d.ts`.
|
||
|
||
Правила совместимости:
|
||
|
||
- изменения API должны быть additive;
|
||
- клиенты игнорируют неизвестные поля;
|
||
- optional-поля могут отсутствовать;
|
||
- `null` не должен ломать UI;
|
||
- публичные JSON-поля не переименовываются без новой версии контракта.
|