Skip to content

chore(ci): adopt the default Rust and Python function-complexity ratchet #279

Description

@zackees

Context

Fleet rollout follow-up from zackees/ci.yml#229. Audited FastLED/cli main bb1d619c1d64194198f9c68ac852fc79e6a01d9e in two rounds: root/member manifests, Python config, lint entry point, and reusable lint workflow.

  • Root Cargo.toml has no [workspace.lints.clippy] cognitive_complexity/too_many_lines settings; crates/fastled-cli/Cargo.toml has no inherited workspace lints.
  • pyproject.toml configures Ruff line length but does not select C901 or RUF100.
  • Existing ./lint runs Soldr Clippy workspace/all-targets with -D warnings and Ruff over src/tests/ci. Existing _lint.yml calls that entry point and preserves a 30-minute job deadline, published Dylint preparation and Linux system dependencies.
  • No root bosn.toml/local-gate.toml/ci.toml appeared in the root inventory. This establishes a missing root configuration, not proof that no alternative local runner exists anywhere.

Proposal

Enable the default function-complexity ratchet on the existing Rust and Python lint runs. Measure actual offenders, add only individual measured expectations/noqa, and preserve all existing checks. Inventory existing local orchestration before making any claim of complete Bosn→Act2 PR parity.

Acceptance criteria

  • Demonstrate RED→GREEN with ci-lint complexity against current manifests/config and meaningful regressions: newly excessive functions fail; expectations/noqa that stop firing fail too.
  • Root declares cognitive_complexity and too_many_lines at warn or stricter; every relevant member inherits. Keep default ceilings 25/100, no blanket allow or raised threshold.
  • Ruff selects C901 and RUF100 with maximum complexity 10. Existing offenders receive measured per-function exceptions only; preserve external-linter noqa handling and inventory Python lint coverage.
  • Run the exact original lint commands and required PR plan. Measure cfg-gated Rust offenders for every shipped target using static cross lint; target inventory alone must not expand native PR selection or ci-full.
  • Preserve existing Dylint libraries, tools, runtime checks, build/test/artifact coverage and release validation. Do not add workflow files as a shortcut.
  • If local PR orchestration is implemented, use Bosn→pinned Act2, verify completed required jobs/steps and exact source identity, and obtain tool-generated attestations only after the complete required plan passes. A lint-only run is not whole PR parity.
  • Report actual baseline debt and exact tested source/tool revisions; do not claim speedup from configuration or isolated command timing.

Decisions

  • Track this in FastLED/cli because the verified configuration gaps belong to this repository.
  • Reuse existing lint runs; no new dependencies or new workflows are required for the ratchet.
  • Keep runtime parity and performance claims conditional on complete execution evidence.

Open questions

What existing local orchestration, if any, reproduces the repository's complete ordinary PR plan? What measured baseline remains on each shipped target?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions