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.
- Component tag. The event has a tag
componentwhose value is a component name. Case and surrounding spaces are ignored. - 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.
- 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
componenttag. Other tags do not count. - The frames in
exception.values[].stacktrace.frames[]. The path of a frame is itsabs_path, or itsfilenamewhenabs_pathis empty. in_app. When any frame hasin_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.pyandmessaging_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.