From 0b4bc786977e713df22fbee29af08889c9c7ceea Mon Sep 17 00:00:00 2001 From: claude-bot Date: Sun, 7 Jun 2026 18:00:23 +0000 Subject: [PATCH] reviewer(ET): auto-commit from reviewer run_id=330 --- docs/work-items/ORCH-022/12-review.md | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/work-items/ORCH-022/12-review.md diff --git a/docs/work-items/ORCH-022/12-review.md b/docs/work-items/ORCH-022/12-review.md new file mode 100644 index 0000000..b8875df --- /dev/null +++ b/docs/work-items/ORCH-022/12-review.md @@ -0,0 +1,74 @@ +--- +type: review +work_item_id: ORCH-022 +verdict: APPROVED +version: 1 +--- + +# Review ORCH-022 + +## Summary +Security-гейт (secret-scanning `gitleaks` + dependency audit `pip-audit`) реализован как +детерминированный под-гейт ребра `deploy-staging → deploy`, исполняемый ПЕРВЫМ среди +edge-под-гейтов — в точности по ADR-001 (Вариант M) и эталонному паттерну соседей +(merge-gate ORCH-043 / image-freshness ORCH-058): leaf-модуль `src/security_gate.py` +(never-raise) + тонкая обёртка `check_security_gate` в `QG_CHECKS` (lazy-import, нет цикла) ++ врезка `_handle_security_gate` ПЕРВОЙ в блоке `current_stage == "deploy-staging"`. +`STAGE_TRANSITIONS` и схема БД не тронуты. Все 772 теста зелёные (25 из них — +security-специфичные: `test_security_gate.py`, `test_qg_security.py`, +`test_stage_engine_security_gate.py`). Документация обновлена полностью и в этом же PR. + +### Соответствие ТЗ (02-trz) +- FR-1 secret-scan offline `origin/main..HEAD`, любой секрет вне аллоулиста → FAIL ✓ +- FR-2 dep-audit по severity (`HIGH` дефолт), MEDIUM/LOW/UNKNOWN → warning ✓ +- FR-3 машинный вердикт ТОЛЬКО из frontmatter `17-security-report.md`, negative-токен + авторитетен, write→read-back (единый источник истины) ✓ +- FR-4 FAIL → откат на `development` + developer-retry (cap 3) + `task_desc` с дословными + находками (ORCH-046) ✓ +- FR-5 условность `security_gate_enabled` / `security_gate_repos` (пусто → self-hosting) ✓ +- FR-6 never-raise + таймаут `security_scan_timeout_s` ✓ +- FR-7 наблюдаемость (Telegram при degraded/FAIL, лог при PASS) ✓ +- §6 без миграций БД, §7 инварианты соблюдены (STAGE_TRANSITIONS/QG_CHECKS консистентны, + gate не деплоит/не рестартит прод) ✓ + +### Соответствие ADR (06-adr/ADR-001 + global adr-0012) +Р-1 (размещение ПЕРВЫМ, до merge-gate, до захвата merge-lease → lease не освобождается), +Р-2 (gitleaks pinned Go-бинарь в Dockerfile, pip-audit в requirements), Р-3 (fail-open +degrade + флаг `security_dep_audit_fail_closed`), Р-4 (пороги, UNKNOWN→warning), Р-5 +(артефакт + read-back), Р-6 (откат/cap/эскалация), Р-7 (lazy-import, double-guard +never-raise), Р-8 (self-hosting safety) — все реализованы как описано. + +### Критерии приёмки (03) +AC-1..AC-21 покрыты тестами TC-01..TC-21 (incl. rollback TC-16, verbatim task_desc TC-17, +cap+blocked TC-18, PASS-advance TC-19, no-deploy-on-FAIL TC-21). AC-20 (документация) — +подтверждён ниже. + +## Findings + +### P0 — Blocker +- нет + +### P1 — Must fix +- нет + +### P2 — Should fix +- нет + +### P3 — Nice-to-have +- Глобальный `docs/architecture/adr/adr-0012-security-gate.md` помечен `Статус: proposed`, + тогда как per-WI `06-adr/ADR-001` — `Accepted`. Косметическая рассинхронизация статуса, + на функциональность/гейты не влияет. + +## Документация +Обновлена в том же PR (AC-20, CLAUDE.md §6 соблюдён): +- `CLAUDE.md` — раздел «Артефакты задачи» (добавлен `17-security-report.md`) + строка о + машинных вердиктах (`security_status:`). +- `docs/architecture/README.md` — реестр `QG_CHECKS` (`check_security_gate (ORCH-022)`), + новый раздел «Security-гейт …», статусная сноска внизу. +- `docs/architecture/adr/adr-0012-security-gate.md` — новый global ADR (+ per-WI ADR-001). +- `CHANGELOG.md` — подробная запись в `[Unreleased] / Added`. +- `.env.example` — все шесть `ORCH_SECURITY_*` с комментариями. +- `Dockerfile` (pinned gitleaks), `requirements.txt` (pip-audit), `.gitleaks.toml` (корень, + правила + аллоулист) — инфраструктура версионирована. + +Статус: документация = golden source — синхронна с кодом. Замечаний нет.