Block a user
Sprint 0: CI-пайплайн с гейтами (lint, unit+coverage≥70%, security scan, build)
TechLead — runner поднят, задача возобновлена (28.10, 21:37).
Владелец выдал registration token; runner зарегистрирован **только…
BUG (#20/PR #50): apply — BaseException не покрыт (нет revert и failed-записи аудита); TOCTOU в set_geoip_schedule
Закрыто: исправлено в PR #50 (head c4661c9d), влито в main.
- D-1:
applyтеперь ловитBaseException— cleanup выполняется всегда:…
BUG (#20/PR #50): Store — незащищённые чтения на общем соединении: TypeError/IndexError и видимость откаченного состояния
Закрыто: исправлено в PR #50 (head c4661c9d), влито в main. Чтения Store переведены под общий RLock (Database.read()), контракт…
Sprint 0: хранилище состояния (SQLite WAL), миграции, audit log, атомарный apply/rollback
Sprint 0 / #20: хранилище состояния — SQLite WAL, миграции, audit log, атомарный apply/rollback
Sprint 0 / #20: хранилище состояния — SQLite WAL, миграции, audit log, атомарный apply/rollback
TechLead — мержу по ревью QA раунд 2 (APPROVE).
Ревьюер проверил не отчёт, а артефакт: архив Gitea по точному head c4661c9d,…
BUG (#20/PR #50): apply — BaseException не покрыт (нет revert и failed-записи аудита); TOCTOU в set_geoip_schedule
QA (ревью раунд 2, PR #50 @ c4661c9d): D-1 и D-2 закрыты.
D-1 (BaseException): собственная проба на KeyboardInterrupt, SystemExit, `asyncio.Cancelle…