Repository Analysis

simplecov-ruby/simplecov

Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites

5.0 Low AI signal View on GitHub

Analysis Overview

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).

5.0
Adjusted Score
5.0
Raw Score
100%
Time Factor
2026-08-26
Last Push
4.9K
Stars
Ruby
Language
62.5K
Lines of Code
554
Files
276
Pattern Hits
2026-08-29
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 0MEDIUM 15LOW 261

Directory Score Breakdown

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.

Pattern Findings

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.

Over-Commented Block189 hits · 189 pts
SeverityFileLineSnippetContext
LOWtasks/man_page.rb1# frozen_string_literal: trueCOMMENT
LOWspec/helper.rb1# frozen_string_literal: trueCOMMENT
LOWspec/helper.rb61# the project's own `spec/` via the `extra_filters` list passed toCOMMENT
LOWspec/combine_differential_spec.rb1# frozen_string_literal: trueCOMMENT
LOWspec/combine_differential_spec.rb41 mismatches = seeds.flat_map do |seed|COMMENT
LOWspec/result_merger_spec.rb61 # branch or method data can never fire on the merge path. See #1250.COMMENT
LOWspec/result_spec.rb461 # Per-process slices (process_coverage_result) build with report: falseCOMMENT
LOWspec/static_coverage_extractor_fuzz_spec.rb1# frozen_string_literal: trueCOMMENT
LOWspec/support/dogfood_report.rb1# frozen_string_literal: trueCOMMENT
LOWspec/support/dogfood_report.rb101COMMENT
LOWspec/support/dogfood_report.rb121 # (rather than in SimpleCov.start) to avoid leaking theCOMMENT
LOWspec/support/sandbox_project.rb1# frozen_string_literal: trueCOMMENT
LOWspec/support/merge_fuzzer.rb1# frozen_string_literal: trueCOMMENT
LOWspec/support/with_env.rb1# frozen_string_literal: trueCOMMENT
LOWspec/support/merge_reference.rb1# frozen_string_literal: trueCOMMENT
LOWspec/sandbox/groups_and_filters_complex_spec.rb1# frozen_string_literal: trueCOMMENT
LOWspec/sandbox/rspec_conductor_spec.rb1# frozen_string_literal: trueCOMMENT
LOWspec/sandbox/rspec_conductor_spec.rb21# usual "Coverage report generated" line: the conductor server closesCOMMENT
LOWbenchmarks/simulate_coverage.rb1# frozen_string_literal: trueCOMMENT
LOWbenchmarks/report_scale.rb1# frozen_string_literal: trueCOMMENT
LOWbenchmarks/collate.rb1# frozen_string_literal: trueCOMMENT
LOWbenchmarks/collate.rb21# ruby benchmarks/collate.rb baselineCOMMENT
LOWbenchmarks/collate/shape.rb1# frozen_string_literal: trueCOMMENT
LOWbenchmarks/collate/shape.rb21 CONDITIONS = 32_820COMMENT
LOWbenchmarks/collate/runner.rb1# frozen_string_literal: trueCOMMENT
LOW.github/workflows/dependabot_assets.yml1# Dependabot bumps html_frontend dependencies but cannot run the compileCOMMENT
LOWlib/simplecov.rb21COMMENT
LOWlib/simplecov.rb81 # SimpleCov.start 'rails' # using a profileCOMMENT
LOWlib/simplecov.rb121COMMENT
LOWlib/simplecov/profiles.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/profiles.rb21COMMENT
LOWlib/simplecov/production.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/production.rb21# which merges them into shared storage. A plain locking file sink shipsCOMMENT
LOWlib/simplecov/history.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/parallel_result_merger.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/parallel_result_merger.rb21 #COMMENT
LOWlib/simplecov/parallel_result_merger.rb61 ResultMerger.create_result(command_names, coverage, tracked_files: tracked_files, contexts: context_maps.map)COMMENT
LOWlib/simplecov/parallel_result_merger.rb81 # The portable feature test, and the one the rest of the ecosystem uses.COMMENT
LOWlib/simplecov/parallel_coordination.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/parallel_coordination.rb61 #COMMENT
LOWlib/simplecov/result_processing.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/result_processing.rb21 # resultsets dominates it. The report is identical either way, not merelyCOMMENT
LOWlib/simplecov/result_processing.rb141 endCOMMENT
LOWlib/simplecov/result_processing.rb201 # `inject_unloaded:` is likewise false when a merge step follows. Only theCOMMENT
LOWlib/simplecov/directive.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/directive.rb21 #COMMENT
LOWlib/simplecov/filter.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/process.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/parallel_adapters.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/parallel_adapters.rb21 # - `GenericAdapter` — env-var-only detection for runners that followCOMMENT
LOWlib/simplecov/parallel_adapters.rb41 # specific — uses the gem's own API when the gem is loaded); thenCOMMENT
LOWlib/simplecov/result_adapter.rb41 endCOMMENT
LOWlib/simplecov/result_adapter.rb61 # alone (handled by ADDRESS_PATTERN above).COMMENT
LOWlib/simplecov/result_adapter.rb121 # class name chain without calling user inspect), so the non-ModuleCOMMENT
LOWlib/simplecov/command_guesser.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/command_guesser.rb41COMMENT
LOWlib/simplecov/result.rb21 # Every path the producing process was told to track, loaded or not. CarriedCOMMENT
LOWlib/simplecov/result.rb41 # The distinct run names behind this result, set by a merge soCOMMENT
LOWlib/simplecov/test_tracker.rb1# frozen_string_literal: trueCOMMENT
LOWlib/simplecov/test_tracker.rb21 #COMMENT
129 more matches not shown…
Hyper-Verbose Identifiers66 hits · 68 pts
SeverityFileLineSnippetContext
LOWspec/run_identity_spec.rb90 def restore_memoized_identity(saved)CODE
LOWspec/return_codes_spec.rb25 def stderr_without_report_summary(stderr)CODE
LOWspec/support/sandbox_project.rb110 def run_command_and_expect_success(command, env: {}, timeout: 60)CODE
LOWspec/support/sandbox_project.rb145 def expect_coverage_report_generated(result, coverage_dir: "coverage")CODE
LOWspec/support/sandbox_project.rb152 def expect_no_coverage_report(result, coverage_dir: "coverage")CODE
LOWspec/support/sandbox_project.rb207 def sandbox_command_environment(overrides)CODE
LOWspec/support/sandbox_project.rb277 def scrub_untracked_coverage_dirs(source)CODE
LOWspec/support/fail_rspec_on_ruby_warning.rb65 def write_other_warnings_to_tmp(other_warnings)CODE
LOWspec/sandbox/groups_and_filters_basic_spec.rb23 def expect_faked_project_file_percents(data)CODE
LOWspec/sandbox/skipping_code_blocks_manually_spec.rb37 def expect_unchanged_coverage_with_nocov_file(result)CODE
LOWspec/sandbox/unicode_compatibility_spec.rb29 def expect_report_with_unicode_file(result)CODE
LOWspec/sandbox/groups_using_filter_class_spec.rb21 def expect_faked_project_file_percents(data)CODE
LOWspec/sandbox/oneshot_line_coverage_spec.rb14 def expect_regular_line_coverage_report(data)CODE
LOWspec/sandbox/branch_coverage_spec.rb13 def expect_line_and_branch_totals(data)CODE
LOWspec/sandbox/branch_coverage_spec.rb19 def expect_line_file_percents(data)CODE
LOWspec/sandbox/branch_coverage_spec.rb28 def expect_branch_file_percents(data)CODE
LOWspec/sandbox/branch_coverage_spec.rb39 def expect_some_class_branch_details(data)CODE
LOWspec/sandbox/config_tracked_files_collate_spec.rb26 def expect_tracked_file_percents(data, framework_specific:)CODE
LOWspec/sandbox/config_enable_for_subprocesses_spec.rb16 def expect_fully_covered_single_file(data)CODE
LOWspec/sandbox/skipping_with_directives_spec.rb23 def expect_unchanged_coverage_with_directive_file(result)CODE
LOWspec/sandbox/groups_and_filters_complex_spec.rb26 def expect_all_groups_hold_meta_magic(data)CODE
LOWspec/sandbox/config_nocov_token_spec.rb43 def expect_skippit_block_skipped(result)CODE
LOWspec/sandbox/rspec_conductor_spec.rb71 def configure_conductor_coverage(*settings)CODE
LOWlib/simplecov/parallel_result_merger.rb225 def warn_about_failed_workers(failed, total)CODE
LOWlib/simplecov/parallel_coordination.rb74 def wait_for_parallel_results(expected, native_wait: false)CODE
LOWlib/simplecov/parallel_coordination.rb121 def warn_about_incomplete_parallel_results(expected, seen)CODE
LOWlib/simplecov/result_adapter.rb139 def aggregate_duplicated_branches(cover_statistic)CODE
LOWlib/simplecov/result_adapter.rb146 def adapt_oneshot_lines_if_needed(file_name, cover_statistic)CODE
LOWlib/simplecov/exit_handling.rb72 def exit_and_report_previous_error(exit_status)CODE
LOWlib/simplecov/result.rb147 def initialize_resultset_metadata(tracked_files, run_id, worker_id, contexts)CODE
LOWlib/simplecov/result.rb154 def warn_about_missing_source_files(missing, input_size)CODE
LOWlib/simplecov/result_merger.rb114 def warn_about_expired_results(expired_command_names)CODE
LOWlib/simplecov/lines_classifier.rb75 def directive_disabled_line_set(lines)CODE
LOWlib/simplecov/coverage_violations.rb143 def effective_per_file_thresholds(file, defaults, overrides)CODE
LOWlib/simplecov/coverage_violations.rb171 def file_missed_cap_violation(file, criterion, maximum)CODE
LOWlib/simplecov/exit_codes/exit_code_handling.rb46 def maximum_missed_per_file_check(result, coverage_limits)CODE
LOWlib/simplecov/configuration/filters.rb68 def track_files_replacement_hint(glob)CODE
LOWlib/simplecov/configuration/coverage_criteria.rb129 def raise_if_criterion_disabled(criterion)CODE
LOWlib/simplecov/configuration/coverage_criteria.rb147 def raise_if_criterion_unsupported(criterion)CODE
LOWlib/simplecov/configuration/ignored_entries.rb66 def raise_if_branch_type_unsupported(type)CODE
LOWlib/simplecov/configuration/ignored_entries.rb74 def raise_if_method_type_unsupported(type)CODE
LOWlib/simplecov/configuration/coverage.rb79 def enable_coverage_criterion(criterion, enabled:, oneshot:)CODE
LOWlib/simplecov/configuration/coverage.rb85 def resolve_criterion_variant(criterion, oneshot)CODE
LOWlib/simplecov/configuration/coverage.rb109 def store_maximum_missed_per_file(criterion, count, target)CODE
LOWlib/simplecov/configuration/missed_caps.rb72 def raise_on_invalid_missed_cap(cap, setting)CODE
LOWlib/simplecov/configuration/missed_caps.rb81 def missed_per_file_replacement(counts)CODE
LOWlib/simplecov/configuration/thresholds.rb20 def raise_on_invalid_coverage(coverage, coverage_setting)CODE
LOWlib/simplecov/configuration/thresholds.rb92 def minimum_coverage_by_group(coverage = nil)CODE
LOWlib/simplecov/configuration/thresholds.rb125 def partition_per_file_thresholds(coverage)CODE
LOWlib/simplecov/configuration/thresholds.rb143 def minimum_possible_coverage_exceeded(coverage_option)CODE
LOWlib/simplecov/configuration/thresholds.rb150 def per_file_coverage_replacement(defaults, overrides)CODE
LOWlib/simplecov/configuration/thresholds.rb162 def per_group_coverage_replacement(coverage)CODE
LOWlib/simplecov/test_tracker/framework_hooks.rb58 def install_minitest_hook_when_loaded(root = Object)CODE
LOWlib/simplecov/cli/dotfile.rb72 def read_production_coverage_from(dotfile)CODE
LOWlib/simplecov/cli/merge.rb98 def warn_about_duplicate_command_names(parsed, stderr)CODE
LOWlib/simplecov/result_merger/resultset_run_identity.rb14 def worker_identities_for_run(results, run_id, started_at)CODE
LOWlib/simplecov/formatter/coverage_json_writer.rb38 def warn_if_concurrent_overwrite(path, result)CODE
LOW…simplecov/formatter/json_formatter/errors_formatter.rb97 def format_maximum_missed_per_file(result, errors)CODE
LOW…ecov/formatter/json_formatter/result_hash_formatter.rb108 def format_coverage_statistics(statistics)CODE
LOWlib/simplecov/static_coverage_extractor/visitor.rb109 def visit_match_required_node(node)CODE
6 more matches not shown…
Self-Referential Comments6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMlib/simplecov/profiles.rb13 # Define a SimpleCov profile:COMMENT
MEDIUMlib/simplecov/production.rb10# This file is deliberately loadable on its own — `requireCOMMENT
MEDIUMlib/simplecov/configuration/groups.rb18 # Define a display group for files. Same matcher grammar as `skip`,COMMENT
MEDIUMlib/simplecov/view_coverage/template_compiler.rb10 # Defining the method is the whole trick. `Template#compile` hands theCOMMENT
MEDIUM…ils/rspec_rails/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMtest_projects/rails/rspec_rails/spec/rails_helper.rb1# This file is copied to spec/ when you run 'rails generate rspec:install'COMMENT
Modern AI Meta-Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMlib/simplecov/report_deferral.rb5# exit_handling.rb, which orchestrates the at_exit flow that consultsCOMMENT
MEDIUMlib/simplecov/exit_handling.rb5# `at_exit` orchestration: post-suite report generation, thresholdCOMMENT
MEDIUMlib/simplecov/cli/command_helpers.rb9 # scaffold around it, the one-line error helper (prefixed with theCOMMENT
MEDIUMlib/simplecov/cli/command_helpers.rb68 # The parse scaffold every read-only subcommand repeats: seed theCOMMENT
MEDIUMlib/simplecov/formatter/base.rb9 # Shared scaffolding for formatters that write a coverage report toCOMMENT
AI Slop Vocabulary5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMspec/helper.rb31# the sandbox harness, and the subprocesses specs spawn — assumes aCOMMENT
MEDIUMspec/static_coverage_extractor_spec.rb366 # differential harness that pins them tuple-for-tuple: everyCOMMENT
MEDIUMspec/support/coverage_differential.rb7# Shared harness for the differential specs that pinCOMMENT
MEDIUMspec/support/sandbox_project.rb18# rubocop:disable Metrics/ModuleLength -- one cohesive sandbox harness;COMMENT
LOWlib/simplecov/profiles/strict.rb12# accepted (they just add to the configured criteria set), but theCOMMENT
Example Usage Blocks3 hits · 4 pts
SeverityFileLineSnippetContext
LOWbenchmarks/simulate_coverage.rb18# Usage:COMMENT
LOWbenchmarks/report_scale.rb9# Usage:COMMENT
LOWbenchmarks/collate.rb19# Usage:COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWlib/simplecov/source_file.rb159 # Check if any branches missing on given line numberCOMMENT
LOWlib/simplecov/source_file/branch.rb34 # Check if branch missed or notCOMMENT