For bench-review's audience — clerks, junior associates, court staff — reviewing your own bench under your real name carries real retaliation risk. Yelp's "identity attached" model doesn't fit this domain. Without anonymous reviews, the people best positioned to write the most insightful reviews are exactly the ones who can't safely write them.
Scope
- New column:
judge_reviews.anonymized: boolean default false. - New column:
users.role_label: enum— "attorney" / "clerk" / "court_staff" / "litigant" / "observer" (self-declared on signup; eventually tied to credential verification — see sibling issue). - Submit-review UI: toggle "Post anonymously" + dropdown "I am writing this as a(n) ..." (defaults to whatever's on
users.role_label). - Render rules:
- Public read endpoints (
/api/reviews,/api/judges/{id}/reviews,/api/court-houses/{id}/reviews): replace author name with "Anonymous {role_label}" whenanonymized=true. /article/{id}: same./user/{author_id}: hide anonymized reviews from the public profile./me/reviews: author always sees their own reviews with full identity./admin/reviews: admin always sees the real author for moderation (audit trail integrity).
- Public read endpoints (
Acceptance
- Author can mark a review anonymous at submit time and at edit time.
- Public surfaces show "Anonymous attorney" / "Anonymous clerk" instead of the author's name.
- The reviewer's identity is never exposed in any public API response (check the JSON payloads, not just the rendered HTML).
- Admins can still attribute the review for moderation purposes.
- A user's profile page doesn't list their anonymous reviews.
Why this matters specifically here
Multiple state and federal bar opinions warn attorneys against publicly criticizing the bench by name. Anonymous reviews aren't a polish feature — they're the only way the trustworthy reviewers will participate. Without this, the platform is functionally read-only for the credibility-bearing audience.