+13
STATUS.md
+13
STATUS.md
···
47
47
48
48
### January 2026
49
49
50
+
#### copyright moderation improvements (PRs #703-704, Jan 2)
51
+
52
+
**per legal advice**, redesigned copyright handling to reduce liability exposure:
53
+
- **disabled auto-labeling** (PR #703): labels are no longer automatically emitted when copyright matches are detected. the system now only flags and notifies, leaving takedown decisions to humans
54
+
- **raised threshold** (PR #703): copyright flag threshold increased from "any match" to configurable score (default 85%). controlled via `MODERATION_COPYRIGHT_SCORE_THRESHOLD` env var
55
+
- **DM notifications** (PR #704): when a track is flagged, both the artist and admin receive BlueSky DMs with details. includes structured error handling for when users have DMs disabled
56
+
- **observability** (PR #704): Logfire spans added to all notification paths (`send_dm`, `copyright_notification`) with error categorization (`dm_blocked`, `network`, `auth`, `unknown`)
57
+
- **notification tracking**: `notified_at` field added to `copyright_scans` table to track which flags have been communicated
58
+
59
+
**why this matters**: DMCA safe harbor requires taking action on notices, not proactively policing. auto-labeling was creating liability by making assertions about copyright status. human review is now required before any takedown action.
60
+
61
+
---
62
+
50
63
#### ATProto OAuth permission sets (PRs #697-698, Jan 1-2)
51
64
52
65
**permission sets enabled** - OAuth now uses `include:fm.plyr.authFullApp` instead of listing individual `repo:` scopes: