A documented metric bound, wired to a pager. Press play: a fairness parity gap
drifts past its bound, fires a SEV-1, and opens its runbook. The second panel burns a
differential-privacy budget until it pages. The dashboard never changes — the on-call does.
The third panel is the only part of this page that touches the network: it fires one real
test message into a Slack channel you bring.
Panel 1 · Fairness parity gap on an on-call
Day 0 / 40
INSIDE BOUND — no page. Parity gap nominal.
parity gap (TPR delta)documented bound = 0.050 → SEV-1
● SEV-1 · PARITY GAPPAGES ON-CALL
Metric
Subgroup parity gap (TPR delta)
Bound
> 0.050 (absolute)
Observed
—
Fired
—
Blast radius
Regulatory / harm-bearing
Response
On-call paged. Rollback considered within 1h.
Runbook RB-PARITY-001 — open
First 5 minutes
Acknowledge the page. Confirm the breach is real, not a metrics-pipeline artefact.
Pull the per-subgroup breakdown for the last 14 days. Identify which slice moved.
Check for a concurrent model push, feature change, or upstream data shift.
Decide: rollback?
Model push in last 24h correlates → roll back to last-known-good. Parity is harm-bearing; bias toward rolling back.
Drift is data-driven → freeze auto-retrain, escalate to data owner, hold current model.
HALT the training pipeline. Do not accrue more ε against an exhausted budget.
Pull the ε ledger; confirm cumulative spend vs. documented budget.
Identify the run(s) that pushed spend over the bound.
Decide
The budget is a hard bound, not a target. Do NOT borrow against next period.
Quarantine any model trained by the over-budget run pending privacy review.
Panel 3 · Live page — fire a real Slack message
Everything above is a simulation.
This panel isn't: paste a Slack
incoming-webhook URL and the button posts the simulator's current SEV state into your
channel — one message, tagged synthetic demo. The CLI sibling does the same
from a terminal: python3 watcher/watch.py --demo.
No request sent yet.
The URL lives in this page's memory only — not stored (no cookies, no
localStorage), not logged, sent nowhere except Slack itself when you click. Reload and it's
gone. The message body is the synthetic SEV state above; nothing else leaves this page.