4.5 KiB
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-WI06-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 — синхронна с кодом. Замечаний нет.