Skip to content

Add emblem heuristic for cheat detection (beta-2.2.7) - #78

Open
owens1127 wants to merge 2 commits into
mainfrom
feat/cheat-detection-emblem-heuristic
Open

Add emblem heuristic for cheat detection (beta-2.2.7)#78
owens1127 wants to merge 2 commits into
mainfrom
feat/cheat-detection-emblem-heuristic

Conversation

@owens1127

Copy link
Copy Markdown
Contributor

Summary

  • Adds a weak player-level emblem signal based on prod analysis of cheat_level >= 2 accounts on flagged runs (segmented by last_seen and 3-month instance windows).
  • Legendary high-lift set (+0.06): Inherent Truth, Timeline's Blade, After the Unknown, Third Unknown, Blade's Blast, External Sights, Walker's Warp.
  • Default class emblems (+0.03): Warlock's Flight / Hunter's Wit / Titan's Pride — only when the player already has other cheat signals above PlayerThreshold (avoids false positives on new legitimate accounts).
  • New bitmask bit SuspiciousEmblem; bumps cheat check version to beta-2.2.7.

Test plan

  • gofmt -w on touched files
  • go build ./lib/services/cheat_detection/...
  • Deploy Hermes after merge; verify strings bin/hermes | grep beta-2.2.7
  • Spot-check a known flagged instance with a listed emblem hash — player flag explanation should include suspicious emblem <hash>
  • Run cheat-detection cron; confirm level-3+ recheck enqueue uses new version prefix (beta-2.2 still aggregates flags for cheat-level promotion)

Deploy

Services-only. After merge: ssh raidhubgit pullmake hermessudo systemctl restart hermes. No Postgres migration or API/Website dependency.

Made with Cursor

owens1127 and others added 2 commits June 30, 2026 18:35
Prod analysis of cheat_level>=2 players on flagged runs showed overrepresented emblems; apply a weak gated player-level signal for high-lift legendaries and default class emblems when other signals are already present.

Co-authored-by: Cursor <cursoragent@cursor.com>
Include all emblem hashes with >=3 cheater wearers and >=80x lift on flagged runs from the segmented prod scan, not just the initial top seven.

Co-authored-by: Cursor <cursoragent@cursor.com>
Copilot AI review requested due to automatic review settings July 1, 2026 13:48

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new player-level emblem-based signal to the cheat detection heuristic, records it via a new SuspiciousEmblem bit, and bumps the cheat-check version to beta-2.2.7.

Changes:

  • Introduces emblemCheatProbability and supporting hash allowlists for suspicious legendary and default-class emblems.
  • Integrates the emblem probability boost into the per-player probability calculation and explanation output.
  • Adds a new reason-bit (SuspiciousEmblem) and updates CheatCheckVersion to beta-2.2.7.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
lib/services/cheat_detection/types.go Adds the SuspiciousEmblem reason bit in the shared bitmask enum.
lib/services/cheat_detection/methods.go Applies emblem-derived probability and explanation to per-player results.
lib/services/cheat_detection/entry.go Bumps CheatCheckVersion to beta-2.2.7.
lib/services/cheat_detection/emblem_heuristics.go Implements the emblem allowlists, selection logic, and explanation string.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +15 to +17
// suspiciousLegendaryEmblemHashList is from prod analysis (cheat_level >= 2, flagged runs,
// last 12 months, 3-month instance chunks × last_seen buckets): emblem_hash with
// >= 3 cheater wearers and >= 80× lift vs clean players on flagged runs.
Comment on lines +172 to +178
if _, ok := suspiciousLegendaryEmblemHashes[hash]; ok {
if boost < 0.06 {
boost = 0.06
matchedHash = hash
}
continue
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants