Performance
CI-enforced performance thresholds from the quality gate (D24).
Deterministic quality gate
39 metrics, all code-computed. No LLM-as-judge.
| Metric | Threshold | Severity | Weight |
|---|---|---|---|
| Line coverage | ≥ 65 | WARN | 4 |
| Branch coverage | ≥ 52 | WARN | 3 |
| Real-data E2E coverage | ≥ 25 | WARN | 3 |
| Unit test failures | ≤ 0 | WARN | 6 |
| E2E test failures | ≤ 0 | WARN | 6 |
| Unapproved visual diffs | ≤ 0 | WARN | 3 |
| tsc errors | ≤ 0 | WARN | 6 |
| Code duplication % | ≤ 5 | WARN | 2 |
| Unused public exports | ≤ 25 | WARN | 1 |
| npm audit critical | ≤ 0 | BLOCK | 5 |
| npm audit high | ≤ 0 | BLOCK | 4 |
| npm audit medium | ≤ 5 | WARN | 1 |
| Gitleaks findings | ≤ 19 | BLOCK | 5 |
| Dependency majors behind | ≤ 3 | WARN | 1 |
| Tab nav p95 (ms) | ≤ 500 | WARN | 2 |
| Copilot first token p95 (ms) | ≤ 1500 | WARN | 2 |
| Copilot full response p95 (ms) | ≤ 5000 | WARN | 2 |
| API read p95 (ms) | ≤ 200 | WARN | 2 |
| Max bundle size (KB) | ≤ 200 | WARN | 2 |
| CLS p95 | ≤ 0.1 | WARN | 1 |
| LCP p95 (ms) | ≤ 2500 | WARN | 1 |
| axe critical violations | ≤ 0 | WARN | 4 |
| axe serious violations | ≤ 0 | WARN | 3 |
| axe moderate violations | ≤ 3 | WARN | 1 |
| ADR coverage (commit trailer) | ≥ 1 | WARN | 2 |
| SLO: dashboard render p95 (ms) | ≤ 500 | WARN | 2 |
| SLO: copilot first token p95 (ms) | ≤ 1000 | WARN | 2 |
| SLO: audio backfill latency p95 (min) | ≤ 30 | WARN | 1 |
| SLO: ARX overview availability % (7d) | ≥ 99.9 | WARN | 2 |
| SLO: R2 ingest e2e p95 (min) | ≤ 120 | WARN | 1 |
| Brain eval recall@10 (overall) | ≥ 0.75 | WARN | 4 |
| Brain eval recall@10 (audio) | ≥ 0.65 | WARN | 1 |
| Brain eval recall@10 (email) | ≥ 0.65 | WARN | 1 |
| Brain eval recall@10 (slack) | ≥ 0.65 | WARN | 1 |
| Brain eval recall@10 (SEC filings) | ≥ 0.65 | WARN | 1 |
| Brain eval recall@10 (manual-upload) | ≥ 0.65 | WARN | 1 |
| Brain eval recall@10 (multi-source) | ≥ 0.65 | WARN | 1 |
| Adversarial review cost per session ($) | ≤ 10 | WARN | 1 |
| Adversarial framework heartbeat missing count (7d) | ≤ 0 | WARN | 3 |
BLOCK metrics fail the gate and prevent a push. WARN metrics are recorded in LOGS/quality/*.jsonl but do not block. Overrides require an ADR plus a Quality-Override: ADR-XXXX trailer; auto-expires after 14 days.