juspay / juspay/decision-engine
Sticky routing: ops hardening — kill-switch dashboard, metrics, rollout
- Dominant language
- Rust
- Stars
- 128
- Forks
- 36
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 34
Description
Part of #393 (sticky routing). **Status: open** — the remaining ops/rollout tail; the code pieces have landed in the PR stack.
Done (pending merge):
- [x] `KnownFeature::StickyRouting` — the `sticky_routing_enabled` flag is dashboard-manageable with rollout % (#422; dashboard card in #424)
- [x] Metrics counters (#423): `sticky_routing_decisions_total{outcome=overridden|pinned_agreeing|vetoed|no_state|read_error}` and `sticky_routing_writes_total{outcome=recorded|decremented|no_habit|over_budget|write_error}` — `over_budget` doubles as the admission-guard alarm, the `*_error` outcomes surface Redis degradation (both guards fail open by design)
Remaining:
- [ ] Grafana panel + alerting on those counters (especially `over_budget` and `*_error`), and on sticky key-count growth per merchant
- [ ] Rust-level integration tests against a live Redis: health-veto trip (needs scored history), admission-budget window rollover, combo-cap prune drain, sliding-TTL re-arm, cardinality/memory sanity (~250 B/customer model)
- [ ] Rollout: enable on sandbox for a pilot profile; A/B measurement of auth-rate uplift for sticky vs SR (the `STICKY_ROUTING` approach label + existing A/B intercept give the cohorts)
Related (pre-existing, tracked separately): `SR_SELECTION_VOLUME_COMMITMENT` shares the SRv3 scoring-gate gap that `STICKY_ROUTING` was given classifier entries for; and the merchant feature-toggle API has a lost-update race on its shared FeatureConf row (found via the sticky e2e suite, fix in progress).
Contributor guide
Assessment
This issue has not been assessed yet.