app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
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.
← Commit history
1.9.199: prove's package3d close routes through the guarded close (the last unguarded lose-changes-modal site, caught live on LM2937)
3 files changed
+36−13
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.198+1.9.199
CHANGELOG.md+12@@ -3,6 +3,18 @@ All notable changes to the Adom Bridge Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/fusion-bridge ยท GitHub backup: `adom-inc/fusion-bridge` +## 1.9.199 - 2026-08-24 (the prove 3D-frame close joins the guarded path)++- The lose-changes modal had one more way onto the user's screen: prove's package3d frame+ closed its fresh-from-cloud f3d doc through an INLINE hasActiveJobs wait + close, and that+ query can read False while the Hub sync of the just-minted package still runs (caught live+ on an LM2937 run, after 1.9.198 fixed the hygiene path). The frame's close now routes+ through _close_bridge_doc_verified: jobs ask retried, and the modal answered No (upload+ preserved) + close retried if it rises anyway. The inline close stays only as the fallback+ when the active document's name cannot be read.+- Verified live: fresh mint (bind 29.5s, prove 41.3s, proven 4/4) with dialog sampling at 4s+ cadence, zero modal sightings.+ ## 1.9.198 - 2026-08-24 (chain hygiene: no phantom closes, no lose-changes modal) - **The Untitled sweep recognizes Fusion's resting state.** Fusion always keeps one document
server.py+23−12@@ -10420,20 +10420,31 @@ def _handle_prove_library(fusion_info: dict, args: dict) -> dict: e3["bodiesUnverified"] = True evidence.append(e3) # HAND THE APP BACK (deterministic-close rule): the f3d doc is render scratch- # here; close it verified so stage 4 is not stranded in the wrong workspace.- # Same upload gate as _close_bridge_doc_verified: closing over an in-flight- # Hub upload raises the lose-changes modal (John saw it live, 2026-08-21).+ # here. This used an INLINE hasActiveJobs wait + close, which is exactly the+ # gate that lied on a fresh box (the query can read False while the Hub sync+ # of the just-minted package still runs) - the lose-changes modal reached the+ # user's screen from THIS close on an LM2937 run (2026-08-24). Route through+ # _close_bridge_doc_verified, which retries the jobs ask AND answers the+ # modal (No, upload preserved) if it rises anyway. try:- _proxy_to_addin("run_modeling_script",- {"script": "import adsk.core, time\n"- "app=adsk.core.Application.get()\n"- "for _ in range(24):\n"- " if not app.hasActiveJobs: break\n"- " time.sleep(5)\n"- "app.activeDocument.close(False)\nresult={}"},- timeout=140)+ _di3 = _proxy_to_addin("document_info", {}, timeout=8)+ _n3 = str(((_di3.get("data") or {}).get("activeDocument")) or "")+ if not _n3:+ raise Exception("no active doc name")+ _note_bridge_doc(_n3)+ _close_bridge_doc_verified(_n3, timeout_s=30) except Exception:- pass+ try:+ _proxy_to_addin("run_modeling_script",+ {"script": "import adsk.core, time\n"+ "app=adsk.core.Application.get()\n"+ "for _ in range(24):\n"+ " if not app.hasActiveJobs: break\n"+ " time.sleep(5)\n"+ "app.activeDocument.close(False)\nresult={}"},+ timeout=140)+ except Exception:+ pass else: evidence.append({"step": "package3d", "view": "3d-editor", "ok": False, "error": "Could not open the bound f3d (%s): %s" % (