Jason RossandClaude Opus 4.8 e93b6a2266 Add encryption ADR: Worker-side AES-256-GCM + Secrets Store key custody (#19)
Documents the decision for #5: Worker-side authenticated encryption (AES-256-GCM) applied in the Worker before writing to R2, so R2 never receives plaintext or the key. Key material is held as a versioned keyring in Cloudflare Secrets Store (shared by the ingest and weekly-publish Workers). Rotation is data-loss-free via a key-id/version in each object header plus retained old key versions. Unblocks #9.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 13:17:15 -05:00

LibreMail Bug Report Ingest

Server-side infrastructure for LibreMail's debug bug-report pipeline. This repo is intentionally separate from the Android app repo — it owns the Cloudflare Worker and infrastructure-as-code, not the client.

What this is

Per JMR-dev/LibreMail#11:

  1. The LibreMail app lets a user opt in to submitting a debug report (LibreMail#33).
  2. A Cloudflare Worker in this repo receives the report over HTTPS, best-effort scrubs PII, and stores it encrypted in a Cloudflare R2 bucket (#34).
  3. Every Friday at 17:00 (Central Time, DST-aware), a scheduled job publishes any report not manually removed as a GitHub issue on the LibreMail repo (#35).

Stack

  • Worker: Go
  • Infrastructure as code: Pulumi (Go)
  • Deployment: GitHub Actions
  • Secrets/key custody: Cloudflare Secret Manager
  • DNS: Google Cloud DNS

Status

Early bootstrap. See the project board and open issues for the current breakdown of work.

License

GNU AGPL v3.0.

S
Description
Server-side ingest pipeline (Cloudflare Worker + IaC) for LibreMail's opt-in bug-report feature. See JMR-dev/LibreMail#11.
Readme AGPL-3.0
467 KiB
Languages
Go 100%