Last updated: 8 June 2026
The three layers
Every match passes through three independent layers. A failure at any layer quarantines the row from commercial feeds and may pause its contribution to rating updates while we investigate.
Layer 1 — Provenance
Provenance is where the result came from + how it was confirmed. The ladder, highest to lowest:
- Official — the result came from a federation or ratified event ingest (e.g. PDGA, WCA, FIP, sanctioned league).
- Operator — a verified venue or organiser submitted the result through their Courva account.
- Confirmed — all participants submitted independent matching scores. The independent agreement is what lifts this above bilateral.
- Bilateral— both sides of a 1v1 / both teams agreed but there's no third-party signal.
- Self — only one party submitted. Counts toward casual play + your own history, but never to public leaderboards or commercial feeds.
Layer 2 — Statistical anomaly detection
Once a match is provenance-clean, Layer 2 runs statistical checks against the rating model itself. These run as a nightly job over the recent window. We monitor for, among other patterns:
- Rating jumps the OpenSkill model didn't predict, given the prior σ.
- σ (uncertainty) collapsing faster than the structural model permits — the signature pattern of sandbagging.
- Win/loss sequences whose shape matches engineered outcomes more than competitive ones.
Anomalies don't auto-penalise. They route to a human review queue. False positives are explicitly tracked and used to retrain the thresholds.
Layer 3 — Graph collusion detection
Layer 3 looks across the full match graph, not at any single match. The most common patterns we screen for:
- Dense sub-graphs of players who only play each other, with unnatural win-flow patterns.
- Pumping rings — coordinated losses to lift a target player's rating.
- Tanking rings — coordinated losses by a target player to drop their rating before a graded event.
What we publish vs. what we keep confidential
We publish whatwe monitor (these categories) so you know the playing field. We don't publish how much — the exact thresholds, sliding windows, and weights stay confidential because publishing them would let bad-faith players engineer behaviour to sit just under each limit. The same posture every credible ratings standard takes.
Outcomes when an integrity signal fires
The integrity flag attaches to either a match or a player (Layer 3 can be cluster-wide). Possible outcomes:
- No action— the human reviewer determines it's a false positive; the flag is closed + recorded.
- Quarantined from commercial feeds — the row vanishes from the identified commercial feed (Tier 2 buyers) until resolved. It still counts toward your own play history.
- Rating freeze — your Crest is held at its current value while we resolve the dispute. Your handle, history + public profile stay live.
- Result voided — a confirmed-as-manipulated result is removed from rating calculations + leaderboards (the audit trail is kept).
- Account action — repeated confirmed cases of coordinated manipulation lead to suspension. We treat this as a last resort.
Disputes you can raise yourself
Any participant in a match can dispute the result from the match page. A disputed match is quarantined from commercial feeds until it's resolved — by independent submission of the correct score, by a venue/organiser attestation, or by withdrawal of the dispute. Dispute history feeds Layer 2 detection over time.
What is — and isn't — affected by integrity flags
Always preserved: your account, your match history (with integrity status attached), your social graph, your follows + community participation, your credits balance.
Held back during active flag: appearance in commercial buyer feeds (Tier 2), inclusion in licensed third-party data exports, potentially your contribution to rating updates depending on flag severity.
Provenance + integrity scores
Every match has two scores you can see on the match page once visible:
- provenance_score (0.00–1.00) — set by Layer 1. Reflects how confident we are about who reported the result.
- integrity_score (0.00–1.00) — the composite. Provenance, minus any Layer 2 / Layer 3 deductions while flags are open.
Commercial feed inclusion requires provenance_score >= 0.7 AND integrity_score >= 0.7 AND no active dispute AND no active integrity signal. These thresholds are reviewed quarterly.
Independent review
Once we sell identified player-level data to licensed buyers (regulated betting, federations, media), independent pen-testing of the integrity layer becomes an annual requirement. We'll publish the year of the most recent review on this page — without disclosing the findings in a way that helps bad actors.
How to report something
If you believe a match, player, or pattern is being manipulated, email [email protected] with the match ID(s), player handle(s), and what you've observed. Reports are read by humans + never shown to the reported player. Retaliation against reporters violates our Acceptable Use policy.
Changes to this page
We'll keep this page in sync as the layers evolve. Material changes (new outcome categories, new detection layers, structural threshold changes) get a dated entry below.
- 8 June 2026 — first published. Layer 1 + Layer 2 are live; Layer 3 graph detection is shadow-mode pending population density, and starts gating commercial feeds when density supports it (a sport-by- sport rollout).