Repository Analysis

forem/forem

For empowering community 🌱

3.0 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of forem/forem, a Ruby project with 22,747 GitHub stars. SynthScan v2.0 examined 406,155 lines of code across 4980 source files, recording 899 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 3.0 places this repository in the Likely human-written 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).

3.0
Adjusted Score
3.0
Raw Score
100%
Time Factor
2026-07-13
Last Push
22.7K
Stars
Ruby
Language
406.2K
Lines of Code
5.0K
Files
899
Pattern Hits
2026-07-14
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 4MEDIUM 115LOW 780

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

Hyper-Verbose Identifiers320 hits · 336 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.rb31 def confirmation_instructions(record, token, opts = {})CODE
LOWapp/mailers/devise_mailer.rb70 def determine_subforem_domain(subforem_id)CODE
LOWapp/mailers/application_mailer.rb29 def generate_unsubscribe_token(id, email_type)CODE
LOWapp/mailers/application_mailer.rb85 def determine_subforem_domain(subforem_id)CODE
LOWapp/decorators/article_decorator.rb62 def title_with_query_preamble(user_signed_in)CODE
LOWapp/decorators/notification_decorator.rb55 def subscription_to_article_for(user)CODE
LOWapp/decorators/notification_decorator.rb63 def subscription_to_comment_for(user)CODE
LOWapp/decorators/notification_decorator.rb71 def subscription_to_comment_ancestry_for(user)CODE
LOWapp/decorators/notification_decorator.rb79 def subscription_to_commentable_article_for(user)CODE
LOWapp/decorators/notification_decorator.rb87 def subscription_to_notifiable_for(user, **notifiable)CODE
LOWapp/models/reaction.rb99 def surrogate_key_for_article(article_id)CODE
LOWapp/models/reaction.rb103 def surrogate_key_for_commentable(commentable)CODE
LOWapp/models/reaction.rb149 def contradictory_mod_reactions(category:, reactable_id:, reactable_type:, user:)CODE
LOWapp/models/article.rb1485 def remove_tag_adjustments_from_tag_list(distinct_adjustments)CODE
LOWapp/models/article.rb1490 def add_tag_adjustments_to_tag_list(distinct_adjustments)CODE
LOWapp/models/article.rb1661 def touch_actor_latest_article_updated_at(destroying: false)CODE
LOWapp/models/tag.rb211 def submission_template_customized(param_0 = nil)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/async_info.rb83 def feed_style_preference_variable(user)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
LOWapp/models/notification.rb82 def send_new_comment_notifications_without_delay(comment)CODE
LOWapp/models/notification.rb89 def send_new_badge_achievement_notification(badge_achievement)CODE
LOWapp/models/notification.rb93 def send_reaction_notification(reaction, receiver)CODE
LOWapp/models/notification.rb100 def send_reaction_notification_without_delay(reaction, receiver)CODE
LOWapp/models/notification.rb107 def send_mention_notification(mention)CODE
LOWapp/models/notification.rb113 def send_mention_notification_without_delay(mention)CODE
LOWapp/models/notification.rb119 def send_welcome_notification(receiver_id, broadcast_id)CODE
LOWapp/models/notification.rb123 def send_moderation_notification(notifiable)CODE
LOWapp/models/notification.rb133 def send_tag_adjustment_notification(tag_adjustment)CODE
LOWapp/models/notification.rb137 def send_milestone_notification(type:, article_id:)CODE
LOWapp/models/notification.rb141 def remove_all_by_action_without_delay(notifiable_ids:, notifiable_type:, action: nil)CODE
LOWapp/models/notification.rb163 def fast_destroy_old_notifications(destroy_before_timestamp = ENV.fetch("FAST_DESTROY_OLD_NOTIFICATIONS_DAYS", 85).tCODE
LOWapp/models/notification.rb216 def reaction_notification_attributes(reaction, receiver)CODE
LOWapp/models/badge_achievement.rb103 def find_positive_reactors_to_user_articles(user)CODE
LOWapp/models/organization.rb242 def validate_header_cta_links(links)CODE
LOWapp/models/billboard.rb494 def extract_internal_article_paths(html)CODE
LOWapp/models/billboard.rb594 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
LOWapp/models/agent_session.rb32 def curated_messages_in_range(range)CODE
LOWapp/models/user.rb944 def enqueue_trackable_event_destroyed(*)CODE
LOWapp/models/settings/base.rb150 def convert_string_to_value_type(type, value, separator: nil)CODE
LOWapp/models/concerns/reactable.rb20 def sync_reactions_count_for_batch(records)CODE
LOWapp/models/concerns/user_subscription_sourceable.rb25 def user_subscription_attributes(subscriber)CODE
LOWapp/view_objects/cloud_cover_url.rb30 def url_without_prefix_nesting(url, width)CODE
LOWapp/liquid_tags/codesandbox_tag.rb29 def parse_id_or_url_and_options(input)CODE
LOWapp/liquid_tags/organization_tag.rb26 def parse_slug_to_organization(org_slug)CODE
LOWapp/liquid_tags/survey_tag.rb113 function setAndLockAnsweredPoll(poll, votedOptionIds) {CODE
260 more matches not shown…
Self-Referential Comments93 hits · 274 pts
SeverityFileLineSnippetContext
MEDIUMapp/models/article.rb1468 # This method is called before validation, so that the tag_list can be validated.COMMENT
MEDIUMapp/models/article.rb1832 # Create the expected embed tagsCOMMENT
MEDIUMapp/models/email.rb19 # Define the mapping of merge tags to user attributesCOMMENT
MEDIUMapp/models/user_query.rb61 # Create a safe query with user limitCOMMENT
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.rb201 # This method is envisioned as a :before_action callback.COMMENT
MEDIUMapp/controllers/application_controller.rb278 # This method is used by Devise to decide which is the path to redirectCOMMENT
MEDIUMapp/controllers/poll_text_responses_controller.rb14 # Create a new text response with the session_startCOMMENT
MEDIUMapp/controllers/stories_controller.rb243 # 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.rb493 # This function is responsible for adding a policy class (and possibly the hidden class). It'sCOMMENT
MEDIUMapp/services/read_only_database_service.rb106 # Create a new connection pool for read-only databaseCOMMENT
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.rb46 # Create an API secret for the botCOMMENT
MEDIUMapp/services/community_bots/create_bot.rb146 # Create a temp file with the correct extensionCOMMENT
MEDIUMapp/services/community_bots/create_bot.rb152 # 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.rb169 # Create a new tag with a different nameCOMMENT
MEDIUMapp/services/ai/context_note_generator.rb19 # Create the context note with the responseCOMMENT
MEDIUMconfig/initializers/rpush.rb26 # Define a custom logger.COMMENT
MEDIUMconfig/initializers/sidekiq.rb58 # 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.rb2991 # 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.rb1222 # Create a config for the placement areaCOMMENT
MEDIUMspec/models/user_query_spec.rb144 # Create a simple user query for testingCOMMENT
MEDIUMspec/models/reaction_ring_detection_spec.rb16 # Create a privileged reaction (not public)COMMENT
MEDIUMspec/models/ahoy/store_spec.rb8 # Create a real instance of Ahoy::Store to test behaviorCOMMENT
MEDIUMspec/requests/billboards_spec.rb426 # Create a few live billboards which should not be returnedCOMMENT
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/moderations_spec.rb194 # Create a reaction for second_article so it gets filtered out of inboxCOMMENT
MEDIUMspec/requests/subforems_spec.rb426 # 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.rb77 # Create a vote to complete the surveyCOMMENT
MEDIUMspec/requests/poll_text_responses_controller_spec.rb61 # 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
33 more matches not shown…
Over-Commented Block191 hits · 191 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.js501 });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/decorators/user_decorator.rb21 DEFAULT_PROFILE_SUMMARY = -> { I18n.t("stories_controller.404_bio_not_found") }COMMENT
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 # @note I would prefer that this constant were in the {Article::CachedEntity} namespace, but itCOMMENT
LOWapp/models/article.rb341 after_update_commit :update_dependent_embeds_if_key_info_changedCOMMENT
LOWapp/models/tag.rb1# We allow content creators to "tag" their content. This model helpsCOMMENT
LOWapp/models/tag.rb61 after_save :update_suggested_tags, if: :saved_change_to_suggested?COMMENT
LOWapp/models/tag.rb121COMMENT
LOWapp/models/tag.rb141 # @return [ActiveRecord::Relation<Tag>] with the "points" attribute and limited field selectionCOMMENT
LOWapp/models/tag.rb241 # attribute; for example when we want to render the tags a user is following and the points we'veCOMMENT
LOWapp/models/tag.rb281COMMENT
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.rb101 # NOTE: [@jeremyf] trying to puzzle this one out. My read is that if the "grandchild" of theCOMMENT
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/navigation_link.rb61 # @param url [String] the URL of the navigation link.COMMENT
LOWapp/models/user.rb541 ##############################################################################COMMENT
LOWapp/models/user.rb561 # call it from controllers or views. Favor `user.admin?` overCOMMENT
LOWapp/models/user.rb621 # The name of the tags moderated by the user.COMMENT
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.rb81COMMENT
LOWapp/policies/liquid_tag_policy.rb1# This Policy is responsible for enforcing weither or not the user can utilizeCOMMENT
LOWapp/view_objects/data_info.rb1# Throughout Forem, we encode JSON information in our Ruby templates.COMMENT
LOWapp/liquid_tags/liquid_tag_base.rb1# @abstractCOMMENT
LOWapp/liquid_tags/liquid_tag_base.rb21 # things tidier, but that's not a hard preference.COMMENT
LOWapp/liquid_tags/twitch_tag.rb21 height: @heightCOMMENT
LOWapp/lib/string_attribute_cleaner.rb1# This module provides a method for generating a configurable before_validationCOMMENT
LOWapp/workers/reaction_counter_sync_worker.rb1class ReactionCounterSyncWorkerCOMMENT
LOWapp/workers/articles/update_article_activity_worker.rb1module ArticlesCOMMENT
131 more matches not shown…
Fake / Example Data162 hits · 176 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.jsx633 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
102 more matches not shown…
Redundant / Tautological Comments86 hits · 138 pts
SeverityFileLineSnippetContext
LOWapp/mailers/digest_mailer.rb30 # Check if user follows any subforems OR has a custom onboarding subforemCOMMENT
LOWapp/mailers/digest_mailer.rb40 # Check if user follows any subforemsCOMMENT
LOWapp/models/article.rb1159 # Set subforem_id to default subforem ID if not already set and a default subforem existsCOMMENT
LOWapp/models/article.rb1321 # Check if the value actually changed, not just if Rails marked it as changedCOMMENT
LOWapp/models/article.rb1526 # Check if user is a member/admin of the collection's organizationCOMMENT
LOWapp/models/article.rb1838 # Check if the body_markdown contains only the expected embed tagsCOMMENT
LOWapp/models/poll.rb75 # Check if poll allows multiple votesCOMMENT
LOWapp/models/poll.rb80 # Check if poll is a scale pollCOMMENT
LOWapp/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.rb51 # Check if we should fetch a billboard based on delivery rateCOMMENT
LOWapp/models/billboard_placement_area_config.rb84 # Check if column exists (for backward compatibility before migration runs)COMMENT
LOWapp/models/billboard.rb423 # Check if 'bb' parameter exists and update it or append if not existsCOMMENT
LOWapp/models/billboard.rb458 # Check if a user should be excluded from seeing this billboard based on survey completionCOMMENT
LOWapp/models/billboard.rb531 # Check if approved changed from true to false or published changed from true to false.COMMENT
LOWapp/models/survey.rb17 # Check if a user has completed all polls in this survey in their latest sessionCOMMENT
LOWapp/models/survey.rb27 # Check if user has voted or skipped all polls in the latest sessionCOMMENT
LOWapp/models/survey.rb36 # Check if a user can submit this survey (based on allow_resubmission setting)COMMENT
LOWapp/models/survey.rb72 # 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.rb16 # Check if the URL is an image and process accordinglyCOMMENT
LOW…ions/track_promotional_billboard_impressions_worker.rb42 # Check if we should pause promotional billboardsCOMMENT
LOWapp/workers/spam/reaction_ring_detection_worker.rb37 # 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/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.rb36 # 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.rb82 # Check if this is a mobile authentication request.COMMENT
LOWapp/controllers/auth_pass_controller.rb46 # 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.rb22 # Check if this response completes a surveyCOMMENT
LOWapp/controllers/surveys_controller.rb18 # Check if user can submit this surveyCOMMENT
LOWapp/controllers/stories_controller.rb250 # Check if a limit was applied to this relation and respect itCOMMENT
LOWapp/controllers/poll_votes_controller.rb21 # Check if this poll belongs to a survey and if resubmission is allowedCOMMENT
LOWapp/controllers/poll_votes_controller.rb51 # 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.rb201 # 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.rb124 # Check if concentration is suspiciously highCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb151 # Check if they react to authors outside the shared groupCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb173 # Check if they follow the original user or are followed by themCOMMENT
LOWapp/services/spam/reaction_ring_detector.rb177 # 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.rb82 # 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.rb122 # 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
LOWapp/services/ai/comment_check.rb81 # Check if the response contains "YES", ignoring case and leading/trailing whitespace.COMMENT
26 more matches not shown…
AI Slop Vocabulary14 hits · 35 pts
SeverityFileLineSnippetContext
LOWapp/models/tag.rb94 # 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
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.rb191 # so we just create something that quacks like one.COMMENT
MEDIUMspec/services/markdown_processor/parser_spec.rb723 # I don't want to delve into the implementation details of liquid to test what the parseCOMMENT
Slop Phrases9 hits · 22 pts
SeverityFileLineSnippetContext
MEDIUMapp/liquid_tags/bluesky_tag.rb28 # Now that we've parsed the input, you can use the values toCOMMENT
MEDIUMapp/services/user_query_validator.rb339 # This is a basic implementation and could be enhanced with a proper SQL parserCOMMENT
LOWapp/services/images/generate_social_image_magickally.rb175 # 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.rb132 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.rb271 "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.rb99 - 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 Indicators7 hits · 13 pts
SeverityFileLineSnippetContext
LOWapp/queries/billboards/filtered_ads_query.rb243 # For billboards that do exclude survey completions, we need to check if the userCOMMENT
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
LOWapp/controllers/api/v0/mobile_auth_controller.rb25 # Step 2: Form an OmniAuth Mock HashCOMMENT
LOWapp/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
Structural Annotation Overuse7 hits · 13 pts
SeverityFileLineSnippetContext
LOWapp/models/user.rb428 # 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
LOWapp/controllers/api/v0/mobile_auth_controller.rb25 # Step 2: Form an OmniAuth Mock HashCOMMENT
LOWapp/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-Vocabulary4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMapp/workers/articles/handle_spam_worker.rb24 # Create AI client for dependency injectionCOMMENT
MEDIUMapp/services/ai/article_enhancer.rb10 # @param ai_client [Ai::Base] Optional AI 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.rb26 # @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