bherbruck
da56d180bf
Merge pull request #180 from 0xlillith/fix/sketch-point-constraint-preselection
...
fix: apply Coincident, Midpoint and point Symmetry to preselection
2026-10-11 15:32:20 -04:00
bherbruck
1aedbf6631
Merge pull request #176 from 0xlillith/fix/coincident-line-picks
...
fix: connect closest endpoints when Coincident picks two lines
2026-10-11 15:07:56 -04:00
bherbruck
6f872c7789
docs: restore the original enclosure demo in the updated UI
2026-10-11 15:05:16 -04:00
lillith
cc2ee6a0f9
fix: apply point constraints to sketch preselection
2026-10-11 20:52:48 +02:00
lillith
1adb2cd69f
fix: accept two line picks for sketch coincidence
2026-10-11 20:34:04 +02:00
lillith
f2f8a0df57
docs: explain browser saves and local downloads
2026-10-11 19:17:55 +02:00
bherbruck
d9d4dd262d
Merge pull request #155 from EmDecay/fix/147-input-channel-caps
...
fix: cap control requests and refuse file reads that never end
2026-10-11 12:39:09 -04:00
bherbruck
1a62c4513f
docs: restore the enclosure demo with the 0.2.0 UI
2026-10-11 12:20:48 -04:00
Matt
b2cf19c9fb
fix: cap control requests and refuse file reads that never end
...
The control channel read each request with no length cap, so a client sending
gigabytes without a newline made the server thread allocate until the process
was killed. Read lines against the 16 MiB cap the MCP server already uses, now
one shared constant, answer a longer one with an error and close; close a
connection after eight lines that are not JSON, serve at most sixteen
connections at once, and run at most sixty-four queued requests per frame so a
flood cannot starve drawing.
Every file command checked the size with the metadata and then read to the end.
A character device such as /dev/zero reports a length of 0, so the cap passed
and the read was unbounded; a FIFO blocked the calling thread, which over the
control channel is the thread drawing the window. vfs::read now takes the
caller's cap, refuses anything that is not a regular file before opening it,
re-checks on the handle to close the window between the two, and reads no more
than the cap plus the byte that proves it was exceeded. Callers pass the limits
they already had, and the recovery read and the CLI's own reads go through it
too. `solvecraft-cli eval /dev/zero` and a FIFO now fail at once instead of
never returning.
Fixes #147
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
(cherry picked from commit 4156e8acd11c90c435a54a3b0ccc59991db71b12)
2026-10-11 08:22:07 -07:00
bherbruck
ab05b24dee
Prepare 0.2.0 usability release and refresh desktop demo
2026-10-11 10:55:55 -04:00
bherbruck
0167c358bb
Merge upstream profile picks and flush-pad fixes with adaptive identities
2026-10-11 09:43:16 -04:00
bherbruck
ce46faa19d
Merge pull request #117 from CypherNaught-0x/feat/profiles-by-curve-ids
...
Profiles can be picked by the curves around them, and point picks are stored that way
2026-10-11 09:28:43 -04:00
bherbruck
4e595deff2
feat: preserve adaptive sketch profiles and curved modeling workflows
2026-10-11 09:06:25 -04:00
CypherNaugh_0x
4c466466a2
Merge origin/main into feat/profiles-by-curve-ids
2026-10-11 14:53:08 +02:00
bherbruck
43a02625a2
feat: add smooth interactive axis view and diagonal snapping
2026-10-11 08:51:24 -04:00
bherbruck
6cbcf5c823
Merge pull request #125 from CypherNaught-0x/fix/model-render-section
...
Model renders show an active section with capped cut faces
2026-10-11 08:34:20 -04:00
bherbruck
b02c5c01f9
Merge pull request #123 from CypherNaught-0x/feat/sketch-tools-return-ids
...
Sketch commands return the ids of the geometry they create
2026-10-11 08:17:05 -04:00
bherbruck
180c655ded
Merge pull request #129 from 0xlillith/fix/sketch-point-alignment
...
fix: allow horizontal and vertical alignment of sketch points
2026-10-11 08:16:27 -04:00
bherbruck
93ca39c68e
Merge pull request #131 from 0xlillith/fix/sketch-constraint-preselection
...
fix: apply curve-pair constraints to sketch preselection
2026-10-11 08:14:40 -04:00
bherbruck
442c1f134b
Merge pull request #112 from Mithril-3d/feat/i18n-support
...
feat: add extensible offline localization with Japanese UI
2026-10-11 08:01:30 -04:00
bherbruck
6d4c031090
refactor: make UI localization extensible and integrate upstream
2026-10-11 07:52:08 -04:00
CypherNaugh_0x
680c82365e
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
...
# Conflicts:
# crates/engine/src/cmd/sketch_modify.rs
2026-10-11 13:30:48 +02:00
CypherNaugh_0x
5a2174899f
Merge remote-tracking branch 'origin/main' into fix/model-render-section
...
# Conflicts:
# crates/ui-egui/src/viewport.rs
2026-10-11 13:12:20 +02: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
CypherNaugh_0x
b93d4905ac
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
...
# Conflicts:
# crates/engine/src/cmd/mod.rs
# crates/engine/src/cmd/sketch.rs
# crates/engine/src/cmd/sketch_create.rs
# crates/engine/src/cmd/sketch_modify.rs
# crates/engine/src/lib.rs
# docs/book/src/guide/sketching.md
2026-10-11 13:07:50 +02:00
CypherNaugh_0x
184e301c46
Merge remote-tracking branch 'origin/main' into feat/profiles-by-curve-ids
...
# Conflicts:
# crates/doc/src/lib.rs
# crates/sketch/src/lib.rs
2026-10-11 13:07:46 +02:00
CypherNaugh_0x
21e0e99c86
Model renders (screenshot with source model, ui.render) show the section the window shows: the CPU renderer drew the cut face on the far walls at their own depth in a plain grey hatch, so the inside of the body, its edges and the grid showed through it and the cut barely read as a section, it had no outline, perspective views cut along a curve, and an open Section Analysis dialog's preview (or a sketch's Slice) was ignored. The cut face now writes the section plane's depth where it is the visible surface (the CPU counterpart of the viewport's stencil cap), takes the viewport's cap tint and hatch, the cut outline is drawn (section_segments moved from the UI to engine::view and shared), world positions and lines are clipped perspective-correctly, and ui.render in the app uses the viewport's section plane
2026-10-11 12:23:57 +02:00
CypherNaugh_0x
cc22672041
Sketch commands return the ids of the points, curves, constraints and dimensions they create as created: {points, curves, constraints, dimensions}, worked out in Session::execute from the sketch before and after, so a script can dimension and constrain new geometry right away; ids stay stable and are not reused after a delete (undo rewinds the counters with the design). The MCP execute tool describes the field
2026-10-11 12:23:57 +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
bherbruck
a6bb8fc924
feat: stabilize face attachments and closed spline workflows
2026-10-11 05:32:46 -04:00
CypherNaugh_0x
848e7aec0e
feat: pick sketch profiles by their bounding curve ids so features keep the same region when parameters move the geometry, matching curves cut into pieces, refusing ambiguous or missing picks instead of taking another region, and storing point picks by curves
2026-10-11 10:17:25 +02: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
bherbruck
74fed469dc
fix: deploy docs web and Flatpak through one Pages workflow
2026-10-10 21:59:18 -04:00
bherbruck
c1b6478ab5
fix: join additive extrusions and merge coplanar faces
2026-10-10 21:31:19 -04:00
bherbruck
4b7e1d317d
fix: load designs off-thread and cache recent thumbnails as PNGs
2026-10-10 20:55:14 -04: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
lillith
5cc65fe46b
fix: apply curve-pair constraints to sketch preselection
2026-10-11 01:09:02 +02:00
bherbruck
e3ee1b359e
Fix cubic input-name repair when loading large designs
2026-10-10 19:04:19 -04:00
lillith
2683b8dfed
fix: allow horizontal and vertical alignment of sketch points
2026-10-11 00:58:49 +02:00
lillith
347230f5d3
fix: validate fuzz seed ranges without overflow
2026-10-11 00:41:49 +02:00
lillith
6b46915507
docs: align testing guide with the CI profile
2026-10-11 00:32:48 +02:00
bherbruck
31dadcee63
Add nightly prereleases at midnight Eastern, skipping unchanged commits
2026-10-10 18:26:06 -04:00
CypherNaugh_0x
ab23fc9906
A failed MCP batch goes back to where it started however long the undo history is: rollback undid as many steps as the undo history had grown, but the history is capped at 200 steps, so once it was full a failed batch reported undone: 0 and left its sketches behind (an empty Sketch1, two sketches named TapHole). New commands edit.checkpoint and edit.restore_checkpoint (forget: true drops one) remember and restore the design, the active sketch and the undo history; batch takes a checkpoint before its first step, restores it on a failure and forgets it on success. Against an app without checkpoints batch falls back to counting undo steps
2026-10-10 17:21:25 -04:00
bherbruck
d6cdec40da
Fix modelling regressions and reconcile WIP UI work
2026-10-10 15:37:00 -04:00
CypherNaugh_0x
49bd89de13
Parameter and feature edits report the features they restored from the evaluation cache: setting a parameter back (or a timeline.edit back) reused the earlier results for the same inputs, so the geometry changed back but recomputed said 0, which read as "nothing rebuilt". The evaluator now counts cache hits as last_restored, and parameters.change, timeline.edit, timeline.redefine and solid.press_pull on a fillet or chamfer face report it as restored next to recomputed (params docs, the MCP set_parameter description and docs/mcp.md say what each counts). Tests: setting a parameter back and a feature edit back report restored, in the evaluator and through the commands
2026-10-10 15:36:42 -04:00
CypherNaugh_0x
81be4e74b8
browser.visibility hides and shows sketches, bodies, construction geometry and origin items (items: ids or names, or a whole folder; visible: bool), so agents can hide helper sketches over MCP. What is hidden moved from the egui UI state into the engine session (view state: not saved, not an undo step); the desktop eye toggles and menus use it, headless renders and fit leave hidden items out, and document.inspect, sketch.inspect and ui.inspect report visibility. ui.set still accepts hiddenBodies, hiddenOrigin, hiddenSketches and shownSketches. Tests: helper sketches hide and show in the engine (hostile input changes nothing) and through MCP only
2026-10-10 14:33:56 -04:00
bherbruck and Claude Opus 5.5
c90070c497
Agent cursor speed: a slider from 1× to 5× with Instant at the far right. Instant no longer breaks: the command runs at once (as with the cursor off) and the pointer jumps to where it acted, with a click ripple. ui.agent_cursor speed takes 1–5 or "instant"; saved "slow" and "normal" read as 1×. Scenario covers 1×, 3× and Instant against the cursor-off result
...
Fixes #79
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT
2026-10-10 16:56:30 +00:00