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.
Formal verification and model checking
3% of repos · 5 tools
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.
| Check | Catches | Most-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.
| Check | Catches | Most-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.
| Check | Catches | Most-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.
| Check | Catches | Most-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.
| Check | Catches | Most-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 |