Use this when planner or runner behavior is not what you expected.
cargo rail plan --merge-base --explain
cargo rail plan --merge-base -f json
cargo rail run --merge-base --dry-run --print-cmd --explainCheck:
surfaces.*.enabledsurfaces.*.reasonsscope.modescope.crates
Use scope for execution decisions. Use impact for diagnostic context.
Check these in order:
- wrong base ref
- wrong surface or profile
- confidence profile behavior
- path classification or custom rules
- binary-only crate filtering via
--ignore-bin-crates
Custom surfaces are planner outputs, not valid run.profile.*.surfaces entries.
# wrong
[run.profile.bench]
surfaces = ["custom:benchmarks"]
# right
[run.profile.bench]
surfaces = ["bench"]Use the same base-ref strategy and profile in both places.
# local
cargo rail run --merge-base --profile ci
# CI
cargo rail run --since "$RAIL_SINCE" --profile ci