← Commit history

v1.6.30: install_fusion + start live-detect (fix stale already-installed on fresh VM)

John Lauer ·bba5579603 ·3mo ago ·parent 3fd6729
5 files changed +25−8
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.29\ No newline at end of file+1.6.30\ No newline at end of file
CHANGELOG.md+9
@@ -3,6 +3,15 @@ All notable changes to the Adom Desktop Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/adom-desktop-fusion-bridge ยท GitHub backup: `adom-inc/adom-desktop-fusion-bridge` +## 1.6.30 - 2026-07-05++- **`fusion_install_fusion` and `fusion_start` now live-detect too** (completing the 1.6.29 fix). Both+  still trusted the stale bridge-start `fusion_info.installed` snapshot: on the fresh VM,+  `fusion_install_fusion` REFUSED with "already installed" though disk was `NO_WEBDEPLOY`, blocking the+  reinstall, and `fusion_start` would launch into the void. Both now call `detect_fusion()` for the+  on-disk truth; `fusion_start` also reassigns from it so a launch immediately after a fresh install+  uses a current `exe_path`. Found + fixed live during the fresh-VM battery.+ ## 1.6.29 - 2026-07-05  - **Fixed `fusion_readiness` trusting a stale install cache.** It read the bridge-START
adom-bridge-fusion-manifest.json+5−5
@@ -1,13 +1,13 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.6.29",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.29/adom-bridge-fusion-v1.6.29.zip",-  "sha256": "24d0f185b6e79e84b184a03cbdaf3d1ab9eb803162c47ff605ccded702bd54aa",-  "size": 327829,+  "version": "1.6.30",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.30/adom-bridge-fusion-v1.6.30.zip",+  "sha256": "18af4245248fb8803c767164ba74fce5b8c25c54114e0661f7da44982850578e",+  "size": 328197,   "verbPrefixes": [     "fusion_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-07-05T20:41:01Z"+  "released_at": "2026-07-05T20:44:46Z" }
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.6.29",+  "version": "1.6.30",   "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/adom-desktop-fusion-bridge",   "author": "Adom Inc.",
server.py+9−1
@@ -94,6 +94,10 @@ fusion_info = None  def _handle_launch(fusion_info: dict, args: dict) -> dict:     """Launch Fusion 360 and optionally wait for the AdomBridge add-in."""+    # LIVE detect (not the stale bridge-start fusion_info snapshot) so a launch right+    # after a fresh install is recognized (with a current exe_path) and a launch after a+    # removal fails cleanly. Reassign so the whole handler uses fresh paths.+    fusion_info = detect_fusion()     if not fusion_info.get("installed"):         return {             "success": False,@@ -713,7 +717,11 @@ def _handle_install_fusion(fusion_info: dict, args: dict) -> dict:     UAC; the per-user install needs no elevation and lands in %LOCALAPPDATA%,     which detect covers). Returns PROMPTLY - the stream takes 10-30 min; poll     fusion_readiness until installed:true."""-    if fusion_info.get("installed") or detect_fusion().get("installed"):+    # LIVE detect only - never trust the bridge-start fusion_info snapshot, which can be+    # stale-True after Fusion was removed while the bridge kept running (found live on a+    # fresh VM 2026-07-05: this verb refused with "already installed" though disk was+    # NO_WEBDEPLOY, blocking the reinstall). detect_fusion() is the on-disk truth.+    if detect_fusion().get("installed"):         return {"success": True, "alreadyInstalled": True,                 "_hint": "Fusion 360 is already installed - call fusion_start to launch it."}     if _installer_running():