Context
The Dylint workflow check is failure on main HEAD (and on every PR — I saw it fail on #946, #948, #949, #956, #958, #961, #963). The "Run dylint over workspace" step exhausts its retry loop:
Error: Could not find `.../target/dylint/libraries/nightly-2026-03-26-x86_64-unknown-linux-gnu/release/libban_bare_reqwest@nightly-2026-03-26-x86_64-unknown-linux-gnu.so` despite successful build
... (same for ban_raw_subprocess, ban_manual_slash_normalize, ban_print_in_production, ban_raw_path_prefix_compare, and the rest)
echo "::error::cargo dylint did not succeed after ${max_attempts} attempts"
The workaround loop in .github/workflows/dylint.yml (aliasing cargo's bare <name>.<ext> to the <name>@<toolchain>.<ext> cargo-dylint 5.0.0 expects) is not converging — every lint library fails the @<toolchain> lookup "despite successful build", across all ~24 lints.
Impact
None of the custom dylints are actually enforced in CI. They compile and their unit tests pass, but the workspace-wide cargo dylint --all run never completes green, so a violation would not fail CI. The guardrails (ban_raw_subprocess, ban_std_pathbuf, ban_manual_slash_normalize, the new ban_raw_path_prefix_compare, etc.) are dormant.
Proposal
- Diagnose why the alias loop doesn't converge under the pinned cargo-dylint 5.0.0 + custom driver (does cargo-dylint rebuild and re-emit bare names each attempt, wiping the aliases? is the library dir path wrong?).
- Likely fixes: bump cargo-dylint to a version that emits
@<toolchain>-suffixed libraries natively, or alias once up-front and prevent the rebuild, or point --library-path at the aliased copies.
Acceptance criteria
Decisions
Context
The
Dylintworkflow check isfailureonmainHEAD (and on every PR — I saw it fail on #946, #948, #949, #956, #958, #961, #963). The "Run dylint over workspace" step exhausts its retry loop:The workaround loop in
.github/workflows/dylint.yml(aliasing cargo's bare<name>.<ext>to the<name>@<toolchain>.<ext>cargo-dylint 5.0.0 expects) is not converging — every lint library fails the@<toolchain>lookup "despite successful build", across all ~24 lints.Impact
None of the custom dylints are actually enforced in CI. They compile and their unit tests pass, but the workspace-wide
cargo dylint --allrun never completes green, so a violation would not fail CI. The guardrails (ban_raw_subprocess,ban_std_pathbuf,ban_manual_slash_normalize, the newban_raw_path_prefix_compare, etc.) are dormant.Proposal
@<toolchain>-suffixed libraries natively, or alias once up-front and prevent the rebuild, or point--library-pathat the aliased copies.Acceptance criteria
Dylintcheck is green on main.Command::spawnorPath::starts_withadded to acrates/*/srcfile) fails the Dylint check.Decisions
ban_raw_path_prefix_compare(feat(dylint): ban raw Path::{starts_with, strip_prefix} so the #952 cache-key mistake can't recur #963).