#328 adopts Bugsink (self-hosted, Sentry-SDK-compatible) as the error backend; this is the audit and baseline pass that makes it useful. Per docs/architecture/error-handling.md, the Sentry SDK backed by Bugsink is the only path to the error backend. The TypeError: immutable proxy crash fixed in #371 existed only as an unstructured stack interleaved in fly logs.
Scope
- wire the Bugsink DSN in every deployable app:
app-web plus the six services (activity, avatar, email, session, user, verification)
- capture unhandled route/server errors and unhandled rejections at the central hooks (service interceptor, app-web root error boundary) — never
captureException where those already cover
- route alerts somewhere visible
- audit for swallowed exceptions that should report; confirm the trace id (
x-trace-id / withTraceContext) rides on captured events for log correlation
Acceptance
- a thrown fault in each app appears in Bugsink as a structured event with its trace id
- an unhandled promise rejection is captured
- the audit lists any remaining swallow points with a follow-up
Notes
apps/design-reference was removed (#453), so it is not a target. Complements the logging audit (#380) and the trace/metric audit (#432).
#328 adopts Bugsink (self-hosted, Sentry-SDK-compatible) as the error backend; this is the audit and baseline pass that makes it useful. Per docs/architecture/error-handling.md, the Sentry SDK backed by Bugsink is the only path to the error backend. The
TypeError: immutableproxy crash fixed in #371 existed only as an unstructured stack interleaved in fly logs.Scope
app-webplus the six services (activity,avatar,email,session,user,verification)captureExceptionwhere those already coverx-trace-id/withTraceContext) rides on captured events for log correlationAcceptance
Notes
apps/design-referencewas removed (#453), so it is not a target. Complements the logging audit (#380) and the trace/metric audit (#432).