Open-World Narrative · Guides & deep dives

V5 Workshop Discovery & Ranking Integrity

Make each fake rating expensive before trying to detect it:

6sections7 minread2tables

On this page

plan-id: v5-workshop-discovery-integrity.v1

Status: Draft for review — fills audit gap V1_V7_PLAN_SET_AUDIT_2026-06-12 §6.2. The workshop spec (features§"Workshop & Mods") defines discovery surfaces (browse by tag/cell/type/rating/recency/subscriber count, featured slots, main-menu showcase) and a creator standing score — but standing covers publishers only. Nothing protects the ranking inputs themselves: ratings, subscriber counts, and reports are all attacker-controllable, and on a marketplace where rank drives 70%-share real-money revenue (year1_modder_marketplace_manifest.json), ranking manipulation is a financial exploit, not a vanity problem.

Owners: Trust & Safety Lead (policy + enforcement), Workshop service owner (implementation in the workshop service), Anti-Cheat ML owner (shared anomaly/sock-puppet models — the same telemetry-stream classifier infrastructure, features§"Anti-Cheat"), Live-Ops Producer (appeal SLAs).

All thresholds below are launch values — planning assumptions adopted 2026-06-12, tuned against closed-beta data (the closed beta runs the workshop live, beta-program.md Phase 2) and reviewed monthly thereafter.


1. Rating Eligibility and Rate Limits#

Make each fake rating expensive before trying to detect it:

  • One rating per account per item (revisable; revision replaces, never adds). Spec already uses five-star ratings.
  • Engagement gate: rating eligibility requires owning/subscribing the item AND ≥30 minutes of in-session use of it (telemetry-verified via the mod-set session attribution that already exists for the data-only loader); paid items additionally require the 48-hour refund window to have opened (i.e., a real, charged purchase — refunded purchases lose their rating).
  • Velocity caps: max 10 ratings per account per day, 40 per week; max 3 ratings per day targeting the same creator.
  • Account maturity: accounts < 7 days old or < 5 played hours cannot rate (they can subscribe and play; they just don't move rankings yet).
  • Report rate limits: max 10 content reports/day/account; reports against the same item from accounts sharing a §4 cluster collapse into one weighted report.

2. Rater Reputation (the gap the spec leaves open)#

A per-account rater-reputation weight r ∈ [0, 1], distinct from the existing creator standing (which throttles publishers). Displayed score and rank use weighted ratings:

text
score(item) = Σ_i ( r_i x stars_i ) / Σ_i r_i        (+ Bayesian prior, §3)
  • Initialization: new eligible raters start at r = 0.3.
  • Earning weight: +0.05 per 30 days of account good standing (cap 1.0); ratings that agree with the long-run consensus of high-reputation raters on widely-rated items nudge +0.01 (cap respected) — agreement is measured only on items with ≥200 weighted ratings to avoid punishing taste on niche items.
  • Losing weight: rating through a brigade window that is later confirmed (§3) → ×0.5; upheld report-abuse finding → ×0.25; §4 sock-puppet cluster membership → r := 0 (and worse, §4). Weight decay is account-scoped and recoverable (floor 0.05, recovery through the earning path) except for confirmed sock-puppets.
  • r is never displayed (publishing it teaches attackers the model); the appeal path (§5) discloses that down-weighting occurred, not the score.

3. Brigading and Review-Bombing Countermeasures#

Display-score robustness (always on):

  • Bayesian prior: displayed score = weighted mean shrunk toward the catalog-category mean with prior strength m = 25 weighted ratings — kills the "5 fake five-stars at birth" and "10 one-stars kill a new item" attacks symmetrically.
  • Rank freshness uses time-decayed rating mass (half-life 90 days), so an ancient brigade can't permanently pin an item.

Anomaly detection signals (evaluated hourly per item, ML pipeline shared with the anti-cheat classifier infra):

Signal Threshold (launch values) Action on trip
Rating-velocity z-score vs the item's own 30-day baseline z > 4 over a 6 h window (min 20 ratings in window) Auto-hold: window's ratings quarantined from the displayed score pending review
One-sided burst: ≥80% of a ≥30-rating 24 h window at 1★ (or 5★) trip Auto-hold + T&S review queue (review SLA 48 h)
Off-platform coordination correlate: burst onset within 24 h of a creator's drama spike (report-volume z > 4 on the creator, not the item) trip Review-bomb protocol below
New-rater share: >50% of a window's raters at r ≤ 0.3 trip Window weight ×0.25 pending review
Refund-then-rate pattern on paid items: >10% of window raters refund within 24 h of rating trip Ratings from refunders removed (per §1); cluster check (§4)

Review-bomb protocol (confirmed off-platform-motivated bombing, the "creator said something / patch broke a different mod" case):

  1. Freeze the displayed score at its pre-window value; banner on the item page: "Recent ratings are under review" (honest, neutral — players are told, the score is not silently edited).
  2. T&S review within 48 h classifies the window: legitimate quality collapse (e.g., an update genuinely broke the item — the linter/compat flags corroborate) → ratings restored and the score moves; coordinated bombing → window excluded, raters take §2 weight penalties.
  3. Exclusions are logged per item and auditable on appeal (§5); a quarterly transparency note reports counts of windows held/excluded (consistent with the DSA-transparency posture the moderation pipeline already carries).

Subscriber-count and showcase integrity: subscriber counts used for ranking/featured eligibility count only accounts that loaded the item in ≥1 session in the last 90 days ("active subscribers") — bot-subscribed ghosts decay out automatically; featured-slot and main-menu-showcase eligibility additionally require clean §3 history over the trailing 30 days.

4. Sock-Puppet Detection#

Target: rings of accounts inflating one creator (or burying a competitor). Detection layers, run as a daily batch over the rating/report graph:

  • Identity features: shared payment instrument fingerprint, shared device/hardware fingerprint, IP /24 + timing co-occurrence, account-creation burst patterns (≥3 accounts, same /24, < 72 h apart).
  • Graph features: rating-target overlap — pairwise Jaccard similarity of rated-item sets > 0.6 across ≥ 10 items flags a pair; connected components of flagged pairs with ≥ 3 accounts form a cluster. Bipartite spectral/co-clustering on the account×item matrix catches rings that randomize superficial identity features but still concentrate fire on the same targets.
  • Behavioral features: rating-only accounts (ratings ≥ 10, played hours < 2 beyond the §1 engagement minimum), inter-rating intervals more regular than human (coefficient of variation < 0.2 across ≥10 events).

Actions (graduated, cluster-scoped):

  1. Cluster confidence ≥ medium: all cluster ratings → weight 0, retroactively; affected item scores recompute (this is the main remedy — quiet and complete).
  2. High confidence + a beneficiary link (cluster inflates one creator who has a §4-relevant connection to the cluster — shared payment instrument or device with the creator account): case to T&S for creator-side enforcement through the existing creator-standing system; on a paid item this is marketplace fraud — listing review and possible payout hold per ugc-marketplace-compliance.md §6.
  3. Confirmed rings: account enforcement through the standard ban-tier ladder (features§"Cross-Platform Social, Reporting, and Bans") — discovery manipulation is a "griefing/cheating"-class offense, not a chat offense.
  4. Ban-wave hygiene mirrors anti-cheat practice: enforcement in periodic waves (not instant) so rings can't A/B-test detection boundaries; every wave human-reviewed before execution (the spec's "flags route to human review rather than auto-banning" principle applies here too).

