feat(coverage): deterministic test-coverage gate (ORCH-027) #109
Reference in New Issue
Block a user
Delete Branch "feature/ORCH-027-code-coverage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ORCH-027 — Coverage gate (deterministic test-coverage gate)
Deterministic (no-LLM) coverage sub-gate on the
deploy-staging → deployedge that blocks coverage degradation before a task branch merges intomain. Mirrors the security-gate (ORCH-022).What
src/coverage_gate.py(never-raise) + thincheck_coverage_gateinQG_CHECKS+_handle_coverage_gatesplice inadvance_stage— run AFTER merge-gate (coverage measured on the caught-up HEAD that lands inmain) and BEFORE image-freshness (fail before the expensive docker rebuild). Order:security → merge → coverage → image-freshness.pytest --cov=src --cov-report=jsonin the per-branch worktree →totals.percent_covered. Tool error → fail-open + WARNING by default (coverage_tool_fail_closedflips to strict).compute_coverage_verdict(measured, baseline, floor, policy, epsilon)—absolute | baseline | both+ epsilon (anti-flap);baseline None→ bootstrap.coverage_baselinetable (CREATE TABLE IF NOT EXISTS) + ratchet-up in_handle_merge_verify(deploy → done): atomic compare-and-set under the held merge-lease, never decreases.development(+ developer-retry, cap 3) + release merge-lease.18-coverage-report.md(coverage_status:frontmatter, single source of truth);GET /queuecoverageblock; Telegram on FAIL; optionalPOST /coverage/baselineoverride.Invariants
STAGE_TRANSITIONS/ existingcheck_*semantics / verdict keys (verdict:/result:/deploy_status:/staging_status:/security_status:) — byte-for-byte unchanged (NFR-5/AC-8). New DB table additive.coverage_gate_enabled; scopecoverage_gate_repos(empty → self-hosting only) → enduro-trails untouched.main).Tests
tests/test_coverage_gate.py(TC-01..TC-15): verdict modes/borders/epsilon, ratchet up-only + bootstrap + per-repo isolation, conditionality/kill-switch, fail-open/closed, never-raise, report write/read-back, AST self-hosting safety, advance_stage rollback + lease-release, real pytest-cov measurement + timeout, snapshot + registry/transitions unchanged. Frozen QG-registry anti-regress tests + deploy-staging edge tests updated. Full suite green (1466 passed).Infra precondition
pytest-cov==5.0.0added torequirements.txt— must be in the prod/staging image. First applicable merge bootstraps the baseline.Docs: README /
adr-0029-coverage-gate.md/ PIPELINE_DOCS /18-coverage-report.mdtemplate (architecture stage) + CHANGELOG / CLAUDE.md /.env.example(this PR).Refs: ORCH-027
🤖 Generated with Claude Code
5fde2ea737toc2369db808