forked from 1b-agent/fieldcraft-upstream
* modelcraft-io: the .modelcraft file (modelcraft/1), atomic writes, autosave storage A stored ZIP of a manifest (format tag, geometry sources with SHA-256, part sizes and hashes), the model definition as stable pretty JSON, the mesh and geometry tags in a compact binary part, and the journal one command per line. Reading caps every size, checks every checksum and replays the model through its checked methods. Model::without_mesh and empty mesh fields left out of the model's JSON; geometry::read_file. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * engine: undo/redo on the journal, file.open/save/save_as, autosave and recovery CommandSpec gains a kind: Model commands are journalled and become undo steps; Session commands (file.*, edit.*) manage the session. Undo history is bounded by steps and estimated memory. Geometry sources are recorded with content hashes and reopened on file.open (missing or changed files are warnings). Desktop app autosaves every 30 s and reports recoverable models; Ctrl/Cmd+Z and Shift+Z/Y undo and redo. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * docs: the .modelcraft format, undo history, roadmap and parity status Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * simplify: shared path parameter, one load path for open/recover, history accounting in History Session commands skip the per-command model copy; saved revision is an Option; journal written from borrowed entries and read without an intermediate tree; backups copied by the file system; recovery lock and error helpers; geometry file wrappers use read_file. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm --------- Co-authored-by: jyviko <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]>
103 lines
3.9 KiB
TOML
103 lines
3.9 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
authors = ["ModelCraft contributors"]
|
|
repository = "https://github.com/jyviko/modelcraft"
|
|
|
|
[workspace.dependencies]
|
|
# internal
|
|
modelcraft-model = { path = "crates/model" }
|
|
modelcraft-geometry = { path = "crates/geometry" }
|
|
modelcraft-mesh = { path = "crates/mesh" }
|
|
modelcraft-decks = { path = "crates/decks" }
|
|
modelcraft-io = { path = "crates/io" }
|
|
modelcraft-engine = { path = "crates/engine" }
|
|
modelcraft-testkit = { path = "crates/testkit" }
|
|
modelcraft-render = { path = "crates/render" }
|
|
modelcraft-ui-egui = { path = "crates/ui-egui" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = { version = "1", features = ["float_roundtrip"] }
|
|
log = "0.4"
|
|
|
|
# 3MF packages (docs/formats/tagged-mesh.md): the same versions SolidCraft uses.
|
|
zip = { version = "3", default-features = false, features = ["deflate"] }
|
|
quick-xml = "0.41"
|
|
|
|
# content hashes and part checksums of .modelcraft files (the version SolidCraft uses)
|
|
sha2 = "0.10"
|
|
|
|
# images (PNG snapshots and screenshots)
|
|
png = "0.18"
|
|
|
|
# ui: the same egui/eframe/egui-wgpu line as SolidCraft
|
|
egui = "0.36"
|
|
eframe = { version = "0.36", default-features = false }
|
|
egui-wgpu = "0.36"
|
|
|
|
# Geometry: SolidCraft's B-rep kernel (MIT OR Apache-2.0), pinned. Only crates/geometry uses it
|
|
# (plan/adr/0001-libraries.md).
|
|
solidcraft-geom = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
solidcraft-kernel = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
solidcraft-doc = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
solidcraft-io = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
# Runs SolidCraft command scripts (the test corpus recipes); only behind modelcraft-geometry's
|
|
# `scripts` feature.
|
|
solidcraft-engine = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
type_complexity = "allow"
|
|
# `!(x > tol)` is our idiom for "not a usable number" (NaN-safe).
|
|
neg_cmp_op_on_partial_ord = "allow"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
# Tests and lints (`cargo xtask ci`, GitHub CI). Debug assertions are off because truck's
|
|
# debug-only checks reject valid geometry (SolidCraft builds its tests the same way).
|
|
[profile.ci]
|
|
inherits = "dev"
|
|
opt-level = 1
|
|
debug = "line-tables-only"
|
|
debug-assertions = false
|
|
overflow-checks = true
|
|
incremental = false
|
|
|
|
[profile.ci.package."*"]
|
|
opt-level = 2
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
debug = "line-tables-only"
|
|
|
|
# SolidCraft builds truck and egui-wgpu with local fixes (its vendor/ directory). Patches don't
|
|
# reach a dependent workspace, so ModelCraft applies the same ones from the same pinned commit;
|
|
# keep this list and the rev in step with SolidCraft's [patch.crates-io].
|
|
[patch.crates-io]
|
|
truck-shapeops = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
truck-stepio = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
truck-meshalgo = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
matext4cgmath = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|
|
# egui-wgpu with SolidCraft's fixes (vendor/egui-wgpu there): MSAA clamped to what the device
|
|
# supports and 1x on OpenGL adapters, so the requested 4x never fails pipeline validation at start.
|
|
egui-wgpu = { git = "https://github.com/bherbruck/solidcraft", rev = "de1479029dd6821cffd28b70688a58e7f61f0cfd" }
|