← Commit history

0.30.14: coverage reads Fusion 360 bridge 1.13.55

Colby Knox ·b85ea9a952 ·6d ago ·parent 27c24e7
5 files changed +20−19
README.md+1
@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.30.14: coverage reads Fusion 360 bridge 1.13.55 (sch_place_part, sch_swap_part and edit_parts exact). Version 0.30.13: coverage reads Fusion 360 bridge 1.13.52 (public; urgent fix for fusion-bridge#136, no verb changes). Version 0.30.12: coverage reads Fusion 360 bridge 1.13.49 (public; urgent fix for fusion-bridge#136, no verb changes). Version 0.30.11: coverage reads Fusion 360 bridge 1.13.47 (public; .lbr files without line breaks are rewritten before USE, fusion-bridge#135).
docs/coverage.md+5−5
@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.88 (the reference), KiCad bridge 1.0.98, Fusion 360 bridge 1.13.52. 67 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.88 (the reference), KiCad bridge 1.0.98, Fusion 360 bridge 1.13.55. 67 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. @@ -38,7 +38,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `create_symbol` | Create one rectangular symbol from a pin list in a SchLib (the library is created and saved if the path does not exist) and return a proof frame. | `altium_create_symbol` | `kicad_create_symbol` | `fusion_create_symbol` | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). | `altium_doc_params` | `kicad_doc_params` | `fusion_doc_params` (partial) | | `edit_footprint` *proposed* | Edit a library footprint in place: change, delete, add or renumber pads; add, replace or delete graphics on a layer; set its description, tags and... | `altium_edit_footprint` | `kicad_fp_edit` | `fusion_edit_footprint` (partial) |-| `edit_parts` *proposed* | Edit placed parts: value, designator, any field (add, change, remove), do-not-populate, exclusion from the BOM or position files, mounting type and the... | `altium_edit_parts` | `kicad_edit_parts` | `fusion_edit_parts` (partial) |+| `edit_parts` *proposed* | Edit placed parts: value, designator, any field (add, change, remove), do-not-populate, exclusion from the BOM or position files, mounting type and the... | `altium_edit_parts` | `kicad_edit_parts` | `fusion_edit_parts` | | `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | `altium_find_symbol` | `kicad_find_symbol` | `fusion_find_symbol` (partial) | | `footprint_primitives` | Geometry dump of one PLACED component: its tracks, arcs, pads (with solder and paste mask expansion in um) and texts in mils with layer ids; other primitive... | `altium_footprint_primitives` | `kicad_footprint_primitives` | `fusion_footprint_primitives` | | `generate_body` *proposed* | Make a part's 3D body from its package family and its datasheet dimensions (chip, SOIC, QFN, QFP, BGA, SOT-23, DFN, MELF, electrolytic can, crystal, pin... | `altium_generate_body` | `kicad_generate_body` | `fusion_generate_body` |@@ -93,12 +93,12 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `sch_move_region` *proposed* | Move everything inside a box by (dx, dy): parts, wire ends inside the box (wires crossing its edge stretch), labels, junctions, no-connect markers, texts,... | `altium_sch_move_region` | `kicad_sch_move_region` | `fusion_sch_move_region` | | `sch_page` *proposed* | Read or set a sheet's page: paper size, orientation and title block (title, date, revision, company, comment lines). | `altium_sch_page` | `kicad_sch_page` | `fusion_sch_page` (partial) | | `sch_pins` *proposed* | Every pin of the named parts on a sheet: its absolute position (rotation and mirror applied), number, name, electrical type, the side it leaves the body,... | `altium_sch_pins` | `kicad_sch_pins` | `fusion_sch_pins` |-| `sch_place_part` | Place a component from a .SchLib onto an EXISTING sheet at a position, with its library parameters (MPN, Manufacturer, distributor numbers) and its... | `altium_sch_place_part` | `kicad_sch_place_part` | `fusion_sch_place_part` (partial) |+| `sch_place_part` | Place a component from a .SchLib onto an EXISTING sheet at a position, with its library parameters (MPN, Manufacturer, distributor numbers) and its... | `altium_sch_place_part` | `kicad_sch_place_part` | `fusion_sch_place_part` | | `sch_reset_fields` *proposed* | Put parts' designator and value text (or the named fields) back where the library symbol places them, through each part's rotation and mirror. One undo step. | `altium_sch_reset_fields` | `kicad_sch_reset_fields` | `fusion_sch_reset_fields` | | `sch_sheet_pins` *proposed* | A sheet symbol's pins: list, add, edit (rename, kind, move along an edge) or delete. import:true adds a pin for every hierarchical port inside the child... | `altium_sch_sheet_pins` | `kicad_sch_sheet_pins` | `fusion_sch_sheet_pins` (partial) | | `sch_sheet_symbol` | Make a design hierarchical: a sheet symbol on the parent sheet for a child sheet, its entries joined to the parent's nets, and matching ports on the child.... | `altium_sch_sheet_symbol` | `kicad_sch_sheet_symbol` (partial) | unsupported | | `sch_split_wire` *proposed* | Split the wire through a point into two wires there, with a junction dot at the cut, so a new branch can end on a wire end. One undo step. | `altium_sch_split_wire` | `kicad_sch_split_wire` | `fusion_sch_split_wire` (partial) |-| `sch_swap_part` | Replace a placed part with another library part (a different value, package or symbol) at the same place, designator and rotation, keeping its connections:... | `altium_sch_swap_part` | `kicad_sch_swap_part` | `fusion_sch_swap_part` (partial) |+| `sch_swap_part` | Replace a placed part with another library part (a different value, package or symbol) at the same place, designator and rotation, keeping its connections:... | `altium_sch_swap_part` | `kicad_sch_swap_part` | `fusion_sch_swap_part` | | `sch_text` *proposed* | Add free text to a sheet (a note, a title, a design comment) with size, angle, justification, bold and italic. Text has no electrical meaning. One undo step. | `altium_sch_text` | `kicad_sch_text` | `fusion_sch_text` | | `sch_trace_point` *proposed* | Everything electrically connected at a point on a sheet: the wires, labels, pins, junctions, sheet pins and no-connect markers there, and for each net they... | `altium_sch_trace_point` | `kicad_sch_trace_point` | `fusion_sch_trace_point` | | `schematic_data` | Components on a schematic sheet (filePath, else the CURRENT sheet) with their pins (number, name, electrical type), position and orientation. designator... | `altium_schematic_data` | `kicad_sch_components` (partial) | `fusion_schematic_data` (partial) |@@ -172,7 +172,7 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `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` | `kicad_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` | unsupported |-| `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) |+| `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_update_pcb` (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` | `kicad_variants` | `fusion_variants` (partial) |  ## checks
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.30.13",+  "version": "0.30.14",   "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.",
verbs/coverage.json+11−11
@@ -1,5 +1,5 @@ {- "standard": "0.30.13",+ "standard": "0.30.14",  "reference": {   "bridge": "altium",   "version": "0.2.88"@@ -7,7 +7,7 @@  "proposed": 67,  "compared": {   "kicad": "1.0.98",-  "fusion360": "1.13.52"+  "fusion360": "1.13.55"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -361,8 +361,8 @@    },    "fusion360": {     "verb": "fusion_edit_parts",-    "match": "partial",-    "note": "value, designator, fields and lock; dnp, excludeFromBom, excludeFromPos and mount refused (Fusion keeps them in assembly variants)"+    "match": "exact",+    "note": "value, designator, fields and lock; dnp, excludeFromBom, excludeFromPos and mount are attributes on the part (DNP, EXCLUDE_FROM_BOM, EXCLUDE_FROM_POS, MOUNT), honoured by fusion_board_bom, fusion_bom and fusion_export_pos; Fusion's own assembly variants and CAM outputs do not read them (its VARIANT command does nothing on 2706)"    }   },   {@@ -1070,7 +1070,7 @@    "fusion360": {     "verb": "fusion_sch_connect",     "match": "partial",-    "note": "power is a net label (Fusion power symbols are library parts; nets join by name), port is an XREF label, and noerc is refused (Fusion has no No-ERC marker)"+    "note": "power is a net label (Fusion power symbols are library parts; nets join by name), port is an XREF label, and noerc is refused (Fusion has no No-ERC or no-connect marker: its text commands were checked on 2706)"    }   },   {@@ -1311,8 +1311,8 @@    },    "fusion360": {     "verb": "fusion_sch_place_part",-    "match": "partial",-    "note": "the library is one the design holds (by name; Fusion 2706 does not add from a local .lbr through USE) and a variant named with parentheses cannot be added from a text command; save is false by default (each Fusion save is a cloud version)"+    "match": "exact",+    "note": "a deviceset from a .lbr on this machine (one file holds symbol and footprint, so pcbLib does not apply); footprint picks the variant by package; partId places that gate; a position past 1950 mm is refused (off_the_sheet); save is false by default (each Fusion save is a cloud version); a variant named with parentheses cannot be added from a text command"    }   },   {@@ -1401,8 +1401,8 @@    },    "fusion360": {     "verb": "fusion_sch_swap_part",-    "match": "partial",-    "note": "REPLACE from a library the design holds; pins that lose their net are listed (lostConnections), not rewired; multi-gate devices refused"+    "match": "exact",+    "note": "REPLACE from a .lbr on this machine; the designator stays; pins are matched by pad number; where a pin ends elsewhere Fusion keeps its net, or a wire joins it (pinsJoined); multi-gate devices refused, as the standard says; without keepComment an EAGLE part keeps its old value (a device has no value of its own)"    }   },   {@@ -2574,9 +2574,9 @@     "note": "compares the schematic with any board (kicad_update_pcb_from_schematic) but applies the changes to a closed board file only; KiCad's API has no Update PCB from Schematic"    },    "fusion360": {-    "verb": "fusion_cross_check",+    "verb": "fusion_update_pcb",     "match": "partial",-    "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"+    "note": "the standard's preview shape: Fusion forward-annotates the board as you edit, so there is no change order to run (changeOrder is empty); execute reports executed only when sheet and board agree; removals are refused, as DELETE does nothing on a linked board"    }   },   {
verbs/standard.json+2−2
@@ -1,5 +1,5 @@ {- "standard": "0.30.13",+ "standard": "0.30.14",  "reference": {   "bridge": "altium",   "version": "0.2.88"@@ -7,7 +7,7 @@  "proposed": 67,  "compared": {   "kicad": "1.0.98",-  "fusion360": "1.13.52"+  "fusion360": "1.13.55"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",