diff --git a/ROADMAP.md b/ROADMAP.md index 1c788025..862bb90c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,19 +1,18 @@ # SolveCraft roadmap -Status as of **2026-10-07**. SolveCraft targets Fusion-style parametric modelling (sketch → +Status as of **2026-10-09**. SolveCraft targets Fusion-style parametric modelling (sketch → features → parametric timeline) as an open, pure-Rust, agent-drivable application. ## At a glance | Question | Answer | |---|---| -| Where are we? | **M0 done; M1/M2 in progress.** Sketch with solver, extrude (taper, two-sided, through all), revolve, fillet/chamfer, holes, patterns, mirror, shell, draft, loft, sweep, split, construction planes, parameters that rebuild the timeline, STEP/STL export, desktop and browser (wasm) app with Fusion-style selection (hover/selected highlights, origin planes, click-to-pick sketch planes, multi-select, window/crossing box selection, animated view cube), CLI, MCP server, oracle harness. | -| Command parity (in scope) | **139 / 541 (26%)** in-scope commands; SOLID + SKETCH **102 / 291 (35%)** — [docs/parity.md](docs/parity.md) | -| Fusion oracle | **72 / 76 parts match** (batch 1: 29/29; batch 2 in progress) — [docs/oracle.md](docs/oracle.md) | -| Tests | 85 (solver, profiles, kernel booleans/blends/measures, expressions, timeline, file formats, camera, engine end-to-end, hostile-input fuzz over every command) | +| Where are we? | **M0, M1, M13 done; M2, M5–M7, M9, M10, M14 in progress.** Sketch with solver and the full SKETCH create/modify set; extrude, revolve (two sides, symmetric, to object), fillet/chamfer (variable radius, chord length, a radius per edge, corner patches), holes, threads (cosmetic and modelled), patterns, mirror, shell (inside/outside/both), draft, loft, sweep, coil, split body and split face, delete face, construction planes, axes and points; persistent naming of faces and edges; parameters and configurations; components, joints, motion studies, exploded views; sheet metal and a plastic enclosure subset; STEP/IGES/3MF/STL/OBJ/DXF; autosave and crash recovery; desktop and browser (wasm) app, CLI, MCP server, oracle harness. | +| Command parity (in scope) | **328 / 541 (61%)** in-scope commands; SOLID + SKETCH **185 / 291 (64%)** — [docs/parity.md](docs/parity.md) | +| Fusion oracle | **76 / 76 parts match** — [docs/oracle.md](docs/oracle.md) | +| Tests | 596 (41 of them UI scenarios): solver, profiles, kernel booleans/blends/measures, expressions, timeline, persistent naming, file formats and migrations, assemblies, sheet metal, engine end-to-end, hostile-input fuzz over every command | | Gates | `cargo xtask ci`: fmt, clippy -D warnings, tests, asset attribution, layering, wasm32 build — green | -| Weighted parity estimate | **≈ 5%** of Fusion's Design workspace by importance (sketch + basic solids are the core, but surfaces, assemblies, sheet metal, CAM, drawings are untouched) | -| Time to a useful alpha (M0–M6) | ≈ **150 agent hours** remain | +| Time to a useful alpha (M0–M6) | ≈ **82 agent hours** remain (sum of the M1–M6 estimates below) | ## Scope (owner decision, 2026-10-07) @@ -46,10 +45,10 @@ headline counts in-scope tabs only and lists the deferred ones separately. | M4 | Files: STEP import (done: all 29 Fusion STEP files — [docs/step-import.md](docs/step-import.md)), 3MF export and 3MF/STL import as mesh bodies (done), DXF sketches, OBJ import | in progress | 6 | | M5 | Persistent naming of faces and edges (plan/adr/0002): faces named from their history (sketch curve sides, caps, revolve sections, primitive sides, blends, pattern/mirror copies; split pieces numbered), edges by their faces; fillets/chamfers, sketches on faces, shell/draft/offset/replace faces, hole placements, joint origins and face appearances resolve by name first and warn when the entity split or vanished: done. sheet metal edges by base sketch line and flange side, shell inner faces, sweep and loft roles: done. Left: kernel-reported face history (exact through coincident surfaces) | in progress | 20 | | M6 | UI depth: selection feedback and origin (done), timeline editing (done: edit feature, history marker drag, reorder with dependency checks, suppress, rename, delete with dependents, re-resolved references), right-docked dialogs (done), live previews for every feature dialog (done), keyboard-first commands with on-canvas value boxes and sketch inline dimensions (done), drag manipulators with automatic join/cut (done: extrude incl. two sides, fillet, shell, hole depth, move, pattern spacing, revolve rotator; taper handle open), dark theme (done), right-click menu with Repeat (done), measure tool (done), section analysis (done), selection filter (done), drag-solve of sketch points (done); appearances, preferences | in progress | 6 | -| M7 | Sweep, loft (incl. to a point), rib and web (to next / depth), emboss (planar faces), thread (cosmetic, and modelled M3–M20 outside and inside: the ISO profile screwed in as a faceted cut), coil (smooth B-spline helical walls), pipe, pattern on path, patterns of bodies and components, replace face (parallel), align, remove, feature copy/paste: done. Left: emboss on curved faces, thicken (needs surfaces), split face, exact (unfaceted) modelled threads | in progress | 12 | +| M7 | Sweep, loft (incl. to a point), rib and web (to next / depth), emboss (planar faces), thread (cosmetic, and modelled M3–M20 outside and inside: the ISO profile screwed in as a faceted cut), coil (smooth B-spline helical walls), pipe, pattern on path, patterns of bodies and components, replace face (parallel), align, remove, feature copy/paste: done. Left: emboss on curved faces, exact (unfaceted) modelled threads | in progress | 12 | | M8 | Surface workspace | deferred | — | | M9 | Components and assemblies (Fusion-style): New Component / Create Components from Bodies, active component, per-component origin/bodies/sketches/timeline entries, occurrences with transforms, Copy/Paste vs Paste New, nested Browser tree with visibility and isolate; Ground, Move/Copy of occurrences, joints (rigid, revolute, slider, cylindrical, pin-slot, planar, ball) by joint origins with limits and Drive Joints, As-built Joint, Rigid Group, Contact Sets (driving and motion studies stop where bodies in a set would pass through each other), Motion Study (joint values keyed along a timeline, playback, export of occurrence positions as JSON/CSV), Exploded views (automatic or by hand, shown without changing placements); interference, per-component physical properties; STEP with assembly structure. Groundwork done: component tree, occurrences with transforms (instances, Paste New), world placement, active component as authoring frame, ground, Capture/Revert Position, moving bodies and sketches. UI: ASSEMBLE panel dialogs for New Component, Joint (snaps on faces, edges, circles and vertices; animated motion preview; offsets, flip, limits), As-built Joint, Joint Origin, Rigid Group, Drive Joints (live slider), Motion Link and Interference (overlaps shown red); joints in the timeline and the Browser | in progress | 32 | -| M10 | Sheet metal: flange (base, edge, contour), hem, unfold/refold, convert, flat pattern + DXF, rules: done (oracle 67-76). PLASTIC enclosure subset: Boss, Rib, Web, Lip/Groove, Snap Fit, Rest, Plastic Rules (library, edit, assign; rule draft and clearance as feature defaults): done, no Fusion oracle (licence), tested against hand-computed geometry. UI: SHEET METAL and PLASTIC tabs in Fusion's layout with dialogs (live preview, Edit Feature, pre-selection) for Flange, Hem, Unfold/Refold, Convert, Sheet Metal Rules, Create Flat Pattern (flat view with bend lines, bend table, DXF export), Boss, Lip/Groove, Snap Fit, Rest, Manage and Assign Plastic Rules; Bend (Fold) has no engine command yet | in progress | 36 | +| M10 | Sheet metal: flange (base, edge, contour), hem, unfold/refold, convert, flat pattern + DXF, rules: done (oracle 67-76). PLASTIC enclosure subset: Boss, Rib, Web, Lip/Groove, Snap Fit, Rest, Plastic Rules (library, edit, assign; rule draft and clearance as feature defaults): done, no Fusion oracle (licence), tested against hand-computed geometry. UI: SHEET METAL and PLASTIC tabs in Fusion's layout with dialogs (live preview, Edit Feature, pre-selection) for Flange, Hem, Unfold/Refold, Convert, Sheet Metal Rules, Create Flat Pattern (flat view with bend lines, bend table, DXF export), Boss, Lip/Groove, Snap Fit, Rest, Manage and Assign Plastic Rules; Fold (bend along a sketch line) | in progress | 36 | | M11 | 2D drawings | deferred | — | | M12 | Release: installers, signing, docs, performance | planned | 16 | | M14 | Configurations: a table of rows (parameter expressions and feature suppressions per row) switched with config.activate (undoable, all or nothing), kept through parameter renames and feature deletes (config.configure, config.table, config.column/row/activate). Left: configuration rules, per-row materials and appearances | in progress | 4 | @@ -57,7 +56,9 @@ headline counts in-scope tabs only and lists the deferred ones separately. ## Known limitations -- Fillets and chamfers: straight edges (convex or concave) between planar faces with perpendicular +- Fillets and chamfers: constant, variable-radius and chord-length fillets; a radius per edge, + rounds next to earlier rounds of another radius, and smooth corner patches where three rounds + meet (a sphere for equal radii); straight edges (convex or concave) between planar faces with perpendicular planar end faces; whole smooth loops of a planar face, picked whole or by one edge (tangent chain), including circles and walls at any angle (boss bases and tops, bores, pocket floors, plate outlines), loops with sharp corners between straight edges (the blends meet in mitres), runs of @@ -80,7 +81,11 @@ headline counts in-scope tabs only and lists the deferred ones separately. product names, colours and assemblies; offset surfaces and pcurve-only edges are not read yet, and assembly components are flattened into bodies. Closed periodic faces (torus, B-spline bands) are split in two for meshing; measure() uses a finer tolerance for small radii. -- No persistent naming (fillet edges are re-found by position; projected sketch geometry too). +- Persistent naming (plan/adr/0002) names faces from their history and edges by their faces; + references resolve by name first and warn when the entity split or vanished. Kernel-reported + face history (exact through coincident surfaces) is not wired in yet. +- Modelled threads are cut as a faceted body (curved faces within 1/200 of the pitch); Extrude + and Revolve To Object on a curved face cut the tool back to the target's surface. - Free-form curves cut at a tangent touch (no clean crossing) enter that profile as polylines. Sweeps along 3D sketch curves follow their polyline (smooth walls when the path is smooth). - Shell and offset faces work on bodies of planes, cylinders, cones and spheres (convex or not: diff --git a/docs/parity.md b/docs/parity.md index 3dcecace..02a7a78e 100644 --- a/docs/parity.md +++ b/docs/parity.md @@ -2,17 +2,17 @@ Generated by `cargo xtask parity` from `xtask/data/fusion-catalog.tsv` (the toolbar commands of Fusion's Design workspace, ids and names only) and the live command registry (`solvecraft-cli commands`). A command counts as live when SolveCraft registers the same command id. This measures breadth, not depth; see ROADMAP.md and docs/oracle.md for depth. -**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 279 / 541 commands live (52%).** SOLID + SKETCH: 168 / 291 (58%). Registered commands: 281. +**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 328 / 541 commands live (61%).** SOLID + SKETCH: 185 / 291 (64%). Registered commands: 300. -Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 501 / 1175 (43%). +Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 616 / 1175 (52%). | Tab | Panel | Live | Total | % | |---|---|---:|---:|---:| | SOLID | CREATE | 23 | 35 | 66% | -| SOLID | MODIFY | 18 | 32 | 56% | +| SOLID | MODIFY | 19 | 32 | 59% | | SOLID | ASSEMBLE | 12 | 21 | 57% | | SOLID | CONFIGURE | 2 | 3 | 67% | -| SOLID | CONSTRUCT | 2 | 20 | 10% | +| SOLID | CONSTRUCT | 18 | 20 | 90% | | SOLID | INSPECT | 12 | 25 | 48% | | SOLID | INSERT | 6 | 11 | 55% | | SOLID | SELECT | 0 | 15 | 0% | @@ -30,7 +30,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | SHEET METAL | MODIFY | 12 | 21 | 57% | | SHEET METAL | ASSEMBLE | 11 | 20 | 55% | | SHEET METAL | CONFIGURE | 2 | 3 | 67% | -| SHEET METAL | CONSTRUCT | 2 | 20 | 10% | +| SHEET METAL | CONSTRUCT | 18 | 20 | 90% | | SHEET METAL | INSPECT | 12 | 25 | 48% | | SHEET METAL | INSERT | 6 | 11 | 55% | | SHEET METAL | SELECT | 0 | 15 | 0% | @@ -43,7 +43,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | ASSEMBLY | MODIFY | 8 | 11 | 73% | | ASSEMBLY | CONTACT | 2 | 2 | 100% | | ASSEMBLY | CONFIGURE | 2 | 3 | 67% | -| ASSEMBLY | CONSTRUCT | 2 | 20 | 10% | +| ASSEMBLY | CONSTRUCT | 18 | 20 | 90% | | ASSEMBLY | INSPECT | 12 | 25 | 48% | | ASSEMBLY | SELECT | 0 | 15 | 0% | | ASSEMBLY | POSITION | 2 | 2 | 100% | @@ -54,10 +54,10 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | Tab | Panel | Live | Total | % | |---|---|---:|---:|---:| | SURFACE | CREATE | 9 | 25 | 36% | -| SURFACE | MODIFY | 16 | 26 | 62% | +| SURFACE | MODIFY | 17 | 26 | 65% | | SURFACE | ASSEMBLE | 11 | 20 | 55% | | SURFACE | CONFIGURE | 2 | 3 | 67% | -| SURFACE | CONSTRUCT | 2 | 20 | 10% | +| SURFACE | CONSTRUCT | 18 | 20 | 90% | | SURFACE | INSPECT | 12 | 25 | 48% | | SURFACE | INSERT | 6 | 11 | 55% | | SURFACE | SELECT | 0 | 15 | 0% | @@ -67,7 +67,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | MESH | MODIFY | 6 | 30 | 20% | | MESH | ASSEMBLE | 12 | 21 | 57% | | MESH | CONFIGURE | 2 | 3 | 67% | -| MESH | CONSTRUCT | 2 | 20 | 10% | +| MESH | CONSTRUCT | 18 | 20 | 90% | | MESH | INSPECT | 12 | 25 | 48% | | MESH | INSERT | 5 | 10 | 50% | | MESH | SELECT | 0 | 10 | 0% | @@ -77,7 +77,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | FORM | MODIFY | 5 | 31 | 16% | | FORM | SYMMETRY | 0 | 6 | 0% | | FORM | UTILITIES | 0 | 5 | 0% | -| FORM | CONSTRUCT | 2 | 20 | 10% | +| FORM | CONSTRUCT | 18 | 20 | 90% | | FORM | INSPECT | 12 | 25 | 48% | | FORM | INSERT | 7 | 13 | 54% | | FORM | ASSEMBLE | 0 | 1 | 0% | @@ -85,10 +85,10 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | FORM | FINISH FORM | 0 | 1 | 0% | | PLASTIC | SETUP | 2 | 2 | 100% | | PLASTIC | CREATE | 27 | 35 | 77% | -| PLASTIC | MODIFY | 18 | 32 | 56% | +| PLASTIC | MODIFY | 19 | 32 | 59% | | PLASTIC | ASSEMBLE | 11 | 20 | 55% | | PLASTIC | CONFIGURE | 2 | 3 | 67% | -| PLASTIC | CONSTRUCT | 2 | 20 | 10% | +| PLASTIC | CONSTRUCT | 18 | 20 | 90% | | PLASTIC | INSPECT | 12 | 26 | 46% | | PLASTIC | INSERT | 6 | 11 | 55% | | PLASTIC | SELECT | 0 | 15 | 0% | @@ -142,6 +142,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › MODIFY › Combine - SOLID › MODIFY › Offset Face - SOLID › MODIFY › Replace Face +- SOLID › MODIFY › Split Face - SOLID › MODIFY › Split Body - SOLID › MODIFY › Move/Copy - SOLID › MODIFY › Align @@ -167,6 +168,22 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › CONFIGURE › Display Configuration Table - SOLID › CONSTRUCT › Offset Plane - SOLID › CONSTRUCT › Plane at Angle +- SOLID › CONSTRUCT › Tangent Plane +- SOLID › CONSTRUCT › Midplane +- SOLID › CONSTRUCT › Plane Through Two Edges +- SOLID › CONSTRUCT › Plane Through Three Points +- SOLID › CONSTRUCT › Plane Along Path +- SOLID › CONSTRUCT › Axis Through Cylinder/Cone/Torus +- SOLID › CONSTRUCT › Axis Perpendicular To Face +- SOLID › CONSTRUCT › Axis Through Two Planes +- SOLID › CONSTRUCT › Axis Through Two Points +- SOLID › CONSTRUCT › Axis Through Edge +- SOLID › CONSTRUCT › Point At Vertex +- SOLID › CONSTRUCT › Point Through Two Edges +- SOLID › CONSTRUCT › Point Through Three Planes +- SOLID › CONSTRUCT › Point At Center Of Circle/Sphere/Torus +- SOLID › CONSTRUCT › Point At Edge And Plane +- SOLID › CONSTRUCT › Point Along Path - SOLID › INSPECT › Measure - SOLID › INSPECT › Interference - SOLID › INSPECT › Section Analysis @@ -294,7 +311,6 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › CREATE › Create Unlinked PCB - SOLID › CREATE › Generate Timeline - SOLID › MODIFY › Edit Face -- SOLID › MODIFY › Split Face - SOLID › MODIFY › Silhouette Split - SOLID › MODIFY › Arrange - SOLID › MODIFY › Remove Features @@ -317,23 +333,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › ASSEMBLE › As-Built Constraint - SOLID › CONFIGURE › Create Configuration Rules - SOLID › CONSTRUCT › User Coordinate System (UCS) -- SOLID › CONSTRUCT › Tangent Plane -- SOLID › CONSTRUCT › Midplane - SOLID › CONSTRUCT › Perpendicular Plane -- SOLID › CONSTRUCT › Plane Through Two Edges -- SOLID › CONSTRUCT › Plane Through Three Points -- SOLID › CONSTRUCT › Plane Along Path -- SOLID › CONSTRUCT › Axis Through Cylinder/Cone/Torus -- SOLID › CONSTRUCT › Axis Perpendicular To Face -- SOLID › CONSTRUCT › Axis Through Two Planes -- SOLID › CONSTRUCT › Axis Through Two Points -- SOLID › CONSTRUCT › Axis Through Edge -- SOLID › CONSTRUCT › Point At Vertex -- SOLID › CONSTRUCT › Point Through Two Edges -- SOLID › CONSTRUCT › Point Through Three Planes -- SOLID › CONSTRUCT › Point At Center Of Circle/Sphere/Torus -- SOLID › CONSTRUCT › Point At Edge And Plane -- SOLID › CONSTRUCT › Point Along Path - SOLID › INSPECT › Validate - SOLID › INSPECT › Component Connection Analysis - SOLID › INSPECT › DOF Analysis