--- type: test-report work_item_id: ORCH-022 result: PASS --- # Test Report — ORCH-022 Security-гейт: secret-scanning (gitleaks) + dependency audit (pip-audit) как под-гейт ребра `deploy-staging → deploy`. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Дата: 2026-06-07 - Ветка: `feature/ORCH-022-security-secret-scanning` - Review verdict: APPROVED (`12-review.md`) ## Smoke test API (prod 8500, self-hosting — не трогаем контейнер) | Endpoint | Результат | |----------|-----------| | `GET /health` | `{"status":"ok","service":"orchestrator"}` — OK | | `GET /status` | OK (active task ORCH-022 в stage=testing виден) | | `GET /queue` | OK (counts/resilience/reconcile/reaper/post_deploy присутствуют) | ## Результаты (привязка к 04-test-plan.yaml) | TC ID | Описание | Тест | Результат | |-------|----------|------|-----------| | TC-01 | Секрет в diff → FAIL, secrets_found>=1, причина называет находку | test_security_gate.py::test_tc01_secret_in_diff_fails | PASS | | TC-02 | Чистая ветка → PASS, secrets_found=0 | test_tc02_clean_branch_passes | PASS | | TC-03 | Аллоулист подавляет заведомо-безопасное | test_tc03_allowlisted_match_does_not_fail | PASS | | TC-04 | HIGH/CRITICAL CVE при пороге HIGH → FAIL, deps_blocking>=1 | test_tc04_high_cve_at_high_threshold_blocks | PASS | | TC-05 | Только MEDIUM/LOW → PASS, deps_warning>=1 | test_tc05_only_medium_low_warns_passes | PASS | | TC-06 | Конфиг порога severity влияет на классификацию | test_tc06_threshold_config_changes_classification | PASS | | TC-07 | Недоступный фид → детерминированный degrade (fail-open default / fail-closed strict) | test_tc07_degraded_feed_failopen_default_failclosed_strict | PASS | | TC-08 | Вердикт ТОЛЬКО из frontmatter; negative-токен авторитетен | test_tc08_verdict_only_from_frontmatter | PASS | | TC-09 | Нет/битый frontmatter → (False, reason) fail-closed | test_tc09_missing_or_broken_frontmatter_failclosed | PASS | | TC-10 | Артефакт 17-security-report.md с валидным frontmatter + телом | test_tc10_artifact_has_valid_frontmatter_and_body | PASS | | TC-11 | Нет бинаря / исключение → (False, reason), never-raise | test_tc11_missing_binary_failclosed_never_raises | PASS | | TC-12 | Таймаут → детерминированный fail-closed, без зависания | test_tc12_timeout_is_deterministic_failclosed | PASS | | TC-13 | Не-self репо при пустом scope → (True, N/A) мгновенно | test_qg_security.py::test_tc13_non_self_repo_empty_scope_is_na | PASS | | TC-14 | ORCH_SECURITY_GATE_ENABLED=false → no-op pass | test_tc14_disabled_is_noop_pass | PASS | | TC-15 | Зарегистрирован в QG_CHECKS и диспетчеризуется _run_qg | test_tc15_registered_in_qg_checks / test_tc15_dispatched_by_run_qg | PASS | | TC-16 | FAIL → откат на development, enqueue developer, notify_qg_failure | test_stage_engine_security_gate.py::test_tc16_fail_rolls_back_and_enqueues_developer | PASS | | TC-17 | task_desc несёт дословную причину (ORCH-046) | test_tc17_task_desc_has_verbatim_findings | PASS | | TC-18 | После MAX_DEVELOPER_RETRIES (3) → set_issue_blocked + Telegram | test_tc18_retry_cap_blocks_and_alerts | PASS | | TC-19 | PASS → штатное продвижение конвейера | test_tc19_pass_advances_normally | PASS | | TC-20 | STAGE_TRANSITIONS не изменён; тесты стадий зелёные | tests/test_stages.py (полный прогон) | PASS | | TC-21 | Гейт не вызывает деплой-хук/рестарт прод (self-hosting safety) | test_tc21_fail_never_triggers_deploy | PASS | Все 21 TC покрыты и зелёные. Соответствие критериям приёмки (03-acceptance-criteria): AC-1..AC-21 закрыты соответствующими TC (AC-N ↔ TC-N для N=1..21; AC-20 «документация» подтверждён в review 12-review.md). ## Вывод pytest ### Security-специфичные тесты (25 шт.) ``` tests/test_security_gate.py ............... (15) tests/test_qg_security.py ...... (6) tests/test_stage_engine_security_gate.py ..... (5) ======================== 25 passed, 1 warning in 0.49s ========================= ``` ### Полный регресс ``` ======================= 772 passed, 1 warning in 14.70s ======================== ``` (1 warning — PydanticDeprecatedSince20 в src/config.py, не связан с ORCH-022, существовал до задачи.) ## Итог **PASS** — полный регресс 772/772 зелёный, 25 security-тестов покрывают все 21 TC плана и AC-1..AC-21, smoke-тесты API прод-инстанса OK. Прод-контейнер в процессе тестирования не затронут (тесты офлайн/изолированы). Задача готова к стадии deploy-staging.