Files
AWatch-rus/docs/ARCHITECTURE_BASELINE_RU.md
T

62 lines
2.5 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.
# Архитектурный 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-поля не переименовываются без новой версии контракта.