SolidCraft 崩溃安全技能用于在编写或审查 SolidCraft 的非测试 Rust 代码时,给出“绝不崩溃”的工程规范。资料强调,用户把设计托付给 SolidCraft,因此避免崩溃优先于功能开发。
用途 该技能覆盖处理设计文件、命令参数或控制通道输入、调用内核以及其它非测试 Rust 代码的场景,并规定崩溃排查与修复的流程。
主要能力与规则 在非测试代码中禁止使用 unwrap()、expect()、panic!、unreachable!、todo!、unimplemented!;每个生产 crate 根需启用对应的 clippy deny 项,cargo xtask ci 以 -D warnings 运行 clippy。禁止 unsafe(unsafe_code = "forbid"),仅列出少量确有需要且无安全 API 的例外,包括 macOS 的 3Dconnexion 驱动加载、Finder 文件接收与本地崩溃信号处理,以及 Windows 的原生崩溃异常过滤、无系统装饰窗口的调整边框命中测试与 3D 鼠标 HID 接口识别,每个例外都有明确的文件位置说明。错误通过 crate 错误类型与 ? 以 Result<T, E> 传播,未完成功能返回“not supported yet: ...”错误而非 panic。来自命令参数、设计文件与控制通道的数字按敌意输入处理,使用 get() 而非下标访问,做有限性检查,并对尺寸与循环次数设上限。所有调用 truck 的代码须经过 solidcraft_kernel::guard,将 panic 转为 KernelError::Internal,只有 crates/kernel 可以使用 truck。最后兜底为 Session::execute 在 catch_unwind 下运行命令,逃逸的 panic 会恢复设计并报告 EngineError::Internal,但不应依赖此机制。文件通过 crates/io/src/safe_write.rs 采用临时文件、刷新、一次改名的方式写入,崩溃时保留旧文件或新文件之一。
崩溃修复的验证 每个崩溃修复都须附带回归测试。crates/engine/src/tests.rs 中的 hostile_params_never_panic 用垃圾参数运行每条命令,新命令自动获得该覆盖。崩溃报告中的 design.sc 与 replay.json 是测试的起点,测试应放入该区域既有的测试文件。
崩溃排查方式 桌面应用会把每次 panic 和异常退出写入本地崩溃文件夹,并附带设计文件与可复现命令。首先查看该文件夹,可使用 solidcraft-cli crashes、solidcraft-cli crashes show <id>、solidcraft-cli crashes replay <id>,或 diagnostics.crash_reports 命令、MCP 的 crash_reports 工具。即使内核工作暂停,崩溃与数据丢失仍会被受理。
适用场景与限制 适用于 SolidCraft 生产代码的开发、评审与崩溃修复。资料未提供安装命令、收费方式或性能指标,相关事项暂未提供。