用途:把 Rust 移植代码或 crate 送入完整质量门禁流程,以循环方式迭代,直到所有门禁通过(全绿),并持久记录每次死路,避免重复尝试。
主要能力:固定门禁顺序并快速失败:fmt → build → clippy → test → miri → fuzz → bench。每次只运行一个门禁,只修复该门禁报告的问题,然后重跑同一门禁;同时重跑快速四件套(fmt、build、clippy、test)以捕获回归。所有失败尝试在下次尝试前写入台账,同一修复不试第二次。禁止通过削弱门禁来通过,例如添加 #[allow(...)]、--no-default-features、#[ignore] 或降低 lint 级别。
使用方式:在 crate 根目录(含 Cargo.toml)执行各门禁命令:cargo fmt --all -- --check;cargo build --all-targets --all-features;cargo clippy --all-targets --all-features -- -D warnings;cargo test --all-features;cargo +nightly miri test(需 rustup component add miri);cargo +nightly fuzz run <target> -- -max_total_time=60;cargo bench。先用 bash {baseDir}/scripts/init-ledger.sh GAUNTLET-LEDGER.md 初始化台账,然后进入循环:记录 crate 名、工具链(rustc -Vv)和启用特性;按固定顺序选下一个红色门禁;绿色则标记 PASS 并前进;红色则先查台账,若该方案已是死路则换方案,只做一个针对性修复,重跑同一门禁并重跑快速四件套,记录结果,失败则追加负证据行。
输出:crate 根目录下 GAUNTLET-LEDGER.md,包含门禁矩阵表(Gate、Status、Last run、Notes)和负证据日志表(Gate、Approach tried、Why it failed、Date);stdout 每次每门禁输出一行 PASS/FAIL。完成条件为矩阵每行均为 PASS 或有证据支持的 WAIVED。
适用场景:C/C++/Python 到 Rust 的移植、crate 拆分等容易隐藏未定义行为、lint 债务和测试覆盖缺口的场景。
限制:miri 需要 nightly 工具链和 miri 组件;fuzz 必须传 -- -max_total_time=N 否则可能不返回;若某门禁因不支持(如 miri 无法建模 FFI 调用)可记录证据后 WAIVED。其余细节见 references/gates.md。