Commit Graph
30 Commits
Author SHA1 Message Date
Jason Ross 7e644be4f9 Merge pull request #47 from JMR-dev/ci-align-node26-pnpm11
CI: align build env to pnpm 11 + Node 26
2026-07-02 19:01:14 -05:00
Jason Ross f19c822ac1 Merge pull request #46 from JMR-dev/ticket-4-cd-deploy
#4 GitHub Actions CD: deploy via workflow_dispatch
2026-07-02 18:56:22 -05:00
Jason Ross 5cf9c767dc Merge pull request #45 from JMR-dev/ticket-17-otel-observability
#17 Observability: OpenTelemetry logging + tracing + alerting
2026-07-02 17:16:49 -05:00
Jason Ross 850a1ebc73 Merge pull request #44 from JMR-dev/ticket-16-test-suite
#16 Test suite: anonymization, lifecycle, de-dup, endpoint integration
2026-07-02 17:04:24 -05:00
Jason Ross d50f67ed8d Merge pull request #43 from JMR-dev/ticket-15-mark-processed
#15 Mark reports processed after publishing
2026-07-02 16:47:19 -05:00
Jason Ross 697e3b7f1d Merge pull request #42 from JMR-dev/ticket-41-flaky-crypto-test
#41 Fix flaky TestSealOpenRoundtrip (deterministic)
2026-07-02 16:37:37 -05:00
Jason Ross 45c2c57156 Merge pull request #40 from JMR-dev/ticket-14-publish-issues
#14 Decrypt/format reports and publish as GitHub issues (de-duped)
2026-07-02 16:34:54 -05:00
Jason Ross 9810b676c6 Merge pull request #39 from JMR-dev/ticket-11-manual-removal
#11 Manual review/removal path for maintainers
2026-07-02 15:58:55 -05:00
Jason Ross 2b65dcfe6a Merge pull request #38 from JMR-dev/ticket-13-cron-trigger
#13 Cloudflare Cron Trigger: Friday 17:00 America/Chicago, DST-correct
2026-07-02 15:54:53 -05:00
Jason Ross c9f8489350 Merge pull request #37 from JMR-dev/ticket-36-deps-security
#36 Security: patch form-data + uuid (Dependabot)
2026-07-02 15:44:59 -05:00
Jason Ross 9557075bdb Merge pull request #35 from JMR-dev/ticket-10-lifecycle-metadata
#10 Report lifecycle/status metadata (pending/removed/published)
2026-07-02 15:30:04 -05:00
Jason Ross 786eb225b7 Merge pull request #34 from JMR-dev/ticket-9-encrypted-r2-storage
#9 Encrypted-at-rest R2 storage for scrubbed reports
2026-07-02 15:10:42 -05:00
Jason Ross 3d320a8cea Merge pull request #33 from JMR-dev/ticket-32-ci-cache-infra
#32 CI: cache infra/ Go module deps
2026-07-02 15:02:37 -05:00
Jason Ross da31bc4b24 Merge pull request #31 from JMR-dev/ticket-12-privacy-doc
#12 Document data flow & privacy posture
2026-07-02 14:52:56 -05:00
Jason Ross dd443bbe37 Merge pull request #27 from JMR-dev/ticket-2-pulumi-scaffold
#2 Pulumi IaC scaffolding: Worker, R2 bucket, Google Cloud DNS
2026-07-02 14:36:23 -05:00
Jason Ross 1a605fdda6 Merge branch 'main' into ticket-2-pulumi-scaffold 2026-07-02 14:32:03 -05:00
Jason Ross ab81b3a36e Merge pull request #29 from JMR-dev/ticket-7-ingest-endpoint
#7 Ingest HTTPS endpoint: accept report POST, size limit
2026-07-02 14:30:41 -05:00
Jason Ross 9a2d9df944 Merge branch 'main' into ticket-2-pulumi-scaffold 2026-07-02 14:29:02 -05:00
Jason Ross cd59c79521 Merge branch 'main' into ticket-7-ingest-endpoint 2026-07-02 14:29:00 -05:00
Jason Ross 16941e1c9d Merge pull request #28 from JMR-dev/ticket-8-pii-redaction
#8 PII anonymization/redaction pass before storage
2026-07-02 14:27:30 -05:00
Jason Ross 653b981146 Merge branch 'main' into ticket-7-ingest-endpoint 2026-07-02 14:25:41 -05:00
Jason Ross 1c1119cd30 Merge branch 'main' into ticket-8-pii-redaction 2026-07-02 14:25:37 -05:00
Jason Ross 62ad4ce907 Merge branch 'main' into ticket-2-pulumi-scaffold 2026-07-02 14:25:34 -05:00
Jason Ross 92655c58cb Merge pull request #25 from JMR-dev/ticket-3-ci
#3 CI: build, lint, test + working TinyGo/Wasm build
2026-07-02 14:24:32 -05:00
Jason Ross c0c2925a5a Merge branch 'main' into ticket-3-ci 2026-07-02 14:22:41 -05:00
Jason Ross 27d707d704 Merge pull request #24 from JMR-dev/ticket-23-autoupdate-pat
#23 autoupdate: use STATUS_CHECKS_RETRIGGER_TOKEN so branch updates re-trigger checks
2026-07-02 13:34:02 -05:00
Jason RossandClaude Opus 4.8 8e1dc66c54 CI: auto-update open PR branches via autoupdate Action (#20) (#22)
Add .github/workflows/autoupdate.yml. On every push to main, the
chinthakagodawita/autoupdate action merges main into all open PRs that
target it (PR_FILTER: "all"), keeping branches current as PRs merge.

The action is pinned to commit 0707656 (v1.7.0) for supply-chain safety.
Uses the default GITHUB_TOKEN with minimal contents:write and
pull-requests:write permissions.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 13:22:52 -05:00
Jason RossandClaude Opus 4.8 499bf7f655 Bootstrap Go module + Cloudflare Worker build tooling (#21)
Initialize the Go module and the Go -> Cloudflare Workers (TinyGo/Wasm) build
path, structured so `go test` and a local dev server run on plain Go without
TinyGo, while the real Wasm entrypoint is isolated behind build tags.

- go.mod/go.sum: module github.com/JMR-dev/LibreMail-Bug-Report-Ingest (Go 1.26),
  requiring github.com/syumai/workers.
- internal/handler: build-tag-free core http.Handler (GET / and GET /healthz,
  JSON responses, 404/405 handling) with net/http/httptest unit tests.
- cmd/devserver: plain net/http server mounting the core handler for local dev
  without TinyGo (listens on :8787, override with ADDR).
- worker/main.go: Cloudflare Workers (Wasm) entrypoint behind
  //go:build js && wasm, wiring the same handler via github.com/syumai/workers;
  excluded from host builds/tests.
- package.json + pnpm-lock.yaml + pnpm-workspace.yaml: wrangler dev dependency
  managed with pnpm, with toolchain build scripts approved.
- wrangler.jsonc: name=libremail-bug-report-ingest, main=./build/worker.mjs,
  build via `pnpm run build` (TinyGo).
- README: "Build & run locally" section with exact commands and the rationale
  for the TinyGo + syumai/workers path.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 13:22:48 -05:00
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
Jason RossandClaude Opus 4.8 041c7758c1 #6 Decision: GitHub labels + abuse/rate-limit policy ADR (#18)
Add docs/decisions/labels-and-abuse.md fixing concrete values that unblock
#14 and inform #7:

- Labels on auto-published issues (JMR-dev/LibreMail): bug-report, automated,
  needs-triage. #14 must create any missing.
- Ingest policy: 256 KiB payload cap (413); per-IP 15/60s + 100/1h rate limits
  (429 + Retry-After) via Cloudflare Rate Limiting rules in Pulumi; full
  response-code contract (202/400/413/415/405/429/5xx).
- Weekly publish job: 50 issues/run cap; serial creation, 1s spacing,
  Retry-After honoured, exponential backoff (base 1s, cap 60s, jitter,
  max 5 attempts), mark-published-on-confirm de-dup.

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