Problem
A platform soliciting candid reviews of named judges will predictably receive two kinds of high-stakes content: threats that cross from criticism into 18 U.S.C. § 115 territory, and reviews containing judges' personal information covered by the federal Daniel Anderl Judicial Security and Privacy Act (72-hour removal on written request) and state Daniel's Laws (private rights of action, liquidated damages). Today the platform can do neither of the things those situations require: it cannot preserve evidence of what was published, and it cannot redact covered information without destroying an otherwise-lawful review. This issue is about building the operational capability to honor those obligations — it is not legal advice.
Findings
No incident-response path for threats, and hard-delete-everywhere destroys the evidence trail. Admin takedown is a hard deleteFrom('judge_reviews') (app/Actions/Admin/Reviews/DeleteReviewAction.ts:36) whose moderation-log entry records no content snapshot (:40-46); author edits overwrite content in place with no prior-version persistence (app/Actions/Me/UpdateMyReviewAction.ts:120-123); account deletion hard-cascades judge_reviews (app/Actions/Me/DeleteAccountAction.ts:80). There is no deleted_at column (database/migrations/0000000010-create-judge_reviews-table.sql) and soft deletes are globally disabled (config/query-builder.ts:62-66). The flag-reason enum (app/Actions/Reviews/FlagReviewAction.ts:25-32) has no threat option or severity, and the moderator email (app/Helpers/notifyModerators.ts) omits the review text. If law enforcement inquires about a deleted threatening review, nothing exists.
No judicial-privacy compliance path (Daniel Anderl Act / state Daniel's Laws). No statutory-aware removal-request intake or tracking exists anywhere in app/, resources/, or docs/. The only moderation tools are whole-review: a status flip (app/Actions/Admin/Reviews/UpdateReviewStatusAction.ts:21,48-51 sets only status) or hard delete — no partial redaction, despite resources/views/faq.stx:31 promising "we will remove or edit it" (no admin edit endpoint exists; see routes/api.ts:380-410). The review form (resources/components/Bench/ReviewForm.stx) gives no warning against posting home addresses; app/Helpers/sanitizeReviewHtml.ts is XSS-only.
Acceptance criteria
- Admin review takedown uses soft delete (
deleted_at+status='removed'), excluded from all public queries. Account-cascade deletion stays a hard delete by decision — see the closing comment - Admin status changes, deletes, and author edits snapshot the prior content into
moderation_logsmetadata - Flag reasons include a
threatcategory with distinct escalation, and moderator notifications include the flagged content - A one-page internal runbook covers credible threats (preserve → escalate → law-enforcement contact); ToS states that credible threats are preserved and may be reported
- ToS/policy gains a judicial-security / personal-information removal section with a tracked removal-request intake able to meet a 72-hour turnaround
- Admins can edit/redact review content (sanitize+update behind admin middleware, logged with prior-content snapshot) so covered information can be excised without deleting the review
- Review form warns users not to post anyone's home address or personal contact information
From the 2026-06-10 production-readiness audit.