CypherNaugh_0x
49ca7ef878
Merge origin/main into fix/flush-pad-over-hole (keeps both round_pads_crossing_a_shallow_fall from #119 and drain_pads_flush_under_a_floor_with_a_hole, which now also checks a boss ring standing on the 1° top around the hole)
2026-10-11 15:01:29 +02:00
bherbruck
d47b5d3a29
Merge pull request #128 from 0xlillith/fix/fuzz-seed-range
...
fix: validate fuzz seed ranges without overflow
2026-10-11 07:58:04 -04:00
bherbruck
736730c398
Merge pull request #122 from CypherNaught-0x/fix/loft-section-order
...
A loft gives the same body whatever the order of its sections
2026-10-11 07:57:49 -04:00
bherbruck
32900813c5
Merge pull request #118 from CypherNaught-0x/fix/boolean-fallback-message
...
Boolean errors say what actually stopped them instead of blaming coincident faces on curved bodies
2026-10-11 07:57:31 -04:00
CypherNaugh_0x
79753040d5
Merge upstream and update curved-cut regression for fallback diagnostics
2026-10-11 13:25:06 +02:00
bherbruck
413a1fb727
docs: guide agents to show concrete visual context and track integration
2026-10-11 07:16:45 -04:00
bherbruck
420ee723ee
Merge pull request #124 from CypherNaught-0x/fix/shell-four-face-corner
...
Shell works where four or more flat faces meet at a corner
2026-10-11 07:13:42 -04:00
bherbruck
7e4dd4fd66
Merge pull request #121 from CypherNaught-0x/fix/fillet-keeps-dimensions
...
Fillet and chamfer keep the dimensions of the corner they replace on a virtual sharp corner
2026-10-11 07:12:48 -04:00
bherbruck
f9d61590f3
Merge pull request #120 from CypherNaught-0x/feat/timeline-inspect
...
timeline.inspect shows a feature's editable fields; the timeline.edit format is documented
2026-10-11 07:11:49 -04:00
bherbruck
c11fc79288
Merge pull request #119 from CypherNaught-0x/fix/boolean-shallow-slope
...
Booleans across a floor that falls a degree or two no longer reject correct results
2026-10-11 07:11:35 -04:00
bherbruck
d9f7473ceb
Merge pull request #115 from astrojhgu/main
...
build: NixOS flake for the dev shell and the app package
2026-10-11 07:11:04 -04:00
bherbruck
4b35484052
Merge pull request #127 from 0xlillith/docs/testing-ci-profile
...
docs: align testing guide with the CI profile
2026-10-11 07:10:15 -04:00
CypherNaugh_0x
3dc0a6024e
Merge remote-tracking branch 'origin/main' into fix/loft-section-order
...
# Conflicts:
# crates/engine/src/cmd/features_more_tests.rs
2026-10-11 13:03:56 +02:00
CypherNaugh_0x
8970254672
A drain pad whose bore is the drain hole's wall (a ring joined flush under a floor, or overlapping it) now joins instead of failing with "coincident faces on curved bodies": the mesh intersection can't take two walls on one cylinder, and the coincident-face push only knew planes. Such unions now narrow one body's bore (its walls pushed toward the axis, clear of the other's), join, and cut the original bore's cylinder out again over that body's length, which is exact when the cylinder holds no material of either body (checked on samples). Inside that step a face is pushed into the other body only as deep as there is material behind it all over, so a narrowed rim over the other's bore can't fill it; then the other body's bore is narrowed instead. Test: drain_pads_flush_under_a_floor_with_a_hole (ring flush and 2 mm into a 1° floor, and a disc across the hole, against hand-calculated volumes)
2026-10-11 13:01:54 +02:00
CypherNaugh_0x
adb1e5fec5
timeline.inspect returns a feature's definition in the shape timeline.edit's set takes, so agents no longer guess field names: timeline.edit had no documented format ({"extent": {"distance": …}} worked, but only by trying). The new read-only command (feature: id or name) returns type, definition (the editable fields and their current values; bookkeeping and large payloads such as sketch geometry and imported STEP text are left out and listed under omitted), inputs (label, parameter name, expression, unit) and the feature's error and warning. timeline.edit's params doc points to it, and the book's Solid features chapter documents the edit format with the fields of the common features. Tests: inspect, edit by the field names it shows, inspect again (extrude, fillet, sketch); no undo step; hostile feature arguments are refused
2026-10-11 12:23:30 +02:00
CypherNaugh_0x
3573b96c7a
fix: shell bodies where four or more planar faces meet at a corner (a floor falling to a drain from the trough edges) by splitting such corners into several joined by short edges instead of refusing because the moved planes miss a common point
2026-10-11 12:23:23 +02:00
CypherNaugh_0x
c67ad22129
A sketch fillet keeps the dimensions of the corner it rounds: filleting the corner of a spout (a vertical riser and a horizontal top, the top's length dimensioned to the corner and the corner's height from the origin) dropped the height dimension with the corner point and left the length on the shortened straight part, so the top came out a fillet radius too long. Like Fusion, a corner that dimensions or constraints measure to now stays as a virtual sharp corner, a free point held on both curves' extensions (two point-on-curve constraints), with those dimensions kept and a line length to the corner turned into a distance from the line's far end to it; chamfers do the same. sketch.fillet and the chamfers report virtual_corners and moved_to_virtual_corner, and the viewport draws a virtual corner as an open square with dashed extension lines from the curves. Tests: the spout keeps its 80 x 100 size and both dimensions still drive it, the virtual corner survives save/load and undo/redo, a fillet with nothing on its corner leaves no point behind, and nearly straight or folded corners with dimensions never panic
2026-10-11 12:23:22 +02:00
CypherNaugh_0x
2406957039
A loft gives the same body whatever the order of its sections: the ruled side faces were parameterised from the first section to the last, and a loft cut that touches the body along an edge (a fall lofted from a shelled basin's whole outline down to a drain pad) worked for one order and failed for the other, with an Option::unwrap() panic inside the kernel's intersection or "shell not oriented and closed" from the planar fallback. The loft now builds its sections in one canonical order (first-to-last step with a positive largest component), so either order gives the same, working body. Tests: the basin fall cut, joined and as a new body in both orders and with the pad in every corner (engine), and the kernel loft's volume and cut in both orders, including large-below and planes facing down
2026-10-11 12:23:22 +02:00
bherbruck
a6bb8fc924
feat: stabilize face attachments and closed spline workflows
2026-10-11 05:32:46 -04:00
CypherNaugh_0x
5073f5dd72
A failed boolean no longer blames "coincident faces on curved bodies" whatever the cause: the exact polygon fallback runs after any failed B-rep boolean (faces that touch, or cross at a shallow angle) and takes planar faces only, but its refusal named coincident faces and curved bodies regardless. It now says which operand is in the way and why: "the tool has 2 curved faces (cylinder)" (kinds: cylinder, cone, sphere, torus, freeform), a face that could not be meshed, a planar face whose mesh is not flat, or a mesh too detailed. Test: planar_fallback_names_the_curved_faces
2026-10-11 10:25:10 +02:00
GU Junhua
75e9472a47
modified: CONTRIBUTING.md
...
new file: flake.lock
new file: flake.nix
2026-10-11 16:07:46 +08:00
bherbruck
c1d819f235
feat: preserve body history and placed modelling workflows
...
Record ownership transfers in the timeline so earlier Join/Cut membership,
world placement, machining data and styles survive component moves, edits,
independent copying, undo and reopening. Preserve pending positions in history
snapshots and keep constructor transfers ordered during feature redefinition.
Retain shallow sheet pockets and exact planar intersection islands through
unfold/refold, with depth-aware flat previews and DXF export. Store explicit
3D wire coordinate spaces and migrate known legacy provenance without moving
saved points or analytic fits.
Infer unique eligible cylindrical Emboss targets, align Revolve manipulators
with actual extent geometry, and discard obsolete preview errors after input
correction. Certify constructed and immutable imported face styles using exact
source metadata while preserving legacy face names. Upgrade designs to format10
with bounded validation and geometry-preserving legacy migration.
2026-10-11 03:59:12 -04:00
bherbruck
0398a813c8
feat: strengthen sketches, feature editing, and independent assemblies
2026-10-11 02:44:31 -04:00
bherbruck
07932d0f42
feat: preserve modeling intent across sketches, assemblies, and fabrication
...
Persist typed sketch dimensions and bounded ordered configuration rules in format 8. Use exact occurrence paths and source identity for editing, movement, appearance, and mass. Preserve sheet material regions through cutting, folding, and exact DXF export; retain nested cavities and material islands.
Validation: cargo xtask ci passed, including 368 engine tests, 178 UI tests, 68 UI scenarios, 136 kernel tests, and the 10-crate wasm check. Actual preview workflows and legacy format-7 origin-corner reopening were inspected.
2026-10-11 01:28:01 -04:00
bherbruck
d71bdb78ec
feat: strengthen modeling, configuration, and assembly workflows
...
Preserve linked sketch identities through deterministic face projection and resizing. Fix origin-corner picking, persistent inline navigation, appearance editing, configuration styles, component properties, contact sweeps, sheet exports, analytic STEP offsets, and bounded rolling-ball fit accuracy.
Validated with full cargo xtask ci, native workflow screenshots, repeated enclosure replays, and analytic geometry regressions.
2026-10-11 00:37:26 -04:00
CypherNaugh_0x
8c1b1478ce
Joins and cuts of round pads, bosses and holes across a floor that falls a degree or two no longer fail: the B-rep results were right, but the plausibility check meshed them without refinement, and where the shallow cut trims a round side to a thin band the plain mesh spans it with triangles cutting through the cylinder, so the check saw missing material (0.8 to 1.6 % of samples misclassified), rejected the result, and the planar fallback then refused the round tool. The check now meshes the operands and the result with refinement on curved faces (as measure does). Test: round_pads_crossing_a_shallow_fall (a 1° fall and a 2° four-face fall toward a drain)
2026-10-11 05:33:50 +02:00
bherbruck
22672585c9
fix: join connected solids at exact edge contacts
2026-10-10 23:11:02 -04:00
bherbruck
fc8b71956c
fix: reject planar joins that displace original faces
2026-10-10 22:53:44 -04:00
bherbruck
74fed469dc
fix: deploy docs web and Flatpak through one Pages workflow
v0.1.6
2026-10-10 21:59:18 -04:00
bherbruck
efa6706226
Release SolveCraft 0.1.6
2026-10-10 21:43:21 -04:00
bherbruck
c1b6478ab5
fix: join additive extrusions and merge coplanar faces
2026-10-10 21:31:19 -04:00
bherbruck
17e8e3eff2
Merge pull request #109 from CypherNaught-0x/fix/timeline-modifier-highlighting
...
Highlight fillets and other modifier faces from the timeline
2026-10-10 20:56:59 -04:00
bherbruck
4b7e1d317d
fix: load designs off-thread and cache recent thumbnails as PNGs
2026-10-10 20:55:14 -04:00
bherbruck
b375c2a92a
Merge pull request #108 from CypherNaught-0x/fix/basin-rim-blends
...
Fix fillets and chamfers around sloped pocket rims
2026-10-10 20:05:45 -04:00
CypherNaugh_0x
5275911b44
Highlight modifier faces from timeline hover and selection
2026-10-11 01:59:02 +02:00
95ae096265
Restore minimal view-cube turns and drag-to-orbit
...
Recover N3MI-DG's TOP/BOTTOM heading and drag-to-orbit contributions
from PR #101 , adapted to the existing 14-target cube. Add Y-up/Z-up
regressions, navigation ownership and dialog blocking coverage.
Original heading commit: c28e780f52
Original orbit commit: f30b30be6e
Source: https://github.com/bherbruck/solvecraft/pull/101
Co-authored-by: N3MI-DG <david1985gray@gmail.com >
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 19:50:31 -04:00
CypherNaugh_0x
5835bb10d4
Join chamfers across unequal sloped rim walls
2026-10-11 01:37:06 +02:00
CypherNaugh_0x
db4f885bac
Support fillets around sloped pocket rims
2026-10-11 01:37:06 +02:00
bherbruck
683d45c28d
Release SolveCraft 0.1.5
v0.1.5
2026-10-10 19:34:26 -04:00
bherbruck
13dd4566ce
Merge pull request #102 from CypherNaught-0x/fix/chamfer-sloped-rims
...
Fix chamfers on sloped end faces and enforce rim clearance
2026-10-10 19:28:48 -04:00
CypherNaugh_0x
e575bded0e
Fix construction-plane references in mirror, section, and sketches ( #99 )
...
Accept construction planes by name or feature ID, preserve parametric mirror references, and reject invalid plane inputs. Retain both mirror-plane and primitive-point regression test modules after resolving the conflict with main.
Validation: cargo xtask ci passed, including 282 engine tests, 138 UI tests, 62 UI scenarios, and WebAssembly.
2026-10-10 19:20:51 -04:00
bherbruck
1a1838c114
Merge pull request #106 from N3MI-DG/view_cube_label_size
...
View cube: larger face labels
2026-10-10 19:15:10 -04:00
N3MI-DG and Claude Opus 5.5
ff1453f868
View cube face labels are larger: one font size for all six, the widest (BOTTOM) spanning 90% of its face, instead of a fixed 9.5 px that left the names small on the cube. Tests: BOTTOM spans 90% of the face seen straight on, and every label stays within its face from any direction
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 10:06:05 +11:00
bherbruck
e3ee1b359e
Fix cubic input-name repair when loading large designs
2026-10-10 19:04:19 -04:00
CypherNaugh_0x
15bb64c2ab
Reject chamfer extensions beyond trimmed rim faces
2026-10-11 00:50:20 +02:00
bherbruck
feaed2e3f6
Merge pull request #97 from CypherNaught-0x/fix/dimension-measured-after-solve
...
sketch.dimension reports the measured value after solving
2026-10-10 18:49:25 -04:00
lillith
347230f5d3
fix: validate fuzz seed ranges without overflow
2026-10-11 00:41:49 +02:00
CypherNaugh_0x and Claude Haiku 5.5
f33efa2b6e
The timeline scrolls sideways when its features don't fit the window: with more features than the window is wide, the features past the right edge were clipped and could not be reached
...
Cause: the feature buttons are placed by absolute x coordinates and take no layout space, so nothing in the panel could scroll. The playback controls and the feature strip shared one row with no scroll area.
Fix: the feature strip (after the playback controls) is a horizontal ScrollArea. The content width is allocated from the drawn features and joints so the scroll range matches them. Clicks, drags, the history marker, and context menus work inside the scrolled strip; the playback controls stay fixed.
Tests: cargo xtask ci passes. Checked by hand in the app with a long feature list. Not covered: auto-scroll while dragging a feature or the marker past the visible edge.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-10 18:37:48 -04:00
CypherNaugh_0x
c61b77613a
solid.cylinder, box, sphere, torus and coil place by expressions: base, corner and center take numbers or length expressions per coordinate ("basin_width/2", "10 mm") and follow parameter changes, renames and component frames; before, a point that was not three plain numbers (or an unreadable axis) was silently replaced by the origin (or Z). The features now store the point as expressions (plain numbers still saved as numbers, so existing designs read and write the same) and evaluate it on every recompute; an unreadable or out-of-range point or axis is refused with an error. Tests: primitive points take expressions, follow parameters, renames and a moved component, and bad points are refused
2026-10-10 18:37:22 -04:00
lillith
6b46915507
docs: align testing guide with the CI profile
2026-10-11 00:32:48 +02:00