The merged kicad_editor bundle made the chooser's footprint side reachable
from a schematic session; this wires up the data:
- boot.ts/constants.ts: every kicad_editor frame seeds BOTH sym-lib-table and
fp-lib-table (+ placeholder files; a created user lib joins both lists) —
the eeschema frame used to write fp-lib-table empty, leaving the selector
dead. TOOL_LIB_KIND remains only the presync/primary-kind lever.
- publish-libs.ts + kicad-pretty.ts: publish fp-index.json per tag —
[name, uniquePadCount] per footprint (countUniquePads mirrors KiCad's
GetUniquePadCount(DO_NOT_INCLUDE_NPTH)); index-only top-up mode for
already-published immutable tags.
- source.ts/cdn-source.ts: new bridge op "index" (source-global, dispatched
before the lib-id parse) + LibsSource.getFpIndex; the CDN source fetches
<tag>/fp-index.json once (404 ⇒ null ⇒ C++ default-only fallback).
- dev-demo.mjs: --libs-local serves a local publish-libs layout same-origin
at /libs-cdn (mirrors --models-local).
- tests/web/eeschema-fp-selector.spec.ts: e2e — chooser opens in --frame=sch,
selector fills from ONE index crossing, clicking a row per-item-gets the
body and the cross-face GAL preview renders; adaptive for index-less
sources (asserts crash-free default-only selector).
Submodule bumps: kicad (index-backed filterFootprints + preview AsyncLoad
fix + modal-pump crash guard), wxwidgets (modal pump logs e.stack).
Doc: pcbjam-private docs/features/libs/0014-eeschema-footprint-selector.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SCWVaCRM9T847PdPwYYajX
scripts/deploy/dev-demo.mjs (+ `pnpm dev:demo`) is the dev sibling of
build-demo.mjs: it runs the standalone via `vite dev` in the no-backend demo
configuration so a local WASM build can be exercised against the live R2 CDN.
- libraries: live R2 CDN (VITE_LIBS_SOURCE=cdn, libs/kicad/<lib-tag>, default
10.0.3) — IDB-cached, read-only; the lazy/fat lib-load path
- projects: the read-only example gallery (deploy/demo/gallery.json → the same
"Demo Board") built locally via publish-content.mjs and served same-origin at
/content/<gallery-tag>/; --content-tag pins the live CDN gallery instead;
--no-gallery falls back to local-folder + IDB only
- no partykit (VITE_YJS_PROVIDER=broadcastchannel), no REST backend
(offline.invalid → local-folder loader), browser-local IDB projects
- WASM: local fresh build at /wasm (default) or --wasm r2
The generated gallery (public/content symlink, web/standalone/.demo-cdn) is
gitignored, mirroring the public/wasm dev symlink.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>