QAP Service-Level Objectives¶
Targets the Quality Assurance Pipeline meets in steady state. Each SLO maps to one Grafana panel and (after PR 7) one alert rule. Numbers are starting points based on the staged rollout — revisit after a quarter of production data.
Phase-duration SLOs¶
| Phase | p95 budget | Metric |
|---|---|---|
qa_provisioning_build (bootstrap chain) |
6 min | qap_phase_duration_seconds{phase="qa_provisioning_build"} |
qa_testing_prototype |
90 min | qap_phase_duration_seconds{phase="qa_testing_prototype"} |
qa_validating_master |
180 min | qap_phase_duration_seconds{phase="qa_validating_master"} |
The bootstrap chain budget is dominated by the Agno
/workflows/build call (~3 min p95). The two polling phases' budgets
reflect Copilot's review-loop latency and master-branch CI cost.
Success-rate SLO¶
≥ 95% of QAP sessions reach
qa_completedwithout operator intervention, excluding sessions that fail withmax_heal_attempts(which is a code-quality signal, not a pipeline failure).
Metric:
(
sum(rate(qap_failures_total{reason!="max_heal_attempts"}[1d]))
/
sum(rate(qap_active_sessions{phase="qa_completed"}[1d]))
) < 0.05
Agno latency SLO¶
| Path | p95 budget |
|---|---|
/workflows/build |
180 s |
/workflows/test |
60 s |
/workflows/triage-failures |
30 s |
Metric: agno_request_duration_seconds_bucket.
Rate-limit SLO¶
< 1
agno_rate_limit_hits_totalper hour during business hours.
Sustained rate-limit hits mean either client-side ramp pushed past the
documented 100/min ceiling or the limiter AGNO_RATE_LIMIT_PER_MIN
configuration drifted out of sync. Investigate before the next ramp
stage.
Tick-budget SLO¶
< 1
qap_tick_budget_exhausted_totalper 100 tracker invocations.
Anything higher means trackers are spending most of a tick on one slot
and falling behind on overall throughput. Mitigations: lower the
per-tick slot work, or raise AGNO_TICK_BUDGET_SECONDS.
Heal-cycle outcome distribution¶
≥ 80% of
qap_heal_attempts_total{outcome="issue_opened"}should ultimately produce a green PR (downstream signal:qa_completedfollows the same session).
This is harder to query as a single Prometheus expression; the dashboard
shows it as the ratio of qap_heal_attempts_total{outcome="issue_opened"}
to qap_failures_total{reason=~"heal_.*|max_heal_attempts"} over the
same 24h window.
What's not an SLO yet¶
- End-to-end wall-clock duration (sum of phase budgets). Track per-phase first; total time is too sensitive to Copilot review latency.
- Per-tenant cost. Wait until billing is wired before alerting on this.