Rename SolveCraft to SolidCraft everywhere, with compatibility shims (#389)
* WIP deep rename (not for push) * WIP2 * WIP3 * WIP4 wxs fix * rustfmt * Rename the remaining identifiers in merged crash-report code Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
27415e4dd7
commit
296683229d
464 files changed
+3408
-2956
No files matched your search
@@ -5,7 +5,7 @@ SolidCraft is a Cargo workspace in layers. A crate only depends on crates in low
|
||||
|
||||
{{#include ../../../../README.md:architecture}}
|
||||
|
||||
The web app, `apps/solvecraft-web`, is the desktop front end compiled to wasm with
|
||||
The web app, `apps/solidcraft-web`, is the desktop front end compiled to wasm with
|
||||
[trunk](https://trunkrs.dev). `xtask` holds the repository's own tooling: `cargo xtask ci`,
|
||||
`layers`, `assets`, `features`, `oracle` and `book`.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ CommandSpec::new("solid.fillet", "Fillet", fillet)
|
||||
|
||||
`run` is `fn(&mut Session, &Value) -> Result<Value>`, and `enabled` is
|
||||
`fn(&Session) -> Result<(), String>`; the error string is the disabled-button tooltip. The
|
||||
`params` string is the one-line documentation shown by `solvecraft-cli commands`, MCP's
|
||||
`params` string is the one-line documentation shown by `solidcraft-cli commands`, MCP's
|
||||
`list_commands` and the [command reference](../reference/commands.md).
|
||||
|
||||
A command that changes the design is undoable by default: the session snapshots the document
|
||||
|
||||
@@ -9,7 +9,7 @@ SolidCraft types (`Body`, face and edge indices, meshes, measures) and a
|
||||
## `guard`
|
||||
|
||||
truck can panic on geometry it doesn't handle. Every call into it goes through
|
||||
`solvecraft_kernel::guard`, which catches the panic and turns it into
|
||||
`solidcraft_kernel::guard`, which catches the panic and turns it into
|
||||
`KernelError::Internal`, leaving the model unchanged:
|
||||
|
||||
```rust
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
A fillet stores the edges it rounds, a sketch the face it sits on, a shell the faces it opens.
|
||||
If those were face and edge *indices*, an upstream edit that adds a face would move the fillet
|
||||
to another edge. SolveCraft stores **names**, and finds them again every time the timeline
|
||||
to another edge. SolidCraft stores **names**, and finds them again every time the timeline
|
||||
evaluates.
|
||||
|
||||
## Why names follow the kernel's history
|
||||
|
||||
@@ -11,8 +11,8 @@ profile and the wasm build check.
|
||||
| Sketch fuzz | `crates/engine/src/cmd/sketch_fuzz_tests.rs` | random sketches through the solver and profile finder |
|
||||
| UI scenarios | `crates/ui-egui/tests/scenarios/*.json` | the real app, headless: clicks, keys, drags, assertions |
|
||||
| Layout tests | `crates/ui-egui/tests/ui_layout.rs`, `window_widths.rs` | panels and dialogs at every window width |
|
||||
| Design-file corpus | `apps/solvecraft-cli/tests/corpus` | every saved file version still opens and evaluates the same |
|
||||
| Kill mid-save | `apps/solvecraft-cli/tests/kill_mid_save.rs` | a save killed at any moment leaves a readable file |
|
||||
| Design-file corpus | `apps/solidcraft-cli/tests/corpus` | every saved file version still opens and evaluates the same |
|
||||
| Kill mid-save | `apps/solidcraft-cli/tests/kill_mid_save.rs` | a save killed at any moment leaves a readable file |
|
||||
| Reference tests | `cargo xtask oracle` → [docs/oracle.md](oracle.md) | parts rebuilt from `tests/oracle/*/recipe.json`, compared with analytic or FreeCAD expected values |
|
||||
|
||||
## UI scenarios
|
||||
@@ -54,12 +54,12 @@ On GitHub, one job builds the tests into a
|
||||
Pull requests skip a few heavy tests (each takes one to four minutes); they run on every push to
|
||||
`main`, nightly, and in `cargo xtask test`:
|
||||
|
||||
- `solvecraft-engine`: `tests::hostile_params_never_panic`, everything in `tests::robustness`,
|
||||
- `solidcraft-engine`: `tests::hostile_params_never_panic`, everything in `tests::robustness`,
|
||||
`pattern_suppress_tests::enclosure_arc_extinction_keeps_a_real_sharp_inner_lip_after_resize_and_reopen`,
|
||||
`pattern_suppress_tests::enclosure_datums_follow_wall_height_and_board_depth_with_material_proofs`,
|
||||
`cmd::plastic::tests::enclosure_snap_fit_follows_resized_front_wall`
|
||||
- `solvecraft-kernel`: `tests::boolean_identity_on_tangent_primitives`
|
||||
- `solvecraft-ui-egui` scenarios: `acceptance_sensor_enclosure`
|
||||
- `solidcraft-kernel`: `tests::boolean_identity_on_tangent_primitives`
|
||||
- `solidcraft-ui-egui` scenarios: `acceptance_sensor_enclosure`
|
||||
|
||||
To run exactly what a pull request runs: `cargo nextest run --cargo-profile ci --profile ci`;
|
||||
add `--ignore-default-filter` for the full set. A new test that takes over a minute on CI can
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
| Format | Read | Write |
|
||||
|---|---|---|
|
||||
| `.solvecraft` (JSON design, versioned) | yes | yes |
|
||||
| `.solidcraft` (JSON design, versioned) | yes | yes |
|
||||
| STEP (AP203, AP214, AP242) | solids, assemblies, units, names, colours | AP242 with names, colours and the component tree |
|
||||
| IGES 5.3 | manifold solids, or trimmed surfaces sewn into solids | manifold solids with names and colours |
|
||||
| 3MF, STL, OBJ | mesh bodies | yes |
|
||||
@@ -53,7 +53,7 @@ another device.
|
||||
1. Open the File menu and choose **Open** to show **Files in this browser**.
|
||||
2. Choose **Download open design** for the current design, including its unsaved changes,
|
||||
or **Download** beside a stored file for its last saved contents.
|
||||
3. Find the `.solvecraft` file in your browser's downloads. Whether a folder chooser appears
|
||||
3. Find the `.solidcraft` file in your browser's downloads. Whether a folder chooser appears
|
||||
depends on your browser's download settings.
|
||||
|
||||
Use **Open from computer…** in the same panel to reopen a downloaded design. The web app
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# 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.
|
||||
The desktop executable is `solidcraft`, the CLI is `solidcraft-cli`, and designs are saved as
|
||||
`.solidcraft`. Designs, settings and setups from builds released under the previous product name keep
|
||||
working (see the [compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md)).
|
||||
|
||||
## Desktop
|
||||
|
||||
@@ -15,20 +15,16 @@ git clone https://github.com/bherbruck/solidcraft && cd solidcraft
|
||||
cargo run --release -p solidcraft -- --sample # opens with a sample part
|
||||
```
|
||||
|
||||
`solvecraft part.step` opens a STEP, IGES, 3MF, STL or OBJ file as a new design, and
|
||||
`solvecraft design.solvecraft` opens a saved design. Windows builds cross-compile from Linux with
|
||||
`solidcraft part.step` opens a STEP, IGES, 3MF, STL or OBJ file as a new design, and
|
||||
`solidcraft design.solidcraft` opens a saved design. Windows builds cross-compile from Linux with
|
||||
`cargo xwin build --release --target x86_64-pc-windows-msvc -p solidcraft`.
|
||||
|
||||
### macOS
|
||||
|
||||
Open the release `.dmg` and drag `SolidCraft.app` onto Applications.
|
||||
|
||||
When updating from an older `SolveCraft.app`, quit the app and rename the existing
|
||||
app in Applications to `SolidCraft.app` first. Then drag the new app onto Applications
|
||||
and choose **Replace**. If you already have both names installed, move the old
|
||||
`SolveCraft.app` to the Trash. The DMG does not remove old installations automatically.
|
||||
Remove any Dock shortcut with the old name, open the new app from Applications, and
|
||||
choose **Options > Keep in Dock**. Designs, settings and the bundle ID are unchanged.
|
||||
When updating from a build released under the previous product name, follow the
|
||||
[macOS upgrade notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md#macos) so you replace it rather than install a second copy.
|
||||
|
||||
### Linux Flatpak
|
||||
|
||||
@@ -38,21 +34,20 @@ to the same user installation:
|
||||
|
||||
```sh
|
||||
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak remote-add --user --if-not-exists solvecraft https://bherbruck.github.io/solidcraft/flatpak/solvecraft.flatpakrepo
|
||||
flatpak install --user solvecraft ai.storyteller.solvecraft
|
||||
flatpak remote-add --user --if-not-exists solidcraft https://bherbruck.github.io/solidcraft/flatpak/solidcraft.flatpakrepo
|
||||
flatpak install --user solidcraft ai.storyteller.solvecraft
|
||||
flatpak run ai.storyteller.solvecraft
|
||||
```
|
||||
|
||||
The application ID and remote name retain their compatibility names. To update an existing
|
||||
remote that still uses the former website address, run
|
||||
`flatpak remote-modify --user --url=https://bherbruck.github.io/solidcraft/flatpak/repo/ solvecraft`
|
||||
and then `flatpak update --user`.
|
||||
The application ID is unchanged, so existing installations keep
|
||||
receiving updates under whatever remote name they were added with (see the
|
||||
[compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md#package-ids)).
|
||||
|
||||
Alternatively, download the release's `.flatpak` file for your architecture and run
|
||||
`flatpak install --user ./solvecraft-VERSION-linux-ARCH.flatpak`. The bundle supplies the
|
||||
`flatpak install --user ./solidcraft-VERSION-linux-ARCH.flatpak`. The bundle supplies the
|
||||
Flathub runtime repository address; installation still needs internet access to fetch any
|
||||
missing runtime. Launch with `flatpak run ai.storyteller.solvecraft`, rather than looking for
|
||||
a host `solvecraft` binary. Files chosen through Open/Save use the desktop file-chooser portal;
|
||||
a host `solidcraft` binary. Files chosen through Open/Save use the desktop file-chooser portal;
|
||||
command-line paths outside Documents may need a specific additional filesystem permission.
|
||||
|
||||
## Web
|
||||
@@ -63,12 +58,12 @@ file storage, which needs HTTPS or localhost. To build it yourself:
|
||||
|
||||
```sh
|
||||
rustup target add wasm32-unknown-unknown
|
||||
cd apps/solvecraft-web && trunk serve --release
|
||||
cd apps/solidcraft-web && trunk serve --release
|
||||
```
|
||||
|
||||
## CLI
|
||||
|
||||
`solvecraft-cli` runs the same commands without a window:
|
||||
`solidcraft-cli` runs the same commands without a window:
|
||||
|
||||
```sh
|
||||
cargo run --release -p solidcraft-cli -- commands # every command, as JSON
|
||||
@@ -90,7 +85,7 @@ A script is a list of commands:
|
||||
]}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
Units are millimetres and degrees unless an expression says otherwise (`"1 in"`, `"30 deg"`),
|
||||
and Z is up.
|
||||
@@ -11,7 +11,7 @@ It runs as:
|
||||
|
||||
- a **desktop app** for Windows and Linux (egui + wgpu);
|
||||
- a **web app** in the browser (wasm, WebGPU or WebGL2), [try it here](app/);
|
||||
- a **headless CLI**, `solvecraft-cli`, that runs command scripts, measures and exports;
|
||||
- a **headless CLI**, `solidcraft-cli`, that runs command scripts, measures and exports;
|
||||
- an **MCP server** that AI agents model with, headless or driving the running app.
|
||||
|
||||
Everything the user can do is a *command* with JSON parameters. The toolbar, the dialogs, scripts,
|
||||
@@ -24,7 +24,7 @@ and a plastic-enclosure subset work; surfaces, drawings, CAM and simulation are
|
||||
the [feature list](dev/features.md) lists every command by area, and the
|
||||
[reference tests](dev/oracle.md) check modelling results against analytic and FreeCAD values.
|
||||
|
||||
Existing `.solvecraft` designs and `solvecraft-cli` commands keep their names and behavior.
|
||||
Existing `.solidcraft` designs and `solidcraft-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
|
||||
|
||||
+123
-20
@@ -1,26 +1,129 @@
|
||||
# Compatibility shims for the SolveCraft → SolidCraft rename
|
||||
# Compatibility with the SolveCraft name
|
||||
|
||||
The product is SolidCraft everywhere. The old name survives only in the shims listed here,
|
||||
each kept so that existing installs, scripts and files keep working. Remove a shim only in a
|
||||
release whose notes say so.
|
||||
SolidCraft was first called SolveCraft, and builds up to 0.4 kept that name in their
|
||||
identifiers after the displayed name changed. 0.5.0 renamed the binaries, release assets and
|
||||
packages; the release after it renames everything else: crates `solidcraft-*`, binaries `solidcraft` and `solidcraft-cli`, `.solidcraft`
|
||||
designs, the `"format": "solidcraft/N"` tag, `SOLIDCRAFT_*` environment variables, settings
|
||||
and recovery folders, the MCP server name, docs, CI and packaging.
|
||||
|
||||
## Programs and packages (since 0.5.0)
|
||||
The old name survives **only** in the shims below (plus their tests, this file, and changelog /
|
||||
release notes). `git grep -i solvecraft` must list nothing else. When you add or remove a
|
||||
shim, update this file in the same PR.
|
||||
|
||||
| Shim | Where | Why | Test |
|
||||
## 1. `.solvecraft` design files
|
||||
|
||||
New designs are saved as `.solidcraft`. Files with the old extension still open everywhere:
|
||||
|
||||
| Path in | Where |
|
||||
|---|---|
|
||||
| Extension → design format | `crates/io/src/lib.rs` (`LEGACY_DESIGN_EXT`, format detection) |
|
||||
| Open dialog filters (desktop) | `apps/solidcraft/src/main.rs` (`services`) |
|
||||
| Drag-drop, recent files, `doc.open`, MCP `open`, CLI `eval`/`run` | go through the same format detection in `solidcraft_io` |
|
||||
| Browser file picker | `apps/solidcraft-web/src/files.rs` (`accept`) |
|
||||
| Windows | `packaging/windows/solidcraft.wxs`: the `.solvecraft` extension on the design ProgId and in `SupportedTypes` |
|
||||
| macOS | `packaging/macos/Info.plist.in`: `solvecraft` in the design document type's extensions |
|
||||
| Linux / FreeBSD / Flatpak | `packaging/linux/ai.storyteller.solvecraft.mime.xml`: `*.solvecraft` glob and the `application/x-solvecraft` alias |
|
||||
|
||||
Recent-files entries that point at a `.solvecraft` file keep working: they are plain paths and
|
||||
open through the same detection. The browser app also lists designs it stored under the old
|
||||
extension, and keyboard-shortcut files exported as `solvecraft-shortcuts/1` still import
|
||||
(`crates/ui-egui/src/toolbar_custom.rs`). Tests: `crates/io` (`Format::from_name`,
|
||||
`is_design_path`), `legacy_extension_and_format_tag_still_open` (CLI, `run_results.rs`) and
|
||||
`legacy_design_files_and_resource_uris` (MCP `open`).
|
||||
|
||||
## 2. The `solvecraft/N` format tag
|
||||
|
||||
Designs record their format as `"format": "solidcraft/N"`. Files saved by builds up to 0.5 say
|
||||
`"format": "solvecraft/N"`; `crates/doc/src/format.rs` (`version_of`) reads both prefixes and
|
||||
upgrades them as usual (the file is re-tagged `solidcraft/N` when saved).
|
||||
|
||||
Not backward-compatible: builds up to 0.5 don't know the new tag and refuse files saved by
|
||||
later builds. Test: `version_of` accepts both prefixes; legacy-tagged designs load and are
|
||||
re-tagged on save.
|
||||
|
||||
## 3. `SOLVECRAFT_*` environment variables
|
||||
|
||||
Every runtime variable is read through one helper, `solidcraft_geom::env` (`var`, `var_os`):
|
||||
it reads `SOLIDCRAFT_<NAME>` and falls back to `SOLVECRAFT_<NAME>` when the new one is unset.
|
||||
The shell entry points do the same: `packaging/linux/AppRun`
|
||||
(`SOLIDCRAFT_NO_DESKTOP_INTEGRATION`) and `packaging/env.sh` (`SOLIDCRAFT_VERSION`,
|
||||
`SOLIDCRAFT_BUILD_DATE`). Tests: the helper's unit tests (new wins, old is the fallback,
|
||||
neither → unset).
|
||||
|
||||
## 4. Settings, preferences, autosave and recovery folders
|
||||
|
||||
New folders use the SolidCraft name:
|
||||
|
||||
| | Linux | macOS | Windows |
|
||||
|---|---|---|---|
|
||||
| `solvecraft-cli` alias binary: forwards every argument and stream to `solidcraft-cli`, prints a one-line deprecation note on stderr, exits with its status | `apps/solvecraft-cli/src/alias.rs`; shipped by every package (deb, rpm, tar.gz, AppImage, Flatpak, FreeBSD, MSI, portable zip, macOS CLI zip, Nix) | scripts and MCP client setups (`claude mcp add solvecraft -- solvecraft-cli mcp`) keep working for at least one release | `apps/solvecraft-cli/tests/legacy_alias.rs`; release workflow checks the deb contents |
|
||||
| Linux app ID `ai.storyteller.solvecraft` (Flatpak ID, desktop entry, metainfo, MIME and icon file names, Wayland app_id) | `packaging/env.sh` (`APP_ID`), `packaging/linux/*`, the app's `with_app_id` | a new Flatpak ID would be a different app: installed Flatpaks would never update. The desktop entry, metainfo and Wayland app_id must equal the Flatpak ID | packaging-lint workflow; Flatpak smoke test |
|
||||
| MSI `UpgradeCode` `6A145FD6-D285-428D-AE84-A69570CDF4DB` (a GUID, no name in it) | `packaging/windows/solidcraft.wxs` | the new MSI upgrades an existing install in place. The install folder moves to `Program Files\SolidCraft` (registry `Software\SolidCraft`); a custom folder chosen for an earlier version is not carried over this once | release workflow (MSI build) |
|
||||
| deb `Replaces`/`Conflicts`/`Provides: solvecraft`, rpm `Obsoletes`/`Provides: solvecraft` | `packaging/linux/nfpm.yaml` | installing the `solidcraft` package replaces the old `solvecraft` one instead of clashing with its files | release workflow checks the deb fields |
|
||||
| A copy of each AppImage's `.zsync` under the old name `solvecraft-<ver>-linux-<arch>.AppImage.zsync` | `packaging/linux/package.sh` | earlier AppImages carry update information that looks for that name; the copy points at the new AppImage | release workflow |
|
||||
| `solvecraft.flatpakrepo` next to `solidcraft.flatpakrepo` | `packaging/flatpak-site.sh` | links in earlier instructions keep working (existing remotes use the repository URL, which is unchanged) | Pages workflow |
|
||||
| `.solvecraft` file associations (Windows ProgId extension, macOS document type, freedesktop MIME glob and `application/x-solvecraft` alias) | `packaging/windows/solidcraft.wxs`, `packaging/macos/Info.plist.in`, `packaging/linux/ai.storyteller.solvecraft.mime.xml` | existing design files keep opening in SolidCraft from the file manager | packaging-lint workflow |
|
||||
| `SOLVECRAFT_VERSION`, `SOLVECRAFT_BUILD_DATE`, `SOLVECRAFT_MAINTAINER`, `SOLVECRAFT_NO_DESKTOP_INTEGRATION` read when the `SOLIDCRAFT_*` name is unset | `packaging/env.sh`, `packaging/linux/package.sh`, `packaging/linux/AppRun` | build scripts and AppImage users' environments keep working | packaging tests |
|
||||
| Preferences, graphics settings | `~/.local/share/solidcraft` | `~/Library/Application Support/SolidCraft` | `%APPDATA%\SolidCraft\data` |
|
||||
| Recovery (autosave) | `…/solidcraft/recovery` | `…/SolidCraft/recovery` | `%LOCALAPPDATA%\SolidCraft\recovery` |
|
||||
|
||||
## Not kept
|
||||
On first launch, if the new folder doesn't exist but the old one (`solvecraft` / `SolveCraft`)
|
||||
does, it is **copied** to the new location; the old folder is never deleted or changed. The
|
||||
window and UI state that eframe kept under `ai.storyteller.solvecraft` is copied the same way.
|
||||
Autosaves copied from the old folder (`<id>.solvecraft`) are listed and recovered like new ones.
|
||||
The preferences key in eframe's storage is `solidcraft.prefs`; `solvecraft.prefs` is read when
|
||||
it is missing (desktop and browser, `solidcraft_ui_egui::prefs::stored`). The browser app also
|
||||
reads files and the autosave it kept under the old names in local storage and OPFS
|
||||
(`apps/solidcraft-web/src/files.rs`). A 3DxWare profile the driver made for the old executable
|
||||
name is read until it makes a new one (`apps/solidcraft/src/space_mouse.rs`).
|
||||
The thumbnail cache is not migrated; it is rebuilt. The copy helper is
|
||||
`solidcraft_io::adopt_legacy_dir`, used by the desktop app (`adopt_legacy_settings`) and
|
||||
`solidcraft_engine::recovery::default_dir`. Tests: `legacy_dir` (copy once, never overwrite,
|
||||
old folder intact), `first_launch_adopts_the_previous_release_settings`,
|
||||
`autosave_from_a_legacy_folder_is_listed_and_loads`, `recovery_dirs_and_their_legacy_names`,
|
||||
`stored_prefs_fall_back_to_the_legacy_key`.
|
||||
|
||||
- The macOS bundle identifier is now `ai.storyteller.solidcraft`: apps are installed by dragging
|
||||
from the DMG and there is no updater keyed on it. The first launch may ask again for Gatekeeper
|
||||
approval.
|
||||
- The GUI binary has no alias: every package's launcher, shortcut and file association runs
|
||||
`solidcraft`.
|
||||
## 5. `solvecraft-cli` alias
|
||||
|
||||
A tiny `solvecraft-cli` binary (`apps/solidcraft-cli/src/alias.rs`) ships in every package for
|
||||
at least one release (since 0.5.0). It prints a one-line deprecation note to stderr and runs the
|
||||
`solidcraft-cli` next to it with the same arguments, stdin/stdout and exit code, so scripts
|
||||
and MCP client configs that call `solvecraft-cli` keep working. Test: `apps/solidcraft-cli/tests/legacy_alias.rs` (forwards `--version` and the exit status;
|
||||
the note goes to stderr only, so stdout stays clean for MCP).
|
||||
|
||||
There is no alias for the desktop binary: launchers, file associations and Start-menu entries
|
||||
installed by the packages point at `solidcraft`.
|
||||
|
||||
## 6. MCP
|
||||
|
||||
`serverInfo.name` is now `solidcraft`. The name a client shows is chosen by the user when the
|
||||
server is added, so an existing setup such as
|
||||
|
||||
```sh
|
||||
claude mcp add solvecraft -- solvecraft-cli mcp
|
||||
```
|
||||
|
||||
keeps working (through the alias above). New setups use:
|
||||
|
||||
```sh
|
||||
claude mcp add solidcraft -- solidcraft-cli mcp
|
||||
```
|
||||
|
||||
Switch before the alias is removed. Resources are listed as `solidcraft://design` and
|
||||
`solidcraft://commands`; the old `solvecraft://` URIs still read (`crates/mcp/src/server.rs`,
|
||||
test `legacy_design_files_and_resource_uris`).
|
||||
|
||||
## Package IDs
|
||||
|
||||
| Package | Decision | Why |
|
||||
|---|---|---|
|
||||
| Flatpak app ID / Linux desktop ID `ai.storyteller.solvecraft` | **kept** | A new Flatpak ID is a different app: existing installs would stop receiving updates. The `.desktop`, metainfo and MIME file names and the Wayland `app_id` must match it, so they keep it too. |
|
||||
| Flatpak remote file | `solidcraft.flatpakrepo`, plus a legacy `solvecraft.flatpakrepo` copy | Old links keep working; existing remotes point at the repo URL, which is unchanged. |
|
||||
| macOS bundle ID | changed to `ai.storyteller.solidcraft` | No updater depends on it; the app is drag-installed. macOS may ask again on first launch (unsigned builds). |
|
||||
| MSI `UpgradeCode` | **kept** | So the new MSI upgrades the old install in place. Product name is SolidCraft; the default folder becomes `Program Files\SolidCraft` (the major upgrade removes the old folder). A custom install folder isn't remembered across this one upgrade. |
|
||||
| deb / rpm package name | renamed to `solidcraft`; deb `Replaces`/`Conflicts`/`Provides: solvecraft`, rpm `Obsoletes`/`Provides: solvecraft` | Installing the new package replaces the old one instead of installing side by side. |
|
||||
| AppImage | `solidcraft-<version>-linux-<arch>.AppImage`; the release also carries a copy of its `.zsync` under the old `solvecraft-…` name | AppImages already installed look for the old-named `.zsync`, so AppImageUpdate keeps finding updates. |
|
||||
|
||||
## macOS
|
||||
|
||||
Releases before 0.4 were installed as `SolveCraft.app`. To update, quit the app, drag
|
||||
`SolidCraft.app` from the DMG onto Applications, move `SolveCraft.app` to the Trash, and
|
||||
replace any Dock shortcut with the old name (open `SolidCraft.app`, then
|
||||
**Options > Keep in Dock**). Designs and settings are kept (see 4).
|
||||
|
||||
## Flatpak remotes added from the former website address
|
||||
|
||||
`flatpak remote-modify --user --url=https://bherbruck.github.io/solidcraft/flatpak/repo/ solvecraft`
|
||||
(use your remote's name), then `flatpak update --user`.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Control protocol
|
||||
|
||||
`solvecraft --control PORT` (or `SOLVECRAFT_CONTROL_PORT=PORT`) listens on `127.0.0.1:PORT` for
|
||||
`solidcraft --control PORT` (or `SOLIDCRAFT_CONTROL_PORT=PORT`) listens on `127.0.0.1:PORT` for
|
||||
JSON lines. Each request is one line `{"id": …, "method": "…", "params": {…}}`; each reply is one
|
||||
line `{"id": …, "ok": true, "result": …}` or `{"id": …, "ok": false, "error": "…"}`. Requests are
|
||||
handled on the UI thread between frames; pointer and keyboard input is injected as real egui
|
||||
@@ -23,7 +23,7 @@ answered within 60 seconds is replied to with `{"ok": false, "error": "timeout"}
|
||||
| `engine.commands` | — | every command: id, label, tab, panel, icon, shortcut, params doc, enabled |
|
||||
| `document.inspect` | `measure?`: bool | parameters, timeline (errors, timings), bodies, sketches, selection |
|
||||
|
||||
Commands never open dialogs when run this way. `solvecraft-cli commands` prints the same registry.
|
||||
Commands never open dialogs when run this way. `solidcraft-cli commands` prints the same registry.
|
||||
|
||||
Every `sketch.*` command that changes a sketch adds `created: {points, curves, constraints,
|
||||
dimensions}` to its result (and `wires` for 3D curves): the ids of what it added, in creation
|
||||
@@ -85,7 +85,7 @@ unit regardless of the design, pass an expression with one: `"value": "50 mm"` o
|
||||
|
||||
## MCP
|
||||
|
||||
`solvecraft-cli mcp --connect 127.0.0.1:PORT` bridges an MCP client (an AI agent) to this
|
||||
`solidcraft-cli mcp --connect 127.0.0.1:PORT` bridges an MCP client (an AI agent) to this
|
||||
channel; see [mcp.md](mcp.md).
|
||||
|
||||
## Example
|
||||
|
||||
@@ -8,15 +8,15 @@ until you review and submit it, and the design is not part of the draft.
|
||||
|
||||
## Where they are
|
||||
|
||||
`<data dir>/solvecraft/crashes/`, next to the recovery folder:
|
||||
`<data dir>/solidcraft/crashes/`, next to the recovery folder:
|
||||
|
||||
| System | Folder |
|
||||
|---|---|
|
||||
| Linux | `~/.local/share/solvecraft/crashes` (or `$XDG_DATA_HOME/solvecraft/crashes`) |
|
||||
| Windows | `%LOCALAPPDATA%\SolveCraft\crashes` |
|
||||
| macOS | `~/Library/Application Support/SolveCraft/crashes` |
|
||||
| Linux | `~/.local/share/solidcraft/crashes` (or `$XDG_DATA_HOME/solidcraft/crashes`) |
|
||||
| Windows | `%LOCALAPPDATA%\SolidCraft\crashes` |
|
||||
| macOS | `~/Library/Application Support/SolidCraft/crashes` |
|
||||
|
||||
`SOLVECRAFT_CRASH_DIR` overrides the folder. `solvecraft --crash-log` and
|
||||
`SOLIDCRAFT_CRASH_DIR` overrides the folder. `solidcraft --crash-log` and
|
||||
`solidcraft-cli crashes dir` print it.
|
||||
|
||||
## For agents
|
||||
@@ -32,10 +32,10 @@ All of these read the same folder:
|
||||
|
||||
**Reproduce:** `solidcraft-cli crashes replay <id>` opens the report's design, runs its
|
||||
commands, and reports whether the same internal error happens again (same place and message).
|
||||
Without the CLI, run `solidcraft-cli run <report>/replay.json --in <report>/design.solvecraft`.
|
||||
Without the CLI, run `solidcraft-cli run <report>/replay.json --in <report>/design.solidcraft`.
|
||||
A fixed crash turns into a regression test with the same two files.
|
||||
|
||||
**Check that reporting works:** with `SOLVECRAFT_CRASH_TEST=1` set for the app, the command
|
||||
**Check that reporting works:** with `SOLIDCRAFT_CRASH_TEST=1` set for the app, the command
|
||||
`diagnostics.crash_test` has three modes:
|
||||
- `panic`: an internal error in a command
|
||||
- `kernel`: an internal error inside the geometry kernel
|
||||
@@ -45,7 +45,7 @@ A fixed crash turns into a regression test with the same two files.
|
||||
|
||||
A folder `crashes/<YYYYMMDD-HHMMSS>-<signature>/`:
|
||||
|
||||
- `report.json` (`"format": "solvecraft-crash/1"`):
|
||||
- `report.json` (`"format": "solidcraft-crash/1"`):
|
||||
- `kind`: one of
|
||||
- `command_panic`: a command hit an internal error; it was caught and the design was left unchanged
|
||||
- `kernel_panic_recovered`: the third-party geometry kernel panicked and was caught. This is harmless on the desktop, but it would crash the web build.
|
||||
@@ -59,7 +59,7 @@ A folder `crashes/<YYYYMMDD-HHMMSS>-<signature>/`:
|
||||
- `base`: what the replay starts from (the design before the command, an autosave, a saved file or a new design)
|
||||
- `count`, `first_seen`, `last_seen`: the same crash repeats only increase `count`
|
||||
- `notes`: what is missing and why, for example a design too large to copy
|
||||
- `design.solvecraft`: the design the replay starts from
|
||||
- `design.solidcraft`: the design the replay starts from
|
||||
- `replay.json`: `{"commands": [{command, params}, …]}`
|
||||
|
||||
## How it stays cheap and small
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Features
|
||||
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solvecraft-cli commands`). **314 commands.** Every command runs the same way from the toolbar, a script, `solvecraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solidcraft-cli commands`). **314 commands.** Every command runs the same way from the toolbar, a script, `solidcraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
|
||||
## Sketch (97)
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ The desktop host tries system CJK fonts across Windows, macOS and Linux, as well
|
||||
in native desktop distribution packages; native builds rely entirely on existing operating system fonts
|
||||
or craft-fonts.
|
||||
|
||||
In the browser, `solvecraft-web` bundles a self-hosted Japanese font (`BIZUDPGothic-Regular.ttf`, licensed
|
||||
In the browser, `solidcraft-web` bundles a self-hosted Japanese font (`BIZUDPGothic-Regular.ttf`, licensed
|
||||
under SIL OFL 1.1) within the web distribution artifacts only. The font is loaded asynchronously from the same
|
||||
origin (`./fonts/BIZUDPGothic-Regular.ttf`) on-demand when the interface language is set to Japanese, without
|
||||
contacting any external CDNs or third-party servers. For users with an English interface, no font download
|
||||
|
||||
+12
-11
@@ -9,14 +9,14 @@ toolbar, palette, scripts and control channel use, and never opens a dialog.
|
||||
|
||||
```sh
|
||||
# Headless: an in-process design session, no window (CPU renders for screenshots).
|
||||
solvecraft-cli mcp
|
||||
solidcraft-cli mcp
|
||||
|
||||
# Headless, starting from a design file or a command script.
|
||||
solvecraft-cli mcp --in part.solvecraft
|
||||
solidcraft-cli mcp --in part.solidcraft
|
||||
|
||||
# Bridged to the running app, so you can watch the agent model:
|
||||
solvecraft --control 7878 &
|
||||
solvecraft-cli mcp --connect 127.0.0.1:7878
|
||||
solidcraft --control 7878 &
|
||||
solidcraft-cli mcp --connect 127.0.0.1:7878
|
||||
```
|
||||
|
||||
stdout carries only protocol messages; errors go to stderr. Bridged screenshots are written to a
|
||||
@@ -24,12 +24,13 @@ temporary file by the app and read back by the server, so both must run on the s
|
||||
|
||||
### Client configuration
|
||||
|
||||
Claude Code (project `.mcp.json`, or `claude mcp add solvecraft -- solvecraft-cli mcp`):
|
||||
Claude Code (project `.mcp.json`, or `claude mcp add solidcraft -- solidcraft-cli mcp`; a setup
|
||||
added under the previous name keeps working, see the [compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md#mcp)):
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"solvecraft": { "command": "solvecraft-cli", "args": ["mcp"] }
|
||||
"solidcraft": { "command": "solidcraft-cli", "args": ["mcp"] }
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -39,7 +40,7 @@ Claude Desktop (`claude_desktop_config.json`), bridged to a running app:
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"solvecraft": { "command": "/path/to/solvecraft-cli", "args": ["mcp", "--connect", "127.0.0.1:7878"] }
|
||||
"solidcraft": { "command": "/path/to/solidcraft-cli", "args": ["mcp", "--connect", "127.0.0.1:7878"] }
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -60,7 +61,7 @@ Claude Desktop (`claude_desktop_config.json`), bridged to a running app:
|
||||
| `undo`, `redo` | — | Undo / redo one change. |
|
||||
| `crash_reports` | `id?`, `limit?` | The crash reports on this computer, newest first; with `id`, the whole report (backtrace, command, recent commands, `design_path`/`replay_path`). See [crash-reports.md](crash-reports.md). |
|
||||
| `new_design` | `name?` | Start an empty design. |
|
||||
| `open` | `path` | Open a `.solvecraft` design, a STEP file (`.step`/`.stp`) as a new design holding its bodies (an Import base feature), or a 3MF/STL file as mesh bodies. |
|
||||
| `open` | `path` | Open a `.solidcraft` design, a STEP file (`.step`/`.stp`) as a new design holding its bodies (an Import base feature), or a 3MF/STL file as mesh bodies. |
|
||||
| `save` | `path?` | Save the design (to its current file without `path`). |
|
||||
|
||||
To change a feature after it is made, read its definition with `execute` `timeline.inspect`
|
||||
@@ -68,7 +69,7 @@ To change a feature after it is made, read its definition with `execute` `timeli
|
||||
`{"extent": {"distance": "30"}}`). The fields per feature type are listed in the book's
|
||||
*Solid features* chapter.
|
||||
|
||||
Resources: `solvecraft://design` (inspect JSON with measurements) and `solvecraft://commands`
|
||||
Resources: `solidcraft://design` (inspect JSON with measurements) and `solidcraft://commands`
|
||||
(the catalog).
|
||||
|
||||
Errors: an unknown tool or arguments that don't match the tool's schema are JSON-RPC
|
||||
@@ -83,8 +84,8 @@ the batch added to the undo history.)
|
||||
|
||||
## Demo: an enclosure built over MCP
|
||||
|
||||
`examples/demo/enclosure_mcp.py` is a small MCP client. It drives a running app (`solvecraft
|
||||
--control PORT`) through `solvecraft-cli mcp --connect` and builds an electronics enclosure one
|
||||
`examples/demo/enclosure_mcp.py` is a small MCP client. It drives a running app (`solidcraft
|
||||
--control PORT`) through `solidcraft-cli mcp --connect` and builds an electronics enclosure one
|
||||
`execute` call at a time (`enclosure_steps.json`): a rounded box, shelled open at the top, a
|
||||
USB port cut through a side wall, four screw bosses, and then a change of the `width`
|
||||
parameter that the timeline rebuilds. `examples/demo/record.sh` records the run with ffmpeg,
|
||||
|
||||
+11
-11
@@ -14,7 +14,7 @@ nix run github:bherbruck/solidcraft#solidcraft -- --sample
|
||||
```
|
||||
|
||||
Inside a checkout, `nix run .` and `nix run .#solidcraft` launch the desktop app.
|
||||
`nix run .#cli -- --version` launches the CLI. The legacy `.#solvecraft` app name
|
||||
`nix run .#cli -- --version` launches the CLI. The legacy `.#solidcraft` app name
|
||||
also works. These commands use the flake's exact wrapped binary, rather than an
|
||||
older executable already on your shell's `PATH`.
|
||||
|
||||
@@ -26,8 +26,8 @@ nix build github:bherbruck/solidcraft#solidcraft
|
||||
./result/bin/solidcraft --sample
|
||||
```
|
||||
|
||||
The result contains `solidcraft`, the compatible `solvecraft` binary name, and
|
||||
`solvecraft-cli`. **Building does not install a desktop-menu entry.** For a user
|
||||
The result contains `solidcraft`, `solidcraft-cli` and the deprecated old-name CLI alias
|
||||
(see [compatibility.md](compatibility.md)). **Building does not install a desktop-menu entry.** For a user
|
||||
profile installation, run:
|
||||
|
||||
```sh
|
||||
@@ -41,19 +41,19 @@ sizes alongside the commands. On macOS the package contains the binaries only; f
|
||||
`packages.${system}.solidcraft` in `environment.systemPackages`/`home.packages`.
|
||||
If a non-NixOS desktop does not discover profile-installed launchers, ensure that
|
||||
its session includes `~/.nix-profile/share` in `XDG_DATA_DIRS`, then log out and
|
||||
back in. The existing `ai.storyteller.solvecraft` desktop/application ID and
|
||||
`.solvecraft` design files remain compatible.
|
||||
back in. The desktop/application ID is unchanged (see
|
||||
[compatibility.md](compatibility.md#package-ids)).
|
||||
|
||||
Check which executable a plain terminal command would run:
|
||||
|
||||
```sh
|
||||
type -a solidcraft solvecraft
|
||||
type -a solidcraft
|
||||
readlink -f "$(command -v solidcraft)"
|
||||
solidcraft --version
|
||||
nix run github:bherbruck/solidcraft#solidcraft -- --version
|
||||
```
|
||||
|
||||
An unrelated old `solvecraft` executable on `PATH` is not updated by `nix build`.
|
||||
An unrelated old executable on `PATH` is not updated by `nix build`.
|
||||
Use the flake app or `./result/bin/solidcraft` to verify the package you just built.
|
||||
|
||||
## Graphics and file dialogs
|
||||
@@ -85,7 +85,7 @@ OpenGL rendering uses 1x anti-aliasing to avoid the multisampled black-frame fai
|
||||
Vulkan and other backends keep the requested sample count; saved preferences are preserved.
|
||||
For older builds, including 0.3.0, set Anti-aliasing to 1x and restart when using OpenGL.
|
||||
If that window cannot show the settings dialog, edit only the `msaa` field to `1` in
|
||||
`~/.local/share/solvecraft/graphics.json`; preserve any other settings.
|
||||
`~/.local/share/solidcraft/graphics.json`; preserve any other settings.
|
||||
|
||||
## Wayland, XWayland and niri
|
||||
|
||||
@@ -97,12 +97,12 @@ under niri's XWayland. The trade-off: **on native Wayland, dropping files onto t
|
||||
window does not work**; use File > Open or pass the file on the command line.
|
||||
This applies to every build, not only the Nix package.
|
||||
|
||||
Override the choice with `SOLVECRAFT_WAYLAND=1` (always native Wayland) or
|
||||
`SOLVECRAFT_WAYLAND=0` (XWayland whenever an X display is available).
|
||||
Override the choice with `SOLIDCRAFT_WAYLAND=1` (always native Wayland) or
|
||||
`SOLIDCRAFT_WAYLAND=0` (XWayland whenever an X display is available).
|
||||
|
||||
## Development shells
|
||||
|
||||
`nix develop` supplies runtime libraries and uses the Rust/C toolchain already on
|
||||
your `PATH`. `nix develop .#rust` supplies the pinned toolchain, C linker and
|
||||
`target/nix` build directory. Both retain the GUI and CLI's existing Cargo package
|
||||
names (`solvecraft`, `solvecraft-cli`).
|
||||
names (`solidcraft`, `solidcraft-cli`).
|
||||
+14
-14
@@ -39,14 +39,14 @@ Cross-part scheduling, parallel B-rep reconstruction and later display meshes re
|
||||
Reproduce after compiling, without other builds running:
|
||||
|
||||
```sh
|
||||
cargo test -p solvecraft-kernel --profile ci benchmark_independent_step_solids --no-run
|
||||
SOLVECRAFT_STEP_BENCH_COUNT=512 SOLVECRAFT_STEP_BENCH_KIND=cylinder \
|
||||
cargo test -p solvecraft-kernel --profile ci benchmark_independent_step_solids \
|
||||
cargo test -p solidcraft-kernel --profile ci benchmark_independent_step_solids --no-run
|
||||
SOLIDCRAFT_STEP_BENCH_COUNT=512 SOLIDCRAFT_STEP_BENCH_KIND=cylinder \
|
||||
cargo test -p solidcraft-kernel --profile ci benchmark_independent_step_solids \
|
||||
-- --ignored --nocapture --test-threads=1
|
||||
```
|
||||
|
||||
Use `torus` or `box` for the other fixtures and repeat in three fresh processes.
|
||||
`SOLVECRAFT_STEP_BENCH_FIXTURE` optionally writes the original STEP for native inspection.
|
||||
`SOLIDCRAFT_STEP_BENCH_FIXTURE` optionally writes the original STEP for native inspection.
|
||||
No timing threshold runs in CI. Regressions compare serial and threaded imports with
|
||||
different worker counts: exact display meshes, measures, body/face source identities,
|
||||
names, colours/opacity, units, rotated assembly placements, duplicates and partial failures
|
||||
@@ -64,7 +64,7 @@ across edits.
|
||||
The reproducible microbenchmark is:
|
||||
|
||||
```sh
|
||||
cargo test -p solvecraft-doc --profile ci benchmark_prepared_extrude_sources -- --ignored --nocapture
|
||||
cargo test -p solidcraft-doc --profile ci benchmark_prepared_extrude_sources -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Three Windows x64 optimized `ci` runs, during other compilation, compared the previous
|
||||
@@ -89,9 +89,9 @@ straight-line projection and exact surface-refinement reuse changes:
|
||||
| Local Pi case assembly, 25 features, 2,990 bodies | 14.75 s | 11.57 s | 21.6% |
|
||||
|
||||
These are geometry rebuild times, not complete desktop opening times. The public fixture
|
||||
can be generated with `solvecraft-cli run examples/acceptance/sensor_enclosure.json
|
||||
--save sensor.solvecraft --quiet`, then measured with `solvecraft-cli bench-open
|
||||
sensor.solvecraft`. Each benchmark starts a new process; this does not measure a warm
|
||||
can be generated with `solidcraft-cli run examples/acceptance/sensor_enclosure.json
|
||||
--save sensor.solidcraft --quiet`, then measured with `solidcraft-cli bench-open
|
||||
sensor.solidcraft`. Each benchmark starts a new process; this does not measure a warm
|
||||
timeline-cache hit. The local assembly is private and is not part of the repository.
|
||||
|
||||
Straight segments now use guarded algebraic closest-point projection instead of sampling
|
||||
@@ -109,7 +109,7 @@ Both saved fixtures retain exactly the same body names, face/edge/vertex/shell c
|
||||
bounds, volumes, and surface areas. Focused tests compare cached and uncached refinement
|
||||
coordinates and normals bit for bit on periodic, singular and transformed surfaces.
|
||||
|
||||
For desktop phase profiling, set `SOLVECRAFT_PROFILE_OPEN=1` before launching the app.
|
||||
For desktop phase profiling, set `SOLIDCRAFT_PROFILE_OPEN=1` before launching the app.
|
||||
Interactive Open reports geometry, placement, tessellation, thumbnail and total worker
|
||||
times to stderr without logging the source path. Thumbnails were about 0.1 seconds of
|
||||
the slow assembly's open and were not the main bottleneck. Further cold Boolean and
|
||||
@@ -132,7 +132,7 @@ ready: 13.04 s geometry, 2.20 s placement, 0.53 s meshing and 0.07 s thumbnails.
|
||||
the optimized `ci` profile and actual Vulkan rendering, with isolated settings and caches.
|
||||
Linux and Windows timings are separate measurements and must not be compared as a speedup.
|
||||
|
||||
`solvecraft-cli bench-open design.solvecraft` reports JSON lines for file reading,
|
||||
`solidcraft-cli bench-open design.solidcraft` reports JSON lines for file reading,
|
||||
JSON decoding and migrations (including input-name repair), timeline evaluation, individual
|
||||
features, and world placement/display meshing. `--parse-only` stops before geometry evaluation.
|
||||
The parse timer includes document validation and repair, not just the JSON parser.
|
||||
@@ -205,7 +205,7 @@ every row's place.
|
||||
|
||||
# Recompute performance
|
||||
|
||||
`solvecraft-cli bench-edit <script> <param> "(<old>) * 1.02"` builds a design from its script
|
||||
`solidcraft-cli bench-edit <script> <param> "(<old>) * 1.02"` builds a design from its script
|
||||
(timing the build), then times a parameter edit, setting the parameter back to its old
|
||||
expression, undo and redo. Each cell is before → after the evaluation cache, with the number of
|
||||
features recomputed in parentheses. Release build, on a machine shared with other build jobs (load average about 45; the
|
||||
@@ -268,7 +268,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 `SolidCraft/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
|
||||
@@ -277,7 +277,7 @@ No thumbnail or base64 image is added to the design JSON. A regression test veri
|
||||
source bytes remain unchanged, a cached picture works even without a parseable source
|
||||
file, and changing the source invalidates the cache.
|
||||
|
||||
`solvecraft-cli bench-open` also accepts STEP/IGES. For exchange files its `parse` phase
|
||||
`solidcraft-cli bench-open` also accepts STEP/IGES. For exchange files its `parse` phase
|
||||
includes constructing and checking the imported B-rep, not merely decoding STEP syntax.
|
||||
|
||||
The live test loaded both cached recent cards in 21 ms and inserted the 2 MB lightweight
|
||||
@@ -299,7 +299,7 @@ drag's steps are a quarter of the smallest held size instead of an eighth, excep
|
||||
ran out of budget: the rest of that drag goes in eighths, as before, and continuation keeps
|
||||
the branch the seed no longer places.
|
||||
|
||||
`cargo run --release -p solvecraft-sketch --example solve_bench`, macOS arm64, load average
|
||||
`cargo run --release -p solidcraft-sketch --example solve_bench`, macOS arm64, load average
|
||||
45–75 (best of 5):
|
||||
|
||||
| Grid (origin corner fixed, rows horizontal, columns vertical, every edge a distance) | Start | Before | After |
|
||||
|
||||
+7
-9
@@ -6,16 +6,14 @@ 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
|
||||
## Names and deployment
|
||||
|
||||
SolidCraft is the product display name. Keep existing release asset filenames, including
|
||||
`SolveCraft-{version}-windows-x64.exe` and `solvecraft-cli` archives, together
|
||||
with installed package IDs and settings paths. The macOS DMG now contains `SolidCraft.app`
|
||||
with a `SolidCraft` bundle executable and icon; its bundle ID remains
|
||||
`ai.storyteller.solvecraft`. Include the one-time macOS upgrade instructions from
|
||||
`.github/release-notes.md` so users replace an existing `SolveCraft.app` rather than
|
||||
installing a second copy. Do not rewrite published 0.2.0 or 0.2.1 assets,
|
||||
checksums, tags or historical release notes.
|
||||
Every release asset, binary, installer product name and package uses the SolidCraft name
|
||||
(`solidcraft-<version>-linux-<arch>.AppImage`, `SolidCraft-<version>-windows-x64.exe`,
|
||||
`solidcraft-cli` archives, …). The old name survives only in the shims listed in
|
||||
[compatibility.md](compatibility.md) (the Linux app ID, the legacy `.zsync` and `.flatpakrepo`
|
||||
copies, the deprecated old-name CLI alias); keep them until that document says they can go. Do not
|
||||
rewrite published assets, checksums, tags or historical release notes of earlier versions.
|
||||
|
||||
Project Pages publishes the documentation, browser app and published-release Flatpak
|
||||
repository under `/solidcraft/`. Do not add a separate owner-site publisher or permanent
|
||||
|
||||
+2
-2
@@ -7,8 +7,8 @@ robustness runs build random but realistic designs and check every step.
|
||||
## How it runs
|
||||
|
||||
```
|
||||
solvecraft-cli fuzz --from 0 --count 1000 --jobs 8 --timeout 90 --out runs/ --report report.md
|
||||
solvecraft-cli fuzz-one <seed> --minimise # one design, cut down to the steps that matter
|
||||
solidcraft-cli fuzz --from 0 --count 1000 --jobs 8 --timeout 90 --out runs/ --report report.md
|
||||
solidcraft-cli fuzz-one <seed> --minimise # one design, cut down to the steps that matter
|
||||
```
|
||||
|
||||
`--count` seeds are run starting at `--from`. A range that exceeds `u64::MAX` is
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
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.
|
||||
- **Open**: File → Open (`doc.open`) accepts `.step`/`.stp` in any case and starts a new design; `solidcraft part.step`; `solidcraft-cli eval part.step`, `solidcraft-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}`).
|
||||
- **Drag and drop** a STEP file on the window: inserted when the design has features, opened otherwise.
|
||||
|
||||
|
||||
@@ -5,13 +5,13 @@ dotted ids and reconciled with the current implementation.
|
||||
|
||||
| Branches | Result |
|
||||
|---|---|
|
||||
| `solvecraft-sk`, `solvecraft-d2` | Ported `62d22e2` and `e0b3138`: sketches/projections see placed components; cache keys include placements; moved feature dialogs resolve world picks; Joints uses Browser rows. |
|
||||
| `solvecraft-b4` | Ported `2c18dac`: canvases carry component ownership and named joint origins follow component placements. |
|
||||
| `solvecraft-asm` | Ported `bc05805`: joint snap feedback, Drive limits, joint menus, and Motion Study editing/playback controls. |
|
||||
| `solvecraft-shell`, `solvecraft-shell-b` | Browser chevrons, shared occurrence Move triad, toolbar customization, workspace switcher and status labels are already present on main. Their scenarios remain active; the Joints chevron scenario is now active too. |
|
||||
| `solvecraft-kdev3`, `solvecraft-kdev`, `solvecraft-kdev2` | Previously landed as `67c79ec`; the old refs were already removed. |
|
||||
| `solvecraft-kdev4` | The earlier robustness, shell, blends, wasm and measurement work is already present. Ported the remaining `9f98449` stacked-prism sewing and repaired curved-boundary face picking. |
|
||||
| `solvecraft-params(-build)` | Previously landed as `517b7a9`. |
|
||||
| `solidcraft-sk`, `solidcraft-d2` | Ported `62d22e2` and `e0b3138`: sketches/projections see placed components; cache keys include placements; moved feature dialogs resolve world picks; Joints uses Browser rows. |
|
||||
| `solidcraft-b4` | Ported `2c18dac`: canvases carry component ownership and named joint origins follow component placements. |
|
||||
| `solidcraft-asm` | Ported `bc05805`: joint snap feedback, Drive limits, joint menus, and Motion Study editing/playback controls. |
|
||||
| `solidcraft-shell`, `solidcraft-shell-b` | Browser chevrons, shared occurrence Move triad, toolbar customization, workspace switcher and status labels are already present on main. Their scenarios remain active; the Joints chevron scenario is now active too. |
|
||||
| `solidcraft-kdev3`, `solidcraft-kdev`, `solidcraft-kdev2` | Previously landed as `67c79ec`; the old refs were already removed. |
|
||||
| `solidcraft-kdev4` | The earlier robustness, shell, blends, wasm and measurement work is already present. Ported the remaining `9f98449` stacked-prism sewing and repaired curved-boundary face picking. |
|
||||
| `solidcraft-params(-build)` | Previously landed as `517b7a9`. |
|
||||
|
||||
The source WIP refs are retained until this batch merges. Delete them only after the merged
|
||||
main contains the reconciled changes and passes CI.
|
||||
|
||||
Reference in new issue
Block a user