Skill 26 · Triage Frontend Issues
Subchapter 26.1
references/archive-criteria.mdMarkdown9 KBView on GitHub
Categories of non-actionable noise in the sentry/javascript queue, with recognition heuristics. An issue must match at least one category to be archived. Categories are listed in roughly decreasing order of frequency observed in the queue.
For each category: , , , .
PatternSignalsExamplesReason textIssues with exactly one occurrence, one or zero users, that never recurred.
events ≤ 2, users ≤ 1, firstSeen and lastSeen within ~1 hour of each other, no recurrence in 30+ days.TypeErrors in random anonymous functions, one-off ReferenceError from a script that no longer runs.Single-event fluke — N event(s), N user(s), no recurrence.firstSeen is within the last 7 days and the title looks like a real bug (“TypeError” in our app code), prefer skip and let it bake.Events generated by smoke tests, customer security audits, or internal QA probes — not real user traffic.
test, smoke test, verify test, XSS, SSRF, SSTI, CSP test, <script, <img src=x, {{7*7}}, data uri injection, security-event-injection.≤ 5 events.Error: Sentry verify testAttachment SSRF test<img src=x onerror=...>Error: CSP test <timestamp>Test/synthetic event — synthetic traffic from smoke test or security probe.Errors that originate in customers’ own backends but get reported to sentry/javascript because of misconfigured DSNs or shared SDKs.
PrismaClientKnownRequestError, PrismaClientUnknownRequestError, HTTPException, AttributeError, ImportError, ProgrammingError, or ZodError with Python-shaped stacks.module.submodule.handler) or a backend middleware class.PrismaClientKnownRequestError: (any)AttributeError: 'dict' object has no attribute '<field>'HTTPException with a Python dotted-module culpritWrong project — non-frontend error mis-routed (Prisma/Python).Errors whose top in-app frame is in a third-party library that we depend on (or that customers’ apps depend on) — not in our code.
node_modules/ for a library name like echarts, mobx, html2canvas, react-dom (only when the error is React-internal and not our component), lodash, etc.TypeError: Cannot set properties of null (setting 'innerHTML') with top frame in echarts/lib/component/tooltip/...Error: [MobX] minified error nr: <N> (mobx internals)ReferenceError: Can't find variable: DarkReaderTypeError: undefined is not an object (evaluating 'window.ethereum.<prop>')ReferenceError: html2canvas is not definedThird-party library noise — <library>; not actionable in our code.app/ code passing bad input, prefer skip.Errors caused by browser APIs the user denied, browser quirks, or platform constraints we cannot work around.
NotAllowedError (clipboard, WebAuthn, permissions, 2FA)OperationError: A request is already pending (WebAuthn pipeline)SecurityError: Blocked a frame ... cross-originSecurityError: Failed to read a named property ... from 'Window'Failed to execute 'writeText' on 'Clipboard'WebGL not supportedNotReadableError, NotSupportedError: ... public key credentialsCould not establish connection. Receiving end does not exist.A listener indicated an asynchronous response by returning trueInvalid call to runtime.sendMessage() (extension messaging)IndexedDB ... Internal error opening backing storeAn error occured reading the Blob argument to createImageBitmapNotAllowedError: Failed to execute 'writeText' on 'Clipboard': Document is not focused.OperationError: A request is already pending.SecurityError: Blocked a frame with origin "<origin>" from accessing a cross-origin frame.Browser API permission noise — <specific API>; not actionable from our code.Frontend errors that are downstream of intermittent backend failures already triaged elsewhere.
InternalServerError: <METHOD> /api/0/..., ServiceUnavailableError: <METHOD> /..., or UndefinedResponseBodyError: <METHOD> /....InternalServerError: GET /organizations/{orgSlug}/issues/{issueId}/ 500ServiceUnavailableError: GET /<endpoint>/ 503UndefinedResponseBodyError: GET /organizations/{orgSlug}/<endpoint>/ 200Transient backend 5xx — <method> <path>; backend transient, not a frontend bug.needs-human — it may signal a real backend regression.Network failures to third-party hosts (analytics, CDNs, customer-side services) that we cannot fix from the frontend.
TypeError: Failed to fetch (<host>) where <host> is not a Sentry-owned domain.TypeError: Failed to fetch (api2.amplitude.com) (well-known analytics)TypeError: Failed to fetch (<customer-specific host>)Network noise — Failed to fetch from <host>; third-party network.Failed to fetch (sentry.io) from within a Sentry context could indicate a real outage. Check recency; if multiple users in the last hour, surface as needs-human.Corporate proxies or content filters that intercept responses, returning HTML notification pages where JSON was expected.
Error: 200 treated as error: ... or JSON parse error with response body containing <!DOCTYPE html> / <html> / proxy notice text (common products: McAfee, Forcepoint, Zscaler, Symantec).Error: 200 treated as error: GET /organizations/{orgSlug}/projects/Customer-environment proxy interference — corporate proxy returned HTML for JSON request.Issues with zero users impacted, very low event count, and no useful title (<unknown>, empty, or unparseable).
users == 0 AND events ≤ 50 AND title is <unknown> or empty.Zero-impact — no users affected, low volume.needs-human rather than archive.Even if an issue is high-volume or annoying, skip when any of these apply:
app/, static/, src/) — even if the error message is generic.ZodError with a stack pointing into our schema validation — likely a real schema mismatch we should fix.useEffectEvent, hydration mismatch, render-time exceptions in our components).Error: Should not already be working. from a React internal and it’s recurring across many users in our org — escalate.When negative criteria fire, mark skip with a short note, e.g. Skip — top frame is our app/, looks actionable.
| Top frame location | Title category match | Volume | Decision |
|---|---|---|---|
Third-party (node_modules/<lib>/...) | yes | any | archive |
| Third-party | no clean category | any | needs-human |
| Our app code | no | any | skip |
<unknown> | n/a | low (≤ 50 events) | archive (zero-impact) |
<unknown> | n/a | high (≥ 1000 events) | needs-human |
| Customer proxy / synthetic | yes | low | archive |
| Backend 5xx pattern | yes | low/medium | archive |
| Backend 5xx pattern | yes | very high single-endpoint | needs-human |