← Commit history

standard 0.23.6: variants joins the standard (native); coverage reads Fusion 1.13.22

Colby Knox ·ec460fe152 ·11d ago ·parent 569f4da
6 files changed +75−66
README.md+4−3
@@ -61,11 +61,11 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 93 | 93 | 90 | 89 |-| **native** | 46 | 46 | 43 | 38 |+| **native** | 47 | 47 | 43 | 40 | | **checks** | 37 | 37 | 35 | 37 | | **app** | 62 | 62 | 44 | 49 |-| **platform** | 19 | 19 | 0 | 1 |-| standard (all but platform) | 238 | 238 | 212 | 213 |+| **platform** | 18 | 18 | 0 | 1 |+| standard (all but platform) | 239 | 239 | 212 | 215 | <!-- coverage:end -->  The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.23.6: `variants` moves from platform to native (Altium, Fusion and KiCad 10 all have assembly variants), so the standard is 239 verbs; coverage reads Fusion 360 bridge 1.13.22 (variants and silkscreen_prep, partial). Version 0.23.5: coverage reads Fusion 360 bridge 1.13.21 (213 of 238: replicate_layout, symbol_prims, set_visibility, and partial place_on_pcb, place_on_sch, pcb_report). Version 0.23.4: the reference is Altium bridge 0.2.83 (engine 0.20.0, turned bodies, simulate noise and monteCarlo, a 20x faster board model on large boards). Version 0.23.3: coverage reads KiCad bridge 1.0.87 (engine 0.20.0, turned bodies, simulate noise and monteCarlo).
docs/coverage.md+6−6
@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.87, Fusion 360 bridge 1.13.21. 56 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.87, Fusion 360 bridge 1.13.22. 56 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently (`verbs/coverage.json` names what in `note`); `unsupported` answers `not_supported` for the whole job and is not counted; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand.  | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 93 | 93 | 90 | 89 |-| **native** | 46 | 46 | 43 | 38 |+| **native** | 47 | 47 | 43 | 40 | | **checks** | 37 | 37 | 35 | 37 | | **app** | 62 | 62 | 44 | 49 |-| **platform** | 19 | 19 | 0 | 1 |-| standard (all but platform) | 238 | 238 | 212 | 213 |+| **platform** | 18 | 18 | 0 | 1 |+| standard (all but platform) | 239 | 239 | 212 | 215 |  ## core @@ -160,11 +160,12 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `run_erc` | Electrical rules check. Same handler as altium_compile: in Altium, compiling the project IS the ERC. | `altium_run_erc` | `kicad_run_erc` | `fusion_run_erc` | | `sch_update_from_library` *proposed* | Update the placed symbols on a sheet from their libraries (all, or the listed ones) and report which changed, which already matched and which no library has. | `altium_sch_update_from_library` | `kicad_sch_update_from_library` | unsupported | | `set_design_rules` | Write a fab's design rules into the current board: clearance, track width, routing via style, hole size, annular ring, hole-to-hole and board-edge clearance... | `altium_set_design_rules` | `kicad_set_design_rules` | `fusion_set_design_rules` |-| `silkscreen_prep` | Clean the silkscreen off the copper with Altium's own Tools > Silkscreen Preparation: silk clipped clear of every mask opening (pad) by the board's silk... | `altium_silkscreen_prep` | `kicad_silkscreen_prep` |  |+| `silkscreen_prep` | Clean the silkscreen off the copper with Altium's own Tools > Silkscreen Preparation: silk clipped clear of every mask opening (pad) by the board's silk... | `altium_silkscreen_prep` | `kicad_silkscreen_prep` | `fusion_silkscreen_prep` (partial) | | `symbol_mode` | Show one display mode (0 = Normal, 1.. = alternates) of the CURRENT SchLib component in the editor and capture a frame. Drives the editor's own mode toggle,... | `altium_symbol_mode` |  | unsupported | | `teardrops` | Add (or remove) teardrops with Altium's own Tools > Teardrops: on vias and through-hole pads, SMD pads, track width changes and T-junctions, for the whole... | `altium_teardrops` | `kicad_teardrops` (partial) | `fusion_teardrops` (partial) | | `uninstall_library` | Remove libraries from Altium's Installed Libraries: the inverse of install_library / install_library_bundle. Library files are never touched. | `altium_uninstall_library` | `kicad_uninstall_library` |  | | `update_pcb` | Design > Update PCB Document from the schematic (the engineering change order): parts added, removed or renamed, nets and footprints updated on the board.... | `altium_update_pcb` | `kicad_update_pcb` (partial) | `fusion_cross_check` (partial) |+| `variants` | Assembly variants of a project (which parts are fitted on which build): list them, make or change one with not-fitted parts (or put parts back), or remove... | `altium_variants` |  | `fusion_variants` (partial) |  ## checks @@ -301,6 +302,5 @@ Specific to one tool's platform (Altium 365, OutJobs, integrated libraries). Not | `import_kicad` | Import a KiCad file with Altium's own KiCad importer, driven through the AdomBridge .NET extension. | `altium_import_kicad` |  | `fusion_create_library` (partial) | | `outjob_info` | An OutJob's containers (output media), the outputs in each, and their key settings (units, decimals, plotted layer count), read from the .OutJob file:... | `altium_outjob_info` |  | unsupported | | `run_outjob` | Run one output medium of an .OutJob (gerbers, drill, BOM, PDFs...) and list what it wrote under 'Project Outputs for <project>'. | `altium_run_outjob` |  | unsupported |-| `variants` | Assembly variants of a project (which parts are fitted on which build): list them, make or change one with not-fitted parts (or put parts back), or remove... | `altium_variants` |  |  | | `workspace_place` | Put a part from the Altium 365 workspace on a sheet: search, pick a result, place it (Altium's own placement, so the part keeps its workspace link,... | `altium_workspace_place` |  | unsupported | | `workspace_search` | Search the Altium 365 workspace's components (the shared cloud library Altium is signed in to) through Altium's own Components panel: name, description and... | `altium_workspace_search` |  | unsupported |
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.23.5",+  "version": "0.23.6",   "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/tiers.json+1−1
@@ -193,7 +193,7 @@  "uninstall": "app",  "uninstall_library": "native",  "update_pcb": "native",- "variants": "platform",+ "variants": "native",  "via_fence": "checks",  "window_info": "app",  "workspace_place": "platform",
verbs/coverage.json+22−14
@@ -1,5 +1,5 @@ {- "standard": "0.23.5",+ "standard": "0.23.6",  "reference": {   "bridge": "altium",   "version": "0.2.83"@@ -7,7 +7,7 @@  "proposed": 56,  "compared": {   "kicad": "1.0.87",-  "fusion360": "1.13.21"+  "fusion360": "1.13.22"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -2326,7 +2326,11 @@     "verb": "kicad_silkscreen_prep",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_silkscreen_prep",+    "match": "partial",+    "note": "designators moved off copper where they fit (silk_designators), counted before and after; silk outside the board listed, not deleted; a footprint's own silk lines are library graphics in EAGLE and are clipped at mask openings by the fab's CAM, not on the board"+   }   },   {    "name": "symbol_mode",@@ -2395,6 +2399,21 @@     "note": "Fusion forward-annotates the board from the schematic as you edit, so there is no change order to execute: the preview is the cross check (designators on the sheet and not the board, and the reverse); a broken forward/back annotation is reported, not repaired"    }   },+  {+   "name": "variants",+   "tier": "native",+   "source": "altium",+   "altium": {+    "verb": "altium_variants",+    "match": "exact"+   },+   "kicad": null,+   "fusion360": {+    "verb": "fusion_variants",+    "match": "partial",+    "note": "lists a design's assembly variants with their not-fitted parts and alternate values; making, changing or removing one is refused (not_supported): Fusion 2706 takes EAGLE's VARIANT from a text command and changes nothing"+   }+  },   {    "name": "assembly_check",    "tier": "checks",@@ -4273,17 +4292,6 @@     "note": "Fusion has no OutJob: each output is its own verb (fusion_export_gerbers with the JLCPCB CAM job, fusion_export_bom, fusion_export_pdf, fusion_export_odb ...)"    }   },-  {-   "name": "variants",-   "tier": "platform",-   "source": "altium",-   "altium": {-    "verb": "altium_variants",-    "match": "exact"-   },-   "kicad": null,-   "fusion360": null-  },   {    "name": "workspace_place",    "tier": "platform",
verbs/standard.json+41−41
@@ -1,5 +1,5 @@ {- "standard": "0.23.5",+ "standard": "0.23.6",  "reference": {   "bridge": "altium",   "version": "0.2.83"@@ -7,7 +7,7 @@  "proposed": 56,  "compared": {   "kicad": "1.0.87",-  "fusion360": "1.13.21"+  "fusion360": "1.13.22"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -5380,6 +5380,45 @@    "longRunning": false,    "timeoutSeconds": 600   },+  {+   "name": "variants",+   "tier": "native",+   "source": "altium",+   "summary": "Assembly variants of a project (which parts are fitted on which build): list them, make or change one with not-fitted parts (or put parts back), or remove one. Altium's script API cannot create variants, so the bridge writes them into the .PrjPcb, reloads the project and reads back what Altium holds.",+   "input": {+    "fitted": "[designators] to put back (their variation is dropped)",+    "name": "variant name; omit to list",+    "notFitted": "[designators] to mark Not Fitted (alias dnp)",+    "projectPath": "path to the .PrjPcb (required)",+    "remove": "bool - delete the variant"+   },+   "output": {+    "altium": "{variants:[{name, variations:[{designator, kind}]}]} as Altium reads them (kind 1 = not fitted, 2 = alternate)",+    "variants": "[{name, notFitted, alternates}]"+   },+   "hint": "altium_bom {variant} then gives that build's BOM (not-fitted parts dropped). Saves the project's documents, closes and reopens the project to load the change.",+   "pitfalls": [+    "Variants with parameter variations are refused (edit those in Altium's Variant Management).",+    "Parts are named by their sheet's unique id: on a multi-channel (repeated) sheet every channel gets the same variation.",+    "Alternate parts are listed but not created here."+   ],+   "related": [+    "bom",+    "export_manufacturing",+    "run_outjob"+   ],+   "example": {+    "name": "Lite",+    "notFitted": [+     "R5",+     "C9",+     "J2"+    ],+    "projectPath": "C:/proj/board.PrjPcb"+   },+   "longRunning": false,+   "timeoutSeconds": 300+  },   {    "name": "assembly_check",    "tier": "checks",@@ -9338,45 +9377,6 @@    "longRunning": false,    "timeoutSeconds": 600   },-  {-   "name": "variants",-   "tier": "platform",-   "source": "altium",-   "summary": "Assembly variants of a project (which parts are fitted on which build): list them, make or change one with not-fitted parts (or put parts back), or remove one. Altium's script API cannot create variants, so the bridge writes them into the .PrjPcb, reloads the project and reads back what Altium holds.",-   "input": {-    "fitted": "[designators] to put back (their variation is dropped)",-    "name": "variant name; omit to list",-    "notFitted": "[designators] to mark Not Fitted (alias dnp)",-    "projectPath": "path to the .PrjPcb (required)",-    "remove": "bool - delete the variant"-   },-   "output": {-    "altium": "{variants:[{name, variations:[{designator, kind}]}]} as Altium reads them (kind 1 = not fitted, 2 = alternate)",-    "variants": "[{name, notFitted, alternates}]"-   },-   "hint": "altium_bom {variant} then gives that build's BOM (not-fitted parts dropped). Saves the project's documents, closes and reopens the project to load the change.",-   "pitfalls": [-    "Variants with parameter variations are refused (edit those in Altium's Variant Management).",-    "Parts are named by their sheet's unique id: on a multi-channel (repeated) sheet every channel gets the same variation.",-    "Alternate parts are listed but not created here."-   ],-   "related": [-    "bom",-    "export_manufacturing",-    "run_outjob"-   ],-   "example": {-    "name": "Lite",-    "notFitted": [-     "R5",-     "C9",-     "J2"-    ],-    "projectPath": "C:/proj/board.PrjPcb"-   },-   "longRunning": false,-   "timeoutSeconds": 300-  },   {    "name": "workspace_place",    "tier": "platform",