Skip to content

feat(electron): Crashpad minidump crash ingest + symbolication (server side) - #110

Merged
bytemain merged 1 commit into
mainfrom
feat/electron-crash-symbolication
Jul 7, 2026
Merged

feat(electron): Crashpad minidump crash ingest + symbolication (server side)#110
bytemain merged 1 commit into
mainfrom
feat/electron-crash-symbolication

Conversation

@bytemain

@bytemain bytemain commented Jul 7, 2026

Copy link
Copy Markdown
Member

What

Server-side foundation for the Electron/Crashpad crash lane (task #97), completing the last row of the symbolication matrix. Mirrors the existing native/dSYM flows so Electron crashes auto-symbolicate into a quiver-symbolicate ticket comment.

This is blocks 1–3 of 5. Follow-up PR: the Electron SDK (clients/electron, main+renderer entry points) + integration docs.

How

Ingest — POST /public/v2/apps/:slug/minidump

  • Accepts Electron crashReporter's multipart (upload_file_minidump + flat Sentry-electron-style annotations: version, version_code, channel/environment, process_type, guid, arbitrary extra/globalExtra).
  • Stores the dump as a crash-ticket attachment, folds every annotation into metadata (product_type=electron, mapped well-known keys to columns), fires symbolication in the background.
  • Client-key gated (?client_key= query — Crashpad preserves the submitURL query — or X-Quiver-Client-Key), rate-limited like feedback.

Symbolicate — symbolicateMinidumpCrashTicket + container POST /symbolicate-minidump

  • Worker fetches the minidump + the version's breakpad-symbols asset, POSTs both to the container, appends the crashing-thread stack as a quiver-symbolicate internal comment (renders in the existing crash panel). No symbols → still posts module+offset frames + an actionable upload tip.
  • Container rebuilds the Breakpad symbol tree from each .sym MODULE header (so CI can zip them flat), runs minidump-stackwalk --json (rust-minidump), returns crashing-thread frames + rendered text. Dockerfile installs minidump-stackwalk via a bookworm builder stage (glibc matches runtime).

CLI — publish-electron --symbols

  • Uploads Breakpad symbols (dump_syms output, .zip) as a breakpad-symbols support asset per version.

Tests

Minidump ingest → electron crash ticket + attachment, annotation mapping (product_type/process_type/version/channel/guid/extras); bad client key → 401. 87 worker tests pass. worker + container + cli tsc --noEmit clean.

Client side (next PR)

Real @oranix/quiver-electron SDK with /main (crashReporter init + render-process-gone/child-process-gone listeners + scope/context) and /renderer (scope + IPC forward) entry points, à la @sentry/electron — the client is referenced in both main and renderer.

🤖 Generated with Claude Code

…r side)

Adds the Electron/Crashpad crash lane (server foundation) alongside the
existing native/dSYM symbolication flows:

- worker: POST /public/v2/apps/:slug/minidump ingests Electron crashReporter's
  multipart (upload_file_minidump + Sentry-electron-style annotations), stores
  the dump as a crash-ticket attachment, folds annotations into metadata
  (product_type=electron, process_type, version, channel, guid, extras), and
  fires symbolicateMinidumpCrashTicket. Client-key gated (query or header),
  rate-limited like feedback.
- worker: symbolicateMinidumpCrashTicket fetches the minidump + the version's
  breakpad-symbols asset, calls the container, and appends the symbolicated
  stack as a quiver-symbolicate internal comment (reuses the existing crash UI
  panel). Without symbols it still posts module+offset frames + an upload tip.
- container: POST /symbolicate-minidump rebuilds the Breakpad symbol tree from
  each .sym MODULE header (CI can zip flat), runs minidump-stackwalk --json,
  returns the crashing thread's frames + rendered stack. Dockerfile installs
  minidump-stackwalk (rust-minidump) via a bookworm builder stage.
- cli: publish-electron --symbols uploads Breakpad symbols as a
  breakpad-symbols support asset per version.

Tests: minidump ingest creates an electron crash ticket + attachment and maps
annotations; bad client key rejected. 87 worker tests pass; worker, container,
and cli tsc clean.

Follow-up: Electron SDK (clients/electron, main+renderer entry points) and
integration docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bytemain
bytemain merged commit 66a1fcb into main Jul 7, 2026
@bytemain
bytemain deleted the feat/electron-crash-symbolication branch July 7, 2026 20:15
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.

1 participant