* assembly(feat): ground first parts and drag free joint chains Ground the first top-level part when it is created and let face dragging reposition free occurrences or any member of a floating joint chain in one undo step. Preserve exact repeated-placement frames, joint values, modifier selection and Escape cancellation. Keep the accumulated fixture, viewport layout and documentation integration fixes from the existing PR. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(fix): update movable fixtures for first-part grounding Accept the documented grounded override in component creation, explicitly free movement fixtures, and keep linked clipboard pastes movable even in an empty document. Cover first and reused linked pastes, default insertion grounding, and single-step undo in the existing link tests. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(test): keep the motion-cost crank free Unground the first component in the document-level joint-face measurement fixture so its motion samples can rotate after first-part grounding. Preserve the rotation and shared-measurement assertions that caught the Linux CI failure. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(test): free the frame placement fixture Create the frame-member placement fixture ungrounded before moving it above its root sketch. Keep its world-space member assertions while respecting first-part grounding in the frame tests added on main. Signed-off-by: Karl Von Richter<karl@embeint.com> --------- Signed-off-by: Karl Von Richter<karl@embeint.com>
Design file corpus
Designs saved by older SolidCraft builds. tests/design_corpus.rs opens each one with the
current build and checks that it evaluates as it did when saved (the .expected.json next to
it is solidcraft-cli eval of that file by the build that saved it: bodies, volumes, areas,
world bounding boxes), that it is upgraded to the current file format, and that damaged and
hostile variants of it never panic.
| File | Saved by | Era |
|---|---|---|
m0-box-fillet-hole |
3714342 |
M0: sketch, parameters, extrude, fillet, cut |
m0-revolve-primitives |
3714342 |
M0: revolve, primitives, combine, chamfer, timeline edit |
components-arm |
97d03e3 |
components and occurrences: move, copy, Paste New, ground |
joints-hinge |
c2309eb |
joints: revolute hinge driven by a parameter |
modern-sheet-metal |
bd98035 | sheet metal contour flange (oracle 72) |
modern-path-pattern |
bd98035 | pattern on path (oracle 53) |
modern-plastic |
bd98035 | shell, lip, boss, rest, snap fit, plastic rule |
naming-split-pieces |
9a979cf | format 13 names: a slot splits the top; fillet, chamfer and offset face name its pieces by number (F2:top#2) |
move-bodies |
00baf1d |
solid.move before it could copy: two bodies, one translated in place, one translated and turned 90 deg about Z (no copy key anywhere in the file) |
split-body-pieces |
v0.3.2 (07e263d) |
a slot along X cuts a block into two bodies; a fillet, a chamfer and an appearance refer to the pieces by body name (Body1, Body1 (1)) |
issue-489-stacked-join |
v0.6.0 (809ecf7), desktop |
a 70 × 84 extrude, then a 70 × 62 strip joined on its top face, sketched partly over the face's projected edges (issue #489; expected values from main at 2880525) |
issue-616-lid-ribs |
v0.7.0 (a9879fa), CLI |
a rounded lid with a skirt ring, a window and a slot cut through, then four ribs joined on the plate over the skirt, flush with the window's sides; v0.7.0 displaced the ribs and left a slit through the skirt and plate (issue #616; script examples/regressions/lid_ribs_flush_with_window.json, expected values from the fix) |
The scripts that made them are in scripts/ (issue-489-stacked-join was drawn in the desktop
app and has none; issue-616-lid-ribs is made by its regression script). Every flat face of every final body must also take an attached sketch and an
offset plane; the faces that can't yet are listed with their issues in design_corpus.rs.
Never regenerate a file with a newer build: the point is that it was written by the old one. Add new files for new eras instead.