Skip to content

feat(slos): SLI, error budget and burn rates - #2295

Merged
Makisuo merged 13 commits into
feat/slo-latency-ladderfrom
feat/slo-compute
Nov 6, 2026
Merged

Makisuo merged 13 commits into
feat/slo-latency-ladderfrom
feat/slo-compute

test(slos): escape SQL literals in one pass in the parity e2e (CodeQL)

12cbb1d
Select commit
Loading
Failed to load commit list.
Maple Review Bot / Maple / review succeeded Nov 6, 2026 in 1m 10s

Confidence 10/10 · No issues found

🟢 Confidence 10/10 · safe to merge. This pass read only the parity e2e change; its ground truth matches the query semantics and the earlier budgetHistory slot duplication (F2) is unchanged and still open.
1 note · tests covered · risk medium · 1/1 new units observable

Adds the spliced SLO reads (window totals, hour/minute buckets, burn windows, budget history), the status/history service paths and endpoints, and a raw-vs-rollup parity e2e plus benchmark suite. The CodeQL escaping fix in the parity test is correct; nothing new blocks merge.

  • sloTotalsQuery / sloBucketsQuery tile a window from raw spans, minutely and hourly rollups
  • readStatuses reads every SLO's totals and burn windows in batched, org-scoped queries
  • New GET /v2/slos/:id/status and /history endpoints
  • Parity e2e compares the splice against a flat scan on 6 window alignments

Still open from earlier reviews

Production impact

Telemetry this change adds and removes (10)
  • ➕ span name SlosService.status · packages/backend/src/services/slos/SlosService.ts:334
  • ➕ attribute maple.slo.id · packages/backend/src/services/slos/SlosService.ts:335
  • ➕ span name SlosService.statuses · packages/backend/src/services/slos/SlosService.ts:352
  • ➕ span name SlosService.history · packages/backend/src/services/slos/SlosService.ts:374
  • ➕ span name SloReads.windowTotals · packages/backend/src/services/slos/slo-reads.ts:49
  • ➕ span name SloReads.burnWindows · packages/backend/src/services/slos/slo-reads.ts:69
  • ➕ span name SloReads.budgetHistory · packages/backend/src/services/slos/slo-reads.ts:89
  • ➕ span name SloReads.statuses · packages/backend/src/services/slos/slo-reads.ts:143
  • ➕ attribute maple.slo.count · packages/backend/src/services/slos/slo-reads.ts:155
  • ➕ attribute maple.slo.reads · packages/backend/src/services/slos/slo-reads.ts:156
What was checked
  • Parity test's burn ground truth uses the same bucket-start bounds as inLastMinutes (queries/slos.ts:271)
  • quote escapes backslash and single quote in one pass; every other interpolated seed value is a numeric constant (slo-parity.clickhouse.e2e.test.ts:145)
  • Legacy-row expectation (10:40 minute, 12:00 hour, not 12:10) matches the edge-tier conditions (queries/slos.ts:157)
Observability coverage: 1 of 1 changes observable
Change Kind Observable Evidence
SLO warehouse reads (totals, buckets, burn windows, budget history, batch statuses) outbound query yes Named Effect.fn spans (SloReads.windowTotals, burnWindows, budgetHistory, statuses) plus maple.slo.count / maple.slo.reads annotations in slo-reads.ts:49,69,89,143

12cbb1d · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.