Commit Graph
4720 Commits
Author SHA1 Message Date
Hakan SevenandClaude Opus 5.5 6cde0e02d8 Cargo: kernel 71770e1, graph f4fdb80
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 13:12:04 +03:00
Hakan SevenandClaude Opus 5.5 e08aa68bb7 Cargo: kernel 0b023a8, graph 1bb8b06
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 12:26:26 +03:00
Hakan SevenandClaude Opus 5.5 ae7fe3d4aa Cargo: kernel 5c9ca9a, graph 20f493c
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 11:30:42 +03:00
Hakan SevenandClaude Opus 5.5 51eda9ff85 Cargo: kernel 24fb370, graph fcc70b0
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 10:23:24 +03:00
theluckystrike cbefecb120 fix(input): let a rebound SPACE fire while the command line has focus
A focused text field reports Status::Captured, so the key dispatch
dropped SPACE and a CUI rebind of SPACE to FINALIZE never ran while the
command line held focus (#1710). Dispatch a captured SPACE as a shortcut
only when SPACE is bound to something other than COMMANDSPACE, so the
default binding still types a space. The closure stays a plain fn, so a
static flag mirrors the binding and is refreshed wherever the bindings
change.
2026-10-11 14:20:11 +07:00
yztink 2f10a66bff fix(draw): support line tangency in arc construction and resolve trim contact precision
- Implement Apollonius PPC (Point-Point-Curve) and multi-tangent CCP solvers for lines in arc.rs
- Support tangent line snapping for all 3-input arc combinations (Tangent-Point-Point, Point-Tangent-Point, Tangent-Tangent-Point, Tangent-Point-Tangent, Point-Tangent-Tangent)
- Resolve TangentGeom::Line f32 truncation in snap.rs to preserve true f64 key vertices during tangent evaluation and TangentObject construction
- Preserve strict CUT_TOLERANCE (1e-7) in trim.rs while ensuring tangent contact points are detected accurately
- Add unit tests for line tangency solvers, tangent trim detection, and angular precision sweeps
2026-10-10 23:01:22 -07:00
Hakan SevenandClaude Opus 5.5 003bc39886 Cargo: kernel 1d81f9e, graph d6964e3
Kernel: fillets and chamfers along plane-cylinder rulings; blend
booleans refused when they change the solid by more than their tool.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 06:52:24 +03:00
Hakan SevenandClaude Opus 5.5 4b6ced9b8c Cargo: kernel 35fb24d, graph cb18f6e
Kernel: spline normals and tangents kept while a body is meshed —
solid display of spline-heavy drawings up to 2.7 times faster.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 05:56:26 +03:00
Hakan SevenandClaude Opus 5.5 ad9403e03d Cargo: kernel 69ffca4, graph e988ea3
Kernel: spline surface search grid kept, ray/control-net box test,
sampled proximity-mesh deviation — booleans on spline solids several
times faster.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 05:24:33 +03:00
Karim Jerbi 9cf9ff2c5c style: apply cargo fmt across workspace 2026-10-11 03:14:29 +01:00
Hakan SevenandClaude Opus 5.5 85710e5454 Cargo: kernel c65a1f0, graph 3b9426a
Kernel: shell for solids run straight between two caps (plates with
holes, walls bent round arcs).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 04:26:07 +03:00
Karim Jerbi 2824b2943f fix(styles): reload Table/MLine buffers on structural ops, validate cell text style
style_new/copy/delete funneled through a load_style_bufs no-op for Table/MLine, leaving stale editor buffers pointed at the fresh style; both arms now route to the existing loaders. Table cell text-style typos persisted as dangling names; unknown names are now rejected with command-line feedback, keeping the buffer text for correction. Silent numeric parse-drops deliberately untouched (codebase-wide keep-old-valid norm). Tests: table_new_reloads_cell_buffers plus table_cell_unknown_text_style_is_rejected incl. retention assert (RED each verified by temporary revert). Full suite: 2048 passed / 0 failed / 25 ignored, zero warnings.
2026-10-11 02:17:18 +01:00
Karim Jerbi 2c2bb9bba5 ci: run tests on Linux, Windows and macOS; add non-blocking lint job
Tests previously ran on Ubuntu only, so Windows- and macOS-specific breakage went unseen. Add a 3-OS test matrix and a separate lint job for rustfmt and clippy. Lint is continue-on-error because the tree is not yet fmt-clean or clippy-clean.

Also add BEDIT characterization tests that pin current session, undo and refusal behavior ahead of the editor refactor. Locked tests guard behavior that must survive; documenting tests record questionable behavior expected to change.
2026-10-11 02:17:18 +01:00
Karim Jerbi 8dca7fbaed refactor(ribbon): single dock predicate, drop dead layer_names mirror
The edge-stack closure duplicated dock_panel_visible arm-for-arm; it now delegates (tab is provably the active tab at that site). Ribbon.layer_names was written but never read outside one test; deleted, test reads via layer_infos. Faces and combo-refresh sub-items investigated and dropped (already unified upstream; no live stale path). Tests: dock visibility parity pins incl. Start-tab. Full suite: 2046 passed / 0 failed / 25 ignored, zero warnings.
2026-10-11 02:17:18 +01:00
Karim Jerbi 6fa11887c7 fix(xref): carry stable row identity in row messages
XrefManagerSelect/RightClick/RowOp/PathPick/FindReplace carried positional display indices that rescans could retarget. New XrefRowId{key,saved_path} (the identity refresh uses) in all 5 variants, resolved via row_index at dispatch with graceful no-op; panel selection stays index-based. display.index remains for view-time styling/lookup only. Tests: xref_rowop_unknown_id_is_noop (RED first); existing dialog/simulator/click tests migrated to ids. Full suite: 2044 passed / 0 failed / 25 ignored.
2026-10-11 02:17:18 +01:00
Karim Jerbi 7bbc5b0319 fix(ui): explain silent anno-scale toggles, theme xref empty state
AnnoObjectScaleToggle had three silent no-op paths (no target, locked layer, unknown scale); each now pushes command-line info mirroring the open-path guards. Xref empty-state hardcoded grey now uses muted_style. DD_BOUNDS eviction and attr-clamp changes investigated and deliberately dropped (no reachable defect in either). Tests: anno_scale_toggle_tests cover all three paths (RED: silence). Full suite: 2032 passed / 0 failed / 25 ignored, zero warnings.
2026-10-11 02:17:18 +01:00
Karim Jerbi 15cfabdb0f fix(layer-state): share linetype list via Arc instead of cloning per row
editor_layer_row and view_editor took Vec<String>, cloning N strings per row per frame (times two build-closure runs). Both take Arc<[String]> now; a plain borrow cannot cross the twice-run closure (E0373), hence the Arc. Cow empty-filter short-circuit for both search queries. Test: view_editor_accepts_shared_linetypes (RED first). Full suite: 2029 passed / 0 failed / 25 ignored, zero warnings.
2026-10-11 02:17:18 +01:00
Hakan SevenandClaude Opus 5.5 9f9c621871 Cargo: kernel b8b5b9e, graph f9f7e27
Kernel: fillets and chamfers round plane-cylinder/cone circles (hole and
boss rims, countersinks), shell for any planar solid, NURBS projection
onto the right pass of a looping curve, straight rational profile
pieces, slice section precision.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 04:15:33 +03:00
yztink d5d6733d82 feat(snap): add transparent object snap overrides in active commands
Allow users to temporarily override object snaps during active point prompts by typing at least the first 3 letters of any snap mode (e.g. MID, END, CEN, PER, NON). The override activates for the next point pick only and automatically restores running snaps once consumed or cancelled.
2026-10-10 17:01:12 -07:00
Hakan SevenandClaude Opus 5.5 68646f5616 Cargo: kernel 8dafa23, graph eb7afee
Kernel: closed-curve seam projection, offset push by slicing, exact
planar spline pcurves, imprint perf (no hairline ping-pong, box-culled
periodic containment).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 00:54:21 +03:00
Karim Jerbi 6c3cfb55b5 fix(layers): VP glyph and filter-aware shift ranges
VP-freeze columns used the global-freeze glyph; shift-ranges swept filtered-out rows into bulk ops. Glyph swapped to layer_vp_freeze (ribbon precedent); new visible_indices helper shared by the view loop and the shift arm. Test: shift_select_skips_filtered_out_rows (RED: hidden row in range). Full suite: 2028 passed / 0 failed / 25 ignored.
2026-10-10 20:41:28 +01:00
Hakan SevenandClaude Opus 5.5 ea7e79bfab Cargo: kernel edef407, graph 96359a4
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 21:26:03 +03:00
Hakan SevenandClaude Opus 5.5 309810803e Cargo: kernel af749de, graph 39ef337; region area by chain shares
A region's loop area sums its pieces with Curve::chain_area, the
composable share: enclosed_area closes an open polyline by its chord.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 20:31:56 +03:00
Hakan SevenandClaude Opus 5.5 689cd71d9e Cargo: kernel b234308, graph 3baa891
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 19:21:19 +03:00
Karim Jerbi b66f890546 fix(statusbar): scale pill number, label and badge follow one viewport
The pill number used the first-content fallback while the label and sync badge used explicit-only resolution, showing e.g. a 1:50 number beside a 1:1 label with no badge. Label and badge now resolve through target_viewport_handle like the number; render-path handle fn, set-paths and Model branches untouched. Tests: scale_pill_sources_agree_without_targeted_viewport (RED: live probe Some(0.02)/1:1/None) plus Model-unchanged pin. Full suite: 2027 passed / 0 failed / 25 ignored.
2026-10-10 16:14:22 +01:00
Karim Jerbi d1da26feb6 fix(properties): scope asym-scale opt-out per tab
props_asym_scale was app-global keyed by raw handle values, but fresh documents restart numbering at seed 1, leaking one tab's unchecked Uniform box into another tab reusing the value. The set moves to DocumentTab; all uses tab-scoped. Also removes a dead destructure left in overlay.rs. Test: asym_scale_opt_out_does_not_leak_across_tabs with handle-reuse premise assert (RED first). Full suite: 2025 passed / 0 failed / 25 ignored, zero warnings.
2026-10-10 16:14:22 +01:00
Hakan SevenandClaude Opus 5.5 6ad3183b3d Cargo: kernel 0e87fac, graph 5c02e2b
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 16:49:24 +03:00
Hakan SevenandClaude Opus 5.5 48ecaa0ee2 Cargo: kernel b6f85b4, graph e008a24
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 16:37:02 +03:00
francesco fantoni 666b5d561a added SVG export feature 2026-10-10 14:41:31 +02:00
Claude cc17d10ca9 Dock: drop dead pallet-width setters, split on_dock, share span maths
- Only docked pallets have a width divider, so the Width drag and
  WidthReset no longer carry a branch for an undocked pallet; remove the
  then unused DockState::set_width / reset_width. Per-pallet widths are
  still read (older configs, floating size). Tests now size groups.
- on_dock hands hover messages to dock_hover and the release to
  dock_drag_release.
- dock_slot_spans and dock_landing share dock_open_spans.

No behaviour change.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 12:34:02 +00:00
Hakan SevenandClaude Opus 5.5 bdc3d8d7c7 Cargo: kernel 71f46ff, graph ffbf3ca
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 15:19:15 +03:00
Claude 02404301a5 Dock: review cleanups - hover pending enum, FloatFrame, comment fixes
- dock_hover_pending is an Option<HoverPending> (Reveal / Hide) instead
  of a nested Option.
- dock_float_frame returns a FloatFrame with width() and bar_x(), so the
  floating menu no longer repeats the frame-width formula.
- Put dock_reveal's doc comment back on dock_reveal, and the group-move
  comment back above the match it describes.

No behaviour change.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 11:55:23 +00:00
Claude 2135dd499a Dock: floating windows hold one pallet again
Remove floating groups: a floating window is a single pallet once more,
and the Pallets submenu is gone from its title-bar menu. Kept: the menu
opens at the pointer with Allow docking, Dock left and Dock right;
close / pin show only while the bar is hovered; content is clipped to
its frame. A config saved by the floating-group build still loads, its
windows floating their first pallet. Drops the unused Pallets string.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 11:32:51 +00:00
Claude 75fb9e32dd Dock: floating menu at the pointer, hover-only bar buttons, Allow docking, clip pallets
- The floating title bar's right-click menu opens where the pointer is,
  flipped to stay on screen; the Pallets submenu sits beside it.
- Close and pin on a floating title bar only show while it is hovered,
  as on docked title bars.
- New Allow docking check in that menu: off, dragging the window (or a
  pallet out of it) only floats it, never docks it on an edge.
- Floating windows and stacked pallets clip their content, so a pallet
  sized below its content no longer draws outside its frame.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 11:18:42 +00:00
Claude f19948bc07 Dock: floating groups, floating title bar menu, translations
- A docked group floats as one window: drag its edge band over the
  drawing or double-click the band. Floating windows hold a stack of
  pallets with splitters; the vertical title bar shows each pallet's
  icon (press one to drag that pallet out). Dragging the bar moves the
  whole window; dropping it on an edge docks or joins it as a group.
- Right-click a floating title bar: Pallets submenu (add or hide
  pallets in the window), Dock left, Dock right.
- Close on a floating bar closes every pallet in the window; its pin
  sets auto-hide for the whole window.
- Older configs with single floating pallets still load.
- Translate the new dock texts (Auto-hide, Dock left/right, New group,
  Pallets, Browser, Node Graph) in all 21 languages.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 10:40:55 +00:00
Claude 4e210f65b5 Dock: LAYERS opens its pallet like Insert Block, Layer Manager layout fixes, 150 ms auto-hide hover delay
- LAYERS ribbon button runs a command that opens the Layer Manager pallet;
  the ribbon no longer keeps it highlighted.
- Layer Manager: search box stays right-aligned, the column header fills
  the row, no stray contour lines when the pallet is taller than its rows.
- Auto-hidden edges don't show the shown-group accent bar.
- Auto-hide reveal and hide wait 150 ms of rest, so passing over the
  strip doesn't flash groups open.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-10 10:22:47 +00:00
Hakan SevenandClaude Opus 5.5 4708283382 Cargo: kernel 7ae9c6c, graph 8296ebf
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:55:58 +03:00
Karim Jerbi 0c9cc839fe fix(overlay): guard draw_axes against behind-eye projection
draw_axes projected with raw project_point3, so a behind-camera axis endpoint wrapped to a finite mirrored point (proven: clip.w=-100 projected to screen centre). Extracted shared project_point with the eye-plane guard (grid_segments delegates verbatim) and axes now skip when an end is unprojectable plus clip_seg. Legacy canvas offset preserved pixel-identically; remaining raw project_point3 sites elsewhere are out of scope. Tests: project_point_rejects_behind_eye plus axes_segments geometry pins. Full suite: 2024 passed / 0 failed / 25 ignored.
2026-10-10 07:23:35 +01:00
Hakan SevenandClaude Opus 5.5 4ae2722aad Cargo: kernel 749ed0b, graph 33637fc
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 08:24:58 +03:00
Hakan SevenandClaude Opus 5.5 3d488c1dcd Cargo: kernel 01562a8, graph 4b7cde5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 04:18:29 +03:00
ysdirector 2eb0905784 fix(control): track zero-unit tasks 2026-10-10 08:26:15 +08:00
ysdirector 11bc1745a6 feat(control): expose external-change actions 2026-10-10 08:26:11 +08:00
ysdirector f3274f754a fix(save): refresh verified-save fingerprints 2026-10-10 08:01:11 +08:00
ysdirector 607e6f4c1b feat(control): publish selection changes to automation clients 2026-10-10 07:51:18 +08:00
ysdirector 6137c62f85 fix(automation): validate entity creation fields strictly 2026-10-10 07:41:20 +08:00
ysdirector 785e05d805 feat(automation): create and serialize splines 2026-10-10 07:39:41 +08:00
ysdirector 3129e17602 feat(chamfer): preserve sources in no-trim mode 2026-10-10 07:38:47 +08:00
ysdirector 5016a4f300 fix(fillet): preserve sources in no-trim mode 2026-10-10 07:24:16 +08:00
ysdirector 41db8d676b fix(dimensions): honor DIMTMOVE=2 2026-10-10 07:18:34 +08:00
Hakan SevenandClaude Opus 5.5 fbf2694d56 Cargo: kernel 8dbcaa7, graph 65880eb
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 01:12:34 +03:00