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.
Readiness probe runs Electron.run DISPLAY and cancels the user's active Fusion command (from hydrogen#152)
Reported on Hydrogen: adom/hydrogen#152 (Glenn Jones, Hydrogen 1.0.666, Windows 11 Home 24H2). While Glenn works in Fusion, something keeps canceling what he is doing: a component move in progress snaps back to where it was, and a reply he is reading in Fusion's AI assistant is dismissed and he lands back in the UI. It started when he began using the bridge. He has not yet confirmed by stopping the bridge.
Hydrogen is ruled out. His Hydrogen log shows 9 focus changes in 12 hours and no Hydrogen timer that touches Fusion or the bridge.
Strongest lead, in this bridge: get_app_state (addin/AdomBridge/commands/app_state.py, still present in 1.13.37) runs real commands on Fusion's main thread:
ws = app.executeTextCommand("DebugCommands.ActiveWorkspace")
...
app.executeTextCommand("Electron.run DISPLAY") # used as an "is Electronics active" test
Electron.run DISPLAY starts the EAGLE DISPLAY command. Starting any command in the Electronics editor terminates the one in progress, which matches "cancels the move and puts it back". get_app_state is also the bridge's readiness round-trip (_addin_round_trip_ready, _check_main_thread_blocked, the launch-progress watch, and many verb pre-checks), so anything that probes readiness on a cadence would cancel the user's command each time.
What I did not find: the caller that fires it on a timer. My local copy is 1.9.217 and I could not pull the current server.py, so please trace it in 1.13.x (dashboard status refresh, ab's statusVerb use, a watchdog or keepalive, or an AI thread polling fusion_get_app_state).
Suggested fix:
- Make the readiness probe side-effect free: read
app.activeProduct.productType/app.activeDocumentinstead of running text commands, and decide "is Electronics" from the product type, never by running DISPLAY. - Never run a command while the user has one active (
app.userInterface.activeCommandis not the select command): defer or skip the probe. - Add a test that starts a MOVE in a board, runs every polled verb, and asserts the MOVE is still active.
Filed from the Hydrogen thread. I will point Glenn here from #152.