Files
embeddevio 4ff22f4323
contract-openapi / openapi-contract (push) Failing after 37s
contract-openapi / ts-client-is-current (push) Failing after 38s
Merge pull request 'Sprint 0 / #20: хранилище состояния — SQLite WAL, миграции, audit log, атомарный apply/rollback' (#50) from feat/20-storage into main
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.
2026-10-28 21:35:41 +03:00
..

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/.