# Crash Inbox > Paste an error-telemetry export and get a fix order. The page reads the export in your browser — > merging the rows that are the same bug, classifying every stack frame as yours, a dependency, a > browser extension or the runtime, and separating the errors you could not act on even if you > wanted to — then reviews it across four model-backed lanes. URL: https://crash-inbox.skillsafe.ai/ API tutorial: https://crash-inbox.skillsafe.ai/api.html Token panel: https://crash-inbox.skillsafe.ai/tokens.html ## What it is for The work object is an **error-telemetry export**: the rows an error tracker or crash dashboard produces — an error message, usually a stack trace, and often a hit count, an affected-user count, a build version and a platform. Accepted as CSV, TSV, a JSON array, or just a block of raw stack traces separated by blank lines. Column names are mapped by meaning, so `events`/`count`/`hits` and `affected_users`/`users`/`sessions` all resolve. It is not a debugger for one bug, not an error-tracker integration, and not a symbolication service. It reads the export you paste and nothing else. ## The free lane, in your browser No account, no credits, no network: - **Rows are merged into distinct bugs.** The fingerprint normalises ids, hex addresses, numbers, URLs and build hashes out of the message and file names, then keys on the message shape plus the top two non-runtime frames. Two frames rather than three, because exports truncate stacks at different depths for the same crash. - **Every frame is classified**: `app` (yours), `vendor` (`node_modules`, `site-packages`, …), `extension` (`chrome-extension://` and friends), `runtime` (`node:`, `internal/`, native), or `unknown`. - **Unsymbolicated stacks are detected** — content-hashed bundle names, `.min.js`, and the line-1 large-column signature of a single-line bundle with no source map. - **Messages are classified** into thirteen kinds (null dereference, not-callable, network, timeout, cancellation, lifecycle, permission, not-found, parse, memory, assertion, quota, unclassified) and tested for whether they carry the offending value at all. - **Volume is read as users, not hits.** `hits_per_user` at 20 or above is loop-shaped and its hit count overstates its reach. - **Thirteen checks, tri-state.** ## "Unknown" is not "no" Every check answers `pass`, `fail` or `unknown`, and the three are different claims. A rule downgrades to `unknown` when the export never carried the surface it needs. But a rule that has **local evidence** stays definite: a minified frame the scan is holding does not become hypothetical because some other column is missing. Concretely — an export with no version column at all reports `version_present` as `unknown`; an export that *declares* a version column and returns it empty on every row reports it as a definite `fail`. The downgrade is enforced in one place so no rule can forget it. ## The four lanes Every lane takes the same export and returns the same seven-section envelope: `VERDICT`, `SUMMARY`, `FINDINGS`, one lane-specific section, `UNKNOWNS`, `NEXT STEPS`, `GROUNDING`. The verdict word is one of `act-now`, `needs-instrumentation`, `mostly-noise`, `not-yours`, `insufficient-input`. | lane | `task` | question | fourth section | | --- | --- | --- | --- | | Triage | `triage` | Which of these is worth fixing first? | `FIX ORDER` (a table) | | Data flow | `dataflow` | Who produced the bad value, and who merely crashed on it? | `DATA FLOW` | | Enrich | `enrich` | How do we make the next occurrence readable from telemetry alone? | `REWRITTEN MESSAGE` | | Handling | `handling` | Where is this being swallowed, retried or rethrown blind? | `HANDLING CHANGES` | Triage runs on the whole export; the other three run on one selected error and accept an optional paste of the code around it. A result panel offers the handoff to the next lane as a button, with the error id pre-filled. ## Masking Optional, and it runs **before** the scan rather than after, so every fact the panel and the model input carry is derived from masked text by construction. It replaces emails, GUIDs, IPv4 addresses, credential-shaped tokens, `Authorization` values, URL query strings and home-directory user names, plus any words you list. The assembled request is then re-checked, and a value that survived **blocks the run** rather than warning about it. ## Grounding and reconciliation The model is given the scan's facts and required to cite error ids (`G1`, `G2`, …) that exist. The result panel reconciles the reply against the scan afterwards: ids the reply invented, top errors it failed to mention, and a verdict that contradicts the scan's failing checks are all reported to you. ## Cost The in-browser scan, the five bundled worked examples and every export are free. A model-backed lane run is charged in SkillSafe credits at the actual cost plus a 10% publisher markup; the reserved hold shown before a run is an upper bound and is usually far above what you are charged. Model: `gpt-terra`. ## Credit Built on the agent skill **@microsoft/fix-errors** (https://skillsafe.ai/skill/@microsoft/fix-errors), whose guidance on reading error telemetry — hit and user counts as different facts, producers of invalid data versus the consumers that crash on them, enriching messages for diagnosis, and the anti-patterns that swallow errors — is what the four lanes implement. This is a derived work and is not affiliated with or endorsed by Microsoft.