[workspace] members = [ "smith", "smith-core", "smith-ai", "smith-ui", "smith-tui", "smith-rpc", "smith-harness", "smith-cli", "smith-alloc", "smith-bench", "plugins/echo", "xtask", ] resolver = "3" # Bare cargo commands operate on host crates; wasm guest crates build # only under their target (`cargo x check`, `smith plugin build`). default-members = [ "smith", "smith-core", "smith-ai", "smith-ui", "smith-tui", "smith-rpc", "smith-harness", "smith-cli", "smith-alloc", "smith-bench", "xtask", ] [workspace.package] edition = "2024" version = "0.1.0" license = "Apache-2.0" # Dependency tiers — law in .system/RULES.md (Dependencies); concrete map lives here. # vocabulary: ecosystem IR, sanctioned once, facade-exempt. # engines: one owning crate each, app vocabulary at boundaries, one stack per concern. # leaf: small utilities, direct use. # dev: tests and benches only. # build tools (cargo-machete, cargo-deny, cargo-audit, wasm-tools): # xtask-installed --locked, never crate deps. [workspace.dependencies] # vocabulary serde = { version = "1.0.228", features = ["derive"] } # Wasmtime requires this serde_core-era minimum serde_json = { version = "1.0.120", features = ["preserve_order"] } # ureq's shared JSON minimum; Value: Eq futures = "0.3.31" # Wasmtime's shared futures minimum thiserror = "2" tracing = "0.1" url = "2" # engines ureq = { version = "~3.4", default-features = false, features = [ "rustls", ] } # smith-harness, http stack; tilde pin: the chunk-gap timeout uses ureq::unversioned ciborium-io = { version = "0.2.2", default-features = false } # smith-core, bounded CBOR sink ciborium-ll = { version = "0.2.2", default-features = false } # smith-core, CBOR session codec # smith-harness: Wasmtime hosts components; guest wit-bindgen must align with its # component tooling release, not independently chase latest. # Wasmi or Wasmer remain alternatives only after component compatibility and # Smith workload benchmarks justify replacing Wasmtime. wasmtime = { version = "49.0.2", default-features = false, features = [ "runtime", "component-model", "cranelift", "demangle", ] } # smith-harness, wasm plugin engine # plugins/echo: guest component bindings aligned with Wasmtime's release set. wit-bindgen = { version = "=0.62.0", default-features = false, features = ["macros"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] } # smith-cli, log output ignore = "0.4.18" # search stack; WalkBuilder::require_git API ratatui = "0.30" # smith-tui, terminal stack (widgets) crossterm = "0.29" # smith-tui, terminal stack (backend) # leaf utilities crc32fast = "1.3.0" # smith-core, frame checksum; hash API; runtime-dispatched, pure Rust renamore = { version = "0.3.2", default-features = false } # smith-core, portable atomic no-clobber rename dirs = "7" getrandom = { version = "0.4.3", default-features = false } # smith, session-id entropy fs2 = "0.4.3" # Windows ARM64 requires the winapi 0.3 backend nix = { version = "0.31.3", features = ["signal"] } # unix, smith-core process handling; libc compatible with Wasmtime clap = { version = "4", features = ["derive", "env"] } # dev insta = "1" archunit = "0.0.2" assert_cmd = "2" predicates = "3" proptest = "1" criterion = "0.8" portable-pty = "0.9.0" # smith-cli, portable observer TUI e2e terminal gungraun = "0.20.0" # smith-bench, callgrind instruction budgets; runner installed by xtask # Mutation-testing profile: lean debug build, many rebuilds. [profile.mutants] inherits = "test" debug = "none" strip = "debuginfo" [profile.release] opt-level = 3 lto = "thin" codegen-units = 1 strip = "symbols" panic = "abort" # Benches keep symbols: callgrind attributes instructions to functions. [profile.bench] inherits = "release" debug = "line-tables-only" strip = false [profile.release.package."*"] opt-level = 3