The problem

The same crash gets reported many times. QA files it as "Checkout fails with a 500", support files it as "Customers cannot order to PO boxes", and an engineer files it as "NullPointerException in shipping quote". The titles have nothing in common, so text-based duplicate finders miss it. The stack traces are the same failure, but they do not look the same either: line numbers shift with every release, a wrapper exception changes the top of the trace, a bundle hash changes, thread names differ. So triage spends time rediscovering known bugs, and a fix that did not hold goes unnoticed because the new report does not look like the old one.

What Crash Twin does

  1. Reads the stack trace in every bug report. When a work item is created, edited or commented on, the app finds the trace in its text and stores a small crash record on the work item. It reads Java and Kotlin, JavaScript and TypeScript (Node, Chrome, Firefox, Safari), Python, .NET and Go.
  2. Fingerprints the crash from the exception that started the failure and the frames in the team's own code, ignoring what changes between reports: line numbers, library and runtime frames, generated names, bundle hashes, thread names and the error message.
  3. Tells the team. When a new report matches a known crash, the app comments once: which work items already report it, and whether it was fixed before. On a service project the comment is an internal note.
  4. Spots regressions. A crash that was closed and is then reported again is marked "Came back after a fix" and sorted to the top of the Crash Twin page.
  5. Answers "have we seen this?" Paste a trace on the Crash Twin page, ask the Rovo agent, or let a coding assistant ask through the Atlassian MCP server. JQL: issue in sameCrashAs("SHOP-12"), crashLanguage = "java".

For coding agents

Three tools are exposed through the Atlassian MCP server: find-known-crash, get-crash-for-work-item and list-top-crashes. A developer debugging in an editor can hand the trace to their assistant, which asks Jira whether the crash is already tracked and in which version it was fixed, before anyone spends time on it. skills/check-known-crash/SKILL.md teaches an agent when and how to use those tools.

How it is built

Forge only, no egress. Five parsers, fingerprinting and similarity, grouping and regression detection are pure TypeScript with 87 tests, including tests on hostile input (the parsers read frames procedurally so that a malicious trace cannot make them slow). The app stores a fingerprint and the names of up to twelve frames on each work item; the trace stays where the reporter put it; the error message is never used for matching because messages often contain identifiers.

Built With

Share this project:

Updates

Submission history