← Commit history

v1.6.9: fusion_start slow-launch fix (#63)

John Lauer ·d4511ca835 ·3mo ago ·parent aeadd90
7 files changed +52−12
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.8\ No newline at end of file+1.6.9\ No newline at end of file
CHANGELOG.md+11
@@ -3,6 +3,17 @@ 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.9 - 2026-06-30++- **`fusion_start` no longer dead-ends on a slow first launch (fixes #63, Arav's blocker 1).** A first+  launch (fresh install: component downloads/updates/cloud sync) can take 2-4 min, far past AD's ~60s+  relay request cap - so `{"timeout":300}` could never win and the call looked like a hard failure.+  Now the launch confirms the Fusion process, then waits for the add-in only within a budget that+  stays UNDER the relay cap; if the add-in isn't up yet it returns `{success:true, stillLaunching:true,+  statusVerb:"fusion_readiness"}` with a `_hint` to POLL `fusion_readiness` until `ready:true` (never+  re-call `fusion_start`). Fast/normal launches still return "launched successfully" as before. The+  USER-skill cold-start table gained a `stillLaunching` row.+ ## 1.6.8 - 2026-06-30  - **Stale add-in is no longer a SILENT failure (fixes #55, Drew's report).** The add-in now REPORTS
SKILL.md+2−1
@@ -22,7 +22,8 @@ Branch on the stable `errorCode`, never the prose: | response (`errorCode`) | what it means | what you do | |---|---|---| | `ready:true` (fusion_readiness) | Fusion up + add-in current | drive |-| `running:false` / `fusion_not_running` | installed, not launched | `fusion_start` (blocks until the add-in is ready), retry |+| `running:false` / `fusion_not_running` | installed, not launched | `fusion_start` (returns when the add-in is ready, or `stillLaunching` on a slow first launch) |+| `stillLaunching:true` (fusion_start) | first launch, add-in not up yet (can take 2-4 min) | do NOT re-call `fusion_start`; POLL `fusion_readiness` every ~10s until `ready:true` | | `installed:false` | no Fusion host app | [fusion-onboarding](skills/fusion-onboarding/SKILL.md); AD DETECTS Fusion (never installs it) | | `addinStale:true` / `addin_stale` | Fusion runs an OLD add-in that never re-synced (silent-failure risk) | `fusion_stop` then `fusion_start` — the bridge re-syncs the add-in from cache on start (Fusion must be CLOSED) | | `blockingDialogs:[…]` | a modal is blocking the add-in | dismiss in the BACKGROUND, then the op auto-resumes |
adom-bridge-fusion-manifest.json+5−5
@@ -1,13 +1,13 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.6.8",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.8/adom-bridge-fusion-v1.6.8.zip",-  "sha256": "9dc5bed4d8a7db0dbdc7fc4863c42d12b95b0747e9081dbb8ebd4cb6661428da",-  "size": 297014,+  "version": "1.6.9",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.9/adom-bridge-fusion-v1.6.9.zip",+  "sha256": "8c1e27debcc7a1f2c27d7bcb0ff5d81395f9fdae6b8206b7ce50d66530f10353",+  "size": 297978,   "verbPrefixes": [     "fusion_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-06-30T17:15:00Z"+  "released_at": "2026-06-30T18:00:00Z" }\ No newline at end of file
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.6.8",+  "version": "1.6.9",   "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.",
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop-fusion-bridge",-  "version": "1.6.9",+  "version": "1.6.10",   "type": "app",   "description": "Drive Autodesk Fusion 360 from the cloud via Adom Desktop: 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 with browse/recent/versions, cloud download/upload and folder creation, and in-app parametric modeling. Never-charge: APS calls are capped to the free tier.",   "dependencies": {},
server.py+31−3
@@ -123,12 +123,40 @@ def _handle_launch(fusion_info: dict, args: dict) -> dict:     except Exception:         pass -    # Launch Fusion and wait for it + add-in-    err = ensure_fusion_running(fusion_info, wait_addin=True)+    # Launch Fusion. AD's relay caps a single request at ~60s, but a FIRST launch+    # (fresh install: component downloads, updates, cloud sync) can take 2-4 min -+    # far past the cap. So we DON'T block on the add-in for the whole launch (that+    # dead-ended #63/Arav, and {"timeout":300} can't beat the relay cap). Instead:+    # launch + confirm the process, then wait for the add-in only within a budget+    # that keeps this request UNDER the relay cap; if it's still coming up, return a+    # clean stillLaunching response telling the caller to POLL fusion_readiness.+    import time as _t+    _start = _t.time()+    err = ensure_fusion_running(fusion_info, wait_addin=False)     if err:         return err -    addin_ok = wait_for_addin(timeout=5)+    _RELAY_BUDGET = 50  # keep total handler time under AD's ~60s relay cap+    _remaining = max(6, int(_RELAY_BUDGET - (_t.time() - _start)))+    addin_ok = wait_for_addin(timeout=_remaining, dismiss_dialogs=True)++    if not addin_ok:+        # Add-in not up within our budget. On a first launch this is EXPECTED+        # (still initializing), not a failure and not a retry-able timeout.+        return {+            "success": True,+            "stillLaunching": True,+            "addinConnected": False,+            "statusVerb": "fusion_readiness",+            "recoveryFilesRelocated": reloc["moved"],+            "resolvedPath": fusion_info.get("exe_path", ""),+            "_hint": (+                "Fusion is LAUNCHING but the add-in isn't up yet - a FIRST launch can take "+                "2-4 min (component downloads / updates / cloud sync). This is NOT a failure and "+                "NOT a timeout to retry: do NOT re-call fusion_start. POLL fusion_readiness every "+                "~10s until ready:true (or fusion_addin_status until it responds), then drive."+            ),+        }      # Auto-dismiss the "Recovered Documents" dialog if it appeared on launch.     # Even though we relocated files above, Fusion may still show recovery