mirror of
https://github.com/nexu-io/open-design.git
synced 2026-10-27 09:51:12 +01:00
* fix(web): stamp chunk_id on exception frames so PostHog can symbolicate Every packaged front-end exception ships with minified frames (`?:?`, mangled function names) even though tools-pack faithfully injects chunk ids and uploads the browser sourcemaps to PostHog on every release. In production, 0 frames ever carried a chunk id and 5,140 frames in 7 days failed with "had no source url or chunk id". Root cause: exception capture is owned by our own error-tracking.ts (it runs before consent + before posthog-js loads, via a direct ingest fetch), and client.ts sets `capture_exceptions: false`. The chunk id that @posthog/cli bakes into each chunk is stamped onto frames by posthog-js's native capture — which we bypass. Packaged chunks load over the `od://` scheme, so PostHog cannot fetch a `.map` by URL either; the chunk id is the ONLY correlation key, and we never attached it. Result: the uploaded maps had nothing to match against. Fix: error-tracking.ts now builds the same filename->chunkId map from `globalThis._posthogChunkIds` that @posthog/core does, and stamps `chunk_id` on each frame whose chunk registered one. Scrubbing preserves it (spread + field override), and it is set before scrub, so PostHog can correlate regardless of filename redaction. * fix(web): key chunk id on the newest registration frame, not the outermost PerishCode review: parseStack keeps Error.stack newest-first while @posthog/core reverses to oldest-first, so copying its length-1..0 loop selected the wrong end. For a multi-frame registration stack that keyed the chunk id onto a webpack-runtime filename and left the real chunk unmatched. Iterate from the newest frame (frames[0]) instead; regression test now uses a multi-frame registration stack.