app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
v0.9.169: the install gate compared only EXISTENCE of generated loaders, so 0.9.168's rewritten loader never shipped to boxes that already had the old one. Content-compare every generated artifact
5 files changed
+22−11
BRIDGE_VERSION+1−1@@ -1 +1 @@-0.9.168+0.9.169
adom-bridge-kicad-manifest.json+5−5@@ -1,15 +1,15 @@ { "manifest_version": 1, "name": "kicad",- "version": "0.9.168",- "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.168/adom-bridge-kicad-v0.9.168.zip",- "sha256": "df470c89ac11371cbbf17a5c8b86c59f04cc74906c81ebb87a1805f5e7beab22",- "size": 444853,+ "version": "0.9.169",+ "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.169/adom-bridge-kicad-v0.9.169.zip",+ "sha256": "712d685502391a40ad2cd888cdfc977c9d46c4c80f41d78ec36a4f9dd87737f1",+ "size": 445013, "verbPrefixes": [ "kicad_" ], "healthEndpoint": "/status",- "released_at": "2026-08-18T13:52:13Z",+ "released_at": "2026-08-18T13:53:22Z", "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png", "languages": [ "Python",
adom-bridge-kicad-v0.9.169.zipadded⋯ 1 unchanged line ⋯
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "kicad", "displayName": "KiCad EDA",- "version": "0.9.168",+ "version": "0.9.169", "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.", "homepage": "https://wiki.adom.inc/adom/adom-bridge", "author": "Adom Inc.",
plugin_install.py+15−4@@ -340,11 +340,22 @@ def _install_one_version(version: str, version_info: dict) -> dict: # 0.9.167: the up-to-date check must cover EVERY artifact we deploy, or a # new loader silently never ships (0.9.166's plugin-dir loader hit exactly # this: "already-current" returned before it was written).- _plugin_dir_ok = all((d / "adom_bridge_plugin.py").exists()- for d in _kicad_plugin_dirs(str(version or "10.0"))) \- if _kicad_plugin_dirs(str(version or "10.0")) else False+ # 0.9.169: compare CONTENT, not mere existence. 0.9.168 rewrote this loader+ # and the existence-only gate reported "already-current", so the corrected+ # file never shipped - the same class of miss as 0.9.166's.+ def _generated_current(path, text):+ try:+ return path.exists() and path.read_text(encoding="utf-8") == text+ except Exception:+ return False++ _pdirs = _kicad_plugin_dirs(str(version or "10.0"))+ _plugin_dir_ok = bool(_pdirs) and all(+ _generated_current(d / "adom_bridge_plugin.py", _PLUGIN_DIR_LOADER) for d in _pdirs)+ _boot_ok = (_generated_current(dest_boot, _BOOT_PY)+ and _generated_current(dest_pth, "import adom_bridge_boot\n")) if (dest_bridge_hash == src_bridge_hash and dest_loader_hash == src_loader_hash- and pre_state["adom_bridge_boot.pth"]["exists"] and _plugin_dir_ok):+ and _boot_ok and _plugin_dir_ok): report["action"] = "already-current" report["payloadVersion"] = PAYLOAD_VERSION report["message"] = (