skill
EDA Bridge Standard: one way for an AI to drive every PCB tool
Public Made by Adomby adom
The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.
← Commit history
standard 0.22.3: generate.py warns on equivalents that hide a same-named verb
5 files changed
+9−3
README.md+2@@ -158,6 +158,8 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue ## Status +Version 0.22.3: generate.py warns when an equivalents entry maps a verb elsewhere while the bridge has its own same-named verb+(a stale entry had kept four of Altium's sheet verbs at partial; altium-lane emptied its file). Version 0.22.2: the engine (0.19.1)'s `footprint_from_land_pattern` lines SOT-23-5's pins 4 and 5 up with 3 and 1, and draws the courtyard round the pads and body only, not the silkscreen pin-1 dot (kicad-lane #25). Version 0.22.1: regenerated with fusion-bridge 1.13.15 (Altium-only verbs marked unsupported; swap_footprint, set_models, add_models).
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.22.2",+ "version": "0.22.3", "type": "skill", "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool", "description": "The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.",
tools/generate.py+4@@ -144,6 +144,10 @@ def main(): row[b] = {"verb": " / ".join(prefixes[b] + p for p in parts), "match": match} if note: row[b]["note"] = note[0]+ # a stale entry hides the bridge's own same-named verb (altium-lane, 2026-10-30: four sheet verbs read+ # partial for six releases after Altium shipped them exact); keep it only when that verb does another job+ if parts != [s["name"]] and s["name"] in have[b]:+ print(f"warning: {b} {s['name']}: tools/equivalents/{b}.json maps it to {row[b]['verb']} ({match}), but the bridge has its own {prefixes[b]}{s['name']}: drop the entry unless that verb does another job") if row[b] is None and s["name"] in have[b]: row[b] = {"verb": prefixes[b] + s["name"], "match": "exact"} coverage.append(row)
verbs/coverage.json+1−1@@ -1,5 +1,5 @@ {- "standard": "0.22.2",+ "standard": "0.22.3", "reference": { "bridge": "altium", "version": "0.2.82"
verbs/standard.json+1−1@@ -1,5 +1,5 @@ {- "standard": "0.22.2",+ "standard": "0.22.3", "reference": { "bridge": "altium", "version": "0.2.82"