Events, issues and triage
How errors are grouped into issues, statuses, search, filters, assignment and archiving.
An event is one error report from your app. An issue is every event with the same cause, grouped together — a bug that fired 3,000 times is one issue with 3,000 events. You triage issues, not events.
How errors are grouped#
Your node computes a fingerprint for each event:
With a stack trace: the exception type plus up to 30 of the newest in-app frames — each frame's module or file name and function name. Line and column numbers are not used, so an issue survives small code changes.
Without a stack trace: the exception type and its message, or the message alone.
Before comparing, volatile parts are normalised: UUIDs, emails, IP addresses, long numbers and hex strings, temporary paths and URL query strings.
User 123 not foundandUser 456 not foundbecome one issue.
The grouping version (currently belvador:2026-10) is stored on every issue. A future version applies to new events only; existing issues are never regrouped.
Your own grouping#
Set a fingerprint when the default groups too much or too little:
import { captureException, withScope } from "@belvador/browser";withScope((scope) => { // All failures of one payment provider become one issue. scope.setFingerprint(["payment-provider-down", provider]); captureException(error);});Include "{{ default }}" in the list to refine the default grouping instead of replacing it.
Statuses#
| Status | Meaning |
|---|---|
| Unresolved | Needs attention. Sub-states: New, Ongoing, Escalating, Regressed |
| Resolved | Fixed. A newer event brings it back as Regressed |
| Archived | Hidden on purpose, until a condition you chose — or forever |
An issue is Escalating when it had at least 10 events in the last 60 minutes and at least five times its hourly average over the 7 days before. Events are counted as they arrive, so a job that reports every retried attempt reaches that threshold sooner than one that reports only its final failure (retries).
Issues also carry a Priority: High, Medium or Low.
Actions#
Open the action menu on an issue, or select several in the list (up to 100 at once):
| Action | Effect |
|---|---|
| Resolve now | Marks it fixed. Any later event reopens it as Regressed. |
| Resolve in next release | Reopens only when the error appears in a newer release than the one you were on — use it when the fix is deployed later. Needs release set in the SDK. |
| Unresolve | Back to Unresolved. |
| Archive | Until it escalates, Until 100 more events, Until 10 more users are affected, For 24 hours, For 7 days or Forever. When the condition is met, the issue returns. |
| Assign to me / assign to a member / Unassign | Who is looking at it. Viewers cannot be assigned. |
| Priority | High, Medium or Low. |
Members, admins and owners can change issues; viewers can only read them.
Find issues#
The search box (press / to focus it) matches plain text in issue titles, culprits, messages, exception values and stack traces, ignoring case. An issue's short ID — such as WEB-1Z — opens that issue directly.
There is no query language: words like is:unresolved or tag:browser are searched as text. Use the filters instead:
| Filter | Values |
|---|---|
| Projects | One, several or all |
| Status | Unresolved (default), Resolved, Archived |
| Level | Fatal, Error, Warning, Info, Debug |
| Priority | High, Medium, Low |
| Environment | Any environment the node has seen |
| Assignee | Anyone, Me, Unassigned, a member |
| Period | 1 hour, 24 hours (default), 7, 14 or 30 days |
| Sort | Last seen (default), First seen, Events, Users, Priority |
Filters live in the page address, so you can bookmark or share a view. Over long periods, searching inside event bodies can stop early to stay fast; titles are always fully searched, and the page says when that happens.
Issue details#
Stack trace — choose In-app, All frames or Raw. Frames from minified code are marked Minified until source maps resolve them.
Breadcrumbs — steps before the error, if your SDK records them.
Tags and Contexts — what your app and the SDK attached, after scrubbing.
Attachments — always downloadable. PNG, JPEG, GIF and WebP files, recognised from their bytes, can also be previewed; SVG and every other type are download-only, never opened in the page.
Everything in an event was sent by an app and is shown as plain text — links from event data open through a warning page.
Posts on this topic
All posts- How to evaluate an AI debugging tool: run its fixesTest an AI debugging tool on bugs whose cause you know, and score by running its fixes. 72 AI fixes: failing ones claimed success with 92–100 confidence.
- Stop paging on every exception: one noisy day, four alert policiesOne synthetic day of 2,268 errors through four alert policies, from one alert per event to new + regression + escalating with a pause. What each sent.
- Cursor and production errors: Debug Mode vs what users hitDebugging production errors with Cursor: when Debug Mode helps, why source maps fix locations but not messages, and a rule that starts from the stack.
Spotted something wrong or missing? Tell us: hello@belvador.dev