False-positive guards: households/LAN cafés share IPs and devices — identity-feature hits alone (without graph or behavioral corroboration) never exceed "low confidence" and trigger no action beyond logging; clusters require at least one graph or behavioral feature to act.

5. Appeal Flow#

Rides the existing appeal infrastructure (companion app, 7-day SLA — the same channel the spec gives ban and moderation appeals):

Who appeals What Path
Creator Score freeze, window exclusion, featured-eligibility loss Companion app → T&S queue; 7-day SLA; outcome with reason (which §3 protocol step applied); second-level review by a different moderator on request (DSA-consistent)
Rater Rating quarantined/zeroed, rate-limit strike, cluster membership Same channel; 7-day SLA; remedy = weight restoration + rating reinstatement; cluster-membership appeals get human review of the §4 evidence class (without disclosing thresholds)
Reported item owner Already covered by the spec's DSA-compliant moderation appeal Existing path (unchanged)
  • Upheld appeals are integrity inputs: each one back-tests the §3/§4 rule that fired (the false-positive feeds the monthly threshold review).
  • Appeal-abuse guard: appeals are never rate-limited, but repeat frivolous appeals (3 consecutive rejections on the same matter) drop to a low-priority queue — answered, just not at the expense of the SLA pool.

6. Metrics and Review#

Monthly integrity review (Trust & Safety Lead chairs): brigade windows detected/held/confirmed, sock-puppet clusters actioned, appeal uphold rate (target: < 10% of §3/§4 actions overturned — higher means thresholds too hot), median time-to-detection for confirmed brigades (target < 12 h), and rank-stability of the top-100 marketplace items (unexplained rank swings are the residual signal that something got through). Thresholds in §1–§4 are versioned in the workshop service config so every change is auditable against the metric record.