4ff22f4323
Sprint 0 / #20: хранилище состояния — SQLite WAL, миграции, audit log, атомарный apply/rollback Правки по ревью QA (#54 critical, #55 D-1/D-2) внесены и приняты: RLock на чтения, BaseException → revert + failed в аудите, old_value внутри транзакции. Гейт на merge-состоянии (main + PR): ruff/format чисто, mypy strict 21 файл, pytest 107 passed / coverage 97.80% (порог 70%), 55/55 AC-проб, 28/28 security-проб, мутационная проверка тестов пройдена. Ревью: qa-engineer (APPROVE) + TechLead. Refs #20, #54, #55, #52.
awg_api — control plane
Непривилегированный процесс: FastAPI + REST API v1 + WebSocket + отдача статики UI.
| Модуль | Ответственность | Задача |
|---|---|---|
app.py |
lifespan, конфиг, логирование, error model, статика | #31 |
routers/ |
эндпоинты по OpenAPI (status, config, routing, devices, logs, auth) | #32 |
ws/ |
/api/v1/metrics/stream |
#33 |
security/ |
токен, CSRF, rate limit, маскировка секретов | #34 |
store/ |
SQLite (WAL), миграции, audit log, apply/rollback | #20 |
Контракт — docs/openapi.yaml (задача #19), TS-клиент генерируется в ui/src/api/generated/.