What We Shipped

Changelog

Every commit. No marketing spin.

1–30 of 234 commits
1 / 8
Introduce user-editable .jshape resources, bundled shape packaging, shape manager IPC, common workspace tooling, and the shared Shape Generator dialog for Drafting Sketch, Design, Laser, and Plasma.

Port the built-in sprocket, timing pulley, trigger wheel, involute gear, spline, gusset, and base plate generators into first-party .jshape files with script-side geometry generation and parity coverage.

Move shape length handling onto the shared preferred-units evaluator, add preview zoom/pan/fit polish, document the public API, and update v2.1.0 release notes.
The laser was firing brief puffs instead of staying on during cuts.
Root cause: CA 02 (set current layer) was emitted between same-layer
contours, resetting the armed state set by CA 03 01. LightBurn emits
nothing between same-layer contours — just rapid then cut commands.

Additionally, the entire RD file structure was wrong: layer definitions
were placed after the EA setup separator instead of before it, and
defineLayer() was emitting global runtime commands (C9 02, C6 01/02/21/22)
that belong exclusively in the runtime arm sequence.

RuidaRDBuilder changes:
- startJob() no longer emits EA; adds E7 06/38/50/51/04/05 global setup
- defineLayer() stripped of C9 02 and C6 01/02/21/22 (runtime-only);
  now emits CA 41 per-layer flag and E7 61/62 alternate extents
- New emitSetupBlock(): CA 22, E7 54/55, F1 03/00/01, F2 00-07, EA 00
- New emitBodyPreamble(): E7 60/13/17/23/24/37/08 post-EA extent echo
- armLayerForCut() prepends CA 01 00 (reset flags) before CA 02
- endJob() adds E7 00 after EB (before D7)

Post processor changes (both ruida-laser.jcpst and network variant):
- onHeader() calls emitSetupBlock() and emitBodyPreamble() after layers
- onOperation() removes else branch — no CA 02 between same-layer contours
- Laser2 power defaults to 20% instead of mirroring laser1

Tests: multi-contour no-CA02 assertion, EA ordering, F1/F2 presence,
CA 01 00 before CA 02 in arm sequence. All 21 tests pass.
Introduces binary-safe post execution mode, a dedicated Ruida RD encoder module, and a new ruida-laser post with layer/speed/power setup and vector motion emission. Adds binary guardrails in Laser UI flows plus fixture-backed Ruida tests and documentation, while preserving existing Plasma/Laser text post behavior.
Locked and colliding parts now use Plasma-equivalent precedence/colors in Laser rendering, while unlocked parts keep layer coloring. Post button label/state now consistently tracks laser_post_output_path and preserves the active Laser filename after post completion/error resets.
Kerf offset now uses winding-based convention (outers CW, holes CCW,
single signed offset) instead of broken hole/outer sign flip. Leads use
proper climb/conventional side convention with arc-aware tangent math.
Adds full automatic lead placement (findLeadPoint) with dense sampling,
collision checking, waste-zone PiP validation, sheet bounds checking,
and arc radius escalation fallback. Lead point picker now provides dense
arc-length samples. _splitPolylineAt enables lead point override to
reorder the polyline at the chosen pierce point. Contour ordering within
each layer uses nearest-neighbor (holes first, then outers). Also wires
cut operation params (kerf offset input, lead geometry options) into the
operation dialog, extends LaserPost with proper onOperation dispatch, and
updates grbl-laser post to emit structured G-code.
Add machine-driven feedrate unit/timebase display, compact operation reorder controls, engrave-only mesh/picking improvements, and align Laser docs with the updated operation panel and render interaction behavior.
Prevent intermediate input states from resetting scale values so factors like 0.5 can be typed reliably while keeping factor/percentage fields synchronized in both Laser and Plasma workspaces.
Set Laser default simplify tolerance to 0.0002in, make machine-config saves reliably commit focused tolerance edits, thread machine simplify tolerance through Laser/Plasma import workers, and replace operation rename prompt with inline rename UX.
This removes kerf-based wording from Laser Auto-Nest UI, switches Laser bump-stop options to a single padding input, and aligns Laser runtime reads with the padding-only model while preserving workspace boundaries.
This removes duplicate Laser tool registration, strips Plasma-only Laser artifacts, keeps quote/generation intentionally stubbed where required, and preserves strict Laser/Plasma boundary guarantees with updated validation/docs.
This keeps shader/parameter updates deterministic, persists palette-color operation defaults, and aligns Laser-specific persistence keys and defaults so behavior remains isolated and predictable.
This threads a hidden mode flag through DXF/SVG/SheetCAM/sketch paths, applies mode-aware grouping at a single geometry seam, and adds docs/tests to lock the behavior.
Replace Laser's proxy/inheritance coupling with a standalone laser_cam-bound runtime, harden undo snapshot isolation, and align import/drop/docs behavior with strict Plasma/Laser data-root separation.
Broadcast machine/profile saves from the global Machines dialog so Plasma and Laser managers reload and redraw bed envelopes immediately, while also hardening dialog persistence behavior and documenting the live-sync flow.
# Conflicts:
#	src/renderer/src/workspaces/Plasma/main.js
Also update v2.0.7 notes to document the live tooltip synchronization behavior.
Also update v2.0.7 notes with the new auto-nest corner controls and sheet-origin attachment behavior.
This keeps default/custom effort placement behavior explicit, threads start-corner intent through the auto-nest pipeline, and includes related offset tuning updates needed for current nesting quality.
This centralizes machine configuration workflows, enables laser-specific post defaults, and removes stale split-manager paths.
Persist Laser-specific CAM state, operations ordering, and palette mappings across save/open while keeping machine selection and workflow UX aligned with Plasma.
This adds an end-to-end reverse-engineered Ruida file format reference under test assets and includes the latest local offset harness fixture state captured in test geometry files.
This replaces Plasma wrapper paths with canonical common module ownership, rewires Plasma adapters/tests to the new engine locations, and removes deprecated Plasma core files to keep codepaths maintainable going forward.
Document user-facing changes included since v2.0.5 so release CI can publish draft notes from the tagged commit.
This rejects numerically unstable micro cap-arc substitutions while preserving normal round joins, and documents the harness checks needed to verify no geometry regressions.
This adds structured IO failure classification, clearer user-facing messages (including permission-denied project open wording), and renderer/main callsite updates so read/write failures are surfaced consistently instead of silently swallowed.
This aligns Skyline preset presentation with custom effort semantics, restores Quick's default non-hole-fill behavior, and adds explicit progress messaging when hole-first placement is active.
Also propagate Plasma undo-driven edits through dirty-state notifications so tab unsaved indicators and autosave update consistently.
This allows machine-specific output control without changing default behavior for existing users.
Switch SheetCAM job sheet inheritance to use [Work] bounds, remove deprecated import warning copy, expand metadata/tests, and include current workspace/test output updates required with this snapshot.
Run npm version through cmd on Windows runners and only use npm_execpath when it points to a JS entrypoint.
1–30 of 234 commits
1 / 8