10 Commits

Author SHA1 Message Date
embeddevio 4ff22f4323 Merge pull request 'Sprint 0 / #20: хранилище состояния — SQLite WAL, миграции, audit log, атомарный apply/rollback' (#50) from feat/20-storage into main
contract-openapi / openapi-contract (push) Failing after 37s
contract-openapi / ts-client-is-current (push) Failing after 38s
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
embeddevio 3e3519edc8 Merge pull request 'Sprint 0 / #19: OpenAPI 3.1 контракт API v1 + TS-клиент и контрактные тесты' (#57) from feat/19-openapi into main
contract-openapi / openapi-contract (push) Failing after 0s
contract-openapi / ts-client-is-current (push) Failing after 0s
Sprint 0 / #19: OpenAPI 3.1 контракт API v1 + TS-клиент и контрактные тесты

AC проверены независимо (ревью TechLead): генератор TS-клиента (blob сверен),
отклонение схемы роняет контрактный тест (мутации), секретов в ответах нет.
Гейты: ruff/mypy чисто, pytest 93 passed / coverage 95.48% (порог 70%).
CI green недостижим — runner отсутствует (#52); отклонение зафиксировано в PR.
Refs #19, #15, #52.
2026-10-28 21:21:13 +03:00
embeddevio c4661c9db9 test(#20): регрессионные тесты потокобезопасности (#54) и BaseException/TOCTOU (#55)
Новый файл backend/tests/test_store_concurrency.py:

* N потоков × M upsert с чтениями → 0 ошибок, rules == audit_rows == N*M;
* чтение во время открытой транзакции другого потока не видит незафиксированных
  строк (ждёт коммита);
* чтение во время падающего apply не видит состояния, которое будет откачено
  (AC «не частично применённая конфигурация»);
* BaseException (KeyboardInterrupt/SystemExit/CancelledError) из Applier →
  revert вызван, failed в audit_log, БД восстановлена;
* два конкурентных set_geoip_schedule → связная цепочка old→new в журнале.

На коде до правки все 7 тестов падают; после — проходят.

Refs #20, Refs #54, Refs #55
2026-10-28 21:12:35 +03:00
embeddevio 3387eb0f60 test(contract): restore trailing newline at EOF
contract-openapi / openapi-contract (push) Failing after 32s
contract-openapi / ts-client-is-current (push) Failing after 28s
contract-openapi / openapi-contract (pull_request) Failing after 32s
contract-openapi / ts-client-is-current (pull_request) Failing after 33s
2026-10-28 21:07:11 +03:00
embeddevio c53e2ef9b1 test(contract): align response contract test with the verified green run
contract-openapi / openapi-contract (push) Failing after 40s
contract-openapi / ts-client-is-current (push) Failing after 1m24s
2026-10-28 21:06:55 +03:00
embeddevio c6150bd5fd test(contract): align spec test with the verified green run
contract-openapi / openapi-contract (push) Failing after 18m54s
contract-openapi / ts-client-is-current (push) Failing after 18m49s
2026-10-28 21:06:33 +03:00
embeddevio 3dac7e730a test(api): контрактные тесты «схема ↔ реализация» (Refs #19)
contract-openapi / openapi-contract (push) Has been cancelled
contract-openapi / ts-client-is-current (push) Has been cancelled
- test_openapi_spec: валидность 3.1, полнота операций по ТЗ, writeOnly-секреты,
  единый формат Error, соответствие pydantic-моделей схемам.
- test_contract_responses: все эндпоинты против схем, ошибки 401/404/409/422/503,
  WS-кадры, отсутствие секретов в ответах.
- test_contract_negative: доказательство AC — подмена реализации на расходящуюся
  роняет контрактный тест с указанием пути до поля.
2026-10-22 00:22:46 +03:00
embeddevio 7e10ffaf8a test(store): репозиторий (аудит по всем сущностям) и персистентность после рестарта (#20) 2026-10-21 23:45:30 +03:00
embeddevio 89e5a5a883 test(store): миграции, аудит, атомарный apply/rollback (#20) 2026-10-21 23:45:06 +03:00
embeddevio 5647d339b1 chore(#16): каркас пакетов backend, тестов и заглушки ui/deploy/tests 2026-10-21 23:28:59 +03:00