Remove hashed_ip entirely: dropped HashedIP field, hashIP function, and all IP extraction logic from the server. No IP address is collected or stored in any form.
Move contact email out of report.json: if the user opts to include their email for follow-up, it is now written to mail.eml in the report directory instead of being embedded in report.json. This keeps PII separate from the structured report data.
## Summary
- **Remove hashed_ip entirely**: dropped `HashedIP` field, `hashIP` function, and all IP extraction logic from the server. No IP address is collected or stored in any form.
- **Move contact email out of report.json**: if the user opts to include their email for follow-up, it is now written to `mail.eml` in the report directory instead of being embedded in `report.json`. This keeps PII separate from the structured report data.
- Remove now-unused imports (`crypto/sha256`, `encoding/hex`, `strings`).
- Flutter client (`bug_report_screen.dart`) was already not sending a `hashed_ip` field — no client changes needed.
## Test plan
- [x] `go build ./...` in `server/bugreport/` passes with no errors
- [x] `go vet ./...` passes with no warnings
- Reports without a contact email produce only `report.json` (no `mail.eml`)
- Reports with a contact email produce `report.json` (no `email` key) and `mail.eml` containing the address
Closes #441
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
HashedIPfield,hashIPfunction, and all IP extraction logic from the server. No IP address is collected or stored in any form.mail.emlin the report directory instead of being embedded inreport.json. This keeps PII separate from the structured report data.crypto/sha256,encoding/hex,strings).bug_report_screen.dart) was already not sending ahashed_ipfield — no client changes needed.Test plan
go build ./...inserver/bugreport/passes with no errorsgo vet ./...passes with no warningsreport.json(nomail.eml)report.json(noemailkey) andmail.emlcontaining the addressCloses #441
🤖 Generated with Claude Code