← Commit history

1.9.151: Z-up orientation check for new users

John Lauer ·9e89ddd99e ·1mo ago ·parent 39ed950
7 files changed +68−15
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.9.150\ No newline at end of file+1.9.151\ No newline at end of file
adom-bridge-fusion-manifest.json+4−4
@@ -1,10 +1,10 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.9.150",-  "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.150/adom-bridge-fusion-v1.9.150.zip",-  "sha256": "bd0dc44eb9bb3cff7b8116b12e0ad6cc65bb2bf1133ac4af17160628d5a7817d",-  "size": 482346,+  "version": "1.9.151",+  "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.151/adom-bridge-fusion-v1.9.151.zip",+  "sha256": "1d99bee775a1cef979bfc883ea6c30779759561da2f7560c511daaa69e0fbeda",+  "size": 483104,   "verbPrefixes": [     "fusion_"   ],
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.9.150",+  "version": "1.9.151",   "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/fusion-bridge",   "author": "Adom Inc.",
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.173",+  "version": "1.9.174",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {
page.json+10−7
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.173",+  "version": "1.9.174",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {@@ -11,6 +11,10 @@     "uninstall": "./uninstall.sh"   },   "tags": [+    "ab",+    "bridge",+    "fusion",+    "desktop-app",     "fusion360",     "autodesk",     "cad",@@ -75,7 +79,10 @@     "build a basic parts library",     "add a 3d model to a component",     "make a fusion 360 library with 3d",-    "set up the fusion bridge"+    "set up the fusion bridge",+    "fusion dashboard",+    "fusion status page",+    "open the fusion launch page"   ],   "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).",   "brief": "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.",@@ -104,9 +111,5 @@       "label": "Part volume",       "prompt": "How much material does each printed part in this assembly use?"     }-  ],-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"-  }+  ] }\ No newline at end of file
server.py+36−1
@@ -581,6 +581,32 @@ def _ensure_fusion_user_async():     _thu.Thread(target=_fetch, daemon=True).start()  +def _fusion_modeling_orientation(user_id=None):+    """The current Fusion user's Default Modeling Orientation, read from Fusion's LOCAL+    options file (sceneUpOptionId in NGlobalOptions.xml): 'zup' (the ADOM standard), 'yup'+    (Fusion's factory default, which a FRESH Autodesk account gets), or None if unknown.++    Disk-only - the bridge runs on the same box, so this needs NO add-in and never disturbs a+    running Fusion. John, 2026-08-23: a fresh account (jlauer12) came up Y-up while his other+    account was Z-up; Adom is a Z-up world, so the bridge flags Y-up (especially on new users)+    so it can be corrected with fusion_set_preference {"modelingOrientation":"zup"}."""+    try:+        import os as _os+        uid = user_id or _FUSION_USER.get("userId")+        if not uid:+            return None+        path = _os.path.join(_os.environ.get("APPDATA", ""), "Autodesk",+                             "Neutron Platform", "Options", uid, "NGlobalOptions.xml")+        if not _os.path.exists(path):+            return None+        import re as _re+        m = _re.search(r'sceneUpOptionId[^>]*Value="(\d)"',+                       open(path, "r", encoding="utf-8", errors="ignore").read())+        return {"0": "yup", "1": "zup"}.get(m.group(1)) if m else None+    except Exception:+        return None++ def _addin_round_trip_ready(tries: int = 2, gap: float = 1.5) -> bool:     """Can the add-in actually EXECUTE a command, twice in a row? @@ -1830,6 +1856,11 @@ def _handle_fusion_readiness(fusion_info: dict, args: dict) -> dict:             pass     elif not running and _FUSION_USER:         _FUSION_USER.clear()      # account switch shows the NEW identity after restart+    _orient = _fusion_modeling_orientation()+    _orient_note = ("" if _orient != "yup" else+                    " ⚠ Default Modeling Orientation is Y-UP on this account, but Adom is a "+                    "Z-UP environment (a fresh Autodesk account defaults to Y-up). Set it with "+                    "fusion_set_preference {\"modelingOrientation\":\"zup\"} - no restart needed.")     result = {         "success": True,         "hostApp": "Fusion 360",@@ -1846,9 +1877,13 @@ def _handle_fusion_readiness(fusion_info: dict, args: dict) -> dict:         # first ready poll, so readiness never waits on a modeling script)         "fusionUser": ({"user": _FUSION_USER.get("user"), "userId": _FUSION_USER.get("userId")}                        if _FUSION_USER.get("user") else None),+        # ADOM IS A Z-UP WORLD (John, 2026-08-23): a fresh Autodesk account defaults to Y-up,+        # so surface the current account's Default Modeling Orientation and flag Y-up - most+        # relevant on a NEW user. Disk read, no add-in, never disrupts a driven session.+        "modelingOrientation": _orient,         "bridgeVersion": BRIDGE_VERSION,         **stale_info,-        "_hint": (hint + " NOTE: " + result_note) if result_note else hint,+        "_hint": (((hint + " NOTE: " + result_note) if result_note else hint) + _orient_note),     }     # MEASURED PROGRESS WHILE LAUNCHING (issue #32): the poll verb must render the same     # bar the launch verb started, or the caller is back to a spinner with no end.
skills/fusion-onboarding/SKILL.md+15
@@ -145,3 +145,18 @@ charged).   `API/AddIns`, but re-verify with `fusion_addin_status`; re-run `install_addin` if it drifted. - Verify the current installer URL / flags if Autodesk changes them (Sources: silentinstallhq,   Autodesk deploy docs).++## Step 5.5 — Set Z-UP (Adom standard) on a NEW account++A FRESH Autodesk account comes up with **Y-up** as the Default Modeling Orientation (Fusion's+factory default), but **Adom is a Z-up environment** (John, 2026-08-23: jlauer12's new account+defaulted to Y-up while his other account was Z-up). Check and fix it as part of onboarding:++- `fusion_readiness` now reports **`modelingOrientation`** ("yup"/"zup") and flags Y-up in its+  `_hint` (read straight off Fusion's local options file - no add-in, never disturbs a running+  session, so you can check it even mid-driving).+- If it is `yup`, set it: **`fusion_set_preference {"modelingOrientation":"zup"}`** - a live+  preference change, applies immediately, no restart. (Do NOT hand-edit the options XML while+  Fusion is RUNNING - it can overwrite on exit; the verb goes through Fusion's own API.)+- Do this for every new user by default: a Z-up world where a part imports Y-up is the kind of+  silent-wrong that wastes an EE's afternoon.