pcbjam/scripts
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Istvan Matejcsok 1b08a5eb06 feat(editor): report uncaught errors to Better Stack
The editor reported nothing when a session died. Evidence lived only in-tab —
an 800-line React array behind a "Show console" button — so diagnosis meant
asking a user to paste a screenshot.

Better Stack's Error Tracking ingests the Sentry wire protocol, so this runs
the stock @sentry/browser against a Better Stack DSN. Sentry.init installs its
own window error/unhandledrejection handlers, so uncaught main-thread errors
and the wasm traps that escape emscripten's DOM event handlers are captured
with no instrumentation at the throw sites. Not their JS tag: it has no
beforeSend or fingerprint hooks, its runtime spawns workers from cross-origin
CDN hosts (this page is COEP: require-corp), and it ships session replay on by
default — which on a CAD canvas records customers' board geometry.

@sentry/browser is imported in exactly one file so the vendor stays swappable,
mirroring how lib/analytics.ts isolates Plausible.

Also replaces the terminal-signature regex with a shared, unit-tested predicate
(wasm/terminal-error.ts) used by BOTH the fatal overlay and the reporter, so
they cannot disagree. The regex was a type check written as a string match and
had three live holes: `RuntimeError` was listed but never appears IN
`.message`; Chrome's bare "unreachable" and "null function" matched nothing
(the v0.1.20 prod log is exactly those); and narrowing "table index is out of
bounds" to `\bindex out of bounds` for Firefox in 197f317 silently stopped
matching Chrome's spelling. Checking the TYPE — every trap in this family is a
WebAssembly.RuntimeError — covers all engines and ends the spelling chase; the
message patterns remain as a fallback for paths that lose the Error object,
such as a worker ErrorEvent crossing the realm boundary with error: null.
197f317's pthread-worker tap, promote() and Firefox findings are kept as-is.

Notes:
- Off unless VITE_ERRORS_DSN is set AND VITE_ALLOW_USER_OVERRIDE !== "1" (dev
  servers and every Playwright harness set the latter, and production builds
  never do), so a production DSN in a local .env still cannot report. With no
  DSN the whole SDK is const-folded out: 1,193,080 vs 1,282,463 bytes of JS.
- browserApiErrors integration removed. It wraps setTimeout/rAF/addEventListener
  in try/catch, which is exactly how KiCad-on-Emscripten drives its main loop.
- Console breadcrumbs off (collab/debug.ts's clog fires per Yjs update and would
  evict the ring before any crash); dom/fetch/navigation breadcrumbs kept.
- beforeSend redacts token/apiKey/Bearer — collab/provider.ts puts the collab
  token in the y-partyserver URL, so a connection-failure string carries a live
  credential — and guards the cascade: one wedge produced 8 errors in prod, and
  after the first terminal event the rest are dropped into cascade_count.

Verified end to end against the real EU host from a cross-origin-isolated page:
POST /api/<id>/envelope/ -> 200, and 4 terminal throws produce 1 event
(control: 1 throw, same count).

Privacy policy 9, cookie policy 6 and the licenses page are updated: Better
Stack is disclosed as an EU processor, and the licenses page now describes the
browser app's own JS dependencies, which it never did.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 12:24:30 +02:00
..
bench bench VM: use SSH key auth only, drop the shared password 2026-07-16 12:46:17 +02:00
binaryen-hoist-pass fix(ci): binaryen tools cache also needs lib/ — bin-only restore broke every post-process 2026-07-02 14:29:20 +02:00
common diag(asyncify): write-time instrumentation + local warm-load repro findings 2026-08-03 11:05:10 +02:00
config Add autom4te wrapper to keep submodules clean 2025-12-27 09:21:31 +01:00
deploy feat(editor): report uncaught errors to Better Stack 2026-08-03 12:24:30 +02:00
deps eeschema simulator: lazy ngspice_service worker — static sharedspice (XSPICE registry + CIDER), init_dll ifdef, e2e both engines 2026-07-19 15:59:21 +02:00
git-workflow chore: add binaryen submodule to git-workflow 2026-06-30 10:06:34 +02:00
kicad eeschema simulator: lazy ngspice_service worker — static sharedspice (XSPICE registry + CIDER), init_dll ifdef, e2e both engines 2026-07-19 15:59:21 +02:00
build-3d-native-test.sh test(3d): screenshot-baseline TDD suite for the 3D viewer OpenGL->WebGL port — 47 native goldens + red-state WebGL harness 2026-07-03 15:45:58 +02:00
build-3d-webgl-test.sh feat(3d): gl1 shim M4+M6+M7 — GLU quadrics, production link, stub retired; 47/47 parity 2026-07-03 15:45:58 +02:00
build-gal-native-test.sh feat(webgl): Add GAL native test harness for visual regression testing 2026-01-07 09:42:31 +01:00
build-gal-webgl-test.sh perf(build): use all cores in host builds — wx lib, test apps, gal-webgl 2026-07-02 10:54:14 +02:00
build-monitor.sh fix(wasm-eh): build wasm-emscripten-finalize from the Binaryen submodule (unbreak CI) 2026-06-30 11:55:52 +02:00
build-wasm-test.sh perf(build): use all cores in host builds — wx lib, test apps, gal-webgl 2026-07-02 10:54:14 +02:00
build-wx-wasm.sh ci: bump the wx build-cache epoch (poisoned pcre chartables symlink) 2026-07-29 17:42:45 +02:00
create-feature-patches.sh feat(schematic): eeschema WASM build + e2e harness 2026-05-29 16:01:17 +02:00
kicad-diff-stats.sh chore: 🔧 fork-cleanup tooling + bump kicad submodule 2026-06-22 12:17:46 +02:00
setup-emsdk.sh fix(wasm): Fix asyncify rewind with asyncify-aware dynCall shims 2026-03-13 12:26:48 +01:00
setup-worktree.sh chore: 🤖 add new worktree setup script 2026-06-16 14:46:18 +02:00
test-3d-regression.sh test(3d): screenshot-baseline TDD suite for the 3D viewer OpenGL->WebGL port — 47 native goldens + red-state WebGL harness 2026-07-03 15:45:58 +02:00
test-gal-regression.sh refactor(webgl): Move WebGL GAL from test harness to KiCad source tree 2026-01-10 13:15:58 +01:00
test-gal-webgl.sh refactor(webgl): Move WebGL GAL from test harness to KiCad source tree 2026-01-10 13:15:58 +01:00
tsconfig.json chore: repoint .gitmodules at the PCBJam org 2026-07-28 12:52:01 +02:00