The mail said crashes were up 156 percent. Nobody was crashing.
The weekly error digest for 2026-08-17 on one of our marketing and checkout sites read 363 exceptions, "up 156% from previous week", crash-free sessions down to 94.29 percent. A breakdown query over the same week accounted for all 363, and none of them were a person hitting a broken page.
What was actually in there
327 of them: Non-Error promise rejection captured with value: Object Not Found Matching Id:N, MethodName:update, ParamCount:4. That string is injected by Microsoft Outlook's SafeLink and Office add-in wrapper into any page opened from Outlook. It has nothing to do with the page it lands on. The tell was that it fired on unrelated sites of ours at the same time, which means it belongs to none of them.
6 of them: ResizeObserver loop completed with undelivered notifications. The benign notice a browser emits when a layout-watching component measures something during a measurement pass.
30 of them: a development server mid-edit on http://localhost:3737, reporting into the production project. PAD_X is not defined, SelectedWork is not defined. Those are our code, and they are also somebody typing.
| What arrived | Count of that week's 363 | Where it came from | What the gate does with it |
|---|---|---|---|
Object Not Found Matching Id:N, MethodName:update | 327 | Outlook's SafeLink / add-in wrapper, injected into any page opened from Outlook | dropped on the string |
ResizeObserver loop completed with undelivered notifications | 6 | the browser's own benign layout notice | dropped on the string |
PAD_X is not defined, SelectedWork is not defined | 30 | a dev server on localhost:3737 reporting into the production project | dropped on the host shape |
| anything else | 0 | that week produced none | sent |

A tracking table comparing 34 software kits with columns for evidence level, pricing, license, and deployment timeline — A maintained system with standardized metrics across multiple tools showing which are free, their license type, and last update date.
The fix goes in the browser, not the dashboard
A saved view that hides these leaves the events in the project, and the number in the mail counts the project. So the drop happens before the request leaves the page:
capture_exceptions: true,
before_send: (event) => {
if (!event || event.event !== '$exception') return event;
try {
const host = window.location.host.split(':')[0].toLowerCase();
if (host === 'localhost' || host.endsWith('.localhost') ||
/^[\d.]+$/.test(host) || host.endsWith('.vercel.app')) return null;
const v = JSON.stringify(event.properties?.$exception_values ?? '');
if (/Object Not Found Matching Id:\d+/.test(v)) return null;
if (/ResizeObserver loop/.test(v)) return null;
} catch {
// a noise gate must never be the thing that breaks a page
}
return event;
},Three things in there are deliberate.
The host test is a list of shapes, not one name. localhost is only one of the ways a page runs off a real host: a device on the LAN reaches the dev server by bare IP, and a preview deploy answers on .vercel.app. Any of those firing into the production project produces a crash report about work in progress.
The whole body sits inside a try, returning the event untouched if anything in the check throws. A filter is the last piece of code that should be allowed to take a page down, and this one runs on every crash report, which is the moment the page is already having a bad time.
The two patterns are exact strings, not categories. It would be easy to widen the second one to every promise rejection with no stack, and that would also swallow the next real one. The gate is scoped to the two artifacts that were counted, and to exception events only. Page events from a dev host are excluded a different way, by the host-to-slug function that labels them dev before they are grouped.
The digest's percentage is derived from the events that arrive, so the ones that never leave the browser cannot move it. The next figure in that mail describes the site.
This is how we built KitGrade, SaaS starter kits scored on what can be checked: https://kitgrade.kynth.studio/?utm_source=kynth-devto&utm_medium=social&utm_campaign=kynth
One shipped product, taken apart, once a month. What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did — read off the repository and the live site, not written from memory. Join the list.
← All writing