AI Slop Code Risk Monitor

lobsters/lobsters

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

Computing-focused community centered around link aggregation and discussion

3.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for lobsters/lobsters, a Ruby project with 4,856 GitHub stars. SynthScan examined 33,034 lines of code across 541 source files, recording 84 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 3.6 (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.

3.6
Adjusted Signal
3.6
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
4.9K
Stars
Ruby
Language
33.0K
Lines of Code
541
Files
84
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 13.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.1/100 · LOW

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

Agent Over-Engineering Ratio 1.8/100 · LOW

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

PR Review Velocity Impact 15.8/100 · LOW

Which changes need focused human review? 84 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 0MEDIUM 15LOW 69

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

Self-Referential Comments12 hits · 36 pts
SeverityFileLineSnippetContext
MEDIUMconfig/initializers/wrap_parameters.rb5# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMconfig/initializers/permissions_policy.rb5# Define an application-wide HTTP permissions policy. For furtherCOMMENT
MEDIUMconfig/initializers/content_security_policy.rb5# Define an application-wide content security policy.COMMENT
MEDIUMspec/rails_helper.rb3# This file is copied to spec/ when you run 'rails generate rspec:install'COMMENT
MEDIUMdb/schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
MEDIUMdb/schema.rb5# This file is the source Rails uses to define your schema when running `bin/railsCOMMENT
MEDIUMdb/queue_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
MEDIUMdb/queue_schema.rb5# This file is the source Rails uses to define your schema when running `bin/railsCOMMENT
MEDIUMdb/rack_attack_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
MEDIUMdb/rack_attack_schema.rb5# This file is the source Rails uses to define your schema when running `bin/railsCOMMENT
MEDIUMdb/cache_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
MEDIUMdb/cache_schema.rb5# This file is the source Rails uses to define your schema when running `bin/railsCOMMENT
Over-Commented Block30 hits · 30 pts
SeverityFileLineSnippetContext
LOW.database_consistency.ignore.yml1# This file lists exceptions for database_consistency checks at build time.COMMENT
LOW.database_consistency.ignore.yml21# a `has_many` with `dependent: :nullify` (Story#merged_stories), and a caseCOMMENT
LOWapp/models/comment.rb341 last_byte = [id & 0xff].pack("C")COMMENT
LOWconfig/locales/en.yml1# Files in the config/locales directory are used for internationalizationCOMMENT
LOWconfig/environments/production.rb41 # Enable serving of images, stylesheets, and JavaScripts from an asset server.COMMENT
LOWconfig/environments/test.rb1# typed: falseCOMMENT
LOWconfig/initializers/application_controller_renderer.rb1# typed: falseCOMMENT
LOWconfig/initializers/mime_types.rb1# typed: falseCOMMENT
LOWconfig/initializers/session_store.rb1# typed: falseCOMMENT
LOWconfig/initializers/wrap_parameters.rb1# typed: falseCOMMENT
LOWconfig/initializers/assets.rb1# typed: falseCOMMENT
LOWconfig/initializers/page_caching_monkeypatch.rb1# https://github.com/lobsters/lobsters/issues/1825COMMENT
LOWconfig/initializers/page_caching_monkeypatch.rb21# rename.COMMENT
LOWconfig/initializers/permissions_policy.rb1# typed: falseCOMMENT
LOWconfig/initializers/x_request_token.rb1# typed: falseCOMMENT
LOWconfig/initializers/rack_attack.rb1# typed: falseCOMMENT
LOWconfig/initializers/inflections.rb1# typed: falseCOMMENT
LOWspec/spec_helper.rb1# typed: falseCOMMENT
LOWspec/spec_helper.rb21RSpec.configure do |config|COMMENT
LOWspec/spec_helper.rb41 # `true` in RSpec 4.COMMENT
LOWspec/spec_helper.rb61 # # Allows RSpec to persist some state between runs in order to supportCOMMENT
LOWspec/spec_helper.rb81 # endCOMMENT
LOWspec/css_widely_available_spec.rb61 WebMock.disable_net_connect!COMMENT
LOWspec/models/search_parser_spec.rb1# typed: falseCOMMENT
LOW.github/workflows/stale.yml21 close-pr-message: "This PR was closed because it was open for 40 days with no activity. Please reopen when you'dCOMMENT
LOWdb/schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
LOWdb/queue_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
LOWdb/rack_attack_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
LOWdb/cache_schema.rb1# This file is auto-generated from the current state of the database. InsteadCOMMENT
LOWdb/migrate/20250818182728_add_fts_tables.rb1# If you are reading this file because Rails complains that there isn't aCOMMENT
Fake / Example Data19 hits · 21 pts
SeverityFileLineSnippetContext
LOWCONTRIBUTING.md91 lobsters$ rails fake_dataCODE
LOWCONTRIBUTING.md94 The default password for users generated by `fake_data` is `"fake"`.CODE
LOWspec/rails_helper.rb39 # 'placeholder' is so factory_bot can instantiate valid Story objects, but tests must replaceCOMMENT
LOWspec/rails_helper.rb41 c.tags.create!([{tag: "placeholder"}, {tag: "tag1"}, {tag: "tag2"}])CODE
LOWspec/tasks/fake_data_spec.rb7describe "fake_data" doCODE
LOWspec/features/edit_hat_spec.rb6 let!(:hat) { create(:hat, link: "foo@bar.com") }CODE
LOWspec/features/hats_spec.rb8 hat = create(:hat, link: "foo@bar.com")CODE
LOWspec/features/hats_spec.rb20 hat = create(:hat, link: "foo@bar.com")CODE
LOWspec/models/mastodon_app_spec.rb18 expect(MastodonApp.sanitized_instance_name("user@example.com")).to eq("example.com")CODE
LOWspec/models/hat_spec.rb22 hat = build(:hat, link: "foo@bar.com")CODE
LOWspec/models/search_parser_spec.rb136 it("doesn't parse emails") { expect(sp.user).to_not parse("user@example.com") }CODE
LOWspec/models/user_spec.rb72 create(:user, email: "user@example.com")CODE
LOWspec/models/user_spec.rb75 expect { create(:user, email: "user@example.com") }.to raise_errorCODE
LOWspec/factories/story.rb8 tags { Tag.where(tag: "placeholder") }CODE
LOWdocs/SETUP_DEVCONTAINER.md22* Create the fake data by running `rails fake_data`COMMENT
LOWdocs/setup_with_docker.md23* Create the fake data by running `docker compose run app rails fake_data`COMMENT
LOW.devcontainer/devcontainer.json32 "postStartCommand": "bin/rails fake_data"CODE
LOWdb/seeds.rb41Rails.logger.debug "If this is a dev environment, you probably want to run `rails fake_data`"CODE
LOWextras/mastodon.rb96 # returns { "user@example.com" => 123 } for remove_list_accounts callCOMMENT
Hyper-Verbose Identifiers12 hits · 12 pts
SeverityFileLineSnippetContext
LOWapp/models/user.rb481 def initiate_password_reset_for_ip(ip)CODE
LOWapp/models/story.rb687 def description_or_story_text(chars = 0)CODE
LOWapp/jobs/notify_mod_mail_message_job.rb12 def deliver_mod_mail_message_notifications(mod_mail_message, recipient)CODE
LOWapp/jobs/notify_message_job.rb10 def deliver_message_notifications(message)CODE
LOWapp/jobs/notify_comment_job.rb10 def deliver_comment_notifications(comment)CODE
LOWapp/jobs/notify_comment_job.rb21 def deliver_mention_notifications(comment)CODE
LOWapp/jobs/notify_comment_job.rb66 def deliver_reply_notifications(comment)CODE
LOWapp/controllers/home_controller.rb384 def tags_with_description_for_rss(tags)CODE
LOWapp/helpers/users_helper.rb8 def stories_submitted_content(user, showing_user)CODE
LOWapp/helpers/application_helper.rb55 def excerpt_fragment_around_link(html, url)CODE
LOWapp/helpers/application_helper.rb141 def page_numbers_for_pagination(max, cur)CODE
LOWlib/time_series.rb55 def data_with_extrapolated_month(data)CODE
Slop Phrases6 hits · 10 pts
SeverityFileLineSnippetContext
LOWapp/models/vote.rb26 # don't forget to edit the explanations on /aboutCOMMENT
LOWapp/models/vote.rb26 # don't forget to edit the explanations on /aboutCOMMENT
LOWapp/models/vote.rb39 # don't forget to edit the explanations on /aboutCOMMENT
LOWapp/models/vote.rb39 # don't forget to edit the explanations on /aboutCOMMENT
MEDIUMspec/spec_helper.rb53 # with RSpec, but feel free to customize to your heart's content.COMMENT
LOW.github/workflows/check.yml1# If any steps below are added or changed, make sure to keep build.rake in sync.COMMENT
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMbin/stackprof-flamegraph.pl8# this file is here to facilitate running it.COMMENT
MEDIUMbin/stackprof-gprof2dot.py8# this file is here to facilitate running it.COMMENT
LOWspec/models/story_spec.rb158 # we can't seemingly just set body, so...COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWapp/models/notification.rb47 # Check if this is a mention notificationCOMMENT
LOWconfig/environments/production.rb96 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT