← Commit history
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.9.229\ No newline at end of file+1.9.230\ No newline at end of file
CLAUDE.md+2−1
@@ -85,8 +85,9 @@ wrong dir is SILENTLY ignored (Fusion runs fine, port 8774 never comes up - issu live). `install_addin.py` therefore installs to ALL of them (TARGET_CANDIDATES); NEVER assume a single path, and if a future Fusion stops loading the add-in, FIRST suspect the dir moved again (hunt for new dirs under %APPDATA%\Autodesk yourself). NOT from this repo or the cache.-⛔ NEVER ask the user to restart Fusion or enable the add-in - YOU restart (fusion_stop ++⛔ NEVER make the user restart Fusion or enable the add-in BY HAND - YOU do it (fusion_stop + fusion_start); runOnStartup does the rest. The exact, watched-it-happen release sequence (AFTER publishing to the wiki):+  ⚠️ But ASK FIRST when a human is there with documents open (the Adonis incident): "never make them do it" is not "restart it out from under them". A verb returning addin_restart_required hands you userMessage + openDocuments/unsavedDocuments to ask with; then fusion_restart_for_addin {save:true} does it and refuses rather than discarding a never-saved document.  1. **`bridge_install {"manifestUrl": ".../adom-bridge-fusion-manifest.json"}`** - streams the new zip    into the CACHE via `method: in_place_merge`. Updates the cache ONLY; it does NOT touch Fusion's
adom-bridge-fusion-manifest.json+4−4
@@ -1,10 +1,10 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.9.229",-  "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.229/adom-bridge-fusion-v1.9.229.zip",-  "sha256": "dafb503099f9b14c3f9e4dda99afd40acea8ba68008c52e58780d5c7ed0fab58",-  "size": 525216,+  "version": "1.9.230",+  "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.230/adom-bridge-fusion-v1.9.230.zip",+  "sha256": "bf8a05aa093a23c28c711f208bcf495794c39fc6d565280941af035c670a344d",+  "size": 525215,   "verbPrefixes": [     "fusion_"   ],
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.9.229",+  "version": "1.9.230",   "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.",   "homepage": "https://wiki.adom.inc/adom/fusion-bridge",   "author": "Adom Inc.",
dashboard/Cargo.lock+1−1
@@ -4,7 +4,7 @@ version = 4  [[package]] name = "fusion-dashboard"-version = "1.9.229"+version = "1.9.230" dependencies = [  "serde_json", ]
dashboard/Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.229"+version = "1.9.230" edition = "2021"  [dependencies]
install.sh+1−1
@@ -21,7 +21,7 @@ echo "Installed fusion-bridge skills: $(ls "$PKG_DIR/skills" 2>/dev/null | tr '\ # binary (the three-artifact pattern: bridge zip -> ab, THIS pkg -> container skills + # this download, page media -> wiki). Per the wiki's PKG_VS_RELEASE policy, binaries are # platform-tagged RELEASE assets, never tarball content - the installer fetches them.-DASH_VERSION="1.9.229"+DASH_VERSION="1.9.230" DASH_URL="https://wiki.adom.inc/download/adom/fusion-bridge/${DASH_VERSION}/fusion-dashboard" DEST="" if [ -w /usr/local/bin ]; then DEST=/usr/local/bin
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.229",+  "version": "1.9.230",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {
page.json+11−8
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.229",+  "version": "1.9.230",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {@@ -11,6 +11,10 @@     "uninstall": "./uninstall.sh"   },   "tags": [+    "ab",+    "bridge",+    "fusion",+    "desktop-app",     "fusion360",     "autodesk",     "cad",@@ -75,7 +79,10 @@     "build a basic parts library",     "add a 3d model to a component",     "make a fusion 360 library with 3d",-    "set up the fusion bridge"+    "set up the fusion bridge",+    "fusion dashboard",+    "fusion status page",+    "open the fusion launch page"   ],   "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).",   "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.",@@ -104,9 +111,5 @@       "label": "Part volume",       "prompt": "How much material does each printed part in this assembly use?"     }-  ],-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"-  }-}\ No newline at end of file+  ]+}
skills/fusion-driving/SKILL.md+14
@@ -225,3 +225,17 @@ project the point onto the sketch plane. A wrong off-plane coordinate passes str through into the resulting geometry, silently, offset by exactly the plane offset. This caused a real bug: a body landed at the wrong Z with a perfectly clean-looking render. Verify geometry with `fusion_inspect_bodies` (bbox in mm) instead of trusting the viewport.++## Fusion not running is a STEP, never a refusal++Verbs auto-launch Fusion when it is closed, folding the launch into the ETA, so "Fusion 360+is installed but not running" should never reach a user. If a launch genuinely fails you get+`fusion_autostart_failed`, which states the command was never run and points at+`needsSignin` (Autodesk sign-in is a human step, not a bug).++The one state you must ASK about rather than fix silently: `addin_restart_required` means the+add-in was installed while Fusion was already open. Its payload carries `userMessage` plus+`openDocuments`/`unsavedDocuments` so you can ask, then `fusion_restart_for_addin {save:true}`.++For a costed plan before any of it, `fusion_plan_library_import` reports state and timings+without doing work.
skills/fusion-eagle-commands/SKILL.md+1−1
@@ -22,7 +22,7 @@ These commands open modal prompts EAGLE waits on forever. Your call will hang un | Command | Why it blocks | Use instead | |---|---|---| | `ADD` | Prompts for component placement | Edit source .sch/.brd via import commands |-| `SHOW` | Opens an info dialog | `fusion_board_info`, `fusion_schematic_info` |+| `SHOW` | Opens an info dialog | `fusion_board_info` (boards). There is no `fusion_schematic_info`: for a schematic use `fusion_export_source` / `fusion_export_eagle_source` and read the XML, or `fusion_get_app_state` | | `MOVE` | Interactive picker | Edit source files offline | | `CHANGE` (interactive form) | Picker for target object | Use with explicit object: `CHANGE WIDTH 0.3 (1 2)` is OK | | `WRITE` | Cloud: opens "Version Description" dialog even with path arg (tested 2026-04-10). Local: opens Save As. | `fusion_save_to_cloud`, `fusion_export_source`, `fusion_export_eagle_source` |
skills/fusion-libraries/SKILL.md+14
@@ -127,3 +127,17 @@ variant model that lets an automotive-grade part and a baseline one share one sy footprint and one 3D body, are covered in **`fusion-part-metadata`**. Check `fusion_library_parts {libraryPath}` before calling any library complete - `ok: true` from preflight only means the file OPENS.++## Before you import: pre-flight, and the add-in restart trap++**Pre-flight first.** `fusion_plan_library_import {parts}` does no work and changes nothing.+It tells you whether Fusion is installed, running, or needs its add-in loaded, and returns a+costed plan whose bind estimate scales with the part count. Call it before committing a user+to a long import, so they see what is about to happen instead of a silent spinner.++**The trap that catches new users:** if ab installed or updated the add-in while Fusion was+already open, Fusion cannot see it — add-ins load only at launch. Verbs then return+`addin_restart_required`, carrying `userMessage`, `openDocuments` and `unsavedDocuments`.+**Ask the user**, then `fusion_restart_for_addin {save:true}`, which saves first and refuses+with `unsaved_named_document` rather than discarding a never-saved document. Do not+silently restart a Fusion someone is working in.
skills/fusion-multipart-libraries/SKILL.md+16
@@ -237,3 +237,19 @@ variant model that lets an automotive-grade part and a baseline one share one sy footprint and one 3D body, are covered in **`fusion-part-metadata`**. Check `fusion_library_parts {libraryPath}` before calling any library complete - `ok: true` from preflight only means the file OPENS.++## The one-call path, and the state that stops mid-build evidence++Everything here is the manual recipe. For a normal import prefer+`fusion_create_library {parts:[...]}` — it chains bind and prove behind one `runId`, streams+each artifact as it lands, and treats one part as N=1 rather than a special case.++Two states worth knowing while a build runs:+- `build_in_progress` — a capture during a 3D build photographs the build editor, not the+  view it claims. Wait; the marker survives a bridge respawn so the refusal is not silently lost.+- `addin_restart_required` — the add-in was installed while Fusion was open. Ask, then+  `fusion_restart_for_addin {save:true}`.++Before calling a multi-part library done, run `fusion_library_parts {libraryPath}`: with many+parts it is easy to ship one whose part numbers never made it, and `stage: done` does not+check that.
skills/fusion-onboarding/SKILL.md+11−3
@@ -114,9 +114,17 @@ This is what lets the bridge inject commands into Fusion after launch.   Fusion actually scans) AND the legacy `Autodesk Fusion[ 360]\API\AddIns\` dirs. ⚠ Fusion MOVED   this directory across versions and silently ignores the others (an add-in only in the legacy dir   never loads on current Fusion — issue #63, proven live on a fresh install). Never assume one path.-- **⛔ NEVER ask the user to restart Fusion or enable the add-in.** After installing, YOU restart it:-  `fusion_stop` then `fusion_start` — the add-in auto-loads (`runOnStartup:true`, verified live:-  port 8774 up 20s after restart, zero manual enabling). Asking the user to do it defeats the bridge.+- **⛔ NEVER make the user restart Fusion or enable the add-in BY HAND.** After installing, YOU do+  it: `fusion_stop` then `fusion_start` — the add-in auto-loads (`runOnStartup:true`, verified live:+  port 8774 up 20s after restart, zero manual enabling). Handing them the chore defeats the bridge.+- **⚠️ BUT ASK FIRST WHEN A HUMAN IS SITTING THERE WITH DOCUMENTS OPEN** (the Adonis incident,+  2026-08-27, and John's "that was really rude" before it). "Never make them do it" is not "restart+  their Fusion out from under them". The two rules resolve as: **get consent, then do the work+  yourself.** During ONBOARDING, on a machine with nothing open, just restart. When a verb returns+  `addin_restart_required`, its payload carries `userMessage`, `openDocuments` and+  `unsavedDocuments` precisely so you can ask — then call `fusion_restart_for_addin {save:true}`,+  which saves first and refuses with `unsaved_named_document` rather than discarding a never-saved+  document. An AI on an unattended box may call it directly. - **It auto-loads every launch:** `AdomBridge.manifest` has **`"runOnStartup": true`**, so Fusion   runs the add-in (and its localhost:8774 HTTP server) automatically on startup — **no manual   "enable" needed**. (Verified: after a Fusion restart the add-in comes back `addinReady:true`