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.
Fusion bridge triage (for John): expectDocument shipped as docs-only + 3 more from Oliver's feedback — fixes in draft PR #38
For John. Triage of Oliver's bridge-feedback thread (2026-07-23 CAD session, bridge 1.7.9 + add-in 1.0.4, plus the follow-up BOM session) against current main (1.9.1). I verified each item in the code and put the fixes up as draft PR #38 — additive/low-risk, but untested against a live Fusion, so please run once before merge.
The one that needs your eyes: expectDocument was shipped as docs only
skills/fusion-driving/SKILL.md documents an expectDocument guard (issue #289 — a near-miss where a rebuild-clear would have deleted bodies out of an unrelated design after a tab switch). But in 1.9.1 no code reads the argument — not the dispatcher, not the add-in. Passing it is a silent no-op, so every caller following the skill has a false data-loss guarantee. This is worse than "not done" because the docs assert safety that isn't there.
PR #38 implements it for real in dispatch_command (server.py), honoured on both mutating and read verbs. The read-verb half is Oliver's item 5: the BOM session silently returned a different assembly (68/268 vs 94/424) after a passive tab switch, with nothing signalling it.
Status of the four requested changes (verified in code)
| # | Item | Was it in 1.9.1? | PR #38 |
|---|---|---|---|
| 1 | Document guard on mutating verbs | ❌ docs only, no impl | ✅ real guard, dispatcher-level |
| 5 | Same guard on read verbs | ❌ | ✅ same code path covers reads |
| 2 | Geometry read-back (bbox/faces) | ⚠️ only physical_properties (vol/mass, cm) |
✅ bbox_mm + faceCount + cylindricalFaceCount on get_design_info (component-local; worldSpace deferred) |
| 3 | Classify raw API errors | ❌ generic hint only | ✅ 3 known errors → stable code + hint in modeling.py |
| 4 | treatAsUnit default under-collapses |
❌ still ["with fasteners"] |
✅ made loud (advisory possibleUnderCollapse + hint); default unchanged |
Decisions I left to you
- #4: I did not widen the shipped
treatAsUnitdefault — that silently changes everyone's BOM counts, and there's no purely structural signal separating a purchased vs organizational subassembly (Oliver's own conclusion). PR flags likely-internal parts instead. If you'd rather change the default, it's a one-liner. - #1 strength: PR does the name check the skill promised. The stronger fix Oliver recommended — target a document by stable lineage id without activating it — is not in this PR (needs API design + live testing).
Not included (Oliver flagged these as a separate write-up)
worldSpace/occurrence resolution + a dedicated fusion_inspect_bodies verb (#2); interference checking (TemporaryBRepManager); combined view-control+screenshot; document-lifecycle verbs; app.documents returning the same doc twice; harmonising the two script-runner contracts (run_script scriptB64 vs run_modeling_script raw).
For the docs, not the bridge
sketch.modelToSketchSpace() does not project a point onto the sketch plane — a wrong off-plane coordinate passes straight through, offset by exactly the plane offset (caused one of the session's silent geometry bugs). Belongs in a skill/doc.
PR: #38 (draft). Happy to iterate on any of these or split them per-item if you prefer smaller merges.