Grouping you can read.
No opaque ML clustering. A fingerprint is three documented inputs and a hash — so identical bugs collapse and different bugs don’t.
Three inputs, one hash
SHA-256 of the error type, the normalized message pattern (digits and ids masked), and the top frame. Deterministic and inspectable.
Thousands collapse to one
Same fingerprint, same group — with an occurrence count, sparkline, and the releases that triggered it. The rationale panel shows exactly why.
Merge and split, with a diff
When the fingerprint is wrong, fix it. Merge and split flows show a per-signal diff of what matches and what doesn’t before you commit.
See why these grouped.
Every group carries its rationale: the matched error type, the normalized message pattern, and the top frame. If two errors share a group, you can see the proof.
- Normalization masks digits, ids, and addresses
- Source context shown per frame, app frames first
Wrong group? Fix it in one move.
The merge view diffs candidate groups signal by signal — type, message pattern, top frame — so you know what you’re collapsing before you collapse it. Split works the same way in reverse.
The deploy that touched the frame.
Errorgap overlays the latest release’s changed files onto the backtrace. When a frame in the stack was touched by the deploy, it’s flagged — usually that’s your answer.
- Changed-file overlap highlighted on the backtrace
- Feeds the incident engine’s deploy-correlation heuristic