-
crates/deacon/src/commands/features.rs: remove panics when discovering workspace—replacecurrent_dir().unwrap()with fallible path resolution that surfaces user-facing context. -
crates/deacon/src/commands/features.rs: avoidserde_json::to_value(...).unwrap_or(...)when building descriptors; propagate/annotate serialization errors instead of panicking. -
crates/deacon/src/commands/features.rs: split the monolith into focused modules (e.g.,plan.rs,package.rs,publish.rs,test.rs, shared helpers). Limit public API to a few entry points and reuse shared config/merge helpers. -
crates/deacon/src/commands/up.rs: stop swallowingcanonicalizefailures (unwrap_or(ws)); return structured errors with path/context so bad inputs don't silently proceed. -
crates/deacon/src/commands/build/mod.rs: droptake().unwrap()on child pipes and handle line-read errors explicitly; make scan output collection fully fallible and context-rich. -
crates/core/src/oci.rs: refactor install-script execution totokio::process::Commandwith streamed stdout/stderr and await status; avoid blocking the async runtime and unbounded buffering. -
crates/core/src/oci.rs: decompose into submodules (auth, client, semver utils, install execution, cache). Keep sync paths isolated and reuse retry/logging helpers. - Cross-cutting: add small tests around the new fallible paths (canonicalization failure, serde failure in packaging, install script non-zero exit) and update
.config/nextest.tomlgrouping if new bins are added.