feat(desktop): user-initiated crash reporting via crash.reasonix.io#3978
Merged
Conversation
The crash overlay could only ask users to screenshot or copy the error, so most reports never reached us. Add an opt-in-per-click "Send report" button wired to a new ReportCrash binding that scrubs user names from paths, attaches version/GOOS/GOARCH, and POSTs to a Cloudflare Worker (workers/crash-report): D1-backed, fingerprint-deduped (5 raw samples per group), per-IP rate limited. Nothing is ever sent automatically.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Crash reports currently die in the overlay: we ask users to screenshot or copy the error text, and almost nobody follows through. This adds a first-party collection pipeline, entirely on our existing Cloudflare account:
workers/crash-report/— a Worker oncrash.reasonix.io(orange-cloud, so it is reachable from CN like the rest of our infra). D1-backed, fingerprint-deduped (stack normalized for paths/line numbers/addresses, max 5 raw samples kept per group), per-IP rate limited (5/min), 32 KB body cap, zod-validated. The endpoint is public by necessity (the client is open source), so it is designed to hold nothing secret and accept abuse gracefully.desktop/crash_app.go— aReportCrashbinding that scrubs user names out of Windows/macOS/Linux home paths, attaches the injected build version plusGOOS/GOARCH, and POSTs through the same proxy-awarehttpClient()the updater uses.Privacy stance
Deploy (one-time, before merge is user-visible)
Until the Worker is live, a clicked send fails gracefully ("Send failed — use Copy instead").
Verification
go vet+ new unit tests pass (scrubUserPathscases, POST round-trip againsthttptest, input rejection); new files are gofmt-clean.tsc --noEmitintroduces zero new errors vs the pristine-checkout baseline (the wailsjs module errors are the known local-only artifact).Follow-ups (not in this PR)
workers/typecheck.