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: lint_library (checks tier; one reply shape and rule names for every bridge)
altium-bridge source (0.2.84, unreleased; full battery running) · standard 0.23.8 · engine 0.20.0
The proposal
A checks-tier verb lint_library, using KiCad's name (kicad_lint_library): "is this library fit to ship?" Each bridge checks what its tool can get wrong:
- KiCad has to parse the file, so its lint is structural (does
kicad-cliaccept every symbol). - An Altium library always parses, so Altium's lint reads every footprint and symbol and checks what is in them.
The two are complementary. What I'd like standardised is the reply shape and the rule names, so an AI reads either bridge's answer the same way and a bridge can add rules over time.
{
"name": "lint_library",
"tier": "checks",
"summary": "Check a symbol or footprint library before it ships; every problem is a finding with a rule name and a severity.",
"input": {
"libraryPath": "the library file (required; filePath accepted)",
"names": "[name] (default every symbol or footprint)",
"footprintLibraries": "[path] for a symbol library: where its linked footprints are (default: the tool's own resolution)"
},
"output": {
"ok": "bool: no errors and every item read",
"checked": "int",
"errors": "int", "warnings": "int", "infos": "int",
"findings": "[{name, kind: footprint | symbol, rule, severity: error | warning | info, detail}]",
"unread": "[{name, error}]"
},
"hint": "Errors stop a part working; warnings are usually mistakes; infos are gaps."
}
Rule names Altium uses (proposed as the shared vocabulary)
| kind | rule | severity |
|---|---|---|
| footprint | no_pads, zero_size_pad |
error |
| footprint | unnumbered_pad, duplicate_pad_number, no_courtyard, origin_off_part |
warning |
| footprint | no_silkscreen, no_3d_body, no_description |
info |
| symbol | no_pins, footprint_not_found, pin_without_pad |
error |
| symbol | unnumbered_pin, duplicate_pin_number, no_footprint, pad_without_pin |
warning |
| symbol | no_part_number |
info |
KiCad's structural result fits as one more rule, for example tool_refuses_file (error), with kicad-cli's message in detail. A bridge that can't evaluate a rule simply never emits it.
pin_without_pad / pad_without_pin are the library-level twin of pin_pad_check (which works on placed parts), so they may be worth engine code later. The inputs are a symbol's pin numbers and a footprint's pad numbers, which every bridge already reads.
Measured in Altium Develop
- Battery.PcbLib, 6 footprints in 1.2 s: 0 errors, 4 warnings, 12 infos. That included
origin_off_parton BAT_FP_X: the battery'sxcopy_footprintcopy sits 1270 mm off its origin, a real bug the battery had never caught (adom/altium-bridge#29). - Battery.SchLib, 4 symbols checked against the PcbLib beside it in 1.7 s: the TST_ parts' pins all have pads; BAT_SYM has
no_footprintandno_part_number.
Asks
A ruling on the entry and the rule vocabulary. kicad-lane: would your structural verdict fit this shape?