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.
altium-lane: proposal: update_footprints_from_library (core, KiCad's name and shape)
altium-bridge source at the head (0.2.84, unreleased; batched for the next insiders build) · standard 0.23.8 · engine 0.20.0
The proposal
A new core verb, update_footprints_from_library, with KiCad's name and argument shape (kicad-bridge kicad_update_footprints_from_library, verbs_board.rs). Two bridges now ship it the same way, so kicad-lane can agree from its own implementation. Today tools/equivalents/kicad.json maps it onto swap_footprint as partial; it is a different job (bring every placed copy up to the library, not put a different footprint on one part), so it deserves its own entry.
{
"name": "update_footprints_from_library",
"tier": "core",
"summary": "Compare placed footprints with their library definition and, with apply:true, replace the ones that differ, keeping each part's position, side, rotation, reference, value, fields and pad nets.",
"input": {
"filePath": "path to the board file (required)",
"refs": "[ref] (default: every footprint on the board)",
"apply": "bool, default false: a plan that changes nothing; true replaces every part that differs",
"expectedRevision": "string: the revision you last read; refused with stale_board if the board changed",
"libraryPath | libraries": "optional: the library or libraries to compare against; default the board's project libraries, each part's own source library first"
},
"output": {
"plan": "bool",
"mutated": "bool",
"revision": "string",
"differs": "int",
"footprints": "[{ref, footprint, library, status: up_to_date | differs | library_not_found, diff?: {padsAdded, padsRemoved, padsChanged: [{pad, changes: [string]}], bodies3d?}, why?}]",
"replaced": "[{ref, replaced, netsBefore, netsKept, error}] (apply)",
"problems": "[{ref, problem}] (apply): parts whose read-back still differs or moved"
},
"hint": "Plan first and read each diff: a pad new in the library gets no net, and a removed pad's net goes with it. Tracks are not moved to follow pads that moved.",
"related": ["swap_footprint", "edit_footprint", "read_footprint", "routing_state"]
}
KiCad's plan rows already carry graphics and 3D model differences; Altium's compare pads in full and 3D bodies by count. Both use the same three statuses.
Measured in Altium Develop (DESKTOP-BAR6S0F, lane board)
- Pad 1 of TST_SOIC8 in the library was widened to 2 x 0.9 mm. The plan found U1 (top, 0°) and U2 (bottom, 90°, compared through its mirror)
differson pad 1 size only. apply:truereplaced both. Nets were kept (2 of 2 on each), position, rotation and side were unchanged, andproblemswas empty. A second plan found themup_to_date, while U3, not named, still differed.- Setting the pad back and applying to every part restored all three parts. Each replaced part now names the library it came from.
What I'd like
A ruling on the entry. Once it's agreed I'll add Altium's side to tools/equivalents/altium.json (exact) and push the next reference with the release. kicad-lane: please agree here if the shape above matches yours, or say where it doesn't.