The download includes the before, intentionally buggy and fixed JavaScript versions, their tests, a local verification script and recorded results. The CI workflow is a template; it has not been run in hosted CI.
Download verification examples (ZIP)Define the task before building a shortlist
“Verify a large codebase” can mean scanning committed source for supported patterns, checking a proposed change, investigating an existing incident, testing application behavior or proving a narrow property. Write the desired outcome and repository boundary before comparing products. A reviewer designed for PR changes should not be assumed to audit every untouched file.
Start with what already exists: project linting, types, build checks and tests. Identify missing evidence instead of buying several overlapping reviewers. For a cross-file failure, demand a demonstration of the relevant producer-consumer relationship; for a regression, require a test that challenges the intended behavior.
Category 1: repeatable static checks
ESLint applies configured rules to JavaScript-family code, while Ruff provides Python linting and formatting. These are useful examples of repeatable checks with explicit configuration. They do not establish all application behavior, and a formatter’s success should not be presented as security analysis.
For source-security analysis, GitHub describes CodeQL as building a database representation and running queries, with results shown as code-scanning alerts. Semgrep documents a distinction between Community Edition and its AppSec products, including analysis-depth differences. Check the supported language, engine, rule set and mode rather than assuming all editions provide the same coverage.
The appropriate question is not whether a tool contains “AI” in its name. Ask which rule or query ran, which inputs were analysed and how failures, exclusions and unsupported constructs are reported. Recheck licensing and deployment terms before redistributing an engine or rule collection as part of your own service.
| Example | Documented role | Acceptance question |
|---|---|---|
| ESLint / Ruff | Configured lint and related source checks | Which rules and language environment actually ran? |
| GitHub CodeQL | Query-based code-security analysis | Does the language and framework model cover this case? |
| Semgrep | Source analysis with edition-dependent scope | Which engine, rules and analysis mode are enabled? |
Category 2: contextual AI review
CodeRabbit, Greptile and Qodo provide documented PR-review workflows. CodeRabbit describes repository exploration and analysis around its comments. Greptile describes graph-based repository context. Qodo describes context-aware review with findings inside pull requests. These descriptions justify evaluating the products for contextual review, not concluding that one detects the most bugs.
Ask a candidate to inspect a realistic change and show the relevant relationship outside the diff. Verify how the exact product mode handles context freshness, exclusions, large changes and incomplete review. A repository connection, an index or an architecture diagram does not by itself prove that a specific consumer was examined.
Keep model findings as claims to investigate. Require a trigger, affected path and consequence, then confirm important cases with an independent reproduction. Do not combine advertised accuracy numbers from unrelated datasets into a universal ranking. A small trial on your requirements is more useful than comparing the number of comments posted.
Category 3: executable behavioral evidence
Use the project’s existing test runner for assertions about intended behavior. Node.js includes a test runner; pytest is an example for Python. Playwright’s documented approach combines browser actions with expectations about the resulting page state. Choose a method that observes the behavior at the boundary you care about.
Our own demonstration tests a price-unit contract with Node.js. Before and fixed versions pass four assertions; the buggy version fails the two amount assertions. All modules parse. That shows why a syntax result and an executed behavioral assertion answer different questions. It is not a test of the commercial tools listed above.
Test generators can help draft cases, but review the expectations independently. A test that captures current output may preserve an existing mistake. For a bug fix, seek a regression that fails before the repair and passes afterward without redefining the required outcome.
Category 4: formal properties with explicit assumptions
When the requirement needs a machine-checked property rather than sampled execution, consider a verification system that fits the language and property. Dafny is one example of a language and verifier using specifications to check code. This is a different adoption path from installing a PR reviewer on an arbitrary existing repository.
AI may help draft a specification, harness or proof, but the result must be interpreted through the formal tool and its assumptions. A property about a separately generated model does not automatically transfer to production source. A successful proof of an incomplete specification can still omit the behavior the business intended.
Ask what implementation was checked, which preconditions constrain inputs, which obligations remain unresolved and how the result connects to the artifact you deploy. Keep timeout and unknown outcomes visible. Formal verification can support precise claims, but adding the word “formal” does not make every property of a codebase covered.
Use a capability-and-evidence matrix
For each shortlisted tool, record the following fields from the exact official product documentation and your own evaluation. Use “unknown” where the available material does not settle an answer. Documented support, a successful demonstration and a guarantee are different evidence levels.
This article intentionally avoids prices and plan-limit numbers. They change, and billing units differ. Before purchasing, estimate actual runs, repeated pushes, deeper review modes, compute and human triage time using the current applicable terms. A low subscription price is not the same as low cost per useful finding.
| Field | What to establish |
|---|---|
| Scope | Snippet, changed files, related code, whole-source scan or model |
| Output | Rule diagnostic, candidate review finding, test result or proof obligation |
| Execution | Whether code or tests actually ran, in which environment |
| Coverage | Languages, frameworks, exclusions, limits and incomplete states |
| Data flow | Source, indexes, prompts, logs and any external model destination |
| Enforcement | How the result becomes a required check, if appropriate |
| Cost | Workload units, reruns, compute and validation effort |
Run a small evaluation before organisation-wide rollout
Choose representative changes with clear requirements, including known defects and clean controls. Preserve the defective revision and hide later fixes or old review discussions. Give candidates the same legitimate context. Keep results for unchanged-consumer bugs separate from simpler problems found within the diff.
Score confirmed useful findings, missed known cases, refuted claims, incomplete coverage and the time engineers spend deciding what is actionable. Track latency and reruns under the expected workload. A candidate that produces more comments may impose more review work rather than more protection.
Adopt one missing layer at a time. A practical starting workflow might combine existing static checks and tests with one contextual reviewer, then validate whether that reviewer adds useful evidence. The right combination depends on the risks, languages and operational capacity of the team.
Where AI Code Verify fits
Our current tool is a local browser checker for a pasted JavaScript, TypeScript or Python snippet. It does not upload source, call a model, read a repository or run tests. Its displayed fixed checks provide a small first pass; they do not replace the tools and project workflows discussed in this guide.
Use the main verification framework to decide what evidence is missing. Use the cross-file article to build a meaningful evaluation case and the CI guide to make chosen checks repeatable in your own repository. Treat a clean snippet result as a scoped observation rather than permission to deploy a larger system.
Our single-snippet static checker runs local fixed rules. It does not connect a repository, execute your tests, perform cross-file analysis or prove a program correct. Use it as one layer of the workflow.
Sources and editorial notes
Product capabilities can change. Links below are primary references used for this guide; examples are demonstrations unless explicitly stated otherwise. Suggest a correction.
- ESLint core concepts
- Ruff documentation
- GitHub: code scanning with CodeQL
- Semgrep AppSec Platform versus Community Edition
- CodeRabbit: the system behind a review comment
- Greptile overview
- The Qodo Code Review experience
- Node.js 24 test runner documentation
- pytest: writing and reporting assertions
- Playwright: writing tests
- Getting started with Dafny