← Commit history

v0.9.111: faulthandler at boot (issue #27) - native crash now dumps all thread stacks to stderr, which ab 2.0.44+ captures into bridge-logs/kicad.log

John Lauer ·a2d550db82 ·2mo ago ·parent 305f8fd
5 files changed +17−7
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.110+0.9.111
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.110",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.110/adom-bridge-kicad-v0.9.110.zip",-  "sha256": "61601524d3d1052914b6e00e7fe22378cb63b015eb3bb496f8e0e722f1059465",-  "size": 407549,+  "version": "0.9.111",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.111/adom-bridge-kicad-v0.9.111.zip",+  "sha256": "75a8178fff97a637f9b57e1c53c9e57796df45e736e2019a20cc5d79b4c7287c",+  "size": 407709,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-16T00:48:42Z",+  "released_at": "2026-08-16T01:08:24Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.111.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.110",+  "version": "0.9.111",   "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.",
server.py+10
@@ -991,6 +991,16 @@ def main():     except Exception:         pass +    # Issue #27: a native crash (ctypes/GDI) once killed the process silently.+    # faulthandler dumps every thread's Python stack to stderr on a hard fault —+    # and ab 2.0.44+ captures our stderr into ~/.adom/bridge-logs/kicad.log, so+    # the next native death leaves a usable trace instead of nothing.+    try:+        import faulthandler+        faulthandler.enable(file=sys.stderr, all_threads=True)+    except Exception:+        pass+     port = DEFAULT_PORT     if "--port" in sys.argv:         idx = sys.argv.index("--port")