AI Slop Code Risk Monitor

forem/forem

SlopCodeMonitor badge for forem/forem Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

For empowering community 🌱

2.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for forem/forem, a Ruby project with 22,817 GitHub stars. SynthScan examined 507,281 lines of code across 5370 source files, recording 1108 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 2.8 (Low 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.

2.8
Adjusted Signal
2.8
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
22.8K
Stars
Ruby
Language
507.3K
Lines of Code
5.4K
Files
1.1K
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 11.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.9/100 · LOW

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

Agent Over-Engineering Ratio 4.6/100 · LOW

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

PR Review Velocity Impact 12.4/100 · LOW

Which changes need focused human review? 1108 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 4MEDIUM 108LOW 996

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 1108 distinct pattern matches across 13 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.

Hyper-Verbose Identifiers451 hits · 476 pts
SeverityFileLineSnippetContext
LOW…dedFlows/adminFlows/config/monetizationSection.spec.js8 function withinMonetizationSection(callback) {CODE
LOWcypress/e2e/seededFlows/adminFlows/shared/utilities.js7export function verifyAndDismissFlashMessage(message, flashTypeId) {CODE
LOWapp/mailers/devise_mailer.rb46 def confirmation_instructions(record, token, opts = {})CODE
LOWapp/mailers/devise_mailer.rb72 def reset_password_instructions(record, token, opts = {})CODE
LOWapp/mailers/devise_mailer.rb137 def determine_subforem_domain(subforem_id)CODE
LOWapp/mailers/application_mailer.rb29 def generate_unsubscribe_token(id, email_type)CODE
LOWapp/mailers/application_mailer.rb95 def determine_subforem_domain(subforem_id)CODE
LOWapp/mailers/custom_mailer.rb80 def setup_custom_email_footer(email)CODE
LOWapp/mailers/concerns/deliverable.rb45 def customerio_delivery_options(options)CODE
LOWapp/decorators/article_decorator.rb62 def title_with_query_preamble(user_signed_in)CODE
LOW⚡app/decorators/notification_decorator.rb70 def subscription_to_article_for(user)CODE
LOW⚡app/decorators/notification_decorator.rb78 def subscription_to_comment_for(user)CODE
LOW⚡app/decorators/notification_decorator.rb86 def subscription_to_comment_ancestry_for(user)CODE
LOW⚡app/decorators/notification_decorator.rb94 def subscription_to_commentable_article_for(user)CODE
LOW⚡app/decorators/notification_decorator.rb102 def subscription_to_notifiable_for(user, **notifiable)CODE
LOWapp/decorators/notification_decorator.rb297 def preloaded_subscriptions_for(user)CODE
LOWapp/decorators/notification_decorator.rb339 def preloaded_comment_replies_for(user)CODE
LOWapp/models/reaction.rb103 def surrogate_key_for_article(article_id)CODE
LOWapp/models/reaction.rb107 def surrogate_key_for_commentable(commentable)CODE
LOWapp/models/reaction.rb155 def contradictory_mod_reactions(category:, reactable_id:, reactable_type:, user:)CODE
LOWapp/models/article.rb898 def legacy_truncate_title_for_feed(source_title = title.to_s.gsub("<", "&lt;").gsub(">", "&gt;"))CODE
LOWapp/models/article.rb1654 def set_ai_disclosure_from_front_matter(hash)CODE
LOWapp/models/article.rb1711 def remove_tag_adjustments_from_tag_list(distinct_adjustments)CODE
LOWapp/models/article.rb1716 def add_tag_adjustments_to_tag_list(distinct_adjustments)CODE
LOWapp/models/article.rb1895 def touch_actor_latest_article_updated_at(destroying: false)CODE
LOWapp/models/tag.rb243 def submission_template_customized(param_0 = nil)CODE
LOWapp/models/user_activity.rb56 def assign_recent_article_metadata(recent_articles)CODE
LOWapp/models/user_activity.rb70 def legacy_assign_recent_article_metadata(recent_articles)CODE
LOWapp/models/notification_subscription.rb29 def update_notification_subscriptions(notifiable)CODE
LOWapp/models/scheduled_automation.rb205 def calculate_hourly_next_run(from_time)CODE
LOWapp/models/scheduled_automation.rb227 def calculate_weekly_next_run(from_time)CODE
LOWapp/models/scheduled_automation.rb246 def calculate_custom_interval_next_run(from_time)CODE
LOWapp/models/campaign.rb50 def plucked_article_attributes(limit: 5, attributes: %i[path title comments_count created_at])CODE
LOWapp/models/tweet.rb60 def create_tweet_from_api_status(status)CODE
LOWapp/models/tweet.rb81 def extract_metadata_attributes(tweet, status)CODE
LOWapp/models/tweet.rb95 def extract_serializable_attributes(tweet, status)CODE
LOWapp/models/user_block.rb23 def cached_blocked_ids_for_blocker(blocker_id)CODE
LOWapp/models/notification.rb45 def send_new_follower_notification(follow, is_read: false)CODE
LOWapp/models/notification.rb58 def send_new_follower_notification_without_delay(follow, is_read: false)CODE
LOWapp/models/notification.rb66 def send_to_mentioned_users_and_followers(notifiable, _action = nil)CODE
LOW⚡app/models/notification.rb88 def send_co_author_invitation_notification(invitation)CODE
LOW⚡app/models/notification.rb96 def send_new_comment_notifications_without_delay(comment)CODE
LOW⚡app/models/notification.rb103 def send_new_badge_achievement_notification(badge_achievement)CODE
LOW⚡app/models/notification.rb107 def send_reaction_notification(reaction, receiver)CODE
LOW⚡app/models/notification.rb114 def send_reaction_notification_without_delay(reaction, receiver)CODE
LOW⚡app/models/notification.rb121 def send_mention_notification(mention)CODE
LOW⚡app/models/notification.rb127 def send_mention_notification_without_delay(mention)CODE
LOW⚡app/models/notification.rb133 def send_welcome_notification(receiver_id, broadcast_id)CODE
LOW⚡app/models/notification.rb137 def send_moderation_notification(notifiable)CODE
LOW⚡app/models/notification.rb147 def send_tag_adjustment_notification(tag_adjustment)CODE
LOW⚡app/models/notification.rb151 def send_milestone_notification(type:, article_id:)CODE
LOW⚡app/models/notification.rb155 def remove_all_by_action_without_delay(notifiable_ids:, notifiable_type:, action: nil)CODE
LOWapp/models/notification.rb177 def fast_destroy_old_notifications(destroy_before_timestamp = ENV.fetch("FAST_DESTROY_OLD_NOTIFICATIONS_DAYS", 85).tCODE
LOWapp/models/notification.rb230 def reaction_notification_attributes(reaction, receiver)CODE
LOWapp/models/badge_achievement.rb103 def find_positive_reactors_to_user_articles(user)CODE
LOWapp/models/organization.rb256 def validate_header_cta_links(links)CODE
LOWapp/models/billboard.rb552 def extract_internal_article_paths(html)CODE
LOWapp/models/billboard.rb660 def extracted_process_markdown(markdown)CODE
LOWapp/models/github_issue.rb58 def comment_repo_and_issue_id(url)CODE
LOWapp/models/github_issue.rb62 def issue_or_pull_repo_and_issue_id(url)CODE
391 more matches not shown…
Over-Commented Block253 hits · 253 pts
SeverityFileLineSnippetContext
LOW.rubocop_todo.yml1# This configuration was generated byCOMMENT
LOW.rubocop.yml81COMMENT
LOW.rubocop.yml541COMMENT
LOWcypress/plugins/index.js1/// <reference types="cypress" />COMMENT
LOWcypress/support/commands.js1import { getInterceptsForLingeringUserRequests } from '../util/networkUtils';COMMENT
LOWcypress/support/commands.js521// resolve(origVal);COMMENT
LOWcypress/support/e2e.js1// ***********************************************************COMMENT
LOWcypress/e2e/seededFlows/searchFlows/searchForm.spec.js1// describe('Search form', () => {COMMENT
LOW…edFlows/articleFlows/playOrPauseAnimatedImages.spec.js1// describe('play or pause animated images', () => {COMMENT
LOW…edFlows/articleFlows/playOrPauseAnimatedImages.spec.js21// }COMMENT
LOW…edFlows/articleFlows/playOrPauseAnimatedImages.spec.js41// // .as('pauseButtons')COMMENT
LOW…edFlows/articleFlows/playOrPauseAnimatedImages.spec.js61// describe('user prefers reduced motion', () => {COMMENT
LOW…edFlows/articleFlows/playOrPauseAnimatedImages.spec.js81// cy.get('@pauseButtons').last().as('lastButton');COMMENT
LOWapp/mailers/concerns/deliverable.rb1module DeliverableCOMMENT
LOWapp/mailers/concerns/deliverable.rb121 if customerio_recipientCOMMENT
LOWapp/queries/comments/community_wellness_query.rb1# This query will return an array of hashes that have the following structure:COMMENT
LOWapp/queries/articles/active_threads_query.rb1module ArticlesCOMMENT
LOWapp/models/article.rb21 # we cache.COMMENT
LOWapp/models/article.rb401 if: -> { saved_change_to_published? && published_before_last_save && !published? }COMMENT
LOWapp/models/article.rb461 ).freezeCOMMENT
LOWapp/models/tag.rb1# We allow content creators to "tag" their content. This model helpsCOMMENT
LOWapp/models/tag.rb61 before_save :calculate_hotness_scoreCOMMENT
LOWapp/models/tag.rb141 # can push up changes and refactor towards improvements without unleashing a large pull requestCOMMENT
LOWapp/models/tag.rb161 # @note This method will also add the follower's "points" for the given tag. In theCOMMENT
LOWapp/models/tag.rb201COMMENT
LOWapp/models/tag.rb281 #COMMENT
LOWapp/models/tag.rb321 # each article (see SHACOMMENT
LOWapp/models/poll.rb41 #COMMENT
LOWapp/models/ab_experiment.rb1# This object wraps the FieldTest logic to provide a bit of insulationCOMMENT
LOWapp/models/ab_experiment.rb21COMMENT
LOWapp/models/ab_experiment.rb61COMMENT
LOWapp/models/ab_experiment.rb81 # @param user [User] who are we running the experiment withCOMMENT
LOWapp/models/ab_experiment.rb101 endCOMMENT
LOWapp/models/admin_menu.rb81 #COMMENT
LOWapp/models/campaign.rb41 # values for the selected articles. Which means be mindfulCOMMENT
LOWapp/models/cross_model_slug.rb1#COMMENT
LOWapp/models/async_info.rb1# Responsible for generating the asynchronus data of a user. This is data that we send on the wireCOMMENT
LOWapp/models/page.rb41COMMENT
LOWapp/models/article_activity.rb1# Per-article rolled-up analytics cache. One row per Article.COMMENT
LOWapp/models/co_author_invitation.rb1# An article author's request to credit another user as a co-author. The invitee confirms orCOMMENT
LOWapp/models/navigation_link.rb61 # @param url [String] the URL of the navigation link.COMMENT
LOWapp/models/user.rb241 .where("users.score >= 0")COMMENT
LOWapp/models/user.rb601 if ENV["ENABLE_REFRESH_SEGMENT_WORKERS"] == "true"COMMENT
LOWapp/models/user.rb621 # `user.has_role?(:tech_admin)`.COMMENT
LOWapp/models/user.rb721 favorite_base_allowance - spent_this_periodCOMMENT
LOWapp/models/settings/general.rb101 setting :stripe_publishable_key, type: :string, default: ApplicationConfig["STRIPE_PUBLISHABLE_KEY"]COMMENT
LOWapp/models/settings/general.rb121 # - If this data is ever used for ads (e.g. billboard targeting), it must be allowed forCOMMENT
LOWapp/models/settings/ai_functions.rb1module SettingsCOMMENT
LOWapp/models/articles/feeds.rb21COMMENT
LOWapp/models/articles/feeds.rb41 # @note the days_since_published is something carriedCOMMENT
LOWapp/models/articles/feeds/variant_assembler.rb21 #COMMENT
LOWapp/models/articles/feeds/variant_assembler.rb41 # @param variant [#to_sym,String,Symbol] the name of the variant we're assemblingCOMMENT
LOWapp/models/articles/feeds/relevancy_lever.rb41 ) doCOMMENT
LOWapp/policies/application_policy.rb1##COMMENT
LOWapp/policies/application_policy.rb21# @exampleCOMMENT
LOWapp/policies/application_policy.rb41 #COMMENT
LOWapp/policies/application_policy.rb61 #COMMENT
LOWapp/policies/application_policy.rb81 #COMMENT
LOWapp/policies/authorizer.rb1##COMMENT
LOWapp/policies/authorizer.rb101 # you.COMMENT
193 more matches not shown…
Self-Referential Comments86 hits · 251 pts
SeverityFileLineSnippetContext
MEDIUMapp/models/article.rb1692 # This method is called before validation, so that the tag_list can be validated.COMMENT
MEDIUMapp/models/article.rb2165 # Create the expected embed tagsCOMMENT
MEDIUMapp/models/email.rb47 # Define the mapping of merge tags to user attributesCOMMENT
MEDIUMapp/models/page_template.rb64 # Create a fork of this templateCOMMENT
MEDIUMapp/models/articles/feeds/variant_assembler.rb3 # This module is responsible for assembling a named variant into the data structure used toCOMMENT
MEDIUMapp/models/articles/feeds/lever_catalog_builder.rb3 # This class is responsible for publishing/registering the available relevancy and order levers.COMMENT
MEDIUMapp/models/users/deleted_user.rb2 # This module represents a deleted user. In particular as itCOMMENT
MEDIUMapp/policies/application_policy.rb94 # This method provides a means for creating consistent DOM classes for "policy" related HTML elements.COMMENT
MEDIUMapp/policies/authorizer.rb2# This module is providing a "crease in the code" for refactoring.COMMENT
MEDIUMapp/policies/authorizer.rb30 # This class is responsible for assisting in moving us away fromCOMMENT
MEDIUMapp/view_objects/data_info.rb4# This module provides some much needed character escaping to ensureCOMMENT
MEDIUMapp/lib/menu.rb1# This class is responsible for helping to build a menu.COMMENT
MEDIUMapp/lib/string_attribute_cleaner.rb1# This module provides a method for generating a configurable before_validationCOMMENT
MEDIUMapp/workers/scheduled_automations/process_worker.rb81 # Create the automationCOMMENT
MEDIUMapp/controllers/application_controller.rb219 # This method is envisioned as a :before_action callback.COMMENT
MEDIUMapp/controllers/application_controller.rb296 # This method is used by Devise to decide which is the path to redirectCOMMENT
MEDIUMapp/controllers/stories_controller.rb284 # Create a relation that preserves the order when .ids is called by find_each_respecting_scopeCOMMENT
MEDIUMapp/controllers/podcasts_controller.rb65 # Create the podcast object to add errors to for the viewCOMMENT
MEDIUMapp/helpers/application_helper.rb544 # This function is responsible for adding a policy class (and possibly the hidden class). It'sCOMMENT
MEDIUMapp/services/open_graph.rb1# This class provides methods for getting structured metadata properties forCOMMENT
MEDIUMapp/services/feature_flag.rb1# This module provides mechanisms for toggling on and off features.COMMENT
MEDIUMapp/services/community_bots/create_bot.rb27 # Create the bot user directlyCOMMENT
MEDIUMapp/services/community_bots/create_bot.rb47 # Create an API secret for the botCOMMENT
MEDIUMapp/services/community_bots/create_bot.rb147 # Create a temp file with the correct extensionCOMMENT
MEDIUMapp/services/community_bots/create_bot.rb153 # Create a file object that can be used by the uploaderCOMMENT
MEDIUMapp/services/spam/handler.rb2 # This module is responsible for handling spam in our various user input sources.COMMENT
MEDIUMapp/services/images/generate_subforem_images.rb100 # Create a temporary fileCOMMENT
MEDIUMapp/services/moderator/unpublish_all_articles.rb2# Create a corresponding audit_log recordCOMMENT
MEDIUMapp/services/articles/page_view_updater.rb2 # This module is responsible for updating a specific page view for a given article and user.COMMENT
MEDIUMapp/services/ai/image_generator.rb329 # Create a temporary fileCOMMENT
MEDIUMapp/services/ai/forem_tags.rb180 # Create a new tag with a different nameCOMMENT
MEDIUMapp/services/ai/context_note_generator.rb20 # Create the context note with the responseCOMMENT
MEDIUMconfig/initializers/rpush.rb26 # Define a custom logger.COMMENT
MEDIUMconfig/initializers/sidekiq.rb59 # Create a new configuration hash with the correct pool sizeCOMMENT
MEDIUMconfig/initializers/permissions_policy.rb1# Define an application-wide HTTP permissions policy. For furtherCOMMENT
MEDIUMconfig/initializers/content_security_policy.rb3# Define an application-wide content security policyCOMMENT
MEDIUMspec/models/collection_spec.rb84 # Create a collection with one userCOMMENT
MEDIUMspec/models/reaction_spec.rb405 # Create a new reactionCOMMENT
MEDIUMspec/models/navigation_link_spec.rb79 # Creating a different URLCOMMENT
MEDIUMspec/models/article_spec.rb3523 # Create a new reactionCOMMENT
MEDIUMspec/models/organization_spec.rb306 # Create an organization and article, verify the article has cached the initial profileCOMMENT
MEDIUMspec/models/billboard_spec.rb1305 # Create a config for the placement areaCOMMENT
MEDIUMspec/models/reaction_ring_detection_spec.rb25 # Create a privileged reaction (not public)COMMENT
MEDIUMspec/models/ahoy/store_spec.rb14 # Create a real instance of Ahoy::Store to test behaviorCOMMENT
MEDIUMspec/requests/stripe_subscriptions_spec.rb236 # Create a mock product and priceCOMMENT
MEDIUMspec/requests/stripe_subscriptions_spec.rb243 # Create a mock customerCOMMENT
MEDIUMspec/requests/stripe_subscriptions_spec.rb254 # Create a mock subscription using the created priceCOMMENT
MEDIUMspec/requests/subforems_spec.rb427 # Create an unsupported relationship firstCOMMENT
MEDIUMspec/requests/user_subscriptions_spec.rb111 # Create the UserSubscription directly so it results in aCOMMENT
MEDIUMspec/requests/poll_votes_controller_spec.rb173 # Create a vote to complete the surveyCOMMENT
MEDIUMspec/requests/poll_text_responses_controller_spec.rb100 # Create a response to complete the surveyCOMMENT
MEDIUMspec/requests/surveys_spec.rb49 # Create a vote for a poll that is NOT in the surveyCOMMENT
MEDIUM…equests/admin/scheduled_automations_controller_spec.rb26 automation # Create the automationCODE
MEDIUM…equests/admin/scheduled_automations_controller_spec.rb252 automation # Create the automation firstCODE
MEDIUM…ec/requests/admin/badge_automations_controller_spec.rb36 automation # Create the automationCODE
MEDIUM…ec/requests/admin/badge_automations_controller_spec.rb295 automation # Create the automationCODE
MEDIUMspec/requests/notifications/reads_spec.rb29 # Create an org admin with an organizationCOMMENT
MEDIUMspec/system/sidebar_tooltip_spec.rb5 # Create a user and sign in to ensure sidebar is visibleCOMMENT
MEDIUMspec/system/sidebar_tooltip_spec.rb9 # Create a root subforem so the sidebar appearsCOMMENT
MEDIUMspec/support/seeds/seeds_e2e.rb452 # Create a follow notification to test againstCOMMENT
26 more matches not shown…
Fake / Example Data180 hits · 195 pts
SeverityFileLineSnippetContext
LOW…ess/e2e/creatorOnboardingFlows/creatorSettings.spec.js24 .invoke('attr', 'placeholder')CODE
LOW…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js10 email: 'test@test.com',CODE
LOW…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js31 cy.findByRole('article').findByText('test@test.com').should('exist');CODE
LOW…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js42 cy.findByRole('article').findByText('test@test.com').should('exist');CODE
LOW…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js57 cy.findByRole('article').findByText('test@test.com').should('exist');CODE
LOW…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js63 cy.findByRole('article').findByText('test@test.com').should('exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js80 cy.findByRole('table').findByText('test@test.com').should('exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js86 cy.findByRole('table').findByText('test@test.com').should('exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js91 cy.findByRole('table').findByText('test@test.com').should('not.exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js95 cy.findByRole('table').findByText('test@test.com').should('exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js103 cy.findByRole('table').findByText('test@test.com').should('exist');CODE
LOW⚡…/e2e/seededFlows/adminFlows/users/invitedUsers.spec.js109 cy.findByRole('table').findByText('test@test.com').should('not.exist');CODE
LOW…mponents/__stories__/TagAutocompleteOption.stories.jsx33 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eget ultricies enim, quis finibus erat. PhasellusCODE
LOW…mponents/__stories__/TagAutocompleteOption.stories.jsx33 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eget ultricies enim, quis finibus erat. PhasellusCODE
LOWapp/javascript/listings/__tests__/BodyMarkdown.test.jsx31 expect(textArea.getAttribute('placeholder')).toEqual('...');CODE
LOWapp/javascript/Search/__tests__/Search.test.jsx46 expect(searchInput.getAttribute('placeholder')).toEqual(locale('core.search_placeholder'));CODE
LOW…ript/crayons/Dropdown/__stories__/Dropdown.stories.jsx29 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…ript/crayons/Dropdown/__stories__/Dropdown.stories.jsx29 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx10 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx10 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx24 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx24 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx35 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…avascript/crayons/Dropdown/__tests__/Dropdown.test.jsx35 Hey, I&apos;m a dropdown content! Lorem ipsum dolor sit amet,CODE
LOW…s/RadioButton/__stories__/radioButton.html.stories.jsx48 This is some description for a textfield lorem ipsum...CODE
LOW…lements/Checkbox/__stories__/checkbox.html.stories.jsx52 This is some description for a textfield lorem ipsum...CODE
LOW…ns/formElements/Text/__stories__/text.html.stories.jsx34 This is some description for a textfield lorem ipsum...CODE
LOW…utocomplete/__tests__/MultiSelectAutocomplete.test.jsx712 expect(input).toHaveAttribute('placeholder', '');CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx16 <p className="fs-xs">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx16 <p className="fs-xs">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx17 <p className="fs-s">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx17 <p className="fs-s">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx18 <p className="fs-base">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx18 <p className="fs-base">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx19 <p className="fs-l">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx19 <p className="fs-l">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx20 <p className="fs-xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx20 <p className="fs-xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx21 <p className="fs-2xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx21 <p className="fs-2xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx22 <p className="fs-3xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx22 <p className="fs-3xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx23 <p className="fs-4xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx23 <p className="fs-4xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx24 <p className="fs-5xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx24 <p className="fs-5xl">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx28 <p className="fs-xs fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx28 <p className="fs-xs fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx29 <p className="fs-s fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx29 <p className="fs-s fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx30 <p className="fs-base fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx30 <p className="fs-base fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx31 <p className="fs-l fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx31 <p className="fs-l fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx32 <p className="fs-xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx32 <p className="fs-xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx33 <p className="fs-2xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx33 <p className="fs-2xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx34 <p className="fs-3xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
LOW⚡…/crayons/typography/__stories__/typography.stories.jsx34 <p className="fs-3xl fw-medium">Lorem ipsum dolor sit amet.</p>CODE
120 more matches not shown…
Redundant / Tautological Comments87 hits · 136 pts
SeverityFileLineSnippetContext
LOWapp/mailers/digest_mailer.rb59 # Check if user follows any subforems OR has a custom onboarding subforemCOMMENT
LOWapp/mailers/digest_mailer.rb105 # Check if user follows any subforemsCOMMENT
LOWapp/models/article.rb1353 # Set subforem_id to default subforem ID if not already set and a default subforem existsCOMMENT
LOWapp/models/article.rb1525 # Check if the value actually changed, not just if Rails marked it as changedCOMMENT
LOWapp/models/article.rb1752 # Check if user is a member/admin of the collection's organizationCOMMENT
LOWapp/models/article.rb2171 # Check if the body_markdown contains only the expected embed tagsCOMMENT
LOW⚡app/models/poll.rb75 # Check if poll allows multiple votesCOMMENT
LOW⚡app/models/poll.rb80 # Check if poll is a scale pollCOMMENT
LOW⚡app/models/poll.rb85 # Check if poll is a text input pollCOMMENT
LOWapp/models/survey_completion.rb19 # Check if a user has completed any of the given surveysCOMMENT
LOWapp/models/blocked_email_domain.rb11 # Check if a domain is blocked (exact match or subdomain match)COMMENT
LOWapp/models/billboard_placement_area_config.rb56 # Check if we should fetch a billboard based on delivery rateCOMMENT
LOWapp/models/billboard_placement_area_config.rb98 # Check if column exists (for backward compatibility before migration runs)COMMENT
LOWapp/models/billboard.rb467 # Check if 'bb' parameter exists and update it or append if not existsCOMMENT
LOWapp/models/billboard.rb502 # Check if a user should be excluded from seeing this billboard based on survey completionCOMMENT
LOWapp/models/billboard.rb592 # Check if approved changed from true to false or published changed from true to false.COMMENT
LOWapp/models/survey.rb21 # Check if a user has completed all polls in this survey in their latest sessionCOMMENT
LOWapp/models/survey.rb31 # Check if user has voted, skipped, or submitted a text response for all distinct polls in the latest sessionCOMMENT
LOWapp/models/survey.rb43 # Check if a user can submit this survey (based on allow_resubmission setting)COMMENT
LOWapp/models/survey.rb79 # Check if a user has a completion record for this surveyCOMMENT
LOWapp/policies/liquid_tag_policy.rb17 # Check if the given #user can utilize the given #liquid_tagCOMMENT
LOWapp/lib/redcarpet/render/html_rouge.rb25 # Check if the URL is an image and process accordinglyCOMMENT
LOW…ions/track_promotional_billboard_impressions_worker.rb48 # Check if we should pause promotional billboardsCOMMENT
LOWapp/workers/spam/reaction_ring_detection_worker.rb34 # Check if user has enough reactions in the past 3 monthsCOMMENT
LOWapp/workers/scheduled_automations/process_worker.rb49 # Check if automation already existsCOMMENT
LOWapp/workers/emails/survey_daily_email_worker.rb20 # Check if target is already hit or time has passedCOMMENT
LOWapp/workers/linked_domains/update_score_worker.rb11 # Check if updated in the last hourCOMMENT
LOWapp/controllers/poll_skips_controller.rb10 # Check if this poll belongs to a survey and if resubmission is allowedCOMMENT
LOWapp/controllers/poll_skips_controller.rb23 # Check if this skip completes a surveyCOMMENT
LOWapp/controllers/organizations_controller.rb131 # Check if user is already a member (active or pending)COMMENT
LOWapp/controllers/subforems_controller.rb84 # Check if relationship already existsCOMMENT
LOWapp/controllers/omniauth_callbacks_controller.rb190 # Check if this is a mobile authentication request.COMMENT
LOWapp/controllers/auth_pass_controller.rb48 # Set headers to allow the iframe to be embeddedCOMMENT
LOWapp/controllers/poll_text_responses_controller.rb8 # Check if this poll belongs to a survey and if resubmission is allowedCOMMENT
LOWapp/controllers/poll_text_responses_controller.rb15 # Check if this response completes a surveyCOMMENT
LOWapp/controllers/surveys_controller.rb18 # Check if user can submit this surveyCOMMENT
LOWapp/controllers/stories_controller.rb291 # Check if a limit was applied to this relation and respect itCOMMENT
LOWapp/controllers/poll_votes_controller.rb22 # Check if this poll belongs to a survey and if submission is allowedCOMMENT
LOWapp/controllers/poll_votes_controller.rb33 # Check if this vote completes a surveyCOMMENT
LOWapp/controllers/admin/subforems_controller.rb39 # Check if we have the required parameters for create_from_scratch!COMMENT
LOW…/controllers/concerns/development_dependency_checks.rb13 # Check if Sidekiq is running with a small retry mechanismCOMMENT
LOWapp/services/email_digest_article_collector.rb230 # Check if user has a custom onboarding subforem (not nil and not default)COMMENT
LOWapp/services/survey_completion_service.rb8 # Check if the survey is now completed by the userCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb48 # Check if user has enough reactions in the past 3 monthsCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb141 # Check if concentration is suspiciously highCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb162 # Check if they react to authors outside the shared groupCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb184 # Check if they follow the original user or are followed by themCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb188 # Check if they're in the same organization (users can belong to multiple orgs)COMMENT
LOWapp/services/spam/domain_detector.rb68 # Check if this user's email domain should be automatically blockedCOMMENT
LOWapp/services/spam/handler.rb76 # Check if we should trigger spam detectionCOMMENT
LOWapp/services/scheduled_automations/executor.rb29 # Check if automation is already runningCOMMENT
LOW…scheduled_automations/article_content_badge_awarder.rb96 # Check if user already received this badge recently (within the last week)COMMENT
LOW…scheduled_automations/article_content_badge_awarder.rb168 # Check if user received this badge within the last weekCOMMENT
LOW…ices/scheduled_automations/first_post_badge_awarder.rb100 # Check if this is the user's first published article under this organizationCOMMENT
LOW…ices/scheduled_automations/first_post_badge_awarder.rb112 # Check if user already has this badge (to avoid duplicates)COMMENT
LOW…es/scheduled_automations/warm_welcome_badge_awarder.rb99 # Check if user already received this badge recently (within the last 6.5 days)COMMENT
LOW…es/scheduled_automations/warm_welcome_badge_awarder.rb125 # Check if user received this badge within the last 6.5 days (to be safe)COMMENT
LOW…es/scheduled_automations/warm_welcome_badge_awarder.rb141 # Check if comment is spam using existing spam detectionCOMMENT
LOWapp/services/articles/feeds/custom.rb309 # Check if all articles are published within the last weekCOMMENT
LOWapp/services/ai/trend_detector.rb88 # Check if this cluster matches an existing active trend in the DBCOMMENT
27 more matches not shown…
AI Slop Vocabulary16 hits · 41 pts
SeverityFileLineSnippetContext
LOWapp/models/tag.rb98 # No additional conditions; just return the current scopeCOMMENT
MEDIUMapp/models/ab_experiment.rb29 # This method helps us leverage existing methods for differentCOMMENT
LOWapp/models/notification.rb35 # No additional conditions; just return the current scopeCOMMENT
MEDIUMapp/policies/liquid_tag_policy.rb1# This Policy is responsible for enforcing weither or not the user can utilizeCOMMENT
MEDIUMapp/policies/liquid_tag_policy.rb17 # Check if the given #user can utilize the given #liquid_tagCOMMENT
MEDIUMapp/policies/reaction_policy.rb3 # We don't have a robust concept of a Privileged Reaction class, but instead must switch theCOMMENT
MEDIUMapp/javascript/onboarding/__tests__/Onboarding.test.jsx224 window.location = { href: '' }; // Simplified mock; you might need a more robust solutionCODE
LOWapp/controllers/concerns/api/follows_controller.rb6 # API authentication might set current_user or might just set @userCOMMENT
MEDIUMapp/assets/stylesheets/config/_import.scss10// in config/_colors.scss. We only utilize some of these variablesCOMMENT
MEDIUMapp/services/webpage_extractor.rb3 # This is a simplified regex; for production, we might want something more robust.COMMENT
MEDIUMapp/services/ai/comment_check.rb9 # holistic YES/NO prompt is replaced by narrow TypeSafe Noul questions combined by theCOMMENT
MEDIUMapp/services/ai/article_check.rb10 # holistic YES/NO prompt is replaced by a battery of narrow TypeSafe Noul questions whoseCOMMENT
MEDIUMconfig/initializers/0_application_config.rb17 # Normalize Redis URLs to be more robust across environmentsCOMMENT
MEDIUM…icies/shared_examples/authorization_shared_examples.rb1# This cluster of shared examples all help facilitate bombarding policies with lots of test situations.COMMENT
LOWspec/lib/url_spec.rb316 # so we just create something that quacks like one.COMMENT
MEDIUMspec/services/markdown_processor/parser_spec.rb802 # I don't want to delve into the implementation details of liquid to test what the parseCOMMENT
Structural Annotation Overuse12 hits · 22 pts
SeverityFileLineSnippetContext
LOWapp/models/user.rb449 # NOTE: This method is only used in the EmailDigestArticleCollector and doesCOMMENT
LOW…p/workers/events/manage_broadcast_billboards_worker.rb31 # Step 1: Any billboard owned by an event that IS currently active, should be approved.COMMENT
LOW…p/workers/events/manage_broadcast_billboards_worker.rb43 # Step 2: Any billboard owned by a broadcast_config event that is NOT currently active AND NOT upcoming, should beCOMMENT
LOW⚡app/controllers/api/v0/mobile_auth_controller.rb25 # Step 2: Form an OmniAuth Mock HashCOMMENT
LOW⚡app/controllers/api/v0/mobile_auth_controller.rb34 # Step 3: Match Identity to a UserCOMMENT
LOW⚡…g/initializers/ahoy_messages_controller_monkeypatch.rb2 # Step 2: Define a module to override the click methodCOMMENT
LOW…g/initializers/ahoy_messages_controller_monkeypatch.rb18 # Step 4: Prepend the module to Ahoy::MessagesControllerCOMMENT
LOW⚡docs/rust_native_extensions.md45### Step 1: Candidate SelectionCOMMENT
LOW⚡docs/rust_native_extensions.md50### Step 2: Pure-Rust Implementation in `forem_core` & Thin `magnus` BindingCOMMENT
LOW⚡docs/rust_native_extensions.md54### Step 3: Clean Module Boundary (Single Source of Truth)COMMENT
LOWdocs/rust_native_extensions.md73### Step 4: Differential Equivalence & Edge-Case VerificationCOMMENT
LOWdocs/rust_native_extensions.md78### Step 5: Mandatory Benchmark & Allocation ProofCOMMENT
Slop Phrases8 hits · 20 pts
SeverityFileLineSnippetContext
MEDIUMapp/liquid_tags/bluesky_tag.rb28 # Now that we've parsed the input, you can use the values toCOMMENT
LOWapp/services/images/generate_social_image_magickally.rb703 # Don't forget to close and unlink (delete) the tempfile after you're done with it.COMMENT
MEDIUMapp/services/ai/community_copy.rb293 /let me know if you need anything else!?$/i,CODE
MEDIUMconfig/i18n-tasks.yml134## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.:COMMENT
MEDIUMspec/spec_helper.rb65 # with RSpec, but feel free to customize to your heart's content.COMMENT
MEDIUMspec/requests/api/v1/feedback_messages_spec.rb77 # If you handle invalid params or other scenarios, you can add more specs here.COMMENT
MEDIUMspec/services/ai/community_copy_spec.rb136 dirty_response = "Okay, here's the tagline: Code. Share. Grow. Let me know if you need anything else!"CODE
MEDIUMspec/services/ai/community_copy_spec.rb275 "Okay, here's the tagline: Code. Share. Grow. Let me know if you need anything else!",CODE
Synthetic Comment Markers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHapp/services/ai/article_quality_assessor.rb239 - Content that feels like it was generated by AICODE
HIGHspec/services/concepts/anchor_generator_spec.rb18 allow(ai_client).to receive(:call).and_return("Synthetic description generated by Gemini.")CODE
HIGHspec/services/concepts/anchor_generator_spec.rb23 expect(concept.description).to eq("Synthetic description generated by Gemini.")CODE
Verbosity Indicators6 hits · 11 pts
SeverityFileLineSnippetContext
LOW…p/workers/events/manage_broadcast_billboards_worker.rb31 # Step 1: Any billboard owned by an event that IS currently active, should be approved.COMMENT
LOW…p/workers/events/manage_broadcast_billboards_worker.rb43 # Step 2: Any billboard owned by a broadcast_config event that is NOT currently active AND NOT upcoming, should beCOMMENT
LOW⚡app/controllers/api/v0/mobile_auth_controller.rb25 # Step 2: Form an OmniAuth Mock HashCOMMENT
LOW⚡app/controllers/api/v0/mobile_auth_controller.rb34 # Step 3: Match Identity to a UserCOMMENT
LOW⚡…g/initializers/ahoy_messages_controller_monkeypatch.rb2 # Step 2: Define a module to override the click methodCOMMENT
LOW…g/initializers/ahoy_messages_controller_monkeypatch.rb18 # Step 4: Prepend the module to Ahoy::MessagesControllerCOMMENT
Modern AI Meta-Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMapp/services/ai/article_enhancer.rb32 # @param ai_client [Ai::Base] Optional Gemini client for dependency injection (useful for testing).COMMENT
MEDIUMapp/services/ai/github_repo_recap.rb29 # @param github_client [Github::OauthClient] Optional GitHub client for dependency injectionCOMMENT
MEDIUMapp/services/ai/github_repo_recap.rb30 # @param ai_client [Ai::Base] Optional AI client for dependency injectionCOMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHapp/models/article.rb28 # @note [@jeremyf] I have added the profile_image attribute, even though that's not one of theCOMMENT
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWspec/requests/api/v1/docs/billboards_spec.rb223 ### Usage:COMMENT
LOWspec/support/shared_examples/trackable.rb3# Usage:COMMENT