Pivot from Onshape to FreeCAD addon#2
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This was referenced May 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pivots Space Elevator away from the Tauri+Vue GUI / Onshape browser extension toward a FreeCAD-native Python workbench backed by an optional Rust daemon for the SpaceMouse Enterprise LCD. Spec:
docs/superpowers/specs/2026-05-26-freecad-first-pivot-design.md. Plan:docs/superpowers/plans/2026-05-26-freecad-first-pivot.md.22 commits across three deliverables:
space-elevator/Vue+Tauri subdir, establishes a Cargo workspace, slimsdevenv.nix(no more webkit/bun, adds Python+pytest), rewrites the top-level README.space-elevatord(new Rust binary crate) — tokio-based Unix socket server at$XDG_RUNTIME_DIR/space-elevator.sock, newline-delimited JSON IPC, dispatchesping/lcd_clear/lcd_display_image/lcd_display_svg. Reusesspnav::lcdfor hardware. 5 unit tests.freecad-addon(new Python workbench) — ctypes bindings for libspnav,QSocketNotifier-driven event pump, camera navigation via Coin3D, button-to-command bindings stored inApp.ParamGet, optional LCD label push to the daemon, Preferences page and a button-bindings dialog. 14 unit tests.Motion path (libspnav -> ctypes -> QSocketNotifier -> camera) and LCD path (addon -> Unix socket -> daemon -> HID) are fully independent; either can fail without affecting the other. Daemon absence degrades silently.
Note for the future: spec's IPC surface (
set_buttons/set_status) doesn't match the as-built protocol (lcd_display_svg); the plan documents this scope cut. Spec to be updated post-merge.Manual verification
Subagent implementation can't drive hardware or FreeCAD's UI, so the following hasn't been exercised yet and gates the merge:
cargo run -p space-elevatordstarts cleanlypinground-trip vianc -Ureturns{"ok":true}(actual reply is the superset{"v":1,"id":N,"ok":true}; request must be{"v":1,"id":N,"cmd":"ping"})lcd_display_imagewith a 640x150 PNG renders on the SpaceMouse Enterprise LCD (will be garbled untilspnav/src/lcd.rspacket header TODOs are resolved — pre-existing)lcd_display_svgwith a small SVG rendersfreecad-addon/into~/.local/share/FreeCAD/Mod/SpaceElevatorand launch FreeCADSpace Elevator: event pump startedbutton_0toStd_Newvia the Python console, press button 0 — new document opensSpace Elevator -> Button bindings...menu opens the dialog; saving persistsEdit -> Preferences -> Space Elevatorshows axis-scale and LCD settings; changes persistFollow-ups (file as issues post-merge)
libspnavsingleton isn't idempotent across deactivate/activate. Second activation will fail silently becausespnav_open()on an open connection returns -1. Track_openedstate on_Lib. Seefreecad-addon/space_elevator/libspnav.py:93andevent_pump.py:27._push_labelsfromBindingsDialog._saveor document the contract._short_namestrips the namespace blindly; cross-workbench command collisions produce identical labels.LcdClientnot thread-safe — fine on the Qt main thread, but should be documented or guarded.spnav/src/lcd.rspacket header TODOs — daemon LCD output won't be reliable until resolved. Out of scope for this PR.Closes #1.