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
+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`.
|
||||
Reference in new issue
Block a user