Problem
ruff.toml sets preview = true under [lint] (line 53). This opts into every unstable, experimental rule across every selected prefix. When ruff ships a new preview rule in any of Air's 30+ selected prefixes, CI can break on the next ruff upgrade without any change to the config.
This is what caused the DOC201 friction in #1078. DOC201 is a preview-only rule. It only fired because preview mode is on. The rule itself wouldn't have been enforced under stable ruff.
The formatter also has preview = true (line 49), which carries the same risk for formatting changes.
Change
Set preview = false for both [lint] and [format]. If specific preview rules are valuable, select them individually so they're a deliberate choice rather than an implicit opt-in to everything unstable.
Problem
ruff.tomlsetspreview = trueunder[lint](line 53). This opts into every unstable, experimental rule across every selected prefix. When ruff ships a new preview rule in any of Air's 30+ selected prefixes, CI can break on the next ruff upgrade without any change to the config.This is what caused the DOC201 friction in #1078. DOC201 is a preview-only rule. It only fired because preview mode is on. The rule itself wouldn't have been enforced under stable ruff.
The formatter also has
preview = true(line 49), which carries the same risk for formatting changes.Change
Set
preview = falsefor both[lint]and[format]. If specific preview rules are valuable, select them individually so they're a deliberate choice rather than an implicit opt-in to everything unstable.