Rename displayed product to SolidCraft and add header bug reporting
This commit is contained in:
1 parent
1d3048062d
commit
af536a7907
85 files changed
+442
-242
No files matched your search
+9
-9
@@ -1,7 +1,7 @@
|
||||
[book]
|
||||
title = "SolveCraft"
|
||||
title = "SolidCraft"
|
||||
description = "An open-source parametric 3D CAD application in pure Rust: user guide and developer guide."
|
||||
authors = ["SolveCraft contributors"]
|
||||
authors = ["SolidCraft contributors"]
|
||||
language = "en"
|
||||
src = "src"
|
||||
|
||||
@@ -10,9 +10,9 @@ build-dir = "../../target/book"
|
||||
create-missing = false
|
||||
|
||||
[output.html]
|
||||
git-repository-url = "https://github.com/bherbruck/solvecraft"
|
||||
edit-url-template = "https://github.com/bherbruck/solvecraft/edit/main/docs/book/{path}"
|
||||
site-url = "/solvecraft/"
|
||||
git-repository-url = "https://github.com/bherbruck/solidcraft"
|
||||
edit-url-template = "https://github.com/bherbruck/solidcraft/edit/main/docs/book/{path}"
|
||||
site-url = "/solidcraft/"
|
||||
no-section-label = false
|
||||
|
||||
[output.html.search]
|
||||
@@ -23,7 +23,7 @@ enable = true
|
||||
# links; these send them to the right place.
|
||||
"/dev/mcp.html" = "../guide/mcp.html"
|
||||
"/dev/docs/oracle.html" = "../oracle.html"
|
||||
"/dev/README.html" = "https://github.com/bherbruck/solvecraft/blob/main/README.md"
|
||||
"/dev/ATTRIBUTION.html" = "https://github.com/bherbruck/solvecraft/blob/main/ATTRIBUTION.md"
|
||||
"/dev/AGENTS.html" = "https://github.com/bherbruck/solvecraft/blob/main/AGENTS.md"
|
||||
"/dev/ROADMAP.html" = "https://github.com/bherbruck/solvecraft/blob/main/ROADMAP.md"
|
||||
"/dev/README.html" = "https://github.com/bherbruck/solidcraft/blob/main/README.md"
|
||||
"/dev/ATTRIBUTION.html" = "https://github.com/bherbruck/solidcraft/blob/main/ATTRIBUTION.md"
|
||||
"/dev/AGENTS.html" = "https://github.com/bherbruck/solidcraft/blob/main/AGENTS.md"
|
||||
"/dev/ROADMAP.html" = "https://github.com/bherbruck/solidcraft/blob/main/ROADMAP.md"
|
||||
@@ -14,7 +14,7 @@
|
||||
- [Plastic parts](guide/plastic.md)
|
||||
- [Import and export](guide/files.md)
|
||||
- [Keyboard shortcuts](guide/shortcuts.md)
|
||||
- [Driving SolveCraft with an AI agent (MCP)](guide/mcp.md)
|
||||
- [Driving SolidCraft with an AI agent (MCP)](guide/mcp.md)
|
||||
|
||||
# Developer guide
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Architecture
|
||||
|
||||
SolveCraft is a Cargo workspace in layers. A crate only depends on crates in lower layers, and
|
||||
SolidCraft is a Cargo workspace in layers. A crate only depends on crates in lower layers, and
|
||||
`cargo xtask layers` fails the build otherwise.
|
||||
|
||||
{{#include ../../../../README.md:architecture}}
|
||||
@@ -11,7 +11,7 @@ The web app, `apps/solvecraft-web`, is the desktop front end compiled to wasm wi
|
||||
|
||||
A few rules follow from the layering:
|
||||
|
||||
- **Only `crates/kernel` touches truck.** Everything above it sees SolveCraft's own types:
|
||||
- **Only `crates/kernel` touches truck.** Everything above it sees SolidCraft's own types:
|
||||
bodies, faces, edges, meshes and measures. See [The kernel boundary](kernel.md).
|
||||
- **The document knows nothing about commands or the UI.** `crates/doc` holds the parameters,
|
||||
the feature timeline and the component tree, and evaluates them into a model.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# The kernel boundary and truck
|
||||
|
||||
`crates/kernel` is SolveCraft's B-rep kernel. It wraps
|
||||
`crates/kernel` is SolidCraft's B-rep kernel. It wraps
|
||||
[truck](https://github.com/ricosjp/truck) (Apache-2.0) for topology, NURBS geometry, booleans,
|
||||
tessellation and STEP parsing, and it is the only crate allowed to use truck. Callers get
|
||||
SolveCraft types (`Body`, face and edge indices, meshes, measures) and a
|
||||
SolidCraft types (`Body`, face and edge indices, meshes, measures) and a
|
||||
`KernelError` instead of truck types and panics.
|
||||
|
||||
## `guard`
|
||||
@@ -20,7 +20,7 @@ A failing feature shows an error on the timeline; it never takes the app down.
|
||||
|
||||
## What is our own
|
||||
|
||||
truck has no fillets, chamfers, shells or face edits, so these are SolveCraft code in the
|
||||
truck has no fillets, chamfers, shells or face edits, so these are SolidCraft code in the
|
||||
kernel: constant, chord and variable-radius fillets with corner blends, chamfers, shell and
|
||||
offset, Delete Face, Split Face, Replace Face, sewing, STEP and IGES reading and writing beyond
|
||||
truck's parser, and face provenance (which input face each output face came from, for
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
A fillet stores the edges it rounds, and a sketch stores the face it sits on. If those were face
|
||||
and edge *indices*, an upstream edit that adds a face would move the fillet to the wrong edge.
|
||||
SolveCraft stores **names** instead (`crates/doc/src/naming.rs`):
|
||||
SolidCraft stores **names** instead (`crates/doc/src/naming.rs`):
|
||||
|
||||
- A face of an evaluated body is named after how it was made. A face lying on a face of the
|
||||
feature's input keeps that face's name; a face new to the feature is named by its role:
|
||||
|
||||
@@ -8,7 +8,7 @@ faded.
|
||||
|
||||
A component is placed by its **occurrences**. Paste creates another instance of the same
|
||||
component, and **Paste New** creates an independent copy. Move an occurrence with the move
|
||||
triad, then **Capture Position** to keep it or **Revert** to put it back. SolveCraft asks before
|
||||
triad, then **Capture Position** to keep it or **Revert** to put it back. SolidCraft asks before
|
||||
the next command if a move wasn't captured. **Ground** fixes an occurrence in place.
|
||||
|
||||
Paste New copies nested component definitions, sketches, feature histories and generated
|
||||
@@ -16,7 +16,7 @@ dimension parameters. Repeated child instances remain shared within the new copy
|
||||
appearances and wholly internal joints/motion records receive copied references. Design-wide
|
||||
user parameters remain shared; retained external links and omitted cross-boundary motion
|
||||
records are reported. Unsupported destructive links refuse the entire copy. See
|
||||
[individual-instance and copy details](https://github.com/bherbruck/solvecraft/blob/main/docs/occurrence-workflows.md).
|
||||
[individual-instance and copy details](https://github.com/bherbruck/solidcraft/blob/main/docs/occurrence-workflows.md).
|
||||
|
||||
**Joints** (`joint.create`, J) connect two components by joint origins that snap to faces, edges,
|
||||
circles and vertices: rigid, revolute, slider, cylindrical, pin-slot, planar and ball, with
|
||||
@@ -35,4 +35,4 @@ uses its first placement; `occurrence.properties` selects a specific instance. R
|
||||
measures the complete assembly. Volumes are summed, including overlapping bodies, rather than
|
||||
measuring their union. The same workflow is available through `component.properties` and
|
||||
`occurrence.properties`; see
|
||||
[placement and measurement details](https://github.com/bherbruck/solvecraft/blob/main/docs/assembly-properties.md).
|
||||
[placement and measurement details](https://github.com/bherbruck/solidcraft/blob/main/docs/assembly-properties.md).
|
||||
@@ -1,13 +1,17 @@
|
||||
# Getting started
|
||||
|
||||
SolidCraft keeps its compatibility names: the desktop executable is `solvecraft`, the CLI
|
||||
is `solvecraft-cli`, and saved designs remain `.solvecraft`. Published 0.2.0 and 0.2.1 packages
|
||||
were released under the SolveCraft name.
|
||||
|
||||
## Desktop
|
||||
|
||||
Download the latest build from the
|
||||
[releases page](https://github.com/bherbruck/solvecraft/releases), or build it yourself with
|
||||
[releases page](https://github.com/bherbruck/solidcraft/releases), or build it yourself with
|
||||
stable Rust (1.90 or newer):
|
||||
|
||||
```sh
|
||||
git clone https://github.com/bherbruck/solvecraft && cd solvecraft
|
||||
git clone https://github.com/bherbruck/solidcraft && cd solidcraft
|
||||
cargo run --release -p solvecraft -- --sample # opens with a sample part
|
||||
```
|
||||
|
||||
@@ -17,7 +21,7 @@ cargo run --release -p solvecraft -- --sample # opens with a sample part
|
||||
|
||||
## Web
|
||||
|
||||
The same app runs in the browser: [open SolveCraft on the web](../app/) (`?sample` opens the sample
|
||||
The same app runs in the browser: [open SolidCraft on the web](../app/) (`?sample` opens the sample
|
||||
part, `?webgl` forces WebGL2 where WebGPU is missing). Designs are saved in the browser's private
|
||||
file storage, which needs HTTPS or localhost. To build it yourself:
|
||||
|
||||
|
||||
@@ -22,4 +22,4 @@ suppressed features, physical materials and body appearances, switched with `con
|
||||
The table's Library picker selects material or appearance values. Choose **Follow material**
|
||||
to clear an appearance override. Custom looks retain their colour and opacity across
|
||||
activation, undo and save/reopen. See
|
||||
[configuration commands and examples](https://github.com/bherbruck/solvecraft/blob/main/docs/configurations.md).
|
||||
[configuration commands and examples](https://github.com/bherbruck/solidcraft/blob/main/docs/configurations.md).
|
||||
@@ -85,7 +85,7 @@ fresh link once the source is available; their stored point values are preserved
|
||||
including the origin, endpoints and circle centres. For two points, it chooses horizontal
|
||||
or vertical alignment from their current positions. Esc cancels a pending first point.
|
||||
|
||||
The solver is SolveCraft's own (damped Gauss–Newton with degree-of-freedom analysis). Constraints:
|
||||
The solver is SolidCraft's own (damped Gauss–Newton with degree-of-freedom analysis). Constraints:
|
||||
coincident, horizontal/vertical, parallel, perpendicular, tangent, equal, concentric, collinear,
|
||||
midpoint, symmetry, fix, curvature (G2) and polygon. **Sketch Dimension** (D) adds linear,
|
||||
aligned, horizontal, vertical, radius, diameter and angle dimensions. Each is a parameter
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# A tour of the window
|
||||
|
||||

|
||||

|
||||
|
||||
- **Title bar.** On Windows and Linux the application bar is the window's title bar: File, save,
|
||||
undo and redo, the start page, the theme, Help, and one tab per open design (each with its own
|
||||
@@ -16,7 +16,7 @@
|
||||
wheel zooms at the cursor, the middle button pans and right-drag orbits freely (the mouse
|
||||
preset in Preferences switches to SolidWorks or Inventor style). Hold Shift during an orbit
|
||||
to snap to the nearest standard or diagonal view; the default Shift+middle gesture also snaps.
|
||||
The axis view shows the world's X/Y/Z directions in SolveCraft's colors. Click a signed
|
||||
The axis view shows the world's X/Y/Z directions in SolidCraft's colors. Click a signed
|
||||
axis tip to look along that axis; click the aligned tip again to look from the opposite side.
|
||||
Drag the axis view to orbit around the view centre, with Shift for snapping. Top and bottom
|
||||
keep the nearest quarter-turn heading. The house and navigation bar's Home button go home.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# SolveCraft
|
||||
# SolidCraft
|
||||
|
||||
SolveCraft is an open-source parametric 3D CAD application written in pure Rust. It works the way
|
||||
SolidCraft is an open-source parametric 3D CAD application written in pure Rust. It works the way
|
||||
Fusion-style modellers do: sketch on a plane, constrain and dimension the sketch, turn profiles
|
||||
into solids with features on a timeline, and change a parameter to watch the whole timeline
|
||||
rebuild.
|
||||
|
||||

|
||||

|
||||
|
||||
It runs as:
|
||||
|
||||
@@ -18,15 +18,17 @@ Everything the user can do is a *command* with JSON parameters. The toolbar, the
|
||||
the CLI, the control channel and MCP all run the same commands, so anything you can click you can
|
||||
also script, test or hand to an agent.
|
||||
|
||||
SolveCraft is early. Sketching, solid modelling, parameters, components with joints, sheet metal
|
||||
SolidCraft is early. Sketching, solid modelling, parameters, components with joints, sheet metal
|
||||
and a plastic-enclosure subset work; surfaces, drawings, CAM and simulation are deferred. The
|
||||
[roadmap](https://github.com/bherbruck/solvecraft/blob/main/ROADMAP.md) has the details, and
|
||||
[roadmap](https://github.com/bherbruck/solidcraft/blob/main/ROADMAP.md) has the details, and
|
||||
[command parity](dev/parity.md) and the [Fusion oracle](dev/oracle.md) measure how far along it
|
||||
is.
|
||||
|
||||
This book has two halves: the **user guide** for people modelling with SolveCraft, and the
|
||||
Existing `.solvecraft` designs and `solvecraft-cli` commands keep their names and behavior.
|
||||
|
||||
This book has two halves: the **user guide** for people modelling with SolidCraft, and the
|
||||
**developer guide** for people working on it. The [command reference](reference/commands.md) is
|
||||
generated from the code on every build.
|
||||
|
||||
SolveCraft is licensed MIT OR Apache-2.0. It is a clean-room implementation and is not affiliated
|
||||
SolidCraft is licensed MIT OR Apache-2.0. It is a clean-room implementation and is not affiliated
|
||||
with Autodesk; Fusion is a trademark of Autodesk, Inc.
|
||||
@@ -149,5 +149,5 @@ the current rule scope.
|
||||
Newly saved designs use file format 12, including optional durable face attachments and
|
||||
analytic offset boundary identities and qualified adaptive whole-profile references, including
|
||||
holes. Older designs upgrade on opening without
|
||||
changing their existing configuration values. Older SolveCraft versions must be updated to
|
||||
changing their existing configuration values. Older SolidCraft versions must be updated to
|
||||
open newly saved designs.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# IGES import (Fusion corpus)
|
||||
|
||||
Generated by `cargo xtask step-corpus --iges`. Each case is a reference part exported from Fusion as IGES 5.3 (kept locally in `plan/fusion/oracle/`, never committed). SolveCraft opens `part.igs` exactly as File → Open does and compares with Fusion's measurements of the part it exported: body count, volume and area (relative tolerance 1e-3) and the number of faces read from the file. How IGES is read: see [STEP import](step-import.md#iges). 50-sweep-tight-bend is written by Fusion as five loose, partly degenerate surfaces (seams running into slits, a ring given twice); Fusion cannot read it back as a solid either.
|
||||
Generated by `cargo xtask step-corpus --iges`. Each case is a reference part exported from Fusion as IGES 5.3 (kept locally in `plan/fusion/oracle/`, never committed). SolidCraft opens `part.igs` exactly as File → Open does and compares with Fusion's measurements of the part it exported: body count, volume and area (relative tolerance 1e-3) and the number of faces read from the file. How IGES is read: see [STEP import](step-import.md#iges). 50-sweep-tight-bend is written by Fusion as five loose, partly degenerate surfaces (seams running into slits, a ring given twice); Fusion cannot read it back as a solid either.
|
||||
|
||||
**75 / 76 files pass.**
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# UI localization
|
||||
|
||||
SolveCraft embeds its translations and works offline. English and Japanese are currently
|
||||
SolidCraft embeds its translations and works offline. English and Japanese are currently
|
||||
registered in `crates/ui-egui/src/i18n.rs`. Adding a language requires an embedded catalog and
|
||||
one registration there; the preferences selector and validation use the same registry.
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# SolveCraft and AI agents (MCP)
|
||||
# SolidCraft and AI agents (MCP)
|
||||
|
||||
SolveCraft speaks the [Model Context Protocol](https://modelcontextprotocol.io) over stdio
|
||||
SolidCraft speaks the [Model Context Protocol](https://modelcontextprotocol.io) over stdio
|
||||
(JSON-RPC 2.0, one message per line; protocol revisions 2025-06-18, 2025-03-26 and 2024-11-05).
|
||||
An agent models exactly like a person does: every tool runs engine commands, the same ones the
|
||||
toolbar, palette, scripts and control channel use, and never opens a dialog.
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
# Fusion oracle
|
||||
|
||||
Generated by `cargo xtask oracle`. Each case is a part built in Fusion (recipe and measurements kept locally in `plan/fusion/oracle/`, not committed). SolveCraft replays the recipe through its command engine and compares body count, volume and area (relative tolerance 1e-3) and face/edge/vertex counts (exact). SolveCraft counts each closed-surface patch once and ignores seam edges and vertices; when body count, volume and area pass but the raw counts differ, Fusion's counts are normalised the same way from its face, edge and vertex lists (faces cut from one cylinder, cone, sphere or torus and separated only by seams count once; an edge on that surface and no other is a seam and is dropped; a vertex left with two edges joins them) and compared exactly; the note gives both sides' raw counts.
|
||||
Generated by `cargo xtask oracle`. Each case is a part built in Fusion (recipe and measurements kept locally in `plan/fusion/oracle/`, not committed). SolidCraft replays the recipe through its command engine and compares body count, volume and area (relative tolerance 1e-3) and face/edge/vertex counts (exact). SolidCraft counts each closed-surface patch once and ignores seam edges and vertices; when body count, volume and area pass but the raw counts differ, Fusion's counts are normalised the same way from its face, edge and vertex lists (faces cut from one cylinder, cone, sphere or torus and separated only by seams count once; an edge on that surface and no other is a seam and is dropped; a vertex left with two edges joins them) and compared exactly; the note gives both sides' raw counts.
|
||||
|
||||
**76 / 76 cases pass** (0 need features not implemented yet).
|
||||
|
||||
@@ -40,7 +40,7 @@ Generated by `cargo xtask oracle`. Each case is a part built in Fusion (recipe a
|
||||
| 32-boss-plate-fillets | pass | |
|
||||
| 33-fillet-tangent-chain | pass | |
|
||||
| 34-chamfer-then-fillet | pass | |
|
||||
| 35-fillet-curved-curved | pass | topology compared seam-normalised: Fusion's 6/6/5 faces/edges/vertices become 6/5/5 with closed-surface patches counted once and seam edges and vertices dropped (raw SolveCraft/Fusion: faces 9/6, edges 17/6, vertices 10/5) |
|
||||
| 35-fillet-curved-curved | pass | topology compared seam-normalised: Fusion's 6/6/5 faces/edges/vertices become 6/5/5 with closed-surface patches counted once and seam edges and vertices dropped (raw SolidCraft/Fusion: faces 9/6, edges 17/6, vertices 10/5) |
|
||||
| 36-corner-blend-two-radii | pass | |
|
||||
| 37-pyramid-apex-blend | pass | |
|
||||
| 38-coincident-cylinders | pass | |
|
||||
@@ -54,21 +54,21 @@ Generated by `cargo xtask oracle`. Each case is a part built in Fusion (recipe a
|
||||
| 46-shell-two-open-faces | pass | |
|
||||
| 47-draft-curved-pocket | pass | |
|
||||
| 48-pulley | pass | |
|
||||
| 49-helical-sweep | pass | Fusion sweeps along a spline fitted through helix points; SolveCraft builds the true helix (a coil), so the size is compared within 0.5% and the topology not at all |
|
||||
| 49-helical-sweep | pass | Fusion sweeps along a spline fitted through helix points; SolidCraft builds the true helix (a coil), so the size is compared within 0.5% and the topology not at all |
|
||||
| 50-sweep-tight-bend | pass | area not compared: Fusion reports this tight sweep's horn torus face at three times its area (π²·R·r quarter-turn value; 740 mm² against 246.7 by Pappus); volume and topology are compared |
|
||||
| 51-loft-rect-circle-offset | pass | |
|
||||
| 52-circular-pattern-fillet | pass | |
|
||||
| 53-path-pattern | pass | |
|
||||
| 54-mirror-body-fillets | pass | |
|
||||
| 55-tapped-hole-cosmetic | pass | |
|
||||
| 56-holes-on-curved-face | pass | topology compared seam-normalised: Fusion's 7/10/10 faces/edges/vertices become 7/8/8 with closed-surface patches counted once and seam edges and vertices dropped (raw SolveCraft/Fusion: faces 16/7, edges 32/10, vertices 19/10) |
|
||||
| 56-holes-on-curved-face | pass | topology compared seam-normalised: Fusion's 7/10/10 faces/edges/vertices become 7/8/8 with closed-surface patches counted once and seam edges and vertices dropped (raw SolidCraft/Fusion: faces 16/7, edges 32/10, vertices 19/10) |
|
||||
| 57-hole-pattern-sketch-points | pass | |
|
||||
| 58-phone-stand | pass | |
|
||||
| 59-enclosure-base | pass | |
|
||||
| 60-pipe-flange | pass | |
|
||||
| 61-shaft-keyway | pass | topology compared seam-normalised: Fusion's 14/22/18 faces/edges/vertices become 14/20/16 with closed-surface patches counted once and seam edges and vertices dropped (raw SolveCraft/Fusion: faces 24/14, edges 54/22, vertices 34/18) |
|
||||
| 61-shaft-keyway | pass | topology compared seam-normalised: Fusion's 14/22/18 faces/edges/vertices become 14/20/16 with closed-surface patches counted once and seam edges and vertices dropped (raw SolidCraft/Fusion: faces 24/14, edges 54/22, vertices 34/18) |
|
||||
| 62-heat-sink | pass | |
|
||||
| 63-hinge-knuckle | pass | known Fusion difference: Gap replayed with the extent Fusion actually used (its through-all is sized as 1.1 × the farthest vertex, so curved tops stop it short; SolveCraft's through-all goes truly through) |
|
||||
| 63-hinge-knuckle | pass | known Fusion difference: Gap replayed with the extent Fusion actually used (its through-all is sized as 1.1 × the farthest vertex, so curved tops stop it short; SolidCraft's through-all goes truly through) |
|
||||
| 64-sketch-tangent-arc-chain | pass | |
|
||||
| 65-sketch-gear-tooth | pass | |
|
||||
| 66-sketch-linkage | pass | |
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Fusion command parity
|
||||
|
||||
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.
|
||||
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 SolidCraft 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): 335 / 541 commands live (62%).** SOLID + SKETCH: 188 / 291 (65%). Registered commands: 311.
|
||||
|
||||
|
||||
+1
-1
@@ -136,7 +136,7 @@ Pi case in 15.2 s and 10.5 s. During those jobs, median `ui.inspect` round trips
|
||||
and 8.3 ms; the slowest were 33.7 ms and 28.6 ms. This fixes the window freeze, not the
|
||||
remaining cost of cold geometry evaluation.
|
||||
|
||||
Recent thumbnails are 240 × 150 PNG files in `SolveCraft/thumbnails` under the platform
|
||||
Recent thumbnails are 240 × 150 PNG files in `SolveCraft/thumbnails` under the platform
|
||||
cache directory (`LOCALAPPDATA` on Windows). Their keys include the source path, file size
|
||||
and modification time. Open and Save render from the model already in memory. Cached
|
||||
recents decode the PNG without reading or rebuilding a document, and run before cold
|
||||
|
||||
+15
-3
@@ -1,4 +1,4 @@
|
||||
# Releasing SolveCraft
|
||||
# Releasing SolidCraft
|
||||
|
||||
Releases are deliberate operations that an agent can complete end to end. Development lands
|
||||
on `main`; pushing the selected commit to `release` builds all packages and creates a **draft**
|
||||
@@ -6,6 +6,18 @@ GitHub Release. Publishing that verified draft is a separate operation. Pushing
|
||||
pushing a tag does not start the release workflow. There is no automatic commit-message-based
|
||||
version bump and no patch release for every merge.
|
||||
|
||||
## Compatibility names and deployment
|
||||
|
||||
SolidCraft is the product display name. Keep existing release asset filenames, including
|
||||
`SolveCraft-{version}-windows-x64.exe`, `SolveCraft.app` and `solvecraft-cli` archives, together
|
||||
with installed package IDs and settings paths. Do not rewrite published 0.2.0 or 0.2.1 assets,
|
||||
checksums, tags or historical release notes.
|
||||
|
||||
Project Pages publishes the documentation, browser app and published-release Flatpak
|
||||
repository under `/solidcraft/`. Do not add a separate owner-site publisher or permanent
|
||||
old-name Pages/Flatpak aliases. GitHub repository redirects are separate from Pages hosting;
|
||||
verify the new project URLs after deployment.
|
||||
|
||||
## Nightly prereleases
|
||||
|
||||
`release.yml` also runs at midnight in `America/New_York` (Eastern time, following daylight
|
||||
@@ -42,7 +54,7 @@ deployment. The stable Flatpak repository is not automatically updated with nigh
|
||||
2. Update `[workspace.package] version` in root `Cargo.toml`. Then run
|
||||
`cargo metadata --format-version 1 --no-deps > /dev/null` to refresh workspace package
|
||||
versions in `Cargo.lock`. Inspect the diff and keep unrelated dependency changes out.
|
||||
SolveCraft does not currently implement the siblings' `cargo xtask version set` command.
|
||||
SolidCraft does not currently implement the siblings' `cargo xtask version set` command.
|
||||
3. Run `cargo xtask ci` and the packaging checks in `.github/workflows/packaging-lint.yml`.
|
||||
Commit the version files through the normal review flow and land them on `main`.
|
||||
Do not use `[skip ci]`. Record the exact commit SHA to release. If it changes, revalidate it.
|
||||
@@ -68,7 +80,7 @@ fast-forward fails, inspect and resolve the divergence through the normal review
|
||||
Find the `release.yml` Actions run for the recorded SHA and `release` branch, and monitor that
|
||||
specific run. The workflow builds Linux (both architectures, including Flatpak), macOS,
|
||||
Windows, FreeBSD, and web packages. Once every required job succeeds it creates a draft
|
||||
`SolveCraft v<version>` with the artifacts, `SHA256SUMS.txt`, install notes, and generated changes.
|
||||
`SolidCraft v<version>` with the artifacts, `SHA256SUMS.txt`, install notes, and generated changes.
|
||||
|
||||
A second push with the same untagged version can rebuild and replace that draft's complete
|
||||
asset set. Existing release notes are preserved on rebuild; refresh their changes section if
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# STEP import
|
||||
|
||||
SolveCraft reads STEP (ISO 10303-21; AP203, AP214 and AP242 geometry) with its own reader in `crates/kernel/src/step_in` (written from the public standards; no third-party STEP code). A STEP file becomes an **Import** base feature on the timeline: it holds the file's B-rep (the STEP text is kept in the design, so the design reopens without the file) and later features — fillets, holes, cuts sketched on its faces, shells — build on its bodies.
|
||||
SolidCraft reads STEP (ISO 10303-21; AP203, AP214 and AP242 geometry) with its own reader in `crates/kernel/src/step_in` (written from the public standards; no third-party STEP code). A STEP file becomes an **Import** base feature on the timeline: it holds the file's B-rep (the STEP text is kept in the design, so the design reopens without the file) and later features — fillets, holes, cuts sketched on its faces, shells — build on its bodies.
|
||||
|
||||
- **Open**: File → Open (`doc.open`) accepts `.step`/`.stp` in any case and starts a new design; `solvecraft part.step`; `solvecraft-cli eval part.step`, `solvecraft-cli run script.json --in part.step`; the MCP `open` tool.
|
||||
- **Insert** into the current design: File → Insert STEP… or SOLID → INSERT (`file.insert_step {path}`).
|
||||
@@ -14,7 +14,7 @@ IGES 5.3 files (`.igs`/`.iges`) open, insert and drop the same way: `crates/kern
|
||||
|
||||
## Fusion corpus
|
||||
|
||||
Generated by `cargo xtask step-corpus`. Each case is a part exported from Fusion as STEP (AP214; kept locally in `plan/fusion/oracle/`, never committed). SolveCraft opens `part.step` exactly as File → Open does (an Import base feature) and compares with Fusion's own measurements: body count, volume and area (relative tolerance 1e-3) and the number of faces read from the file.
|
||||
Generated by `cargo xtask step-corpus`. Each case is a part exported from Fusion as STEP (AP214; kept locally in `plan/fusion/oracle/`, never committed). SolidCraft opens `part.step` exactly as File → Open does (an Import base feature) and compares with Fusion's own measurements: body count, volume and area (relative tolerance 1e-3) and the number of faces read from the file.
|
||||
|
||||
**76 / 76 files pass.**
|
||||
|
||||
|
||||
Reference in new issue
Block a user