Context. surface admin · domain safety · route /trust-safety/maya-anticheat · auth signed-in (admin) + scope:admin:workspace:trust-safety · source apps/oshun/admin/src/app/trust-safety/maya-anticheat/page.tsx
Last walked. not yet walked
Purpose#
Read-only moderation dashboard for competitive-session reports, appeals,
tribunal votes, and active bans. It projects a deterministic
MayaAnticheatModerationSystem snapshot so reviewers can inspect policy shape
and evidence density without implying that the seeded rows are live cases.
Entry points#
- Direct route
/trust-safety/maya-anticheat. - Missing session redirects with
reason=missing-session; a session without Trust & Safety workspace access redirects withreason=forbidden-workspace. - Renders inside
AdminShellwithcurrentWorkspaceId="trust-safety".
Layout regions#
- Header: Maya Nexus identity, concise purpose, generated time, and explicit “seeded control snapshot” source label.
- KPIs: active bans, priority report targets, open tribunal cases, and pending appeals.
- Report aggregation: suspected target, independent reporters, category mix, evidence ids, and priority-review state.
- Appeals: appeal/ban identity, scope, reason, state, and reviewer resolution.
- Tribunal: required vote progress, per-reviewer verdicts, and final outcome.
- Active bans: player, scope, reason, issue/expiry times, and evidence.
States#
- Authorized — exact seeded dashboard counts and all four evidence sections render.
- Missing session — protected data does not render before redirect.
- Forbidden workspace — sessions outside the Trust & Safety scopes are denied before dashboard creation.
- Priority aggregation — independent-report threshold is exposed in both row data and visual treatment.
- Pending / resolved appeal — reviewer identity appears only when a resolution exists.
- Open / decided tribunal — vote count and verdict remain explicit.
- Mobile — all tables scroll within their wrappers while the page itself remains overflow-free.
Interactions#
- The dashboard is intentionally read-only; no row or button suggests that a reviewer can issue a ban, resolve an appeal, or cast a vote here.
- Table and list traversal announces headers, verdicts, reviewer identity, dates, and evidence in a coherent reading order.
Data & contracts#
- Reads:
createSeedMayaAnticheatDashboardData, which instantiatesMayaAnticheatModerationSystemfrom@maya/anticheat, submits seeded reports, registers reviewers, opens tribunals, casts votes, issues bans, and creates appeals before taking the snapshot. - Writes / realtime / persistence: none.
- Injection seam:
bindMayaAnticheatDashboardLoadercan replace the seeded loader in-process; no production binding is visible in the route.
Cross-references#
- Dashboard:
apps/oshun/admin/src/app/trust-safety/maya-anticheat/MayaAnticheatModerationDashboard.tsx - Seed projection:
apps/oshun/admin/src/app/trust-safety/maya-anticheat/data.ts - Unit coverage:
apps/oshun/admin/src/app/trust-safety/maya-anticheat/maya-anticheat-dashboard.test.tsx - Browser coverage:
apps/oshun/admin/e2e/maya-anticheat-moderation-dashboard.spec.ts
Open questions / known gaps#
- Replace the module-level loader seam with a tenant-aware BFF read and explicit loading, empty, unavailable, and stale states.
- Keep adjudication mutations on a separately scoped, rationale-gated workflow with immutable audit evidence rather than adding casual row actions to this overview.