Skip to main content

Error tracking

Tiden includes product-scoped error tracking. Runtime SDKs send exceptions to a product DSN. Tiden groups events into issues and shows them alongside releases, environments, and quality signals.

DSN keys​

A DSN is created on the product Issues setup page. It contains:

  • Public key.
  • Ingest host.
  • Product id.

DSN keys are public client credentials scoped only to ingest for that product. They are not user API tokens and cannot call the REST API.

Issues​

The Issues page shows grouped runtime problems with:

  • Title and culprit.
  • Platform and severity.
  • Times seen.
  • First and last seen.
  • Status: unresolved, resolved, ignored, or all.
  • Environment and release filters.

If events were accepted but grouping is still running, Tiden shows a processing banner and polls until issues appear.

Issue detail​

Issue detail includes:

  • Latest event stack trace.
  • Source context when source maps are available.
  • Breadcrumbs.
  • Request data.
  • User data.
  • Tags and contexts.
  • Event list.
  • Resolve, unresolve, and ignore actions.

Sensitive request headers are scrubbed before storage or presentation.

How errors get a component​

Tiden attributes each issue to a component, so an error shows up with the specs and tests of the area that owns the code. It reads the latest event of the issue and tries three rules in order. The first rule that matches decides.

  1. Component tag. The event has a tag component whose value is a component name. Case and surrounding spaces are ignored.
  2. Test file. A stack frame path and the file path of a test match at the end: the frame path ends with the test path, or the test path ends with the frame path. The error goes to that test's component.
  3. Runtime path. A stack frame path contains one of the component's runtime paths.

If no rule matches, the issue has no component.

Event fields Tiden reads​

  • The component tag. Other tags do not count.
  • The frames in exception.values[].stacktrace.frames[]. The path of a frame is its abs_path, or its filename when abs_path is empty.
  • in_app. When any frame has in_app: true, only in-app frames count.

Tiden reads frames from the crash frame (the last frame) back to the first. The matching frame nearest the crash decides. Other fields, such as release, platform, and module, do not change the component.

Runtime paths​

Deployed code often reports paths that differ from the repository. For example, a Python service lives in services/messaging/ in the repository, but its container runs it from /app. Its frames report /app/messaging_service/telegram_collector.py, and the repository path never appears.

Give the component the path that the runtime reports:

tiden component update --id <component-id> --runtime-path messaging_service/
  • A runtime path matches whole path segments anywhere in the frame path. messaging_service/ matches /app/messaging_service/telegram_collector.py and messaging_service/telegram_collector.py, but not /app/old_messaging_service/telegram_collector.py.
  • Repeat the flag for more paths. On component update, the values replace the stored list, and --runtime-path "" clears it.
  • Only the runtime paths of components on main count. A runtime path set on a branch copy of an existing main component is not used, and a branch merge does not carry it to main, so set runtime paths on main. A component that is new on a branch keeps its runtime paths when the merge adds it to main.
  • When runtime paths of more than one component match a frame, the longest path wins.
  • Use a specific path. A generic path such as app/ also matches the container root in /app/..., so it matches almost every frame.
  • Repository paths (--component-path) do not apply to errors. They scope tests and changed files.

Recalculation​

Tiden recalculates the component of existing issues in the background after one of these changes on main:

  • A component is created with runtime paths.
  • The runtime paths of a component change.
  • A component is deleted, also by a branch merge.
  • A branch merge adds a component.

An issue that no longer matches any rule loses its component.

Releases and environments​

SDKs should send release and environment. Tiden uses those fields to create or resolve release and environment context for events.

Source maps​

Browser JavaScript builds should upload source maps with @tiden/telemetry-sourcemaps. The plugin injects debug IDs, uploads maps using a CI API token, and lets Tiden symbolicate minified stack traces at view time.

Source maps are private. Tiden does not expose source map download URLs to end users.