- OVERVIEW.md - Non-technical summary of how error reporting works
- non-critical-errors.md - Recoverable errors: filtering logic, OTel recording
- critical-errors.md - Fatal errors: terminate paths, crash reporter subprocess
- telemetry-otel.md - OTel architecture: ring buffer, IPC forwarding, export
- fingerprint-resolution.md - GitHub workflows that mark error fingerprints as fixed/released in ClickHouse
src/renderer/src/util/message.ts-showError()entry point for non-critical errorssrc/renderer/src/util/errorHandling.ts-withTrackedActivity,recordErrorSpan,terminate(renderer)src/main/src/errorHandling.ts-terminate/terminateAsyncfor main-process crashessrc/main/src/errorReporting.ts-reportCrash()— short-lived OTel provider for crash spanssrc/main/src/telemetry/RingBufferSpanProcessor.ts- Circular buffer; auto-exports on ERROR statussrc/main/src/telemetry/setup.ts-createMainTelemetryProvider, OTLP exporter configsrc/main/src/telemetry/ipcHandler.ts- Renderer→main span IPC bridge; analytics opt-in watchersrc/shared/src/telemetry/spans.ts-recordErrorOnSpanshared utilitysrc/shared/src/errors.ts-computeErrorFingerprintfor deduplication
error occurs
└─ recordErrorOnSpan() sets ERROR status + fingerprint on span
└─ span.end()
└─ RingBufferSpanProcessor.onEnd()
└─ status == ERROR?
yes ──> extract all spans for this traceId
isTelemetryEnabled()?
yes ──> OTLPTraceExporter → vortex-collector.nexusmods.com
Renderer spans are forwarded to main via IPC (telemetry:forward-span) before entering the ring buffer.