← Commit history

Fusion bridge 1.12.0 reference: 56 of 182 standard verbs (was 39); board model conformance

Colby Knox ·be85e82142 ·15d ago ·parent 2a64f89
5 files changed +317−60
README.md+5−5
@@ -42,12 +42,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 12 | 9 |-| **native** | 34 | 34 | 18 | 10 |-| **checks** | 32 | 32 | 4 | 1 |-| **app** | 56 | 56 | 21 | 19 |+| **core** | 60 | 60 | 12 | 20 |+| **native** | 34 | 34 | 18 | 14 |+| **checks** | 32 | 32 | 4 | 2 |+| **app** | 56 | 56 | 21 | 20 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 55 | 39 |+| standard (all but platform) | 182 | 182 | 55 | 56 | <!-- coverage:end -->  The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are
docs/coverage.md+29−29
@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.58, Fusion 360 bridge 1.11.44.+Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.58, Fusion 360 bridge 1.12.0. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand.  | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 12 | 9 |-| **native** | 34 | 34 | 18 | 10 |-| **checks** | 32 | 32 | 4 | 1 |-| **app** | 56 | 56 | 21 | 19 |+| **core** | 60 | 60 | 12 | 20 |+| **native** | 34 | 34 | 18 | 14 |+| **checks** | 32 | 32 | 4 | 2 |+| **app** | 56 | 56 | 21 | 20 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 55 | 39 |+| standard (all but platform) | 182 | 182 | 55 | 56 |  ## core @@ -25,25 +25,25 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `apply_silkscreen` | Land a silkscreen plan in one undo step: designators and comments moved, sized and turned (or hidden), free overlay texts and lines added (bottom texts... |  |  | | `board_outline` | Draw the board shape as tracks and arcs on a mechanical layer: the outline a fab house reads from the Gerbers. A board built by script has its shape but... |  |  | | `board_shape` | Redefine the CURRENT board's outline as a wMm x hMm rectangle at (x0Mm, y0Mm) by rewriting the board outline's segments. |  |  |-| `board_summary` | One-screen summary of the current board, shaped from one read_board round trip: component counts by side, nets, copper layers actually in use, rule counts. |  | `fusion_board_info` (partial) |+| `board_summary` | One-screen summary of the current board, shaped from one read_board round trip: component counts by side, nets, copper layers actually in use, rule counts. |  | `fusion_board_summary` | | `clone_symbol` | Copy a symbol inside the current SchLib under a new name, all display modes included. |  |  |-| `component_data` | Placement data for one board component, or for all of them: footprint pattern, comment, layer/side, position, rotation, size, pad count and the nets on its... |  |  |-| `component_pins` | Every pad of one board component with its net, position, layer, size and hole. |  |  |-| `copper_layers` | Every copper layer Altium can address on the current board (top, mid 1-30, planes 1-16, bottom) with names and visibility. |  |  |+| `component_data` | Placement data for one board component, or for all of them: footprint pattern, comment, layer/side, position, rotation, size, pad count and the nets on its... |  | `fusion_component_data` |+| `component_pins` | Every pad of one board component with its net, position, layer, size and hole. |  | `fusion_component_pins` |+| `copper_layers` | Every copper layer Altium can address on the current board (top, mid 1-30, planes 1-16, bottom) with names and visibility. |  | `fusion_copper_layers` | | `copy_footprint` | Duplicate a footprint inside the current PcbLib under a new name (every primitive replicated). |  |  | | `create_footprint` | Create one footprint from a pad list in a PcbLib (the library is created and saved if the path does not exist) and return a proof frame. |  |  | | `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. |  |  | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). |  |  | | `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. |  |  | | `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... |  |  |-| `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... |  | `fusion_board_stackup` |-| `layers` | The current board's layer set with ids, names, kind and whether each is displayed. |  |  |-| `layers_in_use` | Which layers of the current board actually carry primitives: copper layers with copper (densest first) and every layer with anything on it. |  |  |-| `list_designators` | Every component designator on the current board. |  |  |+| `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... |  | `fusion_layer_stack` |+| `layers` | The current board's layer set with ids, names, kind and whether each is displayed. |  | `fusion_layers` |+| `layers_in_use` | Which layers of the current board actually carry primitives: copper layers with copper (densest first) and every layer with anything on it. |  | `fusion_layers_in_use` |+| `list_designators` | Every component designator on the current board. |  | `fusion_list_designators` | | `list_library` | Names of every component in a .SchLib or every footprint in a .PcbLib (kind taken from the extension). Opens the library; no screenshot. | `kicad_list_footprints / kicad_list_symbols` (partial) |  |-| `list_nets` | Every net on the current board with its pad count. |  |  |+| `list_nets` | Every net on the current board with its pad count. |  | `fusion_list_nets` | | `move_parts` | Move and rotate placed components; each part is read back to 0.001 mm and the exact rotation. One undo step. | `kicad_move_footprint` | `fusion_move_parts` |-| `net_connections` | Every pad on the board with its net and owner (Designator.Pad), plus a bounding span and the airline length (minimum spanning tree over its pads, airlineMm)... | `kicad_trace_net / kicad_find_connections` (partial) |  |+| `net_connections` | Every pad on the board with its net and owner (Designator.Pad), plus a bounding span and the airline length (minimum spanning tree over its pads, airlineMm)... | `kicad_trace_net / kicad_find_connections` (partial) | `fusion_net_connections` | | `normalize_bodies` | Move every 3D body of a PcbLib's footprints (or one footprint) onto its pad cluster. A body added through the canvas lands 50000 mil from the pads in the... |  |  | | `part_parameters` | The parameter names a project's parts carry (with how many parts carry each), or with name, that parameter's value on every part. |  |  | | `place_on_pcb` | Place ONE footprint from a PcbLib on a new board and return a proof frame. The single-part predecessor of altium_test_board. | `kicad_place_footprint` |  |@@ -51,7 +51,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `place_vias` | Place vias (through, top to bottom). One undo step, read back. | `kicad_add_via` | `fusion_place_vias` | | `plate_vias` | Make every drilled pad in a PcbLib a plated MULTI-LAYER pad (all footprints, or footprintName). adom-lbr writes heatsink vias as pads with a hole; Altium... |  |  | | `read_board` | ONE round trip: components, nets, layers, copper, rules, occupancy, outline. |  | `fusion_board_info / fusion_get_design_info` (partial) |-| `read_rules` | Every design rule on the current board, flat, disabled ones included: name, kind ordinal, enabled, priority, both scope expressions, comment, and Altium's... | `kicad_list_design_rules` |  |+| `read_rules` | Every design rule on the current board, flat, disabled ones included: name, kind ordinal, enabled, priority, both scope expressions, comment, and Altium's... | `kicad_list_design_rules` | `fusion_read_rules` | | `read_schematic` | Components on the CURRENT schematic sheet (designator, library reference, comment, position, parameters) in one agent round trip. |  | `fusion_schematic` (partial) | | `read_symbol` | Read a SchLib component back: description, display-mode count, the pins of mode 0 (designator, name, electrical type), every parameter with its hidden flag,... |  |  | | `remove_footprint` | Delete one footprint from the current PcbLib. |  |  |@@ -62,7 +62,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `ripup_nets` | Delete every free track, arc and via on each named net. One undo step. |  | `fusion_ripup_nets` | | `route_net` | Route one net as tracks, segment by segment; a waypoint on another layer drops a via there. One undo step, read back. | `kicad_route_net` | `fusion_route_net` | | `routing_state` | The WHOLE current board as data, in mm: tracks, arcs, vias, pads (with owner and net), components (ref, x, y, rotation, side), polygon pours, the outline,... | `kicad_routing_state` | `fusion_routing_state` |-| `rules_by_kind` | The current board's ENABLED design rules grouped by rule kind (Clearance, Width, RoutingVias, ...), each group sorted by priority. Shaped from one... |  |  |+| `rules_by_kind` | The current board's ENABLED design rules grouped by rule kind (Clearance, Width, RoutingVias, ...), each group sorted by priority. Shaped from one... |  | `fusion_rules_by_kind` | | `sch_connect` | Connect pins of placed parts: a wire stub from each pin's outer end plus a net label (kind label), a power port (kind power: GND-like nets get a ground... | `kicad_sch_wire / kicad_sch_label` (partial) |  | | `sch_edit` | Change placed parts on a sheet: move (to x,y mil), moveBy (dx,dy), rotate (degrees), rename (designator), re-comment (comment), delete. One undo step. | `kicad_sch_set_property / kicad_sch_move / kicad_sch_delete` (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... | `kicad_sch_place_symbol` |  |@@ -75,7 +75,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `set_track_width` | Set the width of the EXISTING tracks and arcs on nets or a net class (rules only steer new routing). Widen power nets after routing, or thin a net that... |  |  | | `set_visibility` | Show or hide one named parameter on a SchLib component. |  |  | | `sheet_params` | Write parameters onto PLACED parts on the schematic sheets (the BOM write-back): MPN, Manufacturer, Mouser/DigiKey/LCSC numbers, anything. A missing... |  |  |-| `silk_state` | The silkscreen as it stands: every part's body box, its designator and comment (text, location, size, rotation, shown, Altium's measured box), and the free... |  |  |+| `silk_state` | The silkscreen as it stands: every part's body box, its designator and comment (text, location, size, rotation, shown, Altium's measured box), and the free... |  | `fusion_silk_state` | | `swap_footprint` | Replace the FIRST component on the current board with a footprint from a PcbLib at the same position, re-assigning nets by pad designator. Tracks are... |  |  | | `symbol_prims` | Read a SchLib component's drawing: primitive counts by kind, body rectangle, polyline bounding box, display mode and the footprint models. Read-only, use it... |  |  | | `xcopy_footprint` | Copy a footprint ACROSS libraries: from fromLib into toLib (opened and made current), optionally under a new name. |  |  |@@ -96,23 +96,23 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `component_classes` | List, make or remove component classes on the board, each optionally with a room: a placement area that keeps its parts together (fitted around the parts or... |  |  | | `diff_pairs` | Differential pairs on the current board: list them, define one from two nets (replacing a pair of that name), or remove one. Altium's differential-pair... |  |  | | `export_bom` | Bill of materials export: altium_run_outjob with the assembly OutJob and the 'Folder Structure' medium as defaults. | `kicad_export_bom_csv` (partial) | `fusion_export_bom` |-| `export_gerber` | Gerber/drill export: altium_run_outjob with the fabrication OutJob and the 'Folder Structure' medium as defaults. | `kicad_export_gerber` | `fusion_export_gerbers` |+| `export_gerber` | Gerber/drill export: altium_run_outjob with the fabrication OutJob and the 'Folder Structure' medium as defaults. | `kicad_export_gerber` | `fusion_export_gerber` | | `export_manufacturing` | A project's manufacturing set in one call: Gerbers, NC drill, pick and place (CSV, mm) and the BOM, from an OutJob the bridge writes beside the project... | `kicad_export_gerber / kicad_export_pos` (partial) | `fusion_export_gerbers / fusion_export_cpl / fusion_export_bom` (partial) | | `export_pdf` | Every sheet of a project as one PDF, plus on request the board's composite print, Altium's assembly drawings (top and bottom, designators on the parts) and... | `kicad_export_pdf` |  | | `export_step` | Headless STEP export of a board. Default lane 'outjob': Altium's own ExportSTEP output run from a throwaway project in %TEMP% that points at the board - no... | `kicad_export_step` | `fusion_export_step` | | `install_library` | Register a library file in Altium's Installed Libraries (IntegratedLibraryManager.InstallLibrary) so its parts appear in the Components panel. | `kicad_install_library` |  | | `install_library_bundle` | One-click install of a wiki library bundle (zip of .SchLib/.PcbLib): unpack, register, open the library, prove it with a frame. | `kicad_install_library_bundle` | `fusion_install_library_bundle` | | `list_installed_libraries` | Every library in Altium's Installed Libraries list (read-only). |  |  |-| `net_classes` | Net classes on the current board: list them with their nets, or make one (replacing a class of that name) with an optional width and clearance rule scoped... |  |  |-| `netlist` | The compiled netlist of a project: every net with its pins (Designator.Pin) across every sheet, the hierarchy resolved; or one net; or compare with the nets... | `kicad_extract_netlist` |  |+| `net_classes` | Net classes on the current board: list them with their nets, or make one (replacing a class of that name) with an optional width and clearance rule scoped... |  | `fusion_net_classes` |+| `netlist` | The compiled netlist of a project: every net with its pins (Designator.Pin) across every sheet, the hierarchy resolved; or one net; or compare with the nets... | `kicad_extract_netlist` | `fusion_netlist` | | `panelize` | Step and repeat a board into a manufacturing panel: a new .PcbDoc holding Altium's own embedded board array of the board (rows x cols), with rails, the... |  |  | | `pcb_report` | Numbers instead of pixels: for a PcbLib, every footprint's pads, pad bounding box, primitive census and 3D bodies; for a board, outline, components with... | `kicad_errors` (partial) |  | | `pour_state` | Every polygon pour with the copper it actually poured: filled area per pour and per layer, and the pours that poured nothing. | `kicad_zone_state` | `fusion_pour_state` | | `remove_pours` | Delete polygon pours by net (and layer), or all of them, and the pour keepouts (cutouts) apply_pours made. Tracks and vias are untouched. | `kicad_remove_zone` | `fusion_remove_pours` | | `replicate_layout` | Copy one channel's placement to matching channels: each target keeps its anchor part where it is and every other part takes the source's offset and rotation... |  |  |-| `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. |  |  |+| `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. |  | `fusion_repour` | | `routing_drc` | Design-rule violations on the current board WITH locations, plus the unrouted (ratsnest) count, as one clean/not-clean answer. | `kicad_routing_validate` (partial) | `fusion_routing_drc` |-| `run_drc` | Run the design rule check on a board and read the violation markers back. PCB:DesignRuleCheck opens a MODAL; the bridge clicks 'Run Design Rule Check'... | `kicad_run_drc` |  |+| `run_drc` | Run the design rule check on a board and read the violation markers back. PCB:DesignRuleCheck opens a MODAL; the bridge clicks 'Run Design Rule Check'... | `kicad_run_drc` | `fusion_run_drc` | | `run_erc` | Electrical rules check. Same handler as altium_compile: in Altium, compiling the project IS the ERC. | `kicad_run_erc` |  | | `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... | `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... |  |  |@@ -150,7 +150,7 @@ Engineering computed from the board model, not by the tool: one shared engine, s | `net_lengths` | Routed length of every net (or the ones named) on the live board, by layer with its vias; the skew inside each differential pair; and the spread of... |  |  | | `pin_pad_check` | Do the footprints fit their symbols? Part by part, the symbol's pin numbers (from the sheet files) against the footprint's pad names (from the board): pins... |  |  | | `placement_check` | Review the placement before routing: parts whose courtyards (pads and body, grown by a margin) overlap on the same side, parts off the board or over its... | `kicad_placement_validate` (partial) |  |-| `read_sheet_file` | Read a schematic sheet straight from its .SchDoc file, without Altium (it need not be installed or running): every part with its designator, library... |  |  |+| `read_sheet_file` | Read a schematic sheet straight from its .SchDoc file, without Altium (it need not be installed or running): every part with its designator, library... |  | `fusion_read_sheet_file` | | `return_path` | Where signal tracks lose their reference: for every signal net, the length of track on each layer that runs over no pour or plane copper on either... |  |  | | `review_board` | Design-review checks (14) over one board read; schematic checks with includeSchematic. | `kicad_lint_board` (partial) |  | | `route_pair` | Route a differential pair as a pair: one centreline from the source pads' midpoint through waypoints to the destination pads' midpoint, each net offset to... |  |  |@@ -180,16 +180,16 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `describe` | This list - the bridge's verbs and schemas for ab's Verbs tab. | `kicad_describe` | `fusion_describe` | | `diagnostics` | Bridge-side facts for a bug report: environment variables, every Altium install found, Altium's windows, the agent status block and the cache directory. | `kicad_diagnostics` |  | | `dialog_log` | What the standing dialog reaper (and the bridge's own recoveries) pressed, newest last: nuisance boxes, script-error boxes, discarded save prompts, silent... |  |  |-| `dismiss_dialogs` | Press one named button (default OK) on the detected Altium dialogs through UIA - no cursor, no focus steal. titles narrows it to dialogs whose title... | `kicad_dismiss_dialogs` | `fusion_dismiss_blocking_dialogs` |+| `dismiss_dialogs` | Press one named button (default OK) on the detected Altium dialogs through UIA - no cursor, no focus steal. titles narrows it to dialogs whose title... | `kicad_dismiss_dialogs` | `fusion_dismiss_dialogs` | | `ensure_licensed` | One call to get a usable Altium: launch if needed, then claim a seat (Use License via UIA). Optional escalations: sign out to force a seat release, or start... |  |  | | `eval` | Run a DelphiScript snippet inside Altium (optional Var block, then Begin ... End;) on the CURRENT document, or on filePath opened first. |  |  | | `extension_ping` | Does the AdomBridge .NET extension answer? Sends AdomBridge:Ping through the -R lane and waits up to 30 s for its result file. |  |  | | `foreground` | Bring Altium in front of the user - the sanctioned exception to the never-foreground rule. |  |  |-| `install` | Install Altium Designer on this machine, STAGED, with the rules in the verb (from 0.2.29). stage: preflight / get_installer / launch / wait / license, or... |  | `fusion_install_fusion` |+| `install` | Install Altium Designer on this machine, STAGED, with the rules in the verb (from 0.2.29). stage: preflight / get_installer / launch / wait / license, or... |  | `fusion_install` | | `install_extension` | Install, update or remove the AdomBridge .NET extension (the PowerShell installer shipped beside the bridge). Altium must be CLOSED. |  |  | | `install_receipt` | The last bundle install's full receipt (proof frame included), for a client whose install call outlived ab's budget. |  |  | | `instances` | Every running Altium (Designer + Designer Develop can run together). |  |  |-| `launch` | Start Altium (the newest numbered install, or the one install names) and wait for its main window, then hand the user's own window back. Answers... | `kicad_launch` | `fusion_start` |+| `launch` | Start Altium (the newest numbered install, or the one install names) and wait for its main window, then hand the user's own window back. Answers... | `kicad_launch` | `fusion_launch` | | `license` | Drive the License Management page (UIA first - no cursor, no foreground). |  |  | | `license_status` | Plain-language answer to 'what Altium licence am I on?': the state from the window title plus a capture of the License Management page. |  |  | | `list_commands` | Search Altium's process-launcher catalog (about 1,100 Server:Command entries parsed from the install's System/*.rcs files) by text and/or server. |  |  |@@ -221,7 +221,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `status` | Is Altium running, licensed, and is the resident agent alive? | `kicad_status` |  | | `uninstall` | Remove the bridge's own cache directory (agent workspaces, rendered agent scripts, the Altium 365 token file). Altium Designer and the user's designs are... | `kicad_uninstall` | `fusion_uninstall` | | `window_info` | Altium's top-level windows plus any open dialogs, without screenshots. The cheap way to ask 'is a modal blocking the engine?'. | `kicad_window_info` |  |-| `zoom_to` | Frame the PCB view on a rectangle, a part (or several) or a whole net, with a margin. |  |  |+| `zoom_to` | Frame the PCB view on a rectangle, a part (or several) or a whole net, with a margin. |  | `fusion_zoom_to` |  ## platform 
reference/fusion360-1.12.0.jsonadded+206
@@ -0,0 +1,206 @@+{+ "bridge": "fusion360",+ "version": "1.12.0",+ "verbs": [+  "fusion_account",+  "fusion_action_ledger",+  "fusion_activate_document",+  "fusion_addin_status",+  "fusion_alerts",+  "fusion_apply_fusion_update",+  "fusion_apply_pours",+  "fusion_aps_browse",+  "fusion_aps_create_folder",+  "fusion_aps_download",+  "fusion_aps_file_info",+  "fusion_aps_forget_browser",+  "fusion_aps_get",+  "fusion_aps_get_browser",+  "fusion_aps_open",+  "fusion_aps_recent",+  "fusion_aps_search",+  "fusion_aps_set_browser",+  "fusion_aps_set_client_id",+  "fusion_aps_signin",+  "fusion_aps_status",+  "fusion_aps_upload",+  "fusion_aps_versions",+  "fusion_assembly_bom",+  "fusion_attach_3d_package",+  "fusion_bind_library_3d",+  "fusion_board_bom",+  "fusion_board_info",+  "fusion_board_seed",+  "fusion_board_source",+  "fusion_board_stackup",+  "fusion_board_summary",+  "fusion_bodies",+  "fusion_build_library_3d",+  "fusion_cancel_run",+  "fusion_capture_library_views",+  "fusion_change_pours",+  "fusion_check_recovery",+  "fusion_claim_seat",+  "fusion_cleanup_cloud_files",+  "fusion_close_all_documents",+  "fusion_close_document",+  "fusion_close_window",+  "fusion_component_data",+  "fusion_component_pins",+  "fusion_copper_layers",+  "fusion_create_cloud_folder",+  "fusion_create_library",+  "fusion_delete_cloud_file",+  "fusion_demo",+  "fusion_demo_progress",+  "fusion_describe",+  "fusion_detect_layers",+  "fusion_dismiss_blocking_dialogs",+  "fusion_dismiss_dialogs",+  "fusion_document_info",+  "fusion_eagle_import_status",+  "fusion_electron_pan",+  "fusion_electron_run",+  "fusion_electron_select",+  "fusion_electron_zoom",+  "fusion_electronics_query",+  "fusion_execute_text_command",+  "fusion_export_3mf",+  "fusion_export_board_image",+  "fusion_export_bom",+  "fusion_export_cloud_file",+  "fusion_export_cpl",+  "fusion_export_dwg",+  "fusion_export_dxf",+  "fusion_export_eagle_source",+  "fusion_export_f3d",+  "fusion_export_fbx",+  "fusion_export_gerber",+  "fusion_export_gerbers",+  "fusion_export_iges",+  "fusion_export_lbr",+  "fusion_export_obj",+  "fusion_export_optimized_glb",+  "fusion_export_sat",+  "fusion_export_skp",+  "fusion_export_source",+  "fusion_export_step",+  "fusion_export_stl",+  "fusion_export_usdz",+  "fusion_fetch_optimized_glb",+  "fusion_generate_package",+  "fusion_get_app_state",+  "fusion_get_design_info",+  "fusion_get_parameters",+  "fusion_get_preferences",+  "fusion_import_electronics",+  "fusion_import_step",+  "fusion_inspect_bodies",+  "fusion_install",+  "fusion_install_fusion",+  "fusion_install_library_bundle",+  "fusion_interactive",+  "fusion_kill",+  "fusion_launch",+  "fusion_layer_stack",+  "fusion_layers",+  "fusion_layers_in_use",+  "fusion_library_manager",+  "fusion_library_parts",+  "fusion_list_cloud_files",+  "fusion_list_cloud_projects",+  "fusion_list_designators",+  "fusion_list_nets",+  "fusion_list_text_commands",+  "fusion_live_feed",+  "fusion_make_3d_package",+  "fusion_make_showcase_project",+  "fusion_make_test_project",+  "fusion_managed_library_create",+  "fusion_managed_library_link",+  "fusion_managed_library_pull",+  "fusion_managed_library_push",+  "fusion_managed_library_unlink",+  "fusion_mcp_call",+  "fusion_mcp_enable",+  "fusion_mcp_resources",+  "fusion_mcp_status",+  "fusion_mcp_tools",+  "fusion_move_parts",+  "fusion_narrate",+  "fusion_net_classes",+  "fusion_net_connections",+  "fusion_netlist",+  "fusion_new_electronics_from_eagle",+  "fusion_notify_owner",+  "fusion_open_board",+  "fusion_open_by_urn",+  "fusion_open_by_urn_note",+  "fusion_open_cloud_file",+  "fusion_open_design",+  "fusion_open_electronics",+  "fusion_open_lbr",+  "fusion_open_schematic",+  "fusion_physical_properties",+  "fusion_place_vias",+  "fusion_plan_library_import",+  "fusion_plan_route",+  "fusion_pour_state",+  "fusion_preflight_lbr",+  "fusion_prefs_close",+  "fusion_prefs_open",+  "fusion_prewarm",+  "fusion_prove_result",+  "fusion_read_rules",+  "fusion_read_sheet_file",+  "fusion_readiness",+  "fusion_release_seat",+  "fusion_remove_pours",+  "fusion_repour",+  "fusion_reset_workspace",+  "fusion_resolve_seat_dialog",+  "fusion_restart_for_addin",+  "fusion_ripup_nets",+  "fusion_route_net",+  "fusion_routing_drc",+  "fusion_routing_state",+  "fusion_rules_by_kind",+  "fusion_run_drc",+  "fusion_run_modeling_script",+  "fusion_save_to_cloud",+  "fusion_schematic",+  "fusion_schematic_plan",+  "fusion_schematic_run",+  "fusion_screenshot_fusion",+  "fusion_search_cloud_files",+  "fusion_set_auto_update",+  "fusion_set_design_rules",+  "fusion_set_driving_badge",+  "fusion_set_parameter",+  "fusion_set_preference",+  "fusion_set_seat_takeover",+  "fusion_set_window_sizing",+  "fusion_show_2d_board",+  "fusion_show_3d_board",+  "fusion_show_3d_package",+  "fusion_show_attributes",+  "fusion_show_footprint",+  "fusion_show_library",+  "fusion_show_project",+  "fusion_show_schematic",+  "fusion_show_symbol",+  "fusion_signin",+  "fusion_signin_2fa",+  "fusion_silk_state",+  "fusion_start",+  "fusion_state",+  "fusion_stop",+  "fusion_take_screenshot",+  "fusion_uninstall",+  "fusion_verb_times",+  "fusion_view",+  "fusion_walk_cloud_tree",+  "fusion_web_signin",+  "fusion_zoom_to"+ ]+}\ No newline at end of file
verbs/coverage.json+76−25
@@ -5,7 +5,7 @@  },  "compared": {   "kicad": "1.0.58",-  "fusion360": "1.11.44"+  "fusion360": "1.12.0"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -63,8 +63,8 @@    "altium": "altium_board_summary",    "kicad": null,    "fusion360": {-    "verb": "fusion_board_info",-    "match": "partial"+    "verb": "fusion_board_summary",+    "match": "exact"    }   },   {@@ -79,21 +79,30 @@    "tier": "core",    "altium": "altium_component_data",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_component_data",+    "match": "exact"+   }   },   {    "name": "component_pins",    "tier": "core",    "altium": "altium_component_pins",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_component_pins",+    "match": "exact"+   }   },   {    "name": "copper_layers",    "tier": "core",    "altium": "altium_copper_layers",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_copper_layers",+    "match": "exact"+   }   },   {    "name": "copy_footprint",@@ -143,7 +152,7 @@    "altium": "altium_layer_stack",    "kicad": null,    "fusion360": {-    "verb": "fusion_board_stackup",+    "verb": "fusion_layer_stack",     "match": "exact"    }   },@@ -152,21 +161,30 @@    "tier": "core",    "altium": "altium_layers",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_layers",+    "match": "exact"+   }   },   {    "name": "layers_in_use",    "tier": "core",    "altium": "altium_layers_in_use",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_layers_in_use",+    "match": "exact"+   }   },   {    "name": "list_designators",    "tier": "core",    "altium": "altium_list_designators",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_list_designators",+    "match": "exact"+   }   },   {    "name": "list_library",@@ -183,7 +201,10 @@    "tier": "core",    "altium": "altium_list_nets",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_list_nets",+    "match": "exact"+   }   },   {    "name": "move_parts",@@ -206,7 +227,10 @@     "verb": "kicad_trace_net / kicad_find_connections",     "match": "partial"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_net_connections",+    "match": "exact"+   }   },   {    "name": "normalize_bodies",@@ -277,7 +301,10 @@     "verb": "kicad_list_design_rules",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_read_rules",+    "match": "exact"+   }   },   {    "name": "read_schematic",@@ -375,7 +402,10 @@    "tier": "core",    "altium": "altium_rules_by_kind",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_rules_by_kind",+    "match": "exact"+   }   },   {    "name": "sch_connect",@@ -475,7 +505,10 @@    "tier": "core",    "altium": "altium_silk_state",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_silk_state",+    "match": "exact"+   }   },   {    "name": "swap_footprint",@@ -592,7 +625,7 @@     "match": "exact"    },    "fusion360": {-    "verb": "fusion_export_gerbers",+    "verb": "fusion_export_gerber",     "match": "exact"    }   },@@ -667,7 +700,10 @@    "tier": "native",    "altium": "altium_net_classes",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_net_classes",+    "match": "exact"+   }   },   {    "name": "netlist",@@ -677,7 +713,10 @@     "verb": "kicad_extract_netlist",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_netlist",+    "match": "exact"+   }   },   {    "name": "panelize",@@ -734,7 +773,10 @@    "tier": "native",    "altium": "altium_repour",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_repour",+    "match": "exact"+   }   },   {    "name": "routing_drc",@@ -757,7 +799,10 @@     "verb": "kicad_run_drc",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_run_drc",+    "match": "exact"+   }   },   {    "name": "run_erc",@@ -995,7 +1040,10 @@    "tier": "checks",    "altium": "altium_read_sheet_file",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_read_sheet_file",+    "match": "exact"+   }   },   {    "name": "return_path",@@ -1193,7 +1241,7 @@     "match": "exact"    },    "fusion360": {-    "verb": "fusion_dismiss_blocking_dialogs",+    "verb": "fusion_dismiss_dialogs",     "match": "exact"    }   },@@ -1231,7 +1279,7 @@    "altium": "altium_install",    "kicad": null,    "fusion360": {-    "verb": "fusion_install_fusion",+    "verb": "fusion_install",     "match": "exact"    }   },@@ -1265,7 +1313,7 @@     "match": "exact"    },    "fusion360": {-    "verb": "fusion_start",+    "verb": "fusion_launch",     "match": "exact"    }   },@@ -1569,7 +1617,10 @@    "tier": "app",    "altium": "altium_zoom_to",    "kicad": null,-   "fusion360": null+   "fusion360": {+    "verb": "fusion_zoom_to",+    "match": "exact"+   }   },   {    "name": "a365_configure",
verbs/standard.json+1−1
@@ -5,7 +5,7 @@  },  "compared": {   "kicad": "1.0.58",-  "fusion360": "1.11.44"+  "fusion360": "1.12.0"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",