Kani Rust Verifier
This report presents the forensic synthetic code analysis of model-checking/kani, a Rust project with 3,221 GitHub stars. SynthScan v2.0 examined 148,194 lines of code across 2291 source files, recording 670 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 5.6 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 670 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/build-kani/src/main.rs | 121 | /// Copy CBMC files into `dir` | COMMENT |
| LOW | tools/build-kani/src/sysroot.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | tools/build-kani/src/parser.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | tools/benchcomp/benchcomp/entry/__init__.py | 1 | # Copyright Kani Contributors | COMMENT |
| LOW | tools/benchcomp/test/unit/__init__.py | 1 | # Copyright Kani Contributors | COMMENT |
| LOW | tools/compiletest/src/raise_fd_limit.rs | 1 | // SPDX-License-Identifier: Apache-2.0 OR MIT | COMMENT |
| LOW | tools/compiletest/src/runtest.rs | 281 | } | COMMENT |
| LOW | tools/compiletest/src/runtest.rs | 341 | let proc_res = self.compose_and_run(cargo); | COMMENT |
| LOW | tools/kani-cov/src/report.rs | 81 | COMMENT | |
| LOW | tools/kani-cov/src/report.rs | 101 | /// ``` println!("Hello, world!");''' | COMMENT |
| LOW | tools/kani-cov/src/args.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | tools/kani-cov/src/args.rs | 21 | /// As an example, let's assume we execute Kani with coverage enabled | COMMENT |
| LOW | tools/kani-cov/src/args.rs | 41 | /// | COMMENT |
| LOW | tools/kani-cov/src/args.rs | 81 | #[derive(Debug, clap::Args)] | COMMENT |
| LOW | tools/kani-cov/src/args.rs | 101 | // Csv, | COMMENT |
| LOW | tools/kani-cov/src/summary.rs | 101 | total_regions: usize, | COMMENT |
| LOW | tools/scanner/src/bin/scan.rs | 1 | // SPDX-License-Identifier: Apache-2.0 OR MIT | COMMENT |
| LOW | kani-compiler/src/kani_compiler.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/main.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/args.rs | 21 | #[derive(Debug, Default, Clone, Copy, AsRefStr, EnumString, VariantNames, PartialEq, Eq)] | COMMENT |
| LOW | kani-compiler/src/args.rs | 41 | #[clap(long)] | COMMENT |
| LOW | kani-compiler/src/args.rs | 61 | /// If used with --exact, the harness filter will only match the exact fully qualified name of a harness. | COMMENT |
| LOW | kani-compiler/src/args.rs | 81 | /// Option used for building standard library. | COMMENT |
| LOW | kani-compiler/src/args.rs | 101 | #[clap(long = "backend", default_value_t = BackendOption::CProver)] | COMMENT |
| LOW | kani-compiler/src/kani_middle/kani_functions.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/kani_middle/kani_functions.rs | 61 | /// Kani models are Rust functions that model some runtime behavior used by Kani instrumentation. | COMMENT |
| LOW | kani-compiler/src/kani_middle/kani_functions.rs | 121 | COMMENT | |
| LOW | kani-compiler/src/kani_middle/analysis.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/kani_middle/attributes.rs | 41 | /// Attribute used to mark unstable APIs. | COMMENT |
| LOW | kani-compiler/src/kani_middle/attributes.rs | 61 | /// Internal attribute of the contracts implementation that identifies the | COMMENT |
| LOW | kani-compiler/src/kani_middle/attributes.rs | 1341 | let parser = syn::Attribute::parse_outer; | COMMENT |
| LOW | kani-compiler/src/kani_middle/mod.rs | 21 | COMMENT | |
| LOW | kani-compiler/src/kani_middle/mod.rs | 41 | /// qualifiers and generic args (`<my_crate::T as my_crate::Tr>::m`, | COMMENT |
| LOW | kani-compiler/src/kani_middle/coercion.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/kani_middle/coercion.rs | 21 | use rustc_public::Symbol; | COMMENT |
| LOW | kani-compiler/src/kani_middle/coercion.rs | 41 | /// - This is the base case. | COMMENT |
| LOW | kani-compiler/src/kani_middle/coercion.rs | 121 | pub struct CoercionBase<'tcx> { | COMMENT |
| LOW | kani-compiler/src/kani_middle/coercion.rs | 181 | /// } | COMMENT |
| LOW | kani-compiler/src/kani_middle/reachability.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | …-compiler/src/kani_middle/points_to/points_to_graph.rs | 81 | let successors_after = self.successors.len(); | COMMENT |
| LOW | …mpiler/src/kani_middle/points_to/points_to_analysis.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/kani_middle/stubbing/mod.rs | 41 | /// The purpose is to allow stubbing out: | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/automatic.rs | 61 | COMMENT | |
| LOW | kani-compiler/src/kani_middle/transform/automatic.rs | 81 | /// pub fn any() -> Foo { | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/automatic.rs | 201 | // The index of the first block we inserted is (last bb index - number of bbs we inserted above it) | COMMENT |
| LOW | …compiler/src/kani_middle/transform/rustc_intrinsics.rs | 161 | COMMENT | |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 181 | // TODO: Optimize checks by merging requirements whenever possible. | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 281 | /// valid for the given location in target type. This happens for: | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 301 | /// attribute. Such as valid ranges that do not intersect or enumeration with variants | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 321 | } | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/check_values.rs | 781 | invalid_ranges | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/body.rs | 21 | /// Declarations of locals within the function. | COMMENT |
| LOW | …i-compiler/src/kani_middle/transform/loop_contracts.rs | 61 | /// loop_head_stmts | COMMENT |
| LOW | …i-compiler/src/kani_middle/transform/loop_contracts.rs | 81 | /// | COMMENT |
| LOW | …i-compiler/src/kani_middle/transform/loop_contracts.rs | 941 | } | COMMENT |
| LOW | …i-compiler/src/kani_middle/transform/loop_contracts.rs | 961 | /// ``` | COMMENT |
| LOW | …i-compiler/src/kani_middle/transform/loop_contracts.rs | 1141 | // ```ignore | COMMENT |
| LOW | kani-compiler/src/kani_middle/transform/mod.rs | 1 | // Copyright Kani Contributors | COMMENT |
| LOW | …-compiler/src/kani_middle/transform/kani_intrinsics.rs | 361 | /// return | COMMENT |
| 521 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/build-kani/src/main.rs | 5 | //! We use Rust here just to aid in making the "script" more robust. | COMMENT |
| MEDIUM | tools/compiletest/src/runtest.rs | 566 | // output. This is a temporary mechanism until we have more robust | COMMENT |
| MEDIUM | kani-compiler/src/args.rs | 63 | #[arg(long = "harness", num_args(1), value_name = "HARNESS_FILTER")] | COMMENT |
| MEDIUM | kani-compiler/src/kani_middle/attributes.rs | 1106 | format!("only one '#[kani::{}]' attribute is allowed per harness", kind.as_ref()), | CODE |
| MEDIUM | kani-compiler/src/kani_middle/mod.rs | 133 | "stub verified target `{}` does not have a corresponding `#[proof_for_contract]` harness", | CODE |
| MEDIUM | …mpiler/src/kani_middle/points_to/points_to_analysis.rs | 7 | //! The analysis uses Rust's dataflow framework by implementing appropriate traits to leverage the | COMMENT |
| MEDIUM | …mpiler/src/kani_middle/points_to/points_to_analysis.rs | 194 | // if a function pointer call is used), but we could leverage the call graph to resolve | COMMENT |
| MEDIUM | …compiler/src/kani_middle/transform/rustc_intrinsics.rs | 168 | /// Our models are usually augmented by some trait bounds, or they leverage Kani intrinsics to | COMMENT |
| MEDIUM | tests/ui/arbitrary-ptr-doc/doc_examples.rs | 8 | //! We may be able to leverage `--runtool` from rustdoc once its stabilized. See | COMMENT |
| MEDIUM | …-verified-without-contract/stub_verified_no_harness.rs | 18 | // This should fail because target_function has no `#[proof_for_contract]` harness | COMMENT |
| MEDIUM⚡ | tests/cargo-ui/ws-integ-tests/Cargo.toml | 5 | # The `in_src_harness` has a proof harness co-located with the code. | COMMENT |
| MEDIUM⚡ | tests/cargo-ui/ws-integ-tests/Cargo.toml | 6 | # The `integ_harness` has a proof harness co-located with an integration test. | COMMENT |
| MEDIUM | tests/expected/loop-contract/function_call_with_loop.rs | 6 | //! Calling a function that contains loops and test that using a #[kani::proof] harness fails because the function's pre | COMMENT |
| MEDIUM | tests/script-based-pre/verify_std_cmd/verify_std.sh | 23 | # Insert a small harness in one of the standard library modules. | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 38 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 55 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 81 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 133 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 151 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani_core/src/arbitrary/pointer.rs | 177 | /// # fn harness() { | COMMENT |
| MEDIUM | library/kani/src/contracts.rs | 178 | //! Contract are used both to verify function behavior and to leverage the | COMMENT |
| MEDIUM | library/kani_macros/src/lib.rs | 672 | /// Add #[allow(dead_code)] to a proof harness to avoid dead code warnings. | COMMENT |
| MEDIUM | kani_metadata/src/harness.rs | 37 | /// The `#[kani::<>]` attributes added to a harness. | COMMENT |
| MEDIUM | kani_metadata/src/harness.rs | 119 | /// but this function is written to be robust against that changing in the future. | COMMENT |
| MEDIUM | scripts/kani-slow-tests.sh | 18 | # TODO: We should add a more robust mechanism to detect python unexpected behavior. | COMMENT |
| MEDIUM | scripts/kani-perf.sh | 29 | # Bound each test's wall time so a runaway case (e.g. an OOM-prone harness) | COMMENT |
| MEDIUM | scripts/kani-regression.sh | 18 | # TODO: We should add a more robust mechanism to detect python unexpected behavior. | COMMENT |
| MEDIUM | scripts/kani-regression.sh | 95 | # It should just successfully find the project and specified proof harness. (Then clean up.) | COMMENT |
| MEDIUM | kani-driver/src/args/mod.rs | 272 | #[arg(long = "harness", num_args(1), value_name = "HARNESS_FILTER")] | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 240 | "command_line": "mkdir bench_1 && echo true > bench_1/success" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 246 | "command_line": "mkdir bench_1 && echo false > bench_1/success" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 282 | "command_line": "mkdir bench_1 && echo true > bench_1/success" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 288 | "command_line": "mkdir bench_1 && echo true > bench_1/success" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 324 | "command_line": "mkdir bench_1 && echo 10 > bench_1/n_bugs" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 330 | "command_line": "mkdir bench_1 && echo 5 > bench_1/n_bugs" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 365 | "command_line": "mkdir bench_1 && echo 10 > bench_1/n_bugs" | CODE |
| HIGH⚡ | tools/benchcomp/test/test_regression.py | 371 | "command_line": "mkdir bench_1 && echo 5 > bench_1/n_bugs" | CODE |
| HIGH | tools/benchcomp/test/test_regression.py | 788 | grep bin out && grep '^foo:' out && echo '{ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/benchcomp/benchcomp/cmd_args.py | 252 | # Set entrypoint to benchcomp.entry.visualize.main() | COMMENT |
| LOW | …d-pre/playback_with_cfg_kani/playback_with_cfg_kani.sh | 14 | # Check if cargo is installed | COMMENT |
| LOW⚡ | …d-pre/individual_file_output/individual_file_output.sh | 21 | # Check if the output directory exists | COMMENT |
| LOW⚡ | …d-pre/individual_file_output/individual_file_output.sh | 27 | # Check if there are any files in the output directory | COMMENT |
| LOW⚡ | …d-pre/individual_file_output/individual_file_output.sh | 35 | # Check if each file contains text | COMMENT |
| LOW | …-pre/kani_autoharness_exclude_precedence/precedence.sh | 21 | # Check if a function appears in the "Selected Function" table | COMMENT |
| LOW | …-pre/kani_autoharness_exclude_precedence/precedence.sh | 32 | # Check if a function appears in the "Skipped Function" table | COMMENT |
| LOW | scripts/check_kissat_version.sh | 5 | # Check if kissat has the minimum required version specified in the | COMMENT |
| LOW | scripts/kani-regression.sh | 26 | # Check if installed versions are correct. | COMMENT |
| LOW | scripts/setup/install_kissat.sh | 15 | # Check if the correct Kissat version is already installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/benchcomp/benchcomp/visualizers/__init__.py | 229 | def _parse_scatterplot_config(scatterplot_config_string): | CODE |
| LOW | tools/benchcomp/benchcomp/visualizers/__init__.py | 340 | def _organize_results_into_metrics(results, log_scaling): | STRING |
| LOW | tools/benchcomp/test/test_unit.py | 16 | def test_environment_construction(self): | CODE |
| LOW | tools/benchcomp/test/test_unit.py | 24 | def test_placeholder_construction(self): | CODE |
| LOW | tools/benchcomp/test/test_unit.py | 50 | def test_environment_update_variable(self): | CODE |
| LOW | tools/benchcomp/test/test_regression.py | 135 | def test_error_on_regression_two_benchmarks_previously_failed(self): | CODE |
| LOW | tools/benchcomp/test/test_regression.py | 183 | def test_error_on_regression_two_benchmarks_one_failed(self): | CODE |
| LOW⚡ | tools/benchcomp/test/test_regression.py | 231 | def test_error_on_regression_visualization_success_regressed(self): | CODE |
| LOW⚡ | tools/benchcomp/test/test_regression.py | 273 | def test_error_on_regression_visualization_success_no_regressed(self): | CODE |
| LOW⚡ | tools/benchcomp/test/test_regression.py | 315 | def test_error_on_regression_visualization_ratio_no_regressed(self): | CODE |
| LOW⚡ | tools/benchcomp/test/test_regression.py | 356 | def test_error_on_regression_visualization_ratio_regressed(self): | CODE |
| LOW | tools/benchcomp/test/test_regression.py | 397 | def test_markdown_results_table(self): | CODE |
| LOW | tools/benchcomp/test/test_regression.py | 899 | def test_run_command_visualization(self): | STRING |
| LOW | tools/benchcomp/test/test_regression.py | 950 | def test_run_failing_command_visualization(self): | STRING |
| LOW | tools/benchcomp/test/test_regression.py | 995 | def test_unknown_metric_in_benchmark(self): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ni-compiler/src/codegen_cprover_gotoc/codegen/place.rs | 363 | /// auto-generated code for Fn::call_once uses a local FnDef to call the | COMMENT |
| HIGH | …ni-compiler/src/codegen_cprover_gotoc/codegen/place.rs | 364 | /// wrapped function, while the auto-generated code for Fn::call and | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/kani/Static/anon_static.rs | 11 | // ╾───────alloc2────────╼ │ ╾──────╼ | COMMENT |
| MEDIUM | tests/kani/Static/anon_static.rs | 31 | // ╾───────alloc2────────╼ │ ╾──────╼ | COMMENT |
| MEDIUM | tests/kani/Static/anon_static.rs | 39 | // ╾───────alloc2────────╼ │ ╾──────╼ | COMMENT |
| MEDIUM | tests/kani/Static/pointer_to_const_alloc.rs | 9 | // ╾─────alloc3<imm>─────╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........ | COMMENT |
| MEDIUM | tests/kani/Static/pointer_to_const_alloc.rs | 17 | // ╾─────alloc3<imm>─────╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …orm/check_uninit/delayed_ub/instrumentation_visitor.rs | 137 | // Here is a simple example: | COMMENT |
| MEDIUM | …compiler/src/codegen_cprover_gotoc/codegen/function.rs | 203 | // As discussed above, fields are named like `0: t1`. | COMMENT |
| LOW | tests/firecracker/virtio-balloon-compact/ignore-main.rs | 42 | // Don't forget to push the last range to the result. | COMMENT |
| MEDIUM | library/kani_macros/src/lib.rs | 179 | /// As mentioned earlier, the `#[safety_constraint(...)]` attribute can be added | COMMENT |
| MEDIUM | library/kani_macros/src/lib.rs | 306 | /// As mentioned earlier, the `#[safety_constraint(...)]` attribute can be added | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/cargo-ui/ws-integ-tests/Cargo.toml | 4 | # Create a workspace with three independent libraries that have integration tests. | COMMENT |
| MEDIUM | tests/cargo-kani/stubbing-ws-packages/Cargo.toml | 4 | # Create a workspace with multiple packages with stubs | COMMENT |
| MEDIUM | tests/script-based-pre/verify_std_cmd/verify_std.sh | 17 | # Create a custom standard library. | COMMENT |
| MEDIUM | tests/script-based-pre/std_codegen/codegen_std.sh | 21 | # Create a custom standard library. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …i-compiler/src/codegen_aeneas_llbc/mir_to_ullbc/mod.rs | 1241 | trait_refs: trait_ref.trait_decl_ref.skip_binder.generics.trait_refs.clone(), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/benchcomp/benchcomp/__init__.py | 78 | CODE | |
| LOW | tools/benchcomp/benchcomp/parsers/kani_perf.py | 70 | CODE | |
| LOW | tools/benchcomp/benchcomp/visualizers/__init__.py | 299 | CODE | |
| LOW | tools/benchcomp/benchcomp/visualizers/__init__.py | 340 | CODE | |
| LOW | tools/benchcomp/benchcomp/visualizers/__init__.py | 367 | CODE | |
| LOW | tools/benchcomp/benchcomp/visualizers/utils.py | 67 | CODE | |
| LOW | tools/benchcomp/benchcomp/visualizers/utils.py | 103 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/run-autopep8.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/gen_benchcomp_schemas.py | 12 | CODE |