Awesome Reviewers checks + prompts

Verification methods

Five methods, each made of narrower kinds of check. Shares are across the 256 scanned source repositories. To pick checks for a specific change, start from its language.

Proves or exhaustively explores properties: model checking, proofs, undefined-behaviour interpreters. When: When a bug would be a memory-safety violation or an interleaving that tests are unlikely to hit: unsafe code, lock-free structures, consensus and protocol logic.

CheckCatchesMost-run tools
Undefined-behaviour detection Memory-safety and aliasing violations in unsafe code. miri 4
Concurrency model checking Races and orderings that fail only under specific interleavings. loom 1
Proofs and specifications Design-level bugs in protocols and algorithms, checked against a specification. coq 2, lean 1, tla-plus 1

Static analysis

87% of repos · 22 tools

Reads the code without running it: linters, type checkers, security and workflow scanners. When: On every change. Cheapest signal, runs in seconds, and most findings point at an exact line.

CheckCatchesMost-run tools
Linting Bug-prone patterns, unused code and conventions the formatter does not cover. eslint 107, ruff-check 64, clippy 45, golangci-lint 26
Type checking Wrong types, unhandled null or None, call signatures broken across modules. tsc 117, mypy 35, cargo-check 21, pyright 16
Security scanning Injection, unsafe APIs and tainted data reaching a sink. codeql 63, semgrep 15, bandit 6
Secret scanning Credentials and tokens committed to the repository. gitleaks 7
CI workflow linting Broken GitHub Actions syntax, script injection, over-broad token permissions. zizmor 33, actionlint 12
Docs build Broken cross-references, links and markup in documentation. mkdocs 11, sphinx 9

Testing

80% of repos · 17 tools

Runs the code: unit and integration tests, browser tests, property-based tests, fuzzing, mutation testing. When: On every change that alters behaviour. Add generated inputs (property tests, fuzzing) when the code parses, transforms or computes, and mutation testing when the tests themselves change.

CheckCatchesMost-run tools
Unit and integration tests Behaviour regressions on the paths the tests exercise. vitest 91, pytest 77, cargo-test 44, jest 38
End-to-end browser tests User flows broken across components, routing and the network. playwright 55
Property-based tests Edge-case inputs nobody wrote a test for; invariants over generated data. proptest 11, hypothesis 10, fast-check 3
Fuzzing Crashes, panics and hangs on malformed input, especially in parsers and decoders. cargo-fuzz 6
Mutation testing Tests that keep passing whatever the code does. stryker 3, mutmut 1
Version and platform matrix Breakage on a runtime version, OS or feature combination you did not run locally. ci-matrix 115, cargo-hack 4

Formatting and hygiene

64% of repos · 8 tools

Normalises layout, spelling and file hygiene so the diff only shows what changed. When: On every change, before anything else. Almost always autofixable: run the fix, then commit.

CheckCatchesMost-run tools
Formatting Layout drift that buries the real change in the diff. prettier 98, rustfmt 46, ruff-format 43, black 14
File hygiene Invalid JSON, YAML or TOML, merge markers, trailing whitespace, oversized files. pre-commit-hooks 33
Spelling Typos in identifiers, comments and docs. codespell 22

Supply chain

21% of repos · 7 tools

Checks dependencies: known vulnerabilities, disallowed licenses, lockfiles that disagree with manifests. When: When a manifest or lockfile changes, and on a schedule, since advisories arrive after the code ships.

CheckCatchesMost-run tools
Dependency audit Known-vulnerable or disallowed dependencies and licenses. cargo-deny 19, dependency-review 12, npm-audit 9, govulncheck 4
Lockfile consistency A lockfile that no longer matches its manifest. uv-lock 16