remarkbox/docs/tickets/3.md
russell@unturf.com f1cffe2e79 Resolve all 14 tracked tickets (T0-T13)
High priority fixes:
- T0: Profile page now filters comments by namespace (was leaking cross-site)
- T1: URI hostnames and namespace names normalized to lowercase (was causing
  duplicate threads and "stock comments" bug). Includes merge script.
- T2: Thread detail API now paginated with SQL-side filtering (was 502 on
  267+ reply threads)

Features:
- T3: GDPR account deletion (tombstone user with scrubbed PII) and data export
- T4: Customizable button text and comment labels per namespace
- T5: Self-service namespace deletion for owners
- T6: @mention notifications with profile links
- T7: Webmention receiving endpoint with h-card extraction
- T8: Configurable max nesting depth and collapse depth per namespace
- T9: AJAX thread title search to prevent duplicates
- T10: Browser push notification support (VAPID/service worker)

Docs and housekeeping:
- T11: Documented thread_uri behavior when moving embeds
- T12/T13: Drafted community replies for resolved feature requests
- Collapse depth defaults to infinite (load-more disabled unless configured)

364 tests pass, 4 skipped.
2026-02-01 20:02:47 -05:00

2.2 KiB

T3: GDPR/CCPA compliance tooling

Status: resolved Priority: medium Source: meta a819d4f0-6a65-11e8-927b-040140774501 Filed: 2026-02-01

Problem

Multiple users over 6+ years have asked for tools to help namespace owners comply with GDPR/CCPA data subject requests. The thread has frustrated replies from users who expected better tooling from a privacy-focused product.

Currently, namespace owners can export data via /ns/{namespace}/dump.json (accessible from namespace settings). But there is no:

  • User-facing "delete my account" or "delete my data" feature
  • Automated data subject access request handling
  • Per-user data export (only namespace-level)
  • Right-to-erasure implementation

What Exists

  • Namespace data export: GET /ns/{namespace}/dump.json — returns all threads and comments for a namespace in JSON. Accessible to namespace owners from the settings dashboard. Includes author names, IPs, and (for production subscriptions) emails.
  • Admin scripts: scripts/merge_duplicate_email_users.py and scripts/delete_disabled_nodes.py exist for admin use but aren't user-facing.

Proposed Implementation

Phase 1 (minimum viable):

  1. Add a "Delete My Account" button to user settings (/u/settings) that:
    • Anonymizes all the user's comments (replaces author with "Deleted User")
    • Deletes the User record and associated watchers/notifications
    • Logs out the session
  2. Add a "Download My Data" button to user settings that exports all the user's comments as JSON

Phase 2 (nice to have): 3. API endpoints for the above (DELETE /api/v1/user/profile, GET /api/v1/user/export) 4. Namespace moderator tools to handle third-party deletion requests

Files

  • remarkbox/views/authenticated/authenticated.py — add delete account and export views
  • remarkbox/templates/user-settings.j2 — add buttons
  • remarkbox/models/user.py — add anonymize() or delete_account() method
  • remarkbox/api/views.py — optional API endpoints

Acceptance Criteria

  • Users can delete their own account from settings
  • Users can download their own data as JSON
  • Deletion anonymizes comments rather than leaving orphans
  • Confirmation step before deletion