Skip to content

fix(ci): restore green main baseline (policy tests, docs links, dylint allowlist, fmt toolchain, SAMD USB defines) - #1084

Merged
zackees merged 7 commits into
mainfrom
fix/main-ci-baseline
Jul 16, 2026
Merged

fix(ci): restore green main baseline (policy tests, docs links, dylint allowlist, fmt toolchain, SAMD USB defines)#1084
zackees merged 7 commits into
mainfrom
fix/main-ci-baseline

Conversation

@zackees

@zackees zackees commented Jul 16, 2026

Copy link
Copy Markdown
Member

Fixes the six failure classes that have been red on every recent main commit (triaged in #1083 (comment)):

  1. Check Windows — the xwin CRT fixes changed template_native_build.yml to soldr --no-cache build without updating the pyo3 policy test's expected command lines. Test expectations updated; policy intent (host-interpreter suppression + soldr entry point) unchanged.
  2. Check Ubuntu / Check macOS — the picotool combined-failure test asserted the Windows-only WinUSB hint on every platform. format_failure is now platform-injectable and the test asserts both variants everywhere.
  3. Documentation — rustdoc intra-doc links to private consts (ENVIRONMENT_TO_VCOM, BOARD_FINGERPRINTS) from fbuild-cli/fbuild-serial fail -D warnings. Unlinked; full workspace cargo doc -D warnings now passes locally.
  4. Dylintrp2040_picotool.rs was split out of the allowlisted rp2040_pqt.rs without a ban_std_pathbuf allowlist entry. Entry added (sorted).
  5. Formatting — setup-soldr provisions the pinned toolchain with profile=minimal (no rustfmt); on toolchain-cache misses cargo fmt fell back to the runner's newer stable rustfmt and produced spurious diffs. The fmt job now installs the rustfmt component for the pinned toolchain.
  6. SAMD board builds (USB_VID not declared in ArduinoCore-samd) — root cause is a refactor(usb): source compile identities from boards registry #1061 regression: the published FastLED/boards registry has primary_compile_identity: null for every hwids-only manifest (all five SAMD CI boards), because the registry extractor only honored explicit build.vid/build.pid. The registry-side fix is fix(extract): derive compile identity from hwids[0] when build.vid/pid absent boards#55 (hwids[0] fallback, PlatformIO parity) — CI heals once it publishes. This PR ships the compliant fbuild complement: USB_PRODUCT/USB_MANUFACTURER defines from board data (atmelsam arduino-common.py semantics), build.hwids parsing for project-local manifests (bundled snapshots stay hwids-free — guard test extended), usb_product strings for the five bundled SAMD boards, and SAM fingerprint coverage for the new defines. No VID/PID values are embedded in fbuild (essential rule holds).

Verification: workspace clippy -D warnings + fmt --check clean; RUSTDOCFLAGS="-D warnings" cargo doc --workspace clean; fbuild-config 185/0, fbuild-build-arm 199/0, fbuild-deploy 225/0, pyo3 policy test green. FastLED/boards#55 verified against the live usb-profiles.json and canonical platform-atmelsam manifests.

🤖 Generated with Claude Code

zackees and others added 5 commits July 16, 2026 00:10
…osts

The xwin CRT fixes changed template_native_build.yml's Windows MSVC
branches to 'soldr --no-cache build' without updating the pyo3 policy
test, failing Check Windows on every main commit since. The picotool
combined-failure test asserted the Windows-only WinUSB hint on every
platform, failing Check Ubuntu/macOS. Update the policy expectations
and make format_failure platform-injectable so both hint variants are
asserted on every host.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ENVIRONMENT_TO_VCOM and BOARD_FINGERPRINTS are private; intra-doc
links to them fail 'cargo doc -D warnings' (the Documentation job)
from fbuild-cli and fbuild-serial. Plain code spans instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The module was split out of rp2040_pqt.rs (which is allowlisted)
without carrying an allowlist entry, failing the Dylint job on every
main commit. NormalizedPath migration remains tracked by the
allowlist-shrink effort.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
setup-soldr installs the pinned toolchain with profile=minimal, which
omits rustfmt; on toolchain-cache misses 'cargo fmt' silently fell
back to the runner's newer stable rustfmt and failed with diffs the
pinned 1.94.1 does not produce.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y vid/pid

#1061 sources USB_VID/USB_PID from the boards registry;
complement it with the rest of PlatformIO's USB define surface:
USB_PRODUCT/USB_MANUFACTURER from board data (gated on usb_product,
quotes stripped, atmelsam arduino-common.py semantics), build.hwids
parsing for project-local PlatformIO-format manifests (bundled
snapshots stay hwids-free — guard extended), usb_product strings for
the five bundled SAMD boards, and SAM fingerprint coverage so define
changes invalidate cached artifacts. The SAMD CI healing itself ships
via the registry (FastLED/boards#55).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 227 files, which is 177 over the limit of 50.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5c497862-11dd-44c0-ae3c-222ebfde3fe9

📥 Commits

Reviewing files that changed from the base of the PR and between debc996 and 21ff57a.

📒 Files selected for processing (227)
  • .github/workflows/fmt.yml
  • .rustfmt.toml
  • bench/fastled-examples/src/main.rs
  • crates/fbuild-build-arm/src/apollo3/mcu_config.rs
  • crates/fbuild-build-arm/src/generic_arm/arm_compiler.rs
  • crates/fbuild-build-arm/src/generic_arm/arm_linker.rs
  • crates/fbuild-build-arm/src/generic_arm/mcu_config.rs
  • crates/fbuild-build-arm/src/nrf52/mcu_config.rs
  • crates/fbuild-build-arm/src/nrf52/nrf52_compiler.rs
  • crates/fbuild-build-arm/src/nrf52/nrf52_linker.rs
  • crates/fbuild-build-arm/src/nrf52/orchestrator.rs
  • crates/fbuild-build-arm/src/nxplpc/mcu_config.rs
  • crates/fbuild-build-arm/src/renesas/mcu_config.rs
  • crates/fbuild-build-arm/src/renesas/orchestrator.rs
  • crates/fbuild-build-arm/src/renesas/renesas_linker.rs
  • crates/fbuild-build-arm/src/rp2040/mcu_config.rs
  • crates/fbuild-build-arm/src/rp2040/orchestrator.rs
  • crates/fbuild-build-arm/src/rp2040/uf2.rs
  • crates/fbuild-build-arm/src/sam/mcu_config.rs
  • crates/fbuild-build-arm/src/sam/orchestrator.rs
  • crates/fbuild-build-arm/src/sam/sam_linker.rs
  • crates/fbuild-build-arm/src/silabs/mcu_config.rs
  • crates/fbuild-build-arm/src/silabs/silabs_linker.rs
  • crates/fbuild-build-arm/src/stm32/mcu_config.rs
  • crates/fbuild-build-arm/src/teensy/mcu_config.rs
  • crates/fbuild-build-arm/src/teensy/orchestrator.rs
  • crates/fbuild-build-arm/src/teensy/teensy_compiler.rs
  • crates/fbuild-build-arm/src/teensy/teensy_linker.rs
  • crates/fbuild-build-engine/src/build_fingerprint/fast_path.rs
  • crates/fbuild-build-engine/src/build_fingerprint/mod.rs
  • crates/fbuild-build-engine/src/build_info.rs
  • crates/fbuild-build-engine/src/compile_database/tests/clang.rs
  • crates/fbuild-build-engine/src/compile_database/tests/generate.rs
  • crates/fbuild-build-engine/src/compile_database/tests/serialization_and_write.rs
  • crates/fbuild-build-engine/src/compiler.rs
  • crates/fbuild-build-engine/src/compiler_tests.rs
  • crates/fbuild-build-engine/src/eh_frame_policy_compute.rs
  • crates/fbuild-build-engine/src/flag_overlay.rs
  • crates/fbuild-build-engine/src/framework_core_cache.rs
  • crates/fbuild-build-engine/src/framework_libs.rs
  • crates/fbuild-build-engine/src/pipeline/context.rs
  • crates/fbuild-build-engine/src/pipeline/library.rs
  • crates/fbuild-build-engine/src/pipeline/link.rs
  • crates/fbuild-build-engine/src/pipeline/mod.rs
  • crates/fbuild-build-engine/src/pipeline/sequential.rs
  • crates/fbuild-build-engine/src/script_runtime.rs
  • crates/fbuild-build-engine/src/script_runtime_tests.rs
  • crates/fbuild-build-engine/src/shrink/resolver.rs
  • crates/fbuild-build-engine/src/source_scanner/tests.rs
  • crates/fbuild-build-engine/src/symbol_analyzer/markdown.rs
  • crates/fbuild-build-engine/src/symbol_analyzer/mod.rs
  • crates/fbuild-build-engine/src/symbol_analyzer/tests.rs
  • crates/fbuild-build-engine/src/zccache_embedded.rs
  • crates/fbuild-build-esp/src/esp32/esp32_compiler.rs
  • crates/fbuild-build-esp/src/esp32/esp32_linker.rs
  • crates/fbuild-build-esp/src/esp32/mcu_config.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/boot_artifacts.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/build.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/framework_libs.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/local_libs.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/tests.rs
  • crates/fbuild-build-esp/src/esp8266/esp8266_compiler.rs
  • crates/fbuild-build-esp/src/esp8266/esp8266_linker.rs
  • crates/fbuild-build-esp/src/esp8266/mcu_config.rs
  • crates/fbuild-build-mcu/src/avr/avr_compiler.rs
  • crates/fbuild-build-mcu/src/avr/mcu_config.rs
  • crates/fbuild-build-mcu/src/avr/orchestrator.rs
  • crates/fbuild-build-mcu/src/ch32v/ch32v_linker.rs
  • crates/fbuild-build-mcu/src/ch32v/mcu_config.rs
  • crates/fbuild-build/src/compile_many.rs
  • crates/fbuild-build/tests/avr_build.rs
  • crates/fbuild-build/tests/cache_survives_tar_extract.rs
  • crates/fbuild-build/tests/compile_many_stage2_perf.rs
  • crates/fbuild-build/tests/compile_many_two_stage.rs
  • crates/fbuild-build/tests/stm32_acceptance.rs
  • crates/fbuild-build/tests/teensy30_acceptance.rs
  • crates/fbuild-build/tests/teensy41_acceptance.rs
  • crates/fbuild-build/tests/teensylc_acceptance.rs
  • crates/fbuild-cli/src/cli/bloat_lookup.rs
  • crates/fbuild-cli/src/cli/bringup.rs
  • crates/fbuild-cli/src/cli/clangd_config.rs
  • crates/fbuild-cli/src/cli/compile_many.rs
  • crates/fbuild-cli/src/cli/deploy.rs
  • crates/fbuild-cli/src/cli/device.rs
  • crates/fbuild-cli/src/cli/dispatch.rs
  • crates/fbuild-cli/src/cli/graph_cmd.rs
  • crates/fbuild-cli/src/cli/lnk.rs
  • crates/fbuild-cli/src/cli/port_scan.rs
  • crates/fbuild-cli/src/cli/serial_probe.rs
  • crates/fbuild-cli/src/cli/symbols_cmd.rs
  • crates/fbuild-cli/src/cli/sync_cmd.rs
  • crates/fbuild-cli/src/daemon_client/tests.rs
  • crates/fbuild-cli/src/lib_select.rs
  • crates/fbuild-cli/src/sync/mod.rs
  • crates/fbuild-cli/src/sync/source.rs
  • crates/fbuild-cli/tests/test_emu_exit_code.rs
  • crates/fbuild-config/assets/boards/json/adafruit_feather_m0.json
  • crates/fbuild-config/assets/boards/json/adafruit_feather_m4.json
  • crates/fbuild-config/assets/boards/json/adafruit_grandcentral_m4.json
  • crates/fbuild-config/assets/boards/json/adafruit_qt_py_m0.json
  • crates/fbuild-config/assets/boards/json/zeroUSB.json
  • crates/fbuild-config/src/bin/enrich_boards.rs
  • crates/fbuild-config/src/board/db.rs
  • crates/fbuild-config/src/board/loaders.rs
  • crates/fbuild-config/src/board/methods.rs
  • crates/fbuild-config/src/board/tests.rs
  • crates/fbuild-config/src/board/tests_common_board_vidpid.rs
  • crates/fbuild-config/src/board/tests_lpc8xx.rs
  • crates/fbuild-config/src/board/tests_usb_vid.rs
  • crates/fbuild-config/src/board/types.rs
  • crates/fbuild-config/src/ini_parser/tests.rs
  • crates/fbuild-config/src/lib.rs
  • crates/fbuild-config/src/platform_packages.rs
  • crates/fbuild-core/src/channel.rs
  • crates/fbuild-core/src/fs.rs
  • crates/fbuild-core/src/install_status.rs
  • crates/fbuild-core/src/path.rs
  • crates/fbuild-core/src/subprocess.rs
  • crates/fbuild-core/src/symbol_analysis/callgraph.rs
  • crates/fbuild-core/src/symbol_analysis/graph/mod.rs
  • crates/fbuild-core/src/symbol_analysis/graph/tests.rs
  • crates/fbuild-core/src/symbol_analysis/graph/walker.rs
  • crates/fbuild-core/src/symbol_analysis/mod.rs
  • crates/fbuild-core/src/time.rs
  • crates/fbuild-core/src/usb/mod.rs
  • crates/fbuild-core/src/usb/profiles.rs
  • crates/fbuild-core/src/usb/resolver.rs
  • crates/fbuild-daemon/src/broker/backend.rs
  • crates/fbuild-daemon/src/broker/mod.rs
  • crates/fbuild-daemon/src/broker/service.rs
  • crates/fbuild-daemon/src/broker/session.rs
  • crates/fbuild-daemon/src/context.rs
  • crates/fbuild-daemon/src/handlers/cache.rs
  • crates/fbuild-daemon/src/handlers/devices.rs
  • crates/fbuild-daemon/src/handlers/emulator/avr8js_deploy.rs
  • crates/fbuild-daemon/src/handlers/emulator/avr8js_headless.rs
  • crates/fbuild-daemon/src/handlers/emulator/avr8js_web.rs
  • crates/fbuild-daemon/src/handlers/emulator/mod.rs
  • crates/fbuild-daemon/src/handlers/emulator/qemu_deploy.rs
  • crates/fbuild-daemon/src/handlers/emulator/runners.rs
  • crates/fbuild-daemon/src/handlers/emulator/select.rs
  • crates/fbuild-daemon/src/handlers/emulator/shared.rs
  • crates/fbuild-daemon/src/handlers/emulator/tests_npm_cache.rs
  • crates/fbuild-daemon/src/handlers/emulator/tests_process.rs
  • crates/fbuild-daemon/src/handlers/health.rs
  • crates/fbuild-daemon/src/handlers/locks.rs
  • crates/fbuild-daemon/src/handlers/operations/build.rs
  • crates/fbuild-daemon/src/handlers/operations/common.rs
  • crates/fbuild-daemon/src/handlers/operations/deploy.rs
  • crates/fbuild-daemon/src/handlers/operations/deploy_port.rs
  • crates/fbuild-daemon/src/handlers/operations/install_deps.rs
  • crates/fbuild-daemon/src/handlers/operations/mod.rs
  • crates/fbuild-daemon/src/handlers/operations/monitor.rs
  • crates/fbuild-daemon/src/handlers/operations/reset.rs
  • crates/fbuild-daemon/src/handlers/operations/tests.rs
  • crates/fbuild-daemon/src/log_layer.rs
  • crates/fbuild-daemon/src/main.rs
  • crates/fbuild-daemon/tests/build_streaming.rs
  • crates/fbuild-daemon/tests/test_emu_endpoint.rs
  • crates/fbuild-deploy/src/avr.rs
  • crates/fbuild-deploy/src/esp32/deployer.rs
  • crates/fbuild-deploy/src/esp32/mod.rs
  • crates/fbuild-deploy/src/esp32/tests.rs
  • crates/fbuild-deploy/src/esp32_native/tests.rs
  • crates/fbuild-deploy/src/lib.rs
  • crates/fbuild-deploy/src/lpc.rs
  • crates/fbuild-deploy/src/lpc_debugger_reflash.rs
  • crates/fbuild-deploy/src/probe_rs.rs
  • crates/fbuild-deploy/src/rp2040.rs
  • crates/fbuild-deploy/src/rp2040_picotool.rs
  • crates/fbuild-deploy/src/rp2040_target.rs
  • crates/fbuild-deploy/src/rp2040_topology.rs
  • crates/fbuild-deploy/src/teensy/flash.rs
  • crates/fbuild-header-scan/benches/scan_throughput.rs
  • crates/fbuild-header-scan/src/lib.rs
  • crates/fbuild-header-scan/src/walker.rs
  • crates/fbuild-library-select/benches/resolve_cold.rs
  • crates/fbuild-library-select/benches/resolve_warm.rs
  • crates/fbuild-library-select/src/cache.rs
  • crates/fbuild-library-select/src/lib.rs
  • crates/fbuild-library/src/library/arduino_core_lpc8xx.rs
  • crates/fbuild-library/src/library/ch32v_core.rs
  • crates/fbuild-library/src/library/esp32_framework/libs.rs
  • crates/fbuild-library/src/library/esp32_framework/mod.rs
  • crates/fbuild-library/src/library/esp32_framework/paths.rs
  • crates/fbuild-library/src/library/esp32_framework/sdk_paths.rs
  • crates/fbuild-library/src/library/esp32_framework/tests.rs
  • crates/fbuild-library/src/library/esptool.rs
  • crates/fbuild-library/src/library/library_info.rs
  • crates/fbuild-library/src/library/sam_core.rs
  • crates/fbuild-library/src/library/samd_core.rs
  • crates/fbuild-library/src/library/stm32_core.rs
  • crates/fbuild-library/src/library/teensy_core.rs
  • crates/fbuild-packages-fetch/src/cache.rs
  • crates/fbuild-packages-fetch/src/cache_archive.rs
  • crates/fbuild-packages-fetch/src/disk_cache/index/mod.rs
  • crates/fbuild-packages-fetch/src/disk_cache/index/tests.rs
  • crates/fbuild-packages-fetch/src/downloader.rs
  • crates/fbuild-packages-fetch/src/extractor.rs
  • crates/fbuild-packages-fetch/src/http.rs
  • crates/fbuild-packages-fetch/src/lib.rs
  • crates/fbuild-packages/src/lib.rs
  • crates/fbuild-packages/tests/disk_cache_schema_migration.rs
  • crates/fbuild-packages/tests/lnk_e2e.rs
  • crates/fbuild-paths/src/lib.rs
  • crates/fbuild-python/src/async_daemon_connection.rs
  • crates/fbuild-python/src/daemon.rs
  • crates/fbuild-python/src/daemon_connection.rs
  • crates/fbuild-python/src/lib.rs
  • crates/fbuild-python/tests/pyo3_policy.rs
  • crates/fbuild-serial/src/boards.rs
  • crates/fbuild-serial/src/boot_mode.rs
  • crates/fbuild-serial/src/crash_decoder.rs
  • crates/fbuild-serial/src/manager.rs
  • crates/fbuild-serial/src/manager/tests.rs
  • crates/fbuild-serial/src/ports.rs
  • crates/fbuild-serial/src/session.rs
  • crates/fbuild-test-support/src/elf_probe.rs
  • crates/fbuild-toolchain/src/lnk/embed.rs
  • crates/fbuild-toolchain/src/lnk/materialize.rs
  • crates/fbuild-toolchain/src/lnk/mod.rs
  • crates/fbuild-toolchain/src/lnk/resolver.rs
  • crates/fbuild-toolchain/src/toolchain/clang.rs
  • crates/fbuild-toolchain/src/toolchain/mod.rs
  • crates/fbuild-toolchain/src/toolchain/teensy_arm.rs
  • dylints/ban_std_pathbuf/src/allowlist.txt

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/main-ci-baseline

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zackees

zackees commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

Handoff / remaining work to land this PR is documented in #1085 (two small fixes: style_edition = "2024" in .rustfmt.toml, and de-literalizing six escaped-quote assertions in tests_usb_vid.rs). The SAMD registry dependency is already resolved (FastLED/boards#55 merged + published, identities verified live).

@zackees

zackees commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

Follow-up commit 4bd0650c applies the two handoff fixes:

  • pins style_edition = 2024 and formats the affected config files;
  • rewrites all six test-only escaped-quote expectations through a helper, so flag_escaping_lint passes.

Verified locally with soldr cargo test -p fbuild-build --test flag_escaping_lint (2/2) and soldr cargo test -p fbuild-config (185 passed, 1 intentionally ignored).

Additional baseline finding: the pinned rustfmt still reports unrelated pre-existing diffs across multiple untouched files (uf2.rs, deploy.rs, port_scan.rs, profiles.rs, and others) under the workflow's soldr cargo fmt --all -- --check. I did not mass-reformat those files; this remains a separate CI/toolchain-formatting issue if the new run confirms it.

@zackees

zackees commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

Pinned formatting baseline addressed in commit 21ff57ac: reformatted all 212 Rust files with the pinned 1.94.1 toolchain.

Local verification:

  • soldr cargo fmt --all -- --check passes.
  • soldr cargo test -p fbuild-build --test flag_escaping_lint: 2 passed.
  • soldr cargo test -p fbuild-config: 185 passed, 1 intentionally ignored.

The unrelated local changes in tasks/lessons.md, uv.lock, and .clud/fix/ remain uncommitted and were not included.

@zackees
zackees merged commit a546913 into main Jul 16, 2026
90 of 101 checks passed
@zackees
zackees deleted the fix/main-ci-baseline branch July 16, 2026 08:55
@fastled-project-sync fastled-project-sync Bot moved this to Triage in FastLED Tracker Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Triage

Development

Successfully merging this pull request may close these issues.

1 participant