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.
Re-minting an already-uploaded part returns HTTP 409, so a re-run can never rebuild its 3D
Re-binding an already-minted part fails with HTTP 409, so a repeatable run can never rebuild its 3D
What happens
fusion_bind_library_3d mints the STEP as a cloud f3d and injects the wip_urn. Run it a second time for the same part - after the local .lbr has been replaced with a fresh copy - and Autodesk rejects the upload:
mint failed: f3d upload did not return a lineage urn:
{'httpStatus': 409, 'body': {'jsonapi': {'version': '1.0'},
'errors': [{'id': 'de4ad58d-3a4b-427f-8e30-741dd5...'}]}}
Measured on two parts tonight (0402B102J500CT, IN-S42ATR), both of which bound successfully in an earlier run. The .lbr afterwards has package3d: 0 and no wip_urn, so everything downstream sees an unbound library.
Why this is the normal case, not an edge case
Any repeatable test re-stages its inputs. My matrix fetches each part's .lbr and .step fresh from the wiki for every run, which is the correct thing to do - it tests what a real user gets from the part page. But a freshly downloaded .lbr has no wip_urn, while Autodesk's cloud still holds the lineage from the previous run. The bridge then tries to upload a file that already exists, and gets a 409.
So the second and every subsequent run of the same part cannot produce a 3D, on a machine where the first run worked. That is a bad property for a demo, a test suite, or a user who re-imports a part they imported last week.
What I think the fix looks like
The cloud already has exactly the object we want. Rather than uploading again:
- Look up the existing lineage first and reuse its urn - inject the known
wip_urninto the fresh.lbrand reportalreadyMinted: true. This is the cheap, common path. - Or supersede: upload as a new VERSION of the existing lineage rather than a new file, which is what
?version=1in the urn implies is possible. - At minimum, report it usefully:
errorCode: "already_minted"with the existing urn if you can discover it, so the caller can inject it themselves rather than parsing a 409 body.
The related ask in #42 covers the reporting half (alreadyBound: true with the existing wip_urn); this issue is the case where the local file no longer knows about a binding that still exists in the cloud.
Context
WS2812B-2020 in the same run bound cleanly and rendered the real 2020 LED body, so the mint path itself is in good shape - this is specifically about the second time.