Context
Nothing in Stackra emits a metric, a trace or a structured log through a shared interface yet. Error reporting that captures URLs, user data or screenshots turns an incident tool into a privacy incident. The vendor choice is an implementation detail that should be swappable.Decision
- The vendor sits behind configuration and one reporting function. Application code calls a
reportError-style helper with value-free tags; it never imports a vendor SDK directly. Swapping vendors changes one module. - Crash reporting is Sentry, one project per app, environment as a tag. The DSN is public configuration, not a secret; upload tokens are CI or build secrets (0009).
- No personal data.
sendDefaultPiiis off; no user object, no screenshots, no view hierarchy, no session replay. Breadcrumbs keep navigation only. - No URL-bearing tracing. HTTP spans carry full URLs, which contain ids and query strings. Performance tracing stays off until a redaction step exists.
- Uptime and deploy events go to a hosted monitor; deploy events are log lines, not heartbeats.
- Open question, to be decided when the first service runs in production: the logging, metrics and health interface. This ADR stays Proposed until then.
Consequences
- Reports are less detailed on purpose.
- A vendor change is cheap.
Enforcement
Planned: a lint rule banning direct imports of the vendor SDK outside the reporting module; a test that the init options keepsendDefaultPii: false and tracing off. Nothing is implemented yet.
Supersedes and sources
Supersedes: none. Sources: academorixdocs/adr/0008-sentry-mobile-errors; platform docs/adr/0006-observability-better-stack-and-sentry; basalt adr/0050-observability (the open question).