classifications: - name: no-ads description: >- A commit message contains a co-authored-by line or other advertising for an AI model, such as a "generated with" footer. polarity: negative threshold: 80 - name: no-secrets description: >- The diff adds a secret as literal text: a password, API key, access token or private key. A path or name that points at a secret is not one. polarity: negative threshold: 60 - name: no-lint-suppression description: >- The diff adds a Rust `#[allow(clippy::...)]` or `#![allow(clippy::...)]` attribute instead of fixing what the lint reports. polarity: negative threshold: 70 - name: no-debug-leftovers description: >- The diff adds leftover debugging: a `dbg!` call, a print statement that only inspects a value, or a block of commented-out code. polarity: negative threshold: 70 - name: no-dead-code description: >- The diff adds a function, type, option or module that nothing in the diff calls, uses or registers, and that is not a test, a trait implementation or public API. polarity: negative threshold: 75 - name: tests-with-behaviour description: >- The decision-making logic a change adds or alters in Rust or application code has a new or updated test that exercises it: pure functions, state transitions, request and response handling, parsing, validation. A new code path with real logic and no test does not match, and neither does a bug fix with no regression test. Thin glue needs no test of its own: UI component wiring, JSX or markup, a routing table, registering an event listener, re-exporting, or calling a function that is already tested. A diff whose changed files are all test code (a fixture under `nix/module-eval/`, `nix/checks.nix`, a crate's `tests/` directory, or Rust inside `#[cfg(test)]` or a `#[test]` function) changes no behaviour: the question is not applicable. So is a diff that changes only documentation. A NixOS module assertion, a Grafana/alerting rule, or the literal text of a log or tracing message is not held to this either. A PR that changes logic and tests together matches. polarity: positive threshold: 65 - name: docs-updated description: >- A change to what an operator or user sees, such as a command, flag, option, endpoint, service or default, updates the matching page under docs/ or the crate's README in the same diff. For a nix option whose own default, type or meaning changes, an updated `description` on that option counts as the documentation. It does not cover a change in what a service does for operators across hosts, such as what it scrapes, serves or publishes: that needs a docs/ page or README. A nix option declared `internal = true` or `visible = false` is not something an operator sees, so adding or changing one needs none of these. polarity: positive threshold: 65 - name: one-purpose description: >- Every change in the diff serves what the commit messages say the PR does, and nothing unrelated is bundled in. polarity: positive threshold: 65