AI Slop Code RIsk Monitor

danger/danger

🚫 Stop saying "you forgot to …" in code review (in Ruby)

6.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for danger/danger, a Ruby project with 5,695 GitHub stars. SynthScan examined 26,808 lines of code across 239 source files, recording 146 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 6.7 (Moderate pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

6.7
Adjusted Signal
6.7
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
5.7K
Stars
Ruby
Language
26.8K
Lines of Code
239
Files
146
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 26.5/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 143 finding(s).

Hallucinated Dependency & Supply Chain Risk 1.4/100 · LOW

Are imports declared and package/API names verified? 1 finding(s).

Agent Over-Engineering Ratio 7.9/100 · LOW

Are wrappers, guards, and repeated structures necessary? 36 finding(s).

PR Review Velocity Impact 27.3/100 · MEDIUM

Which changes need focused human review? 146 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 1MEDIUM 10LOW 135

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 146 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block94 hits · 94 pts
SeverityFileLineSnippetContext
LOW.rubocop_todo.yml1# This configuration was generated byCOMMENT
LOWspec/lib/danger/danger_core/message_aggregator_spec.rb81 let(:file_a) { "README.md" }COMMENT
LOWlib/danger/danger_core/standard_error.rb41 def contentsCOMMENT
LOWlib/danger/danger_core/messages/base.rb21 order = file <=> other.fileCOMMENT
LOWlib/danger/danger_core/plugins/dangerfile_git_plugin.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/danger_core/plugins/dangerfile_git_plugin.rb21 # @example Fail really big diffsCOMMENT
LOWlib/danger/danger_core/plugins/dangerfile_git_plugin.rb81 # List of renamed filesCOMMENT
LOWlib/danger/danger_core/plugins/dangerfile_git_plugin.rb121 # The log of commits inside the diffCOMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb21 #COMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb41 # danger.import_dangerfile(url: custom_url)COMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb161 # Download and execute a remote Dangerfile.COMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb181 # Download and execute a remote Dangerfile.COMMENT
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb201 # A https url where the Dangerfile is.COMMENT
LOW…nger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…nger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb21 # @example Ensure there is a summary for a PRCOMMENT
LOW…nger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb41 # message "This PR changes #{ bitbucket_cloud.html_link(config_files) }"COMMENT
LOW…nger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb121 # The branch to which the PR is going to be merged from.COMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb21 # @example Check if a user is in a specific GitHub org, and message them if soCOMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb41 #COMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb61 #COMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb101 #COMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb141 # @!group PR MetadataCOMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb181 # @!group PR Commit MetadataCOMMENT
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb201 # @return [Octokit::Client]COMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb21 # message 'Hello', 'World', file: "Dangerfile", line: 1COMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb41 # failure ["This is example", "with array"]COMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb61 # markdown "### First issue", "### Second issue"COMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb81 endCOMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb121 side: side,COMMENT
LOW…ger/danger_core/plugins/dangerfile_messaging_plugin.rb181 #COMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb21 # @example Ensure there is a summary for a PRCOMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb41 # message "This PR changes #{ bitbucket_server.html_link(config_files) }"COMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb121 # The branch to which the PR is going to be merged from.COMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb141 @bs.pr_json[:fromRef][:latestCommit].to_sCOMMENT
LOW…ger_core/plugins/dangerfile_bitbucket_server_plugin.rb161 # Returns a list of Markdown links for a file, or files in the head repository.COMMENT
LOW…er/danger_core/plugins/dangerfile_local_only_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb21 # @example Ensure that all MRs have an assignee.COMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb41 # warn("This MR cannot be merged yet.") unless can_mergeCOMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb61 # reviewer = gitlab.api.group_members(gitlab.api.merge_request_approvals(project_id, mr_id).to_hash["approveCOMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb121 # The labels assigned to the Merge RequestCOMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb161COMMENT
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb201 endCOMMENT
LOW…b/danger/danger_core/plugins/dangerfile_vsts_plugin.rb1# frozen_string_literal: trueCOMMENT
LOW…b/danger/danger_core/plugins/dangerfile_vsts_plugin.rb21 # @example Only accept PRs to the develop branchCOMMENT
LOW…b/danger/danger_core/plugins/dangerfile_vsts_plugin.rb41 #COMMENT
LOW…b/danger/danger_core/plugins/dangerfile_vsts_plugin.rb101COMMENT
LOW…b/danger/danger_core/plugins/dangerfile_vsts_plugin.rb141 def base_commitCOMMENT
LOWlib/danger/ci_source/surf.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/screwdriver.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/appveyor.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/appveyor.rb21 #COMMENT
LOWlib/danger/ci_source/xcode_cloud.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/buildkite.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/jenkins.rb1# frozen_string_literal: trueCOMMENT
LOWlib/danger/ci_source/jenkins.rb21 #COMMENT
34 more matches not shown…
Hyper-Verbose Identifiers34 hits · 38 pts
SeverityFileLineSnippetContext
LOW⚡spec/support/gitlab_helper.rb55 def stub_merge_request_changes(fixture, slug, merge_request_id)CODE
LOW⚡spec/support/gitlab_helper.rb61 def stub_merge_request_commits(fixture, slug, merge_request_id)CODE
LOW⚡spec/support/gitlab_helper.rb67 def stub_merge_request_comments(fixture, slug, merge_request_id)CODE
LOW⚡spec/support/gitlab_helper.rb73 def stub_merge_request_discussions(fixture, slug, merge_request_id)CODE
LOW⚡spec/support/gitlab_helper.rb79 def stub_commit_merge_requests(fixture, slug, commit_sha)CODE
LOWspec/support/ci_helper.rb209 def with_travis_setup_and_is_a_pull_request(request_source: nil)CODE
LOWspec/lib/danger/danger_core/executor_spec.rb183 def prepare_fake_swiftweekly_repository(dir)CODE
LOWspec/lib/danger/plugin_support/gems_resolver_spec.rb28 def fake_bundle_install_path_vendor_gems_in(spec_root)CODE
LOWlib/danger/scm_source/git_repo.rb107 def git_fetch_branch_to_depth(branch, depth)CODE
LOWlib/danger/scm_source/git_repo.rb115 def raise_if_we_cannot_find_the_commit(commitish)CODE
LOWlib/danger/scm_source/git_repo.rb142 def find_merge_base_with_incremental_fetch(repo, from, to)CODE
LOWlib/danger/danger_core/environment_manager.rb80 def raise_error_for_no_request_source(env, ui)CODE
LOWlib/danger/danger_core/environment_manager.rb104 def extract_title_and_subtitle_from_source(repo_url)CODE
LOWlib/danger/danger_core/environment_manager.rb117 def ui_display_no_request_source_error_message(ui, env, title, subtitle)CODE
LOWlib/danger/danger_core/dangerfile.rb123 def method_values_for_plugin_hashes(plugin_hashes)CODE
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb137 def import_dangerfile_from_path(path)CODE
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb151 def import_dangerfile_from_gem(name)CODE
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb171 def import_dangerfile_from_github(slug, branch = nil, path = nil)CODE
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb191 def import_dangerfile_from_gitlab(slug_or_project_id, branch = nil, path = nil)CODE
LOW…danger/danger_core/plugins/dangerfile_danger_plugin.rb204 def import_dangerfile_from_url(url)CODE
LOW…danger/danger_core/plugins/dangerfile_github_plugin.rb246 def dismiss_out_of_range_messages(dismiss = true)CODE
LOW…danger/danger_core/plugins/dangerfile_gitlab_plugin.rb257 def dismiss_out_of_range_messages(dismiss = true)CODE
LOW⚡lib/danger/request_sources/code_insights_api.rb120 def violation_hash_with_severity(violation, severity)CODE
LOW⚡lib/danger/request_sources/code_insights_api.rb129 def report_endpoint_at_commit(commit)CODE
LOW⚡lib/danger/request_sources/code_insights_api.rb133 def annotation_endpoint_at_commit(commit)CODE
LOWlib/danger/request_sources/gitlab.rb294 def dismiss_out_of_range_messages_for(kind)CODE
LOWlib/danger/request_sources/gitlab.rb470 def find_old_position_in_diff(changes, message)CODE
LOWlib/danger/request_sources/github/github.rb301 def delete_old_inline_violations(danger_comments: [], non_danger_comments: [])CODE
LOWlib/danger/request_sources/github/github.rb549 def dismiss_out_of_range_messages_for(kind)CODE
LOWlib/danger/ci_source/support/pull_request_finder.rb62 def generate_remote_pull_request(remote_pull_request)CODE
LOWlib/danger/helpers/comments_helper.rb115 def generate_message_group_comment(message_group:,CODE
LOWlib/danger/helpers/comments_helper.rb133 def generate_inline_comment_body(emoji,CODE
LOWlib/danger/helpers/comments_helper.rb145 def generate_inline_markdown_body(markdown, danger_id: "danger", template: "github")CODE
LOWlib/danger/helpers/comments_parsing_helper.rb19 def parse_tables_from_comment(comment)CODE
Slop Phrases10 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMlib/danger/danger_core/dangerfile_dsl.rb11 # you can use to pull out extra bits of information. _Warning_COMMENT
LOWlib/danger/ci_source/xcode_cloud.rb13 # If running on GitHub Enterprise, make sure you also set the expected values forCOMMENT
MEDIUMlib/danger/ci_source/teamcity.rb64 # TeamCity provides `%teamcity.build.branch%`, which you can use at the top of your Simple Command Runner:COMMENT
MEDIUMlib/danger/ci_source/github_actions.rb9 # And so, you can use GITHUB_TOKEN secret as `DANGER_GITHUB_API_TOKEN` environment variable.COMMENT
MEDIUMlib/danger/ci_source/circle.rb20 # With "Only build pull requests" enabled, you can add `bundle exec danger` to your `config.yml` (Circle 2.0).COMMENT
LOWlib/danger/ci_source/code_build.rb9 # In CodeBuild, make sure to correctly forward `CODEBUILD_BUILD_ID`, `CODEBUILD_SOURCE_VERSION`, `CODEBUILD_SOURCE_REPCOMMENT
LOWlib/danger/ci_source/code_build.rb10 # In CodeBuild with batch builds, make sure to correctly forward `CODEBUILD_BUILD_ID`, `CODEBUILD_WEBHOOK_TRIGGER`, `CCOMMENT
LOWlib/danger/ci_source/codefresh.rb21 # Don't forget to add the `DANGER_GITHUB_API_TOKEN` variable to your pipeline settings so that Danger can properly poCOMMENT
MEDIUMlib/danger/commands/init.rb133 ui.say "It's worth noting that you #{'should not'.bold.white} re-use this token for OSS repos."CODE
LOWlib/danger/commands/init.rb136 ui.say "Additionally, don't forget to add your new GitHub account as a collaborator to your Closed Source projecCODE
Magic Placeholder Names1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHlib/danger/ci_source/appveyor.rb28 # DANGER_GITHUB_API_TOKEN: <YOUR_TOKEN_HERE>COMMENT
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMlib/danger/danger_core/executor.rb20 # Create a silent Cork instance if cork is nil, as it's likely a testCOMMENT
MEDIUMlib/danger/plugin_support/plugin_parser.rb144 # Create the center params, `thing: OK, other: Thing`COMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMlib/danger/danger_core/standard_error.rb55 # -------------------------------------------COMMENT
MEDIUMlib/danger/danger_core/standard_error.rb59 # -------------------------------------------COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWlib/danger/danger_core/dangerfile.rb297 # Print results in the terminalCOMMENT
LOWlib/danger/ci_source/drone.rb63 # Check if this build is valid for CI with drone 0.6 or laterCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMlib/danger/helpers/comments_parsing_helper.rb67 # The new method uses a more robust data-danger-tableCOMMENT