Three Windows cargo check warnings in the CLI crate point at symbols whose only production consumers are already unix-only, while the symbols themselves are compiled unconditionally.
Symptom
src/apps/cli/src/dispatch/runner.rs:2 — unused_imports: std::time::Duration is consumed only inside #[cfg(unix)] code paths (the unix process-group wait in wait_for_process_group_exit and a unix-only test case), so on Windows the import dangles.
src/apps/cli/src/dispatch/runner.rs:337 — dead_code: arguments_match_action is called from the target_os = "linux" and target_os = "macos" service paths (both of which imply unix) and from the platform-agnostic unit tests, but never on Windows.
src/apps/cli/src/daemon/service.rs:88 — dead_code: run_command is only called from the macOS launchd and the systemd service management paths, all of which are unix-only.
Root cause
The definitions are unconditional while every consumer is gated behind unix cfgs, so Windows builds carry symbols with no reachable caller.
Proposed fix
Mirror the real consumer surfaces with precise cfg gates: #[cfg(unix)] on the import and on run_command, and #[cfg(any(unix, test))] on arguments_match_action so the platform-agnostic unit tests keep compiling on every platform. No behavior changes, no test removals, no assertions weakened; Linux and macOS builds keep every symbol exactly as before.
Verification
cargo check --locked -p bitfun-cli on Windows: 0 errors, and the three warnings no longer appear.
cargo test --locked -p bitfun-cli dispatch::runner: 7 passed, 0 failed (the cfg(any(unix, test)) gate keeps the runner tests compiling on Windows).
- The unix-side compilation surface is confirmed by the repository CI platform matrix (ubuntu/macos jobs).
Three Windows
cargo checkwarnings in the CLI crate point at symbols whose only production consumers are already unix-only, while the symbols themselves are compiled unconditionally.Symptom
src/apps/cli/src/dispatch/runner.rs:2—unused_imports:std::time::Durationis consumed only inside#[cfg(unix)]code paths (the unix process-group wait inwait_for_process_group_exitand a unix-only test case), so on Windows the import dangles.src/apps/cli/src/dispatch/runner.rs:337—dead_code:arguments_match_actionis called from thetarget_os = "linux"andtarget_os = "macos"service paths (both of which imply unix) and from the platform-agnostic unit tests, but never on Windows.src/apps/cli/src/daemon/service.rs:88—dead_code:run_commandis only called from the macOS launchd and the systemd service management paths, all of which are unix-only.Root cause
The definitions are unconditional while every consumer is gated behind unix cfgs, so Windows builds carry symbols with no reachable caller.
Proposed fix
Mirror the real consumer surfaces with precise cfg gates:
#[cfg(unix)]on the import and onrun_command, and#[cfg(any(unix, test))]onarguments_match_actionso the platform-agnostic unit tests keep compiling on every platform. No behavior changes, no test removals, no assertions weakened; Linux and macOS builds keep every symbol exactly as before.Verification
cargo check --locked -p bitfun-clion Windows: 0 errors, and the three warnings no longer appear.cargo test --locked -p bitfun-cli dispatch::runner: 7 passed, 0 failed (the cfg(any(unix, test)) gate keeps the runner tests compiling on Windows).