Context
The ruff configuration has evolved significantly over recent PRs (#294, #295, #297, #298), but the CONTRIBUTING.md linting section was not updated to reflect these changes. Several statements in the documentation now contradict or omit the active rules.
Issues found
1. Missing linting rules summary
The "Linting" section only shows make lint / make lint-fix commands but does not list which rule groups are active. Contributors have no visibility into what ruff enforces without reading pyproject.toml.
2. Obsolete wildcard import convention
The coding conventions section does not mention imports explicitly, but the CLAUDE.md previously referenced from <module>.const import * as the project convention. Since PR #298, all wildcard imports have been replaced with explicit imports. The documentation should clarify this.
3. Missing daplink_bridge scope
The "Scopes" list in the commit message section includes daplink_flash but omits daplink_bridge, which exists as a driver in lib/daplink_bridge/. The commitlint.config.js also lacks this scope.
4. Bare except: convention vs E722
The coding conventions state: "use except Exception: instead of bare except:". This is correct and aligns with E722 being active (no longer ignored). However, the phrasing "when possible" (in CLAUDE.md) could be misleading — E722 now enforces this unconditionally.
5. No mention of MicroPython-specific ignore rationale
Several ignored rules (SIM105, PIE810, SIM101) are specifically due to MicroPython limitations (no contextlib.suppress, no tuple startswith/endswith, no merged isinstance). This rationale is not documented anywhere for contributors.
Proposed changes
Context
The ruff configuration has evolved significantly over recent PRs (#294, #295, #297, #298), but the CONTRIBUTING.md linting section was not updated to reflect these changes. Several statements in the documentation now contradict or omit the active rules.
Issues found
1. Missing linting rules summary
The "Linting" section only shows
make lint/make lint-fixcommands but does not list which rule groups are active. Contributors have no visibility into what ruff enforces without readingpyproject.toml.2. Obsolete wildcard import convention
The coding conventions section does not mention imports explicitly, but the CLAUDE.md previously referenced
from <module>.const import *as the project convention. Since PR #298, all wildcard imports have been replaced with explicit imports. The documentation should clarify this.3. Missing
daplink_bridgescopeThe "Scopes" list in the commit message section includes
daplink_flashbut omitsdaplink_bridge, which exists as a driver inlib/daplink_bridge/. Thecommitlint.config.jsalso lacks this scope.4. Bare
except:convention vs E722The coding conventions state: "use
except Exception:instead of bareexcept:". This is correct and aligns with E722 being active (no longer ignored). However, the phrasing "when possible" (in CLAUDE.md) could be misleading — E722 now enforces this unconditionally.5. No mention of MicroPython-specific ignore rationale
Several ignored rules (SIM105, PIE810, SIM101) are specifically due to MicroPython limitations (no
contextlib.suppress, no tuplestartswith/endswith, no mergedisinstance). This rationale is not documented anywhere for contributors.Proposed changes
import *)daplink_bridgeto the scopes list in CONTRIBUTING.md andcommitlint.config.js