AI Slop Code RIsk Monitor

presidentbeef/brakeman

A static analysis security vulnerability scanner for Ruby on Rails applications

5.1 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for presidentbeef/brakeman, a Ruby project with 7,279 GitHub stars. SynthScan examined 84,095 lines of code across 858 source files, recording 324 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 5.1 (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.

5.1
Adjusted Signal
5.1
Raw Pattern Score
100%
Time Factor
2026-10-05
Last Push
7.3K
Stars
Ruby
Language
84.1K
Lines of Code
858
Files
324
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 22.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 0.5/100 · LOW

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

PR Review Velocity Impact 20.5/100 · LOW

Which changes need focused human review? 324 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 0MEDIUM 31LOW 293

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 324 distinct pattern matches across 7 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 Block237 hits · 237 pts
SeverityFileLineSnippetContext
LOW…st/apps/rails3.1/app/assets/javascripts/application.js1// This is a manifest file that'll be compiled into including all the files listed below.COMMENT
LOW…st/apps/rails3.1/app/assets/stylesheets/users.css.scss1// Place all the styles related to the Users controller here.COMMENT
LOWtest/apps/rails3.1/config/routes.rb41 # This route can be invoked with purchase_url(:id => product.id)COMMENT
LOWtest/apps/rails3.1/config/routes.rb61 # resource :sellerCOMMENT
LOWtest/apps/rails3.1/config/routes.rb81 # root :to => 'welcome#index'COMMENT
LOWtest/apps/rails3.1/config/application.rb21 # Only load the plugins named here, in the order given (default is alphabetical).COMMENT
LOWtest/apps/rails3.1/config/environments/production.rb21 config.assets.digest = trueCOMMENT
LOWtest/apps/rails3.1/config/environments/production.rb41COMMENT
LOWtest/apps/rails3.1/config/environments/test.rb21 # Raise exceptions instead of rendering exception templatesCOMMENT
LOW…ps/rails3.1/config/initializers/backtrace_silencers.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails3.1/config/initializers/mime_types.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails3.1/config/initializers/session_store.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails3.1/config/initializers/secret_token.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails3.1/config/initializers/inflections.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails3.1/public/robots.txt1# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt fileCOMMENT
LOWtest/apps/rails3.1/db/seeds.rb1# This file should contain all the record creation needed to seed the database with its default values.COMMENT
LOWtest/apps/rails7/app/assets/config/manifest.js1//= link_tree ../imagesCOMMENT
LOWtest/apps/rails7/config/storage.yml1test:COMMENT
LOWtest/apps/rails7/config/storage.yml21# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>COMMENT
LOWtest/apps/rails7/config/puma.rb1# Puma can serve each request in a thread from an internal thread pool.COMMENT
LOWtest/apps/rails7/config/puma.rb21#COMMENT
LOWtest/apps/rails7/config/locales/en.yml1# Files in the config/locales directory are used for internationalizationCOMMENT
LOWtest/apps/rails7/config/locales/en.yml21#COMMENT
LOWtest/apps/rails7/config/environments/production.rb21 # config.require_master_key = trueCOMMENT
LOWtest/apps/rails7/config/environments/production.rb41 config.active_storage.service = :localCOMMENT
LOWtest/apps/rails7/config/environments/production.rb81 # Use a different logger for distributed setups.COMMENT
LOWtest/apps/rails7/config/environments/production.rb101 #COMMENT
LOWtest/apps/rails7/config/environments/production.rb121 # in a proc. See guides for an example.COMMENT
LOWtest/apps/rails7/config/environments/development.rb61COMMENT
LOWtest/apps/rails7/config/initializers/assets.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…/apps/rails7/config/initializers/permissions_policy.rb1# Define an application-wide HTTP permissions policy. For furtherCOMMENT
LOW…/rails7/config/initializers/content_security_policy.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…/rails7/config/initializers/content_security_policy.rb21# config.content_security_policy_nonce_directives = %w(script-src)COMMENT
LOWtest/apps/rails7/config/initializers/inflections.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails_with_xss_plugin/test/test_helper.rb1ENV["RAILS_ENV"] = "test"COMMENT
LOWtest/apps/rails_with_xss_plugin/test/test_helper.rb21 # any transactions started in your code will be automatically rolled back.COMMENT
LOWtest/apps/rails_with_xss_plugin/config/routes.rb21COMMENT
LOWtest/apps/rails_with_xss_plugin/config/environment.rb1# Be sure to restart your server when you modify this fileCOMMENT
LOWtest/apps/rails_with_xss_plugin/config/environment.rb21 # config.gem "aws-s3", :lib => "aws/s3"COMMENT
LOW…ails_with_xss_plugin/config/environments/production.rb21# Enable serving of images, stylesheets, and javascripts from an asset serverCOMMENT
LOW…apps/rails_with_xss_plugin/config/environments/test.rb21# The :test delivery method accumulates sent emails in theCOMMENT
LOW…_xss_plugin/config/initializers/backtrace_silencers.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…ails_with_xss_plugin/config/initializers/mime_types.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…s_with_xss_plugin/config/initializers/session_store.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…ugin/config/initializers/cookie_verification_secret.rb1# Be sure to restart your server when you modify this file.COMMENT
LOW…ils_with_xss_plugin/config/initializers/inflections.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWtest/apps/rails_with_xss_plugin/public/robots.txt1# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt fileCOMMENT
LOW…s/rails_with_xss_plugin/public/javascripts/controls.js1// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)COMMENT
LOW…s/rails_with_xss_plugin/public/javascripts/controls.js21// invoking this.getToken(), NOT by directly accessingCOMMENT
LOW…s/rails_with_xss_plugin/public/javascripts/controls.js381// Extra local autocompletion options:COMMENT
LOW…ails_with_xss_plugin/public/javascripts/application.js1// Place your application-specific JavaScript functions and classes hereCOMMENT
LOWtest/apps/rails_with_xss_plugin/db/seeds.rb1# This file should contain all the record creation needed to seed the database with its default values.COMMENT
LOWtest/apps/rails5.2/app/assets/config/manifest.js1//= link_tree ../imagesCOMMENT
LOW…st/apps/rails5.2/app/assets/javascripts/application.js1// This is a manifest file that'll be compiled into application.js, which will include all the filesCOMMENT
LOWtest/apps/rails5.2/config/storage.yml1test:COMMENT
LOWtest/apps/rails5.2/config/storage.yml21# keyfile: <%= Rails.root.join("path/to/gcs.keyfile") %>COMMENT
LOWtest/apps/rails5.2/config/puma.rb1# Puma can serve each request in a thread from an internal thread pool.COMMENT
LOWtest/apps/rails5.2/config/puma.rb21# Workers do not work on JRuby or Windows (both of which do not supportCOMMENT
LOWtest/apps/rails5.2/config/puma.rb41# endCOMMENT
LOWtest/apps/rails5.2/config/locales/en.yml1# Files in the config/locales directory are used for internationalizationCOMMENT
177 more matches not shown…
Self-Referential Comments30 hits · 100 pts
SeverityFileLineSnippetContext
MEDIUM…t/apps/rails3.1/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUM…/apps/rails7/config/initializers/permissions_policy.rb1# Define an application-wide HTTP permissions policy. For furtherCOMMENT
MEDIUM…/rails7/config/initializers/content_security_policy.rb3# Define an application-wide content security policyCOMMENT
MEDIUMtest/apps/rails_with_xss_plugin/db/schema.rb1# This file is auto-generated from the current state of the database. Instead of editing this file,COMMENT
MEDIUM…t/apps/rails5.2/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUM…ails5.2/config/initializers/content_security_policy.rb1# Define an application-wide content security policyCOMMENT
MEDIUM…/apps/rails8/config/initializers/permissions_policy.rb3# Define an application-wide HTTP permissions policy. For furtherCOMMENT
MEDIUM…/rails8/config/initializers/content_security_policy.rb3# Define an application-wide content security policy.COMMENT
MEDIUMtest/apps/rails6/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUM…/rails6/config/initializers/content_security_policy.rb3# Define an application-wide content security policyCOMMENT
MEDIUM…s4_with_engines/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUM…ndard_structure/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMtest/apps/rails4/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUM…t/apps/rails3.2/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMtest/apps/rails5/config/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMlib/brakeman/file_path.rb11 # Create a new FilePath using an AppTree object.COMMENT
MEDIUMlib/brakeman/file_path.rb32 # Create a new FilePath with the given absolute and relative paths.COMMENT
MEDIUMlib/brakeman/messages.rb3 # Create a new message from a list of messages.COMMENT
MEDIUM⚡lib/brakeman/messages.rb17 # Create a new code message fragmentCOMMENT
MEDIUM⚡lib/brakeman/messages.rb22 # Create a new message fragment with a CVE identifierCOMMENT
MEDIUM⚡lib/brakeman/messages.rb27 # Create a new message fragment representing a file nameCOMMENT
MEDIUM⚡lib/brakeman/messages.rb32 # Create a new message fragment from a user input type (e.g. `:params`).COMMENT
MEDIUM⚡lib/brakeman/messages.rb38 # Create a new message fragment which will not be modified during outputCOMMENT
MEDIUM⚡lib/brakeman/messages.rb43 # Create a new plain string message fragmentCOMMENT
MEDIUM⚡lib/brakeman/messages.rb48 # Create a message fragment representing the version of a libraryCOMMENT
MEDIUMlib/brakeman/file_parser.rb6 # This class handles reading and parsing files.COMMENT
MEDIUMlib/brakeman/app_tree.rb77 # Create a new Brakeman::FilePathCOMMENT
MEDIUMlib/brakeman/checks/check_link_to.rb99 # Create a warn for this xssCOMMENT
MEDIUMlib/brakeman/processors/lib/processor_helper.rb24 #This method is used because Sexp#args and Sexp#arglist create new objects.COMMENT
MEDIUMlib/ruby_parser/bm_sexp.rb17 #Defining a method named "return" seems like a bad idea, so we have toCOMMENT
Redundant / Tautological Comments43 hits · 74 pts
SeverityFileLineSnippetContext
LOWtest/apps/rails7/config/environments/production.rb68 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWtest/apps/rails5.2/config/environments/production.rb69 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWtest/apps/rails8/config/environments/production.rb74 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWtest/apps/rails6/config/environments/production.rb66 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOW…/rails4_with_engines/config/environments/production.rb65 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOW…n_standard_structure/config/environments/production.rb60 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWtest/apps/rails4/config/environments/production.rb65 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWtest/apps/rails5/config/environments/production.rb67 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
LOWlib/brakeman/file_path.rb43 # Read file from absolute path.COMMENT
LOWlib/brakeman/file_path.rb48 # Check if absolute path exists.COMMENT
LOW⚡lib/brakeman/util.rb168 #Check if _exp_ represents a hash: s(:hash, {...})COMMENT
LOW⚡lib/brakeman/util.rb177 #Check if _exp_ represents an array: s(:array, [...])COMMENT
LOW⚡lib/brakeman/util.rb182 #Check if _exp_ represents a String: s(:str, "...")COMMENT
LOW⚡lib/brakeman/util.rb191 #Check if _exp_ represents a Symbol: s(:lit, :...)COMMENT
LOW⚡lib/brakeman/util.rb196 #Check if _exp_ represents a method call: s(:call, ...)COMMENT
LOW⚡lib/brakeman/util.rb202 #Check if _exp_ represents a Regexp: s(:lit, /.../)COMMENT
LOW⚡lib/brakeman/util.rb207 #Check if _exp_ represents an Integer: s(:lit, ...)COMMENT
LOW⚡lib/brakeman/util.rb212 #Check if _exp_ represents a number: s(:lit, ...)COMMENT
LOW⚡lib/brakeman/util.rb217 #Check if _exp_ represents a result: s(:result, ...)COMMENT
LOW⚡lib/brakeman/util.rb222 #Check if _exp_ represents a :true, :lit, or :string nodeCOMMENT
LOW⚡lib/brakeman/util.rb229 #Check if _exp_ represents a :false or :nil nodeCOMMENT
LOW⚡lib/brakeman/util.rb235 #Check if _exp_ represents a block of codeCOMMENT
LOW⚡lib/brakeman/util.rb241 #Check if _exp_ is a params hashCOMMENT
LOWlib/brakeman/util.rb286 #Check if exp is params, cookies, or request_headersCOMMENT
LOWlib/brakeman/util.rb304 #Check if _exp_ is a Sexp.COMMENT
LOWlib/brakeman/util.rb309 #Check if _exp_ is a Sexp and the node type matches one of the given types.COMMENT
LOWlib/brakeman/checks.rb72 #Add Warning to list of warnings to report.COMMENT
LOWlib/brakeman/checks/check_basic_auth.rb60 # Check if the block of a result contains a comparison of password to stringCOMMENT
LOWlib/brakeman/checks/check_model_attributes.rb3#Check if mass assignment is used with modelsCOMMENT
LOWlib/brakeman/checks/check_redirect.rb236 #Check if method is actually an association in a ModelCOMMENT
LOWlib/brakeman/checks/check_link_to.rb76 # Check if we should warn about the specified methodCOMMENT
LOWlib/brakeman/checks/check_link_to.rb89 # Check if we should warn about the matched resultCOMMENT
LOWlib/brakeman/checks/check_render.rb30 #Check if path to action or file is determined dynamicallyCOMMENT
LOWlib/brakeman/checks/check_json_parsing.rb41 #Check if `yajl` is included in GemfileCOMMENT
LOWlib/brakeman/checks/check_select_tag.rb35 #Check if select_tag is called with user input in :prompt optionCOMMENT
LOWlib/brakeman/processors/alias_processor.rb893 # Check if exp is a call to Array#include? on an array literalCOMMENT
LOWlib/brakeman/processors/alias_processor.rb911 # Check if exp is a call to Array#include? on an array literalCOMMENT
LOWlib/brakeman/processors/alias_processor.rb922 # Check if exp is a call to Hash#include? on a hash literalCOMMENT
LOWlib/brakeman/processors/alias_processor.rb940 #Check if a branch is obviously going to be takenCOMMENT
LOWlib/brakeman/processors/alias_processor.rb1451 #Set variable to given value.COMMENT
LOWlib/brakeman/processors/lib/rails3_config_processor.rb104 #Check if an expression includes a call to set Rails configCOMMENT
LOWlib/brakeman/processors/lib/rails2_config_processor.rb36 # Check if config is set to use ErubisCOMMENT
LOWlib/brakeman/processors/lib/rails2_config_processor.rb85 #Check if an expression includes a call to set Rails configCOMMENT
Hyper-Verbose Identifiers9 hits · 9 pts
SeverityFileLineSnippetContext
LOWtest/tests/brakeman.rb582 def parse_ruby_version_from_lock(version_string)CODE
LOWtest/tests/app_tree.rb6 def temp_dir_and_file_from_path(relative_path)CODE
LOWtest/tests/app_tree.rb15 def temp_dir_absolute_symlink_and_file_from_path(relative_path)CODE
LOWtest/tests/app_tree.rb33 def temp_dir_relative_symlink_and_file_from_path(relative_path)CODE
LOWtest/apps/rails3.1/app/controllers/admin_controller.rb62 def authenticate_token_or_basic(&block)CODE
LOW…/apps/rails7/app/controllers/application_controller.rb13 def endless_method_definition(msg) = puts "#{Time.now}: #{msg}"CODE
LOWtest/apps/rails6/app/models/group.rb16 def fetch_constant_hash_value(role_name)CODE
LOWtest/apps/rails3/app/models/notifier.rb2 def nsfree_deactivation_heroku(account, allowed, used)CODE
LOWlib/brakeman/tracker/collection.rb64 def method_definition_receiver(receiver)CODE
AI Slop Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
LOWlib/brakeman/processors/alias_processor.rb255 # so just pass in first argument, but process_array_access expectsCOMMENT
LOWlib/brakeman/processors/alias_processor.rb1394 #If either clause is more than a single expression, just use entireCOMMENT
MEDIUMlib/brakeman/processors/lib/find_call.rb19#in conjunction with AliasProcessor.)COMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtest/to_test.rb6#Usage:COMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtest/apps/rails5.2/config/puma.rb30# you need to make sure to reconnect any threads in the `on_worker_boot`COMMENT