Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites
This report presents the forensic synthetic code analysis of simplecov-ruby/simplecov, a Ruby project with 4,919 GitHub stars. SynthScan v2.0 examined 62,487 lines of code across 554 source files, recording 276 pattern matches distributed across 7 syntactic categories. The overall adjusted score of 5.0 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 276 distinct pattern matches across 7 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 | tasks/man_page.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/helper.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/helper.rb | 61 | # the project's own `spec/` via the `extra_filters` list passed to | COMMENT |
| LOW | spec/combine_differential_spec.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/combine_differential_spec.rb | 41 | mismatches = seeds.flat_map do |seed| | COMMENT |
| LOW | spec/result_merger_spec.rb | 61 | # branch or method data can never fire on the merge path. See #1250. | COMMENT |
| LOW | spec/result_spec.rb | 461 | # Per-process slices (process_coverage_result) build with report: false | COMMENT |
| LOW | spec/static_coverage_extractor_fuzz_spec.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/support/dogfood_report.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/support/dogfood_report.rb | 101 | COMMENT | |
| LOW | spec/support/dogfood_report.rb | 121 | # (rather than in SimpleCov.start) to avoid leaking the | COMMENT |
| LOW | spec/support/sandbox_project.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/support/merge_fuzzer.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/support/with_env.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/support/merge_reference.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/sandbox/groups_and_filters_complex_spec.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/sandbox/rspec_conductor_spec.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/sandbox/rspec_conductor_spec.rb | 21 | # usual "Coverage report generated" line: the conductor server closes | COMMENT |
| LOW | benchmarks/simulate_coverage.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | benchmarks/report_scale.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | benchmarks/collate.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | benchmarks/collate.rb | 21 | # ruby benchmarks/collate.rb baseline | COMMENT |
| LOW | benchmarks/collate/shape.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | benchmarks/collate/shape.rb | 21 | CONDITIONS = 32_820 | COMMENT |
| LOW | benchmarks/collate/runner.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | .github/workflows/dependabot_assets.yml | 1 | # Dependabot bumps html_frontend dependencies but cannot run the compile | COMMENT |
| LOW | lib/simplecov.rb | 21 | COMMENT | |
| LOW | lib/simplecov.rb | 81 | # SimpleCov.start 'rails' # using a profile | COMMENT |
| LOW | lib/simplecov.rb | 121 | COMMENT | |
| LOW | lib/simplecov/profiles.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/profiles.rb | 21 | COMMENT | |
| LOW | lib/simplecov/production.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/production.rb | 21 | # which merges them into shared storage. A plain locking file sink ships | COMMENT |
| LOW | lib/simplecov/history.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/parallel_result_merger.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/parallel_result_merger.rb | 21 | # | COMMENT |
| LOW | lib/simplecov/parallel_result_merger.rb | 61 | ResultMerger.create_result(command_names, coverage, tracked_files: tracked_files, contexts: context_maps.map) | COMMENT |
| LOW | lib/simplecov/parallel_result_merger.rb | 81 | # The portable feature test, and the one the rest of the ecosystem uses. | COMMENT |
| LOW | lib/simplecov/parallel_coordination.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/parallel_coordination.rb | 61 | # | COMMENT |
| LOW | lib/simplecov/result_processing.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/result_processing.rb | 21 | # resultsets dominates it. The report is identical either way, not merely | COMMENT |
| LOW | lib/simplecov/result_processing.rb | 141 | end | COMMENT |
| LOW | lib/simplecov/result_processing.rb | 201 | # `inject_unloaded:` is likewise false when a merge step follows. Only the | COMMENT |
| LOW | lib/simplecov/directive.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/directive.rb | 21 | # | COMMENT |
| LOW | lib/simplecov/filter.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/process.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/parallel_adapters.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/parallel_adapters.rb | 21 | # - `GenericAdapter` — env-var-only detection for runners that follow | COMMENT |
| LOW | lib/simplecov/parallel_adapters.rb | 41 | # specific — uses the gem's own API when the gem is loaded); then | COMMENT |
| LOW | lib/simplecov/result_adapter.rb | 41 | end | COMMENT |
| LOW | lib/simplecov/result_adapter.rb | 61 | # alone (handled by ADDRESS_PATTERN above). | COMMENT |
| LOW | lib/simplecov/result_adapter.rb | 121 | # class name chain without calling user inspect), so the non-Module | COMMENT |
| LOW | lib/simplecov/command_guesser.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/command_guesser.rb | 41 | COMMENT | |
| LOW | lib/simplecov/result.rb | 21 | # Every path the producing process was told to track, loaded or not. Carried | COMMENT |
| LOW | lib/simplecov/result.rb | 41 | # The distinct run names behind this result, set by a merge so | COMMENT |
| LOW | lib/simplecov/test_tracker.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/simplecov/test_tracker.rb | 21 | # | COMMENT |
| 129 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/run_identity_spec.rb | 90 | def restore_memoized_identity(saved) | CODE |
| LOW | spec/return_codes_spec.rb | 25 | def stderr_without_report_summary(stderr) | CODE |
| LOW | spec/support/sandbox_project.rb | 110 | def run_command_and_expect_success(command, env: {}, timeout: 60) | CODE |
| LOW | spec/support/sandbox_project.rb | 145 | def expect_coverage_report_generated(result, coverage_dir: "coverage") | CODE |
| LOW | spec/support/sandbox_project.rb | 152 | def expect_no_coverage_report(result, coverage_dir: "coverage") | CODE |
| LOW | spec/support/sandbox_project.rb | 207 | def sandbox_command_environment(overrides) | CODE |
| LOW | spec/support/sandbox_project.rb | 277 | def scrub_untracked_coverage_dirs(source) | CODE |
| LOW | spec/support/fail_rspec_on_ruby_warning.rb | 65 | def write_other_warnings_to_tmp(other_warnings) | CODE |
| LOW | spec/sandbox/groups_and_filters_basic_spec.rb | 23 | def expect_faked_project_file_percents(data) | CODE |
| LOW | spec/sandbox/skipping_code_blocks_manually_spec.rb | 37 | def expect_unchanged_coverage_with_nocov_file(result) | CODE |
| LOW | spec/sandbox/unicode_compatibility_spec.rb | 29 | def expect_report_with_unicode_file(result) | CODE |
| LOW | spec/sandbox/groups_using_filter_class_spec.rb | 21 | def expect_faked_project_file_percents(data) | CODE |
| LOW | spec/sandbox/oneshot_line_coverage_spec.rb | 14 | def expect_regular_line_coverage_report(data) | CODE |
| LOW⚡ | spec/sandbox/branch_coverage_spec.rb | 13 | def expect_line_and_branch_totals(data) | CODE |
| LOW⚡ | spec/sandbox/branch_coverage_spec.rb | 19 | def expect_line_file_percents(data) | CODE |
| LOW⚡ | spec/sandbox/branch_coverage_spec.rb | 28 | def expect_branch_file_percents(data) | CODE |
| LOW | spec/sandbox/branch_coverage_spec.rb | 39 | def expect_some_class_branch_details(data) | CODE |
| LOW | spec/sandbox/config_tracked_files_collate_spec.rb | 26 | def expect_tracked_file_percents(data, framework_specific:) | CODE |
| LOW | spec/sandbox/config_enable_for_subprocesses_spec.rb | 16 | def expect_fully_covered_single_file(data) | CODE |
| LOW | spec/sandbox/skipping_with_directives_spec.rb | 23 | def expect_unchanged_coverage_with_directive_file(result) | CODE |
| LOW | spec/sandbox/groups_and_filters_complex_spec.rb | 26 | def expect_all_groups_hold_meta_magic(data) | CODE |
| LOW | spec/sandbox/config_nocov_token_spec.rb | 43 | def expect_skippit_block_skipped(result) | CODE |
| LOW | spec/sandbox/rspec_conductor_spec.rb | 71 | def configure_conductor_coverage(*settings) | CODE |
| LOW | lib/simplecov/parallel_result_merger.rb | 225 | def warn_about_failed_workers(failed, total) | CODE |
| LOW | lib/simplecov/parallel_coordination.rb | 74 | def wait_for_parallel_results(expected, native_wait: false) | CODE |
| LOW | lib/simplecov/parallel_coordination.rb | 121 | def warn_about_incomplete_parallel_results(expected, seen) | CODE |
| LOW | lib/simplecov/result_adapter.rb | 139 | def aggregate_duplicated_branches(cover_statistic) | CODE |
| LOW | lib/simplecov/result_adapter.rb | 146 | def adapt_oneshot_lines_if_needed(file_name, cover_statistic) | CODE |
| LOW | lib/simplecov/exit_handling.rb | 72 | def exit_and_report_previous_error(exit_status) | CODE |
| LOW | lib/simplecov/result.rb | 147 | def initialize_resultset_metadata(tracked_files, run_id, worker_id, contexts) | CODE |
| LOW | lib/simplecov/result.rb | 154 | def warn_about_missing_source_files(missing, input_size) | CODE |
| LOW | lib/simplecov/result_merger.rb | 114 | def warn_about_expired_results(expired_command_names) | CODE |
| LOW | lib/simplecov/lines_classifier.rb | 75 | def directive_disabled_line_set(lines) | CODE |
| LOW | lib/simplecov/coverage_violations.rb | 143 | def effective_per_file_thresholds(file, defaults, overrides) | CODE |
| LOW | lib/simplecov/coverage_violations.rb | 171 | def file_missed_cap_violation(file, criterion, maximum) | CODE |
| LOW | lib/simplecov/exit_codes/exit_code_handling.rb | 46 | def maximum_missed_per_file_check(result, coverage_limits) | CODE |
| LOW | lib/simplecov/configuration/filters.rb | 68 | def track_files_replacement_hint(glob) | CODE |
| LOW | lib/simplecov/configuration/coverage_criteria.rb | 129 | def raise_if_criterion_disabled(criterion) | CODE |
| LOW | lib/simplecov/configuration/coverage_criteria.rb | 147 | def raise_if_criterion_unsupported(criterion) | CODE |
| LOW | lib/simplecov/configuration/ignored_entries.rb | 66 | def raise_if_branch_type_unsupported(type) | CODE |
| LOW | lib/simplecov/configuration/ignored_entries.rb | 74 | def raise_if_method_type_unsupported(type) | CODE |
| LOW | lib/simplecov/configuration/coverage.rb | 79 | def enable_coverage_criterion(criterion, enabled:, oneshot:) | CODE |
| LOW | lib/simplecov/configuration/coverage.rb | 85 | def resolve_criterion_variant(criterion, oneshot) | CODE |
| LOW | lib/simplecov/configuration/coverage.rb | 109 | def store_maximum_missed_per_file(criterion, count, target) | CODE |
| LOW | lib/simplecov/configuration/missed_caps.rb | 72 | def raise_on_invalid_missed_cap(cap, setting) | CODE |
| LOW | lib/simplecov/configuration/missed_caps.rb | 81 | def missed_per_file_replacement(counts) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 20 | def raise_on_invalid_coverage(coverage, coverage_setting) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 92 | def minimum_coverage_by_group(coverage = nil) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 125 | def partition_per_file_thresholds(coverage) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 143 | def minimum_possible_coverage_exceeded(coverage_option) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 150 | def per_file_coverage_replacement(defaults, overrides) | CODE |
| LOW | lib/simplecov/configuration/thresholds.rb | 162 | def per_group_coverage_replacement(coverage) | CODE |
| LOW | lib/simplecov/test_tracker/framework_hooks.rb | 58 | def install_minitest_hook_when_loaded(root = Object) | CODE |
| LOW | lib/simplecov/cli/dotfile.rb | 72 | def read_production_coverage_from(dotfile) | CODE |
| LOW | lib/simplecov/cli/merge.rb | 98 | def warn_about_duplicate_command_names(parsed, stderr) | CODE |
| LOW | lib/simplecov/result_merger/resultset_run_identity.rb | 14 | def worker_identities_for_run(results, run_id, started_at) | CODE |
| LOW | lib/simplecov/formatter/coverage_json_writer.rb | 38 | def warn_if_concurrent_overwrite(path, result) | CODE |
| LOW | …simplecov/formatter/json_formatter/errors_formatter.rb | 97 | def format_maximum_missed_per_file(result, errors) | CODE |
| LOW | …ecov/formatter/json_formatter/result_hash_formatter.rb | 108 | def format_coverage_statistics(statistics) | CODE |
| LOW | lib/simplecov/static_coverage_extractor/visitor.rb | 109 | def visit_match_required_node(node) | CODE |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/simplecov/profiles.rb | 13 | # Define a SimpleCov profile: | COMMENT |
| MEDIUM | lib/simplecov/production.rb | 10 | # This file is deliberately loadable on its own — `require | COMMENT |
| MEDIUM | lib/simplecov/configuration/groups.rb | 18 | # Define a display group for files. Same matcher grammar as `skip`, | COMMENT |
| MEDIUM | lib/simplecov/view_coverage/template_compiler.rb | 10 | # Defining the method is the whole trick. `Template#compile` hands the | COMMENT |
| MEDIUM | …ils/rspec_rails/config/initializers/wrap_parameters.rb | 3 | # This file contains settings for ActionController::ParamsWrapper which | COMMENT |
| MEDIUM | test_projects/rails/rspec_rails/spec/rails_helper.rb | 1 | # This file is copied to spec/ when you run 'rails generate rspec:install' | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/simplecov/report_deferral.rb | 5 | # exit_handling.rb, which orchestrates the at_exit flow that consults | COMMENT |
| MEDIUM | lib/simplecov/exit_handling.rb | 5 | # `at_exit` orchestration: post-suite report generation, threshold | COMMENT |
| MEDIUM | lib/simplecov/cli/command_helpers.rb | 9 | # scaffold around it, the one-line error helper (prefixed with the | COMMENT |
| MEDIUM | lib/simplecov/cli/command_helpers.rb | 68 | # The parse scaffold every read-only subcommand repeats: seed the | COMMENT |
| MEDIUM | lib/simplecov/formatter/base.rb | 9 | # Shared scaffolding for formatters that write a coverage report to | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spec/helper.rb | 31 | # the sandbox harness, and the subprocesses specs spawn — assumes a | COMMENT |
| MEDIUM | spec/static_coverage_extractor_spec.rb | 366 | # differential harness that pins them tuple-for-tuple: every | COMMENT |
| MEDIUM | spec/support/coverage_differential.rb | 7 | # Shared harness for the differential specs that pin | COMMENT |
| MEDIUM | spec/support/sandbox_project.rb | 18 | # rubocop:disable Metrics/ModuleLength -- one cohesive sandbox harness; | COMMENT |
| LOW | lib/simplecov/profiles/strict.rb | 12 | # accepted (they just add to the configured criteria set), but the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmarks/simulate_coverage.rb | 18 | # Usage: | COMMENT |
| LOW | benchmarks/report_scale.rb | 9 | # Usage: | COMMENT |
| LOW | benchmarks/collate.rb | 19 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/simplecov/source_file.rb | 159 | # Check if any branches missing on given line number | COMMENT |
| LOW | lib/simplecov/source_file/branch.rb | 34 | # Check if branch missed or not | COMMENT |