Skip to content

Add Yeeter privacy deletion and export endpoints - #1766

Merged
3kh0 merged 3 commits into
mainfrom
privacy-yeeter-endpoints
Oct 18, 2026
Merged

3kh0 merged 3 commits into
mainfrom
privacy-yeeter-endpoints

Conversation

@3kh0

@3kh0 3kh0 commented Oct 18, 2026

Copy link
Copy Markdown
Member

Summary of the problem

Hackatime needs to handle centrally signed privacy requests without exposing personal identifiers or changing account data during previews.

Describe your changes

  • Add signed delete and count-only export endpoints for the hackatime audience, with database-backed replay protection.
  • Execute the same transactional erasure for previews and real deletions, rolling previews back and removing files before committing real deletions.
  • Keep shared moderation decisions and repository records detached from the subject. Leave existing self-service deletion unchanged.
  • Document the data inventory, manual review cases, full-cache clearing and external-service boundaries in docs/privacy.md.
  • Suppress privacy request telemetry and render erased audit actors as Deleted user.

Screenshots / Media

Synthetic development accounts only.

Audit records before and after detaching an actor

Ordinary actor:

Ordinary audit actor

Detached actor:

Detached audit actor

Both states in the audit list:

Audit list

Implement the hackatime audience, database replay receipts and transactional erasure with rollback previews. Preserve detached shared records, remove attributable files and document external retention boundaries.

Co-authored-by: Echo <github@3kh0.net>
@socket-security

socket-security Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedgem/​jwt@​3.3.0100100100100100

View full report

@greptile-apps

greptile-apps Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Critical impact] The PR appears safe to merge, with a non-blocking request to restore the privacy operator guide.

Summary

Adds signed privacy deletion and count-only export endpoints.

  • Yeeter can request a count or deletion through signed privacy endpoints.
  • Delete previews and real requests use the same account-erasure path.
  • Privacy requests leave only a request ID and outcome in routine logs.
  • Moderation decisions remain readable after their actor is detached.

Both earlier, unnumbered findings are addressed: history matching now checks complete identifier values, and activity cache calculations share a lock with deletion.

Diagram

sequenceDiagram
  participant Y as Yeeter
  participant A as Privacy API
  participant D as Database
  participant S as Files and cache
  Y->>A: Signed delete or export request
  A->>A: Verify signature and claims
  A->>D: Consume replay receipt
  A->>D: Find matching records
  alt Export
    A-->>Y: Held record counts
  else Deletion preview
    A->>D: Erase records, then roll back
    A-->>Y: Preview counts
  else Real deletion
    A->>D: Erase records in transaction
    A->>S: Remove files and clear cache
    A->>D: Commit
    A-->>Y: Deleted and retained counts
  end
Loading

Reviews (3) · Last reviewed commit: "Delete docs/privacy.md" · Reviewed by Greptile

Comment thread app/services/privacy/eraser.rb Outdated
Comment thread app/services/privacy/eraser.rb
@3kh0
3kh0 merged commit 78d8158 into main Oct 18, 2026
18 checks passed
@3kh0
3kh0 deleted the privacy-yeeter-endpoints branch October 18, 2026 01:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants