← Commit history

Publish 1.9.184

John Lauer ·ff53851dd1 ·1mo ago ·parent a071adc
2 files changed +30−29
page.json+7−10
@@ -11,10 +11,6 @@     "uninstall": "./uninstall.sh"   },   "tags": [-    "ab",-    "bridge",-    "fusion",-    "desktop-app",     "fusion360",     "autodesk",     "cad",@@ -79,10 +75,7 @@     "build a basic parts library",     "add a 3d model to a component",     "make a fusion 360 library with 3d",-    "set up the fusion bridge",-    "fusion dashboard",-    "fusion status page",-    "open the fusion launch page"+    "set up the fusion bridge"   ],   "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.",@@ -111,5 +104,9 @@       "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
tools/release.sh+23−19
@@ -61,9 +61,11 @@ echo "  gates OK"  # ⚠ LIVE-WORK GUARD (John, 2026-08-23: "that was really rude"): bridge_install makes AD REAP # the running bridge process. That kills any in-flight create_library chain, and on bridges-# older than 1.9.183 it kills FUSION ITSELF (Fusion was a child of the bridge process --# seven releases shipped during a build matrix = seven dead Fusions). Refuse unless the box-# is idle. RELEASE_FORCE=1 overrides, and you had better know why.+# older than 1.9.183 it killed FUSION ITSELF (Fusion was a child of the bridge process -+# EIGHT releases shipped during a build matrix = eight dead Fusions). The first version of+# this guard read a respawn-window "running: null" as "no" and shipped anyway (the 8th kill).+# RULE NOW: a RUNNING Fusion means someone is using it -> refuse. UNKNOWN -> refuse. Only an+# explicit running:false passes. RELEASE_FORCE=1 overrides, and you had better know why. step "Live-work guard on $BRIDGE_TARGET" _probe() { adom-bridge --ai-thread "$AITHREAD" --target "$BRIDGE_TARGET" "$1" '{}' 2>/dev/null \   | python3 -c "import sys,json@@ -72,24 +74,26 @@ if isinstance(x.get('output'),str):     try: x=json.loads(x['output'])     except Exception: pass print(json.dumps(x))" 2>/dev/null || echo '{}'; }-STAGE=$(_probe fusion_prove_result | python3 -c "import sys,json; print(json.load(sys.stdin).get('stage') or '')")-RD=$(_probe fusion_readiness)-RUNNING=$(echo "$RD" | python3 -c "import sys,json; print('yes' if json.load(sys.stdin).get('running') else 'no')")-REMOTE_VER=$(echo "$RD" | python3 -c "import sys,json; print(json.load(sys.stdin).get('bridgeVersion') or '0.0.0')") if [ "${RELEASE_FORCE:-0}" != "1" ]; then-  case "$STAGE" in-    ""|done|failed|error) : ;;-    *) die "a create_library chain is IN FLIGHT on $BRIDGE_TARGET (stage: $STAGE). bridge_install would reap the bridge mid-chain. Wait for it to finish, or RELEASE_FORCE=1." ;;+  VERDICT=""+  for attempt in 1 2 3; do+    RD=$(_probe fusion_readiness)+    VERDICT=$(echo "$RD" | python3 -c "+import sys,json+x=json.load(sys.stdin); r=x.get('running')+print('idle' if r is False else ('busy' if r is True else 'unknown'))")+    [ "$VERDICT" = "unknown" ] || break+    sleep 5   # respawn window - re-probe, never guess+  done+  STAGE=$(_probe fusion_prove_result | python3 -c "import sys,json; print(json.load(sys.stdin).get('stage') or '')")+  case "$VERDICT" in+    busy)    die "Fusion is RUNNING on $BRIDGE_TARGET - someone is using it (chain stage: '${STAGE:-none}'). bridge_install reaps the bridge and kills in-flight work. Wait until Fusion is closed, or RELEASE_FORCE=1 once you have CONFIRMED nobody is driving it." ;;+    unknown) die "could not determine Fusion state on $BRIDGE_TARGET after 3 probes (bridge respawning or unreachable) - refusing to install blind. Retry shortly, or RELEASE_FORCE=1." ;;+    idle)    echo "  guard OK: Fusion not running on $BRIDGE_TARGET (chain stage: '${STAGE:-none}')" ;;   esac-  if [ "$RUNNING" = "yes" ]; then-    OLD_TREE=$(python3 -c "-import sys-v=tuple(int(p) for p in '$REMOTE_VER'.split('.')[:3]) if '$REMOTE_VER'.replace('.','').isdigit() else (0,0,0)-print('yes' if v < (1,9,183) else 'no')")-    [ "$OLD_TREE" = "yes" ] && die "Fusion is RUNNING on $BRIDGE_TARGET under bridge $REMOTE_VER, which launched it as a CHILD process - installing now KILLS Fusion. Wait until Fusion is closed/idle (or RELEASE_FORCE=1 if you have confirmed nobody is using it)."-  fi+else+  echo "  guard BYPASSED by RELEASE_FORCE=1" fi-echo "  guard OK (stage='${STAGE:-none}', fusion running=$RUNNING, remote bridge $REMOTE_VER)"  # --- 2. set ALL version files to $VERSION (this is the lockstep) -------------------------- step "Setting every version file to $VERSION"@@ -161,7 +165,7 @@ git commit -q -m "release $VERSION (lockstep): bridge + dashboard + package all Co-Authored-By: Claude Opus 4.8 <[email protected]>" || echo "  (nothing to commit)" adom-wiki repo push "$REPO" --files server.py fusion_detect.py BRIDGE_VERSION bridge.json \   page.json package.json "$MANIFEST" dashboard/src/main.rs dashboard/Cargo.toml dashboard/Cargo.lock \-  dashboard/ui/index.html dockbar.json \+  dashboard/ui/index.html dockbar.json handlers/dismiss_recovery.py handlers/dialog_classify.py \   install.sh --json 2>/dev/null | ok_check || die "repo push FAILED" echo "  pushed"