[READ-ONLY] Mirror of https://github.com/SantaClaas/embedded-fan-control.

Move SetPoint into its own crate so its tests run master

The #[cfg(test)] module in fan-controller/src/fan/set_point.rs was compiled by nothing: cargo test targets thumbv6m-none-eabi, which has no test harness, and the host target fails because cortex-m uses ARM inline assembly. It had already rotted once and was being kept correct by hand against a scratch copy. SetPoint now lives in the set_point crate, no_std with defmt behind a feature so the same type works on the device and on the host. fan/mod.rs re-exports it, so every fan::set_point::… path in the firmware reads the same as before. Its tests run with `cd set_point && cargo test`. The two that were rotting are back, and two more cover FromStr: every speed Home Assistant asks for arrives as the text of an MQTT payload and goes through it, and nothing tested it before, including what happens for payloads that are not set points at all. to_string takes self by value now. SetPoint is Copy, the call sites are unchanged, and it silences the one clippy warning that came along with the move rather than leaving it in a new crate. CLAUDE.md records the crate and the pattern it establishes for testing anything else in the firmware. It also no longer claims `bacon test -- <name>` works in fan-controller: that job comes from the stock bacon template and the target has no test harness, so it never could. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>