Disciplines · Runbooks

Runbook — Moderation Surge

Triggers:

9sections4 minread

On this page

Trust & Safety review/moderation/appeal queues spike beyond surge-rota capacity; backlog risks SLA breach on safety-critical decisions. Use to raise queue priority, freeze risky publication, route surge rota, and communicate operator status.

Scope#

Triggers:

  • queue_review or queue_moderation depth above SLO for >30 min.
  • queue_appeal aging beyond the 48-hour SLA.
  • A coordinated abuse incident (mass reports, prompt-injection wave, scraping wave, brigading) targets the platform.
  • A model promotion or persona promotion causes a false-positive flood that swamps reviewers.
  • An external event (news cycle, holiday, crisis) raises Tara/Veritas reviewer load above baseline.

Severity classification#

Sev Condition
sev1 queue_review contains items tagged crisis or csam_suspected not actioned within 1 hour, OR appeals backlog crosses regulator SLA.
sev2 queue_moderation depth > 2× SLO sustained for >30 min; appeals SLA breached for any cohort.
sev3 Single sub-queue (e.g., persona-appeals only) backed up; no customer-visible publication risk.

Source events: admin.queue.depth_sampled, admin.review.decision_recorded, admin.appeal.opened, admin.appeal.aged_out from admin-taxonomy.ts. Queue health targets live in dashboards-queue-health.ts.

Detection signals#

  • Alerts: queue-depth alerts from dashboards-queue-health.ts for queue_review, queue_moderation, queue_appeal.
  • Operator signals: T&S lead receives an SLA-breach digest hourly during surge.
  • Support correlate: spike in tickets tagged support.case.tags.account_action_disputed or support.case.tags.appeal_status.

Initial triage (first 15 minutes)#

  1. Acknowledge oshun-trust-safety-oncall.
  2. Open dashboards-queue-health.ts — record depth, SLA breach count, and the per-policy-class breakdown.
  3. Identify the leading policy class driving the depth.
  4. Decide root cause hypothesis:
    • Reviewer capacity drop (rota shortage / holiday) → activate surge rota.
    • Model false-positive flood → suspect the most recent Lilith promotion; prepare rollback via assistant-failure.md policy path.
    • External event → coordinate with launch-support team on public comms.
    • Abuse wave → coordinate with security on detection rules.
  5. Crisis filter first: regardless of root cause, items tagged crisis, self_harm, csam_suspected, imminent_violence skip the queue and route directly to the on-call senior reviewer. Verify the crisis-router is healthy before any other action.

Mitigation#

  1. Raise queue priority for safety-critical classes via the admin queue-priority hook (admin-taxonomy event admin.queue.priority_raised). Lower-class items deprioritized in the same operation.
  2. Surge rota activation: page the surge-reviewer rota per the T&S schedule. Verify each surge reviewer has refreshed RBAC and policy training within the last 90 days; rotate any who have not.
  3. Freeze risky publication: enable the publish-freeze flag for the affected policy class. Publish gates emit studio.publish.frozen events; authors see the studio.publish.frozen_banner_shown event-driven banner.
  4. Model-driven false-positive flood: revert the implicated Lilith policy version or model version per model-workflow-rollback.md. Do not skip review on items already enqueued — they remain reviewable but the intake rate drops to baseline.
  5. Abuse wave: coordinate with security to enable upstream rate limits and abuse-signature filters. Add the abuse cohort to the moderation priority queue so cohort-wide actions can be taken in bulk where policy permits.
  6. Operator status: publish the incident.internal.slack.investigating template to the T&S Slack with queue depth, SLA breach count, surge plan, and projected clear-by ETA. Refresh hourly until clear.

Communication cadence#

Moderation surge is rarely a customer-visible incident unless publication freezes hit launch-quality content. If publication is frozen on a public domain (Tara, Veritas, Nyx), publish:

Phase Template ID Audience
Status (publication freeze in effect) incident.customer.in_app.investigating customer
Resolved (freeze lifted) incident.customer.status_page.resolved status_page
Internal (every hour during surge) incident.internal.slack.investigating internal
Leadership (sev1 only) incident.leadership.email.resolved leadership

For regulator-reportable events (CSAM, imminent violence), route through the compliance lead — the incident.regulator.email.resolved template applies once the incident is closed.

Escalation#

  • T&S lead is the incident commander for moderation surges.
  • For sev1, page the privacy lead in parallel — any account action against the surge cohort needs privacy review.
  • For abuse-wave sev1, page the security lead.
  • Standard 5/5/15/30/60 escalation otherwise applies for reviewer-rota paging.

Recovery verification#

  • queue_review and queue_moderation depth back within SLO for 60 min.
  • No new SLA breaches for any sub-queue for 60 min.
  • Crisis-router success rate ≥ 99.9% for the surge window.
  • Surge rota members offboarded back to baseline; the surge log captures decisions and reviewer assignments for the audit trail.
  • If publish-freeze was active, the lifted freeze passes a smoke check of 20 freshly-published items.

Post-incident#

  • Postmortem must include: queue-depth timeline, reviewer headcount over time, root-cause hypothesis confirmation, model/persona/policy rollback if any, customer-visible publication-freeze duration, and any regulator-reportable items.
  • Update reviewer training (V1-OPS-training) if the surge revealed a decision-gap.
  • Review the appeals backlog separately — appeals that aged beyond SLA must individually clear with a documented decision.
  • File an abuse-pattern note with security if the surge was abuse-driven.