Files

4.5 KiB
Raw Permalink Blame History

type, work_item_id, verdict, version
type work_item_id verdict version
review ORCH-022 APPROVED 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-001Accepted. Косметическая рассинхронизация статуса, на функциональность/гейты не влияет.

Документация

Обновлена в том же 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 — синхронна с кодом. Замечаний нет.