2025-11-28 13:10:05 +01:00
|
|
|
{
|
|
|
|
|
"name": "kicad-wasm-tests",
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
"lockfileVersion": 3,
|
|
|
|
|
"requires": true,
|
|
|
|
|
"packages": {
|
|
|
|
|
"": {
|
|
|
|
|
"name": "kicad-wasm-tests",
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
"devDependencies": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"@playwright/test": "^1.62.1",
|
2025-11-29 12:39:30 +01:00
|
|
|
"@types/node": "^24.10.1",
|
2026-07-01 18:01:15 +02:00
|
|
|
"@types/pixelmatch": "^5.2.6",
|
|
|
|
|
"@types/pngjs": "^6.0.5",
|
tests: move screenshot baselines from git to R2 (content-addressed manifest v2)
Baseline PNGs (492, 35 MB) leave git: they now live in the private R2 bucket
pcbjam-ci-screenshots as immutable sha256/<hex>.png objects, pinned by the
committed screenshot-manifest.json (v2: name, engine, sha256, bytes, dims).
tests/baseline-screenshots/ becomes a gitignored cache materialized by the new
`npm run screenshots:fetch` (r2-sync.ts + aws4fetch r2-store.ts).
- promote.ts: requires the RW keypair (shell env or gitignored tests/.env),
syncs the cache, uploads new hashes BEFORE rewriting the manifest; the
manifest diff is the only git-visible output. --prune only edits the
manifest — R2 objects are never deleted, old commits still resolve.
- compare.ts: skips the gate (exit 0, no report.json) when the manifest
expects baselines but the cache is empty (secretless callers).
- changelog.ts: diffs the manifest between revs and fetches bytes from R2;
guards against the migration commit (base manifest not v2 → skip).
- gen-manifest --check: v2 schema + resurrection guard (fails if baseline
PNGs are ever re-committed); credential-free so every caller can gate.
- wasm-build.yml: declares optional read-only S3 secrets, caches + fetches
baselines before the lint gate; release.yml/deploy-staging.yml pass them.
- screenshot-changelog.yml: triggers on the manifest path instead of PNGs.
All 492 objects are seeded and hash-verified in the bucket; fetch/compare
degrade to a warn-and-skip without credentials.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 16:01:46 +02:00
|
|
|
"aws4fetch": "^1.0.20",
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
"esbuild": "^0.28.0",
|
2026-07-01 18:01:15 +02:00
|
|
|
"pixelmatch": "^5.3.0",
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"playwright": "^1.62.1",
|
2026-07-01 18:01:15 +02:00
|
|
|
"pngjs": "^7.0.0",
|
2025-11-29 12:39:30 +01:00
|
|
|
"serve": "^14.2.0",
|
2026-07-01 18:01:15 +02:00
|
|
|
"tsx": "^4.22.4",
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
"typescript": "^5.9.3",
|
|
|
|
|
"yjs": "^13.6.31"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/aix-ppc64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"ppc64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"aix"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/android-arm": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"android"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/android-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"android"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/android-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"android"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/darwin-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"darwin"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/darwin-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"darwin"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/freebsd-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"freebsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/freebsd-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"freebsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-arm": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-ia32": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"ia32"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-loong64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"loong64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-mips64el": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"mips64el"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-ppc64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"ppc64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-riscv64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"riscv64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-s390x": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"s390x"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/linux-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"linux"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/netbsd-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"netbsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/netbsd-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"netbsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/openbsd-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"openbsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/openbsd-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"openbsd"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/openharmony-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"openharmony"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/sunos-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"sunos"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/win32-arm64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"arm64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"win32"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/win32-ia32": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"ia32"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"win32"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@esbuild/win32-x64": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==",
|
|
|
|
|
"cpu": [
|
|
|
|
|
"x64"
|
|
|
|
|
],
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"win32"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
2025-11-28 13:10:05 +01:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@playwright/test": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"version": "1.62.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz",
|
|
|
|
|
"integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==",
|
2025-11-28 13:10:05 +01:00
|
|
|
"dev": true,
|
|
|
|
|
"license": "Apache-2.0",
|
|
|
|
|
"dependencies": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"playwright": "1.62.1"
|
2025-11-28 13:10:05 +01:00
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"playwright": "cli.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"node": ">=20"
|
2025-11-28 13:10:05 +01:00
|
|
|
}
|
|
|
|
|
},
|
2025-11-29 12:39:30 +01:00
|
|
|
"node_modules/@types/node": {
|
|
|
|
|
"version": "24.10.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
|
|
|
|
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"undici-types": "~7.16.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
2026-07-01 18:01:15 +02:00
|
|
|
"node_modules/@types/pixelmatch": {
|
|
|
|
|
"version": "5.2.6",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@types/pixelmatch/-/pixelmatch-5.2.6.tgz",
|
|
|
|
|
"integrity": "sha512-wC83uexE5KGuUODn6zkm9gMzTwdY5L0chiK+VrKcDfEjzxh1uadlWTvOmAbCpnM9zx/Ww3f8uKlYQVnO/TrqVg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"@types/node": "*"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/@types/pngjs": {
|
|
|
|
|
"version": "6.0.5",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-6.0.5.tgz",
|
|
|
|
|
"integrity": "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"@types/node": "*"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/@zeit/schemas": {
|
|
|
|
|
"version": "2.36.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz",
|
|
|
|
|
"integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ajv": {
|
|
|
|
|
"version": "8.12.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
|
|
|
|
|
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"fast-deep-equal": "^3.1.1",
|
|
|
|
|
"json-schema-traverse": "^1.0.0",
|
|
|
|
|
"require-from-string": "^2.0.2",
|
|
|
|
|
"uri-js": "^4.2.2"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"type": "github",
|
|
|
|
|
"url": "https://github.com/sponsors/epoberezkin"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-align": {
|
|
|
|
|
"version": "3.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"string-width": "^4.1.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-align/node_modules/ansi-regex": {
|
|
|
|
|
"version": "5.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-align/node_modules/emoji-regex": {
|
|
|
|
|
"version": "8.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-align/node_modules/string-width": {
|
|
|
|
|
"version": "4.2.3",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
|
|
|
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"emoji-regex": "^8.0.0",
|
|
|
|
|
"is-fullwidth-code-point": "^3.0.0",
|
|
|
|
|
"strip-ansi": "^6.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-align/node_modules/strip-ansi": {
|
|
|
|
|
"version": "6.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ansi-regex": "^5.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-regex": {
|
|
|
|
|
"version": "6.2.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
|
|
|
|
|
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ansi-styles": {
|
|
|
|
|
"version": "6.2.3",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
|
|
|
|
|
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/arch": {
|
|
|
|
|
"version": "2.2.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
|
|
|
|
|
"integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"funding": [
|
|
|
|
|
{
|
|
|
|
|
"type": "github",
|
|
|
|
|
"url": "https://github.com/sponsors/feross"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "patreon",
|
|
|
|
|
"url": "https://www.patreon.com/feross"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "consulting",
|
|
|
|
|
"url": "https://feross.org/support"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/arg": {
|
|
|
|
|
"version": "5.0.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
|
|
|
|
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
tests: move screenshot baselines from git to R2 (content-addressed manifest v2)
Baseline PNGs (492, 35 MB) leave git: they now live in the private R2 bucket
pcbjam-ci-screenshots as immutable sha256/<hex>.png objects, pinned by the
committed screenshot-manifest.json (v2: name, engine, sha256, bytes, dims).
tests/baseline-screenshots/ becomes a gitignored cache materialized by the new
`npm run screenshots:fetch` (r2-sync.ts + aws4fetch r2-store.ts).
- promote.ts: requires the RW keypair (shell env or gitignored tests/.env),
syncs the cache, uploads new hashes BEFORE rewriting the manifest; the
manifest diff is the only git-visible output. --prune only edits the
manifest — R2 objects are never deleted, old commits still resolve.
- compare.ts: skips the gate (exit 0, no report.json) when the manifest
expects baselines but the cache is empty (secretless callers).
- changelog.ts: diffs the manifest between revs and fetches bytes from R2;
guards against the migration commit (base manifest not v2 → skip).
- gen-manifest --check: v2 schema + resurrection guard (fails if baseline
PNGs are ever re-committed); credential-free so every caller can gate.
- wasm-build.yml: declares optional read-only S3 secrets, caches + fetches
baselines before the lint gate; release.yml/deploy-staging.yml pass them.
- screenshot-changelog.yml: triggers on the manifest path instead of PNGs.
All 492 objects are seeded and hash-verified in the bucket; fetch/compare
degrade to a warn-and-skip without credentials.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-18 16:01:46 +02:00
|
|
|
"node_modules/aws4fetch": {
|
|
|
|
|
"version": "1.0.20",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/aws4fetch/-/aws4fetch-1.0.20.tgz",
|
|
|
|
|
"integrity": "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/balanced-match": {
|
|
|
|
|
"version": "1.0.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
|
|
|
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/boxen": {
|
|
|
|
|
"version": "7.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ansi-align": "^3.0.1",
|
|
|
|
|
"camelcase": "^7.0.0",
|
|
|
|
|
"chalk": "^5.0.1",
|
|
|
|
|
"cli-boxes": "^3.0.0",
|
|
|
|
|
"string-width": "^5.1.2",
|
|
|
|
|
"type-fest": "^2.13.0",
|
|
|
|
|
"widest-line": "^4.0.1",
|
|
|
|
|
"wrap-ansi": "^8.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=14.16"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/brace-expansion": {
|
|
|
|
|
"version": "1.1.12",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
|
|
|
|
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"balanced-match": "^1.0.0",
|
|
|
|
|
"concat-map": "0.0.1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/bytes": {
|
|
|
|
|
"version": "3.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/camelcase": {
|
|
|
|
|
"version": "7.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=14.16"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/chalk": {
|
|
|
|
|
"version": "5.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/chalk-template": {
|
|
|
|
|
"version": "0.4.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
|
|
|
|
|
"integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"chalk": "^4.1.2"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/chalk-template?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/chalk-template/node_modules/ansi-styles": {
|
|
|
|
|
"version": "4.3.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
|
|
|
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"color-convert": "^2.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/chalk-template/node_modules/chalk": {
|
|
|
|
|
"version": "4.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ansi-styles": "^4.1.0",
|
|
|
|
|
"supports-color": "^7.1.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=10"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/cli-boxes": {
|
|
|
|
|
"version": "3.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=10"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/clipboardy": {
|
|
|
|
|
"version": "3.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"arch": "^2.2.0",
|
|
|
|
|
"execa": "^5.1.1",
|
|
|
|
|
"is-wsl": "^2.2.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/color-convert": {
|
|
|
|
|
"version": "2.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"color-name": "~1.1.4"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=7.0.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/color-name": {
|
|
|
|
|
"version": "1.1.4",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
|
|
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/compressible": {
|
|
|
|
|
"version": "2.0.18",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
|
|
|
|
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"mime-db": ">= 1.43.0 < 2"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/compression": {
|
|
|
|
|
"version": "1.8.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
|
|
|
|
|
"integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"bytes": "3.1.2",
|
|
|
|
|
"compressible": "~2.0.18",
|
|
|
|
|
"debug": "2.6.9",
|
|
|
|
|
"negotiator": "~0.6.4",
|
|
|
|
|
"on-headers": "~1.1.0",
|
|
|
|
|
"safe-buffer": "5.2.1",
|
|
|
|
|
"vary": "~1.1.2"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.8.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/concat-map": {
|
|
|
|
|
"version": "0.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/content-disposition": {
|
|
|
|
|
"version": "0.5.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
|
|
|
|
"integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/cross-spawn": {
|
|
|
|
|
"version": "7.0.6",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
|
|
|
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"path-key": "^3.1.0",
|
|
|
|
|
"shebang-command": "^2.0.0",
|
|
|
|
|
"which": "^2.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/debug": {
|
|
|
|
|
"version": "2.6.9",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
|
|
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ms": "2.0.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/deep-extend": {
|
|
|
|
|
"version": "0.6.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
|
|
|
|
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=4.0.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/eastasianwidth": {
|
|
|
|
|
"version": "0.2.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
|
|
|
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/emoji-regex": {
|
|
|
|
|
"version": "9.2.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
|
|
|
|
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
"node_modules/esbuild": {
|
|
|
|
|
"version": "0.28.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz",
|
|
|
|
|
"integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"hasInstallScript": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"bin": {
|
|
|
|
|
"esbuild": "bin/esbuild"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18"
|
|
|
|
|
},
|
|
|
|
|
"optionalDependencies": {
|
|
|
|
|
"@esbuild/aix-ppc64": "0.28.0",
|
|
|
|
|
"@esbuild/android-arm": "0.28.0",
|
|
|
|
|
"@esbuild/android-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/android-x64": "0.28.0",
|
|
|
|
|
"@esbuild/darwin-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/darwin-x64": "0.28.0",
|
|
|
|
|
"@esbuild/freebsd-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/freebsd-x64": "0.28.0",
|
|
|
|
|
"@esbuild/linux-arm": "0.28.0",
|
|
|
|
|
"@esbuild/linux-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/linux-ia32": "0.28.0",
|
|
|
|
|
"@esbuild/linux-loong64": "0.28.0",
|
|
|
|
|
"@esbuild/linux-mips64el": "0.28.0",
|
|
|
|
|
"@esbuild/linux-ppc64": "0.28.0",
|
|
|
|
|
"@esbuild/linux-riscv64": "0.28.0",
|
|
|
|
|
"@esbuild/linux-s390x": "0.28.0",
|
|
|
|
|
"@esbuild/linux-x64": "0.28.0",
|
|
|
|
|
"@esbuild/netbsd-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/netbsd-x64": "0.28.0",
|
|
|
|
|
"@esbuild/openbsd-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/openbsd-x64": "0.28.0",
|
|
|
|
|
"@esbuild/openharmony-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/sunos-x64": "0.28.0",
|
|
|
|
|
"@esbuild/win32-arm64": "0.28.0",
|
|
|
|
|
"@esbuild/win32-ia32": "0.28.0",
|
|
|
|
|
"@esbuild/win32-x64": "0.28.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/execa": {
|
|
|
|
|
"version": "5.1.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
|
|
|
|
|
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"cross-spawn": "^7.0.3",
|
|
|
|
|
"get-stream": "^6.0.0",
|
|
|
|
|
"human-signals": "^2.1.0",
|
|
|
|
|
"is-stream": "^2.0.0",
|
|
|
|
|
"merge-stream": "^2.0.0",
|
|
|
|
|
"npm-run-path": "^4.0.1",
|
|
|
|
|
"onetime": "^5.1.2",
|
|
|
|
|
"signal-exit": "^3.0.3",
|
|
|
|
|
"strip-final-newline": "^2.0.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=10"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sindresorhus/execa?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/fast-deep-equal": {
|
|
|
|
|
"version": "3.1.3",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
|
|
|
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/fsevents": {
|
|
|
|
|
"version": "2.3.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
|
|
|
|
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"hasInstallScript": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"darwin"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/get-stream": {
|
|
|
|
|
"version": "6.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=10"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/has-flag": {
|
|
|
|
|
"version": "4.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/human-signals": {
|
|
|
|
|
"version": "2.1.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
|
|
|
|
|
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "Apache-2.0",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=10.17.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ini": {
|
|
|
|
|
"version": "1.3.8",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
|
|
|
|
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/is-docker": {
|
|
|
|
|
"version": "2.2.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
|
|
|
|
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"bin": {
|
|
|
|
|
"is-docker": "cli.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/is-fullwidth-code-point": {
|
|
|
|
|
"version": "3.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/is-port-reachable": {
|
|
|
|
|
"version": "4.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/is-stream": {
|
|
|
|
|
"version": "2.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/is-wsl": {
|
|
|
|
|
"version": "2.2.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
|
|
|
|
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"is-docker": "^2.0.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/isexe": {
|
|
|
|
|
"version": "2.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC"
|
|
|
|
|
},
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
"node_modules/isomorphic.js": {
|
|
|
|
|
"version": "0.2.5",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
|
|
|
|
|
"integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"funding": {
|
|
|
|
|
"type": "GitHub Sponsors ❤",
|
|
|
|
|
"url": "https://github.com/sponsors/dmonad"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/json-schema-traverse": {
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
"node_modules/lib0": {
|
|
|
|
|
"version": "0.2.117",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.117.tgz",
|
|
|
|
|
"integrity": "sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"isomorphic.js": "^0.2.4"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js",
|
|
|
|
|
"0gentesthtml": "bin/gentesthtml.js",
|
|
|
|
|
"0serve": "bin/0serve.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=16"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"type": "GitHub Sponsors ❤",
|
|
|
|
|
"url": "https://github.com/sponsors/dmonad"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/merge-stream": {
|
|
|
|
|
"version": "2.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/mime-db": {
|
|
|
|
|
"version": "1.54.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
|
|
|
|
|
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/mime-types": {
|
|
|
|
|
"version": "2.1.18",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
|
|
|
|
|
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"mime-db": "~1.33.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/mime-types/node_modules/mime-db": {
|
|
|
|
|
"version": "1.33.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
|
|
|
|
|
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/mimic-fn": {
|
|
|
|
|
"version": "2.1.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
|
|
|
|
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/minimatch": {
|
|
|
|
|
"version": "3.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"brace-expansion": "^1.1.7"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "*"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/minimist": {
|
|
|
|
|
"version": "1.2.8",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
|
|
|
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/ljharb"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/ms": {
|
|
|
|
|
"version": "2.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/negotiator": {
|
|
|
|
|
"version": "0.6.4",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
|
|
|
|
|
"integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/npm-run-path": {
|
|
|
|
|
"version": "4.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"path-key": "^3.0.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/on-headers": {
|
|
|
|
|
"version": "1.1.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
|
|
|
|
|
"integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/onetime": {
|
|
|
|
|
"version": "5.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"mimic-fn": "^2.1.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=6"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/path-is-inside": {
|
|
|
|
|
"version": "1.0.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
|
|
|
|
|
"integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "(WTFPL OR MIT)"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/path-key": {
|
|
|
|
|
"version": "3.1.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
|
|
|
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/path-to-regexp": {
|
|
|
|
|
"version": "3.3.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
|
|
|
|
|
"integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
2026-07-01 18:01:15 +02:00
|
|
|
"node_modules/pixelmatch": {
|
|
|
|
|
"version": "5.3.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz",
|
|
|
|
|
"integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"pngjs": "^6.0.0"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"pixelmatch": "bin/pixelmatch"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/pixelmatch/node_modules/pngjs": {
|
|
|
|
|
"version": "6.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12.13.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/playwright": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"version": "1.62.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz",
|
|
|
|
|
"integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==",
|
2025-11-28 13:10:05 +01:00
|
|
|
"dev": true,
|
|
|
|
|
"license": "Apache-2.0",
|
|
|
|
|
"dependencies": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"playwright-core": "1.62.1"
|
2025-11-28 13:10:05 +01:00
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"playwright": "cli.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"node": ">=20"
|
2025-11-28 13:10:05 +01:00
|
|
|
},
|
|
|
|
|
"optionalDependencies": {
|
|
|
|
|
"fsevents": "2.3.2"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/playwright-core": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"version": "1.62.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz",
|
|
|
|
|
"integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==",
|
2025-11-28 13:10:05 +01:00
|
|
|
"dev": true,
|
|
|
|
|
"license": "Apache-2.0",
|
|
|
|
|
"bin": {
|
|
|
|
|
"playwright-core": "cli.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
jspi: fix the dead-tools ownership bug, emscripten-6 fallout, and green the full suite on Playwright 1.62
Live-app fix (Place Footprints / routing dead in Chrome): submodule
bumps carry the coroutine ownership fix (kicad 012d95ecb4) and the
handler-exception survival fix (wxwidgets 1b5f0e31f4).
Emscripten-6 fallout:
- occ/ngspice worker wrappers: mainScriptUrlOrBlob was removed
upstream; pthread children re-run the wrapper blob, so an em-pthread
realm now importScripts the glue and gets out of the way (before:
recursive service boots, pool never fills, silent 180s boot hangs —
every occ spec and ngspice bg_run).
- Makefile.wasm: -sASYNCIFY frankenlinks on the no-wx coroutine repro
targets ported to -sJSPI (the JSPI-only libcontext crashed at first
yield under them); mainloop/gl repro pages drive their tick through a
promising export (emscripten_set_main_loop callbacks cannot suspend);
retired inject-dyncall-shims lines removed (targets were unbuildable
since Phase 8); $stringToNewUTF8 force-included (the EM_ASM value
bridge aborted the runtime on the first decoded exception).
- fiber-park levers: neither embind shape can drive suspending levers
(plain throws on strict-JSPI Firefox; emscripten::async() re-executes
its invoker on settle) — kept sync for manual Chromium probing, spec
coverage moved to the jspi-coroutine harness (18 cases).
Suite work:
- Playwright 1.61.1 -> 1.62.1 (Firefox 153: JSPI on by default).
- fiber-resume-park.spec retired -> coroutine-lifecycle.spec: census
gate over boot / board load / chooser open / cancel (deterministically
red on the pre-fix build).
- Blind asyncify-era pins re-keyed: quasimodal-strand + wait-beacons
beacon regexes, footprint-chooser-close liveness -> wx parking-timer
heartbeat (scheduler counters idle flat on Firefox).
- occ/ngspice test providers: 60s boot timeout + worker error
surfacing (a worker death used to be a silent 180s timeout).
- Harness pages: stale 9.99 config dir -> 10.0 (library_manager wxCHECK
noise, chooser had no libraries).
- gal-webgl harness: missing artifacts rebuilt (boost/glm extracted to
the host sysroot), PgmOrNull stub added for the rebased GAL.
- jspi-scheduler: clean-shutdown console line restored (app-quit
contract), quarantine never yanks SP from a live window.
Gates: test:e2e 699 passed / 0 failed (wx-chromium, kicad-firefox,
kicad-chromium, jspi-firefox, coroutine-firefox); web ff/cr/mobile 71
passed; lint:ci-coverage 166, lint:determinism 163, screenshots
manifest 492 current, corpus 7/7, tools:contract green. Offline
screenshot baselines show expected mass drift from the engine bump —
re-baseline (screenshots:noise -> promote) is a follow-up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X9eh1s5sTx1o9Em9KBuwR
2026-08-13 17:41:28 +02:00
|
|
|
"node": ">=20"
|
2025-11-28 13:10:05 +01:00
|
|
|
}
|
|
|
|
|
},
|
2026-07-01 18:01:15 +02:00
|
|
|
"node_modules/pngjs": {
|
|
|
|
|
"version": "7.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=14.19.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/punycode": {
|
|
|
|
|
"version": "2.3.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
|
|
|
|
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/range-parser": {
|
|
|
|
|
"version": "1.2.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
|
|
|
|
|
"integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/rc": {
|
|
|
|
|
"version": "1.2.8",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
|
|
|
|
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"deep-extend": "^0.6.0",
|
|
|
|
|
"ini": "~1.3.0",
|
|
|
|
|
"minimist": "^1.2.0",
|
|
|
|
|
"strip-json-comments": "~2.0.1"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"rc": "cli.js"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/registry-auth-token": {
|
|
|
|
|
"version": "3.3.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
|
|
|
|
|
"integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"rc": "^1.1.6",
|
|
|
|
|
"safe-buffer": "^5.0.1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/registry-url": {
|
|
|
|
|
"version": "3.1.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
|
|
|
|
|
"integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"rc": "^1.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=0.10.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/require-from-string": {
|
|
|
|
|
"version": "2.0.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
|
|
|
|
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=0.10.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/safe-buffer": {
|
|
|
|
|
"version": "5.2.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
|
|
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"funding": [
|
|
|
|
|
{
|
|
|
|
|
"type": "github",
|
|
|
|
|
"url": "https://github.com/sponsors/feross"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "patreon",
|
|
|
|
|
"url": "https://www.patreon.com/feross"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "consulting",
|
|
|
|
|
"url": "https://feross.org/support"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/serve": {
|
|
|
|
|
"version": "14.2.5",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz",
|
|
|
|
|
"integrity": "sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"@zeit/schemas": "2.36.0",
|
|
|
|
|
"ajv": "8.12.0",
|
|
|
|
|
"arg": "5.0.2",
|
|
|
|
|
"boxen": "7.0.0",
|
|
|
|
|
"chalk": "5.0.1",
|
|
|
|
|
"chalk-template": "0.4.0",
|
|
|
|
|
"clipboardy": "3.0.0",
|
|
|
|
|
"compression": "1.8.1",
|
|
|
|
|
"is-port-reachable": "4.0.0",
|
|
|
|
|
"serve-handler": "6.1.6",
|
|
|
|
|
"update-check": "1.5.4"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"serve": "build/main.js"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 14"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/serve-handler": {
|
|
|
|
|
"version": "6.1.6",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz",
|
|
|
|
|
"integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"bytes": "3.0.0",
|
|
|
|
|
"content-disposition": "0.5.2",
|
|
|
|
|
"mime-types": "2.1.18",
|
|
|
|
|
"minimatch": "3.1.2",
|
|
|
|
|
"path-is-inside": "1.0.2",
|
|
|
|
|
"path-to-regexp": "3.3.0",
|
|
|
|
|
"range-parser": "1.2.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/serve-handler/node_modules/bytes": {
|
|
|
|
|
"version": "3.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/shebang-command": {
|
|
|
|
|
"version": "2.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"shebang-regex": "^3.0.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/shebang-regex": {
|
|
|
|
|
"version": "3.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/signal-exit": {
|
|
|
|
|
"version": "3.0.7",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
|
|
|
|
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC"
|
|
|
|
|
},
|
|
|
|
|
"node_modules/string-width": {
|
|
|
|
|
"version": "5.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"eastasianwidth": "^0.2.0",
|
|
|
|
|
"emoji-regex": "^9.2.2",
|
|
|
|
|
"strip-ansi": "^7.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/strip-ansi": {
|
|
|
|
|
"version": "7.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ansi-regex": "^6.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/strip-final-newline": {
|
|
|
|
|
"version": "2.0.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
|
|
|
|
|
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=6"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/strip-json-comments": {
|
|
|
|
|
"version": "2.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=0.10.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/supports-color": {
|
|
|
|
|
"version": "7.2.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
|
|
|
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"has-flag": "^4.0.0"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=8"
|
|
|
|
|
}
|
|
|
|
|
},
|
2026-07-01 18:01:15 +02:00
|
|
|
"node_modules/tsx": {
|
|
|
|
|
"version": "4.22.4",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz",
|
|
|
|
|
"integrity": "sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"esbuild": "~0.28.0"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"tsx": "dist/cli.mjs"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18.0.0"
|
|
|
|
|
},
|
|
|
|
|
"optionalDependencies": {
|
|
|
|
|
"fsevents": "~2.3.3"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/tsx/node_modules/fsevents": {
|
|
|
|
|
"version": "2.3.3",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
|
|
|
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"hasInstallScript": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"optional": true,
|
|
|
|
|
"os": [
|
|
|
|
|
"darwin"
|
|
|
|
|
],
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/type-fest": {
|
|
|
|
|
"version": "2.19.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
|
|
|
|
|
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "(MIT OR CC0-1.0)",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12.20"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-11-29 12:39:30 +01:00
|
|
|
"node_modules/typescript": {
|
|
|
|
|
"version": "5.9.3",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
|
|
|
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "Apache-2.0",
|
|
|
|
|
"bin": {
|
|
|
|
|
"tsc": "bin/tsc",
|
|
|
|
|
"tsserver": "bin/tsserver"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=14.17"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/undici-types": {
|
|
|
|
|
"version": "7.16.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
|
|
|
|
|
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT"
|
|
|
|
|
},
|
2025-11-28 13:10:05 +01:00
|
|
|
"node_modules/update-check": {
|
|
|
|
|
"version": "1.5.4",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz",
|
|
|
|
|
"integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"registry-auth-token": "3.3.2",
|
|
|
|
|
"registry-url": "3.1.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/uri-js": {
|
|
|
|
|
"version": "4.4.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
|
|
|
|
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "BSD-2-Clause",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"punycode": "^2.1.0"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/vary": {
|
|
|
|
|
"version": "1.1.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
|
|
|
|
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 0.8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/which": {
|
|
|
|
|
"version": "2.0.2",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
|
|
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "ISC",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"isexe": "^2.0.0"
|
|
|
|
|
},
|
|
|
|
|
"bin": {
|
|
|
|
|
"node-which": "bin/node-which"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">= 8"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/widest-line": {
|
|
|
|
|
"version": "4.0.1",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
|
|
|
|
|
"integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"string-width": "^5.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"node_modules/wrap-ansi": {
|
|
|
|
|
"version": "8.1.0",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
|
|
|
|
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"ansi-styles": "^6.1.0",
|
|
|
|
|
"string-width": "^5.0.1",
|
|
|
|
|
"strip-ansi": "^7.0.1"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=12"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
|
|
|
|
}
|
feat(pl_editor): Yjs collaborative bridge — differ/apply + generic reconciler (yjs-bridge commit 2)
Bidirectional bridge between pl_editor's DS_DATA_MODEL and a Yjs doc, two same-origin
tabs syncing over BroadcastChannel. Full architecture in features/yjs-bridge/0001-0002.
C++ (wasm layer, wasm/bindings/pl_editor_embind.cpp — public DS_DATA_MODEL API only,
zero added fork divergence beyond the OnModify hook):
- snapshot-differ ChangeSource: diff model vs last-emitted snapshot on OnModify,
emit per-item delta JSON via EM_ASM window.kicadCollab.onDelta
- kicadCollabApply(json): apply remote delta by uuid — scalars (text/segment/rect)
by field, polygon/bitmap via SetPageLayout-append blob; reseed snapshot + HardRedraw
- kicadCollabSnapshot() (seed/baseline), s_applyingRemote echo guard, and a
kicadCollabTestAddText() PoC local-edit hook
- wire format: {added:[item],changed:[item],removed:[uuid]}, item = {id,type,...fields}
JS (web/apps/frontend/src/wasm/collab/, generic + schema-agnostic):
- reconciler: uuid-keyed Y.Map of per-item Y.Map; down = onDelta→Y, up = observe→apply,
origin-tagged echo suppression; seed-once join adopts the doc authoritatively
- broadcast-transport: minimal BroadcastChannel Yjs provider (query/state catch-up)
- WasmTool wiring behind ?collab=1 (pl_editor only); gated debug logging
Tests: tests/kicad/pl_editor-collab.spec.ts — single-page C++ contract (snapshot/apply
changed+removed+added/echo-suppression) + two-tab BroadcastChannel A<->B propagation.
Reconciler+yjs bundled via esbuild (tests/collab/build.mjs, npm run build:collab).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:25:22 +02:00
|
|
|
},
|
|
|
|
|
"node_modules/yjs": {
|
|
|
|
|
"version": "13.6.31",
|
|
|
|
|
"resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.31.tgz",
|
|
|
|
|
"integrity": "sha512-Eq+5BRfbeGyqGVrTJL3bEcr8gKkxPuyuoHmAwpk52fDb8kOVMrfVSTRPd6yiGgX5Fskb96qCRjzjbRjrL4YEnw==",
|
|
|
|
|
"dev": true,
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"lib0": "^0.2.99"
|
|
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=16.0.0",
|
|
|
|
|
"npm": ">=8.0.0"
|
|
|
|
|
},
|
|
|
|
|
"funding": {
|
|
|
|
|
"type": "GitHub Sponsors ❤",
|
|
|
|
|
"url": "https://github.com/sponsors/dmonad"
|
|
|
|
|
}
|
2025-11-28 13:10:05 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|