diff --git a/.github/workflows/installers.yml b/.github/workflows/installers.yml index 4c55de8..c102c9f 100644 --- a/.github/workflows/installers.yml +++ b/.github/workflows/installers.yml @@ -14,6 +14,10 @@ on: # Only when the packaging itself changes. Three operating systems is not something to # spend on every commit while the repository is private and minutes are metered. push: + # `main` only. Without this, every Dependabot branch that touches this file — which + # is every action bump — starts a five-platform build, and three of those legs are + # billed at 2x and 10x. + branches: [main] paths: - "packaging/**" - ".github/workflows/installers.yml" diff --git a/CHANGELOG.md b/CHANGELOG.md index 494f665..4beaac7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,18 @@ allowed to change behaviour, not just add to it. ## [Unreleased] +### Fixed + +- The formatter is pinned. `ruff>=0.4` meant CI installed a newer ruff than a laptop had, + and the two disagreed about whether the tree was clean — 0.16 formats Python blocks + inside Markdown and 0.15 doesn't, so the first CI run went red on a file that was fine + locally. An unpinned formatter isn't a gate. +- `docs/` is out of ruff's reach. The survey documents quote code as it looked on a past + date, in fragments that were never whole programs; a formatter rewriting a quotation + edits the record. +- The installer builds only run for `main`. Every Dependabot branch that bumped an action + touched the workflow file, matched its path filter, and started a five-platform build. + ### Changed - The distribution is named `mesh-term`. PyPI prohibits `meshterm` (pypi/support#12162), diff --git a/pyproject.toml b/pyproject.toml index 36afa08..966a70c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,10 @@ dependencies = [ dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", - "ruff>=0.4", + # Pinned to a minor line, not floated. A formatter that drifts between machines is + # not a gate: 0.16 formats Python inside Markdown and 0.15 does not, so an + # unpinned `ruff>=0.4` had CI and a laptop disagreeing about a clean tree. + "ruff>=0.16.6,<0.17", ] [project.urls] @@ -74,8 +77,12 @@ packages = ["meshterm"] [tool.ruff] line-length = 100 target-version = "py310" -# Helper scripts for the Claude skills; they are not part of the package. -extend-exclude = [".claude"] +# Helper scripts for the Claude skills; they are not part of the package. And `docs/`, +# which holds dated survey documents: ruff formats Python blocks inside Markdown, and the +# code they quote is an excerpt of how a file looked on a past date. Reformatting a +# quotation edits the record — and the excerpts are call fragments, not whole programs, so +# the formatter's idea of "fixed" turns them into something that was never there. +extend-exclude = [".claude", "docs"] [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "D"]