AI Slop Code Risk Monitor

spree/spree

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

Open Source Platform for DTC, B2B Commerce, Marketplaces & Omnichannel. REST APIs, TypeScript SDKs, and production-ready Next.js storefront. Self-host it. Own your data. No vendor lock-in. Zero platform fees.

3.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for spree/spree, a Ruby project with 15,802 GitHub stars. SynthScan examined 899,159 lines of code across 6690 source files, recording 3029 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 3.7 (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.7
Adjusted Signal
3.7
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
15.8K
Stars
Ruby
Language
899.2K
Lines of Code
6.7K
Files
3.0K
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 10.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.7/100 · LOW

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

Agent Over-Engineering Ratio 2.9/100 · LOW

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

PR Review Velocity Impact 17.4/100 · LOW

Which changes need focused human review? 3029 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 18HIGH 11MEDIUM 96LOW 2904

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 3029 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block1221 hits · 1221 pts
SeverityFileLineSnippetContext
LOWpnpm-workspace.yaml1packages:COMMENT
LOWpnpm-workspace.yaml81# upstream releases for a full week.COMMENT
LOWpnpm-workspace.yaml101# chokidar 4.0.3 — via tsupCOMMENT
LOWpnpm-workspace.yaml121# npm_and_yarn updater chokes on pnpm's `workspace:` protocol duringCOMMENT
LOWpnpm-workspace.yaml141 '@base-ui/utils': 0.4.0COMMENT
LOW.config/wt.toml1# worktrunk project config — see CLAUDE.md "Worktrees" and scripts/worktree/.COMMENT
LOW.claude/hooks/post-edit-format.sh1#!/usr/bin/env bashCOMMENT
LOW.claude/hooks/pre-commit-gate.sh1#!/usr/bin/env bashCOMMENT
LOW.claude/hooks/pre-commit-gate.sh41COMMENT
LOWdocs/plans/6.0-tax-provider.md261 # Customer (durable profile value), Company (the entity's registration,COMMENT
LOWdocs/plans/6.0-tax-provider.md381 # app/models/spree/tax_identifier/validation_result.rbCOMMENT
LOWdocs/plans/6.0-tax-provider.md661 # require a connected Integration.COMMENT
LOWdocs/plans/6.0-tax-provider.md681 # @param context [Hash] untyped provider extras from set_tax_line_contextCOMMENT
LOWdocs/plans/6.0-tax-provider.md801```rubyCOMMENT
LOWdocs/plans/6.0-returns-exchanges-claims.md881**Resumption needs no cursor.** The legacy `number` carries onto the newCOMMENT
LOWdocs/plans/6.0-multi-vendor-marketplace.md301 has_many :products, class_name: 'Spree::Product', dependent: :nullifyCOMMENT
LOWdocs/plans/6.0-multi-vendor-marketplace.md321 # nil ⇒ store default (store preference), matching today'sCOMMENT
LOWdocs/plans/6.0-multi-vendor-marketplace.md501 # include_shipping : bool — also commission the seller order's delivery amountsCOMMENT
LOWdocs/plans/6.0-multi-vendor-marketplace.md661endCOMMENT
LOWdocs/plans/6.0-b2b-quantity-rules.md201 is not yet met.COMMENT
LOWdocs/plans/5.6-admin-spa-csv-import.md161 render json: serialize_resource(@resource), status: :createdCOMMENT
LOWdocs/plans/5.4-search-provider.md161 # Search, filter, and return facets in one call.COMMENT
LOWdocs/plans/6.0-replace-taxons-with-categories.md181 include Spree::MetadataCOMMENT
LOWdocs/plans/6.0-replace-taxons-with-categories.md621# rake spree:migrate_taxons_to_categories_and_collectionsCOMMENT
LOWdocs/plans/6.0-replace-taxons-with-categories.md641# childless after step 1 (keep non-empty roots as top-level categories), thenCOMMENT
LOWspree/template.rb1require 'shellwords'COMMENT
LOW…nce_tasks/spree/maintenance_tasks/upgrade/rake_step.rb21COMMENT
LOW…ree/core/app/tools/spree/agent_tools/resource_write.rb1module SpreeCOMMENT
LOW…/app/tools/spree/agent_tools/propose_import_mapping.rb1module SpreeCOMMENT
LOWspree/core/app/tools/spree/agent_tools/create_import.rb1module SpreeCOMMENT
LOWspree/core/app/tools/spree/agent_tools/upload_file.rb1module SpreeCOMMENT
LOWspree/core/app/tools/spree/agent_tools/create_export.rb1module SpreeCOMMENT
LOWspree/core/app/tools/spree/agent_tools/query_report.rb81 # granted `read_reports` and `read_orders` could group by the productCOMMENT
LOWspree/core/app/tools/spree/agent_tools/import_tool.rb1module SpreeCOMMENT
LOWspree/core/app/tools/spree/agent_tools/import_tool.rb41 # including its reads. An import is not the resource: it is whateverCOMMENT
LOWspree/core/app/mailers/spree/base_mailer.rb101 endCOMMENT
LOWspree/core/app/mailers/spree/email_template_mailer.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb21 # carrying customer-identifiable data extends this flow in the sameCOMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb121COMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb181 # their street address sitting in the database, and erasure has to reachCOMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb201 #COMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb261COMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb281 purchases_about_person(model, customer, email: @original_email)COMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb381COMMENT
LOWspree/core/app/workflows/spree/customers/anonymize.rb461COMMENT
LOWspree/core/app/workflows/spree/customers/create.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/customers/create.rb21 # The customer record — built (unsaved) while :validate runs.COMMENT
LOWspree/core/app/workflows/spree/customers/create.rb181 # created directly was agreed to at registration.COMMENT
LOWspree/core/app/workflows/spree/fulfillments/fulfill.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/fulfill.rb21 class Fulfill < Spree::WorkflowCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/fulfill.rb61 # a split the shelf check refused.COMMENT
LOWspree/core/app/workflows/spree/fulfillments/fulfill.rb141 # paid-in-full guard denied it: `paid?` requires a positive total, soCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/fulfill.rb161 # that would take it below zero is one of two things, and only theCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/cancel.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/create.rb1module SpreeCOMMENT
LOWspree/core/app/workflows/spree/fulfillments/create.rb21 # that parcel holds.COMMENT
LOWspree/core/app/workflows/spree/fulfillments/create.rb41COMMENT
LOWspree/core/app/workflows/spree/fulfillments/update.rb1module SpreeCOMMENT
LOW…ore/app/workflows/spree/fulfillments/mark_delivered.rb1module SpreeCOMMENT
1161 more matches not shown…
Fake / Example Data1225 hits · 1057 pts
SeverityFileLineSnippetContext
LOW.agents/skills/prototype/SKILL.md213. **Every variant fully works.** Real interactions, real motion, realistic content — actual product-shaped copy, plausiCODE
LOWdocs/plans/5.5-admin-customers-api.md201 "address1": "123 Main St",CODE
LOW⚡docs/plans/6.0-admin-spa.md505 "code": { "label": "Code", "placeholder": "SUMMER2026" },CODE
LOW⚡docs/plans/6.0-admin-spa.md508 "usage_limit": { "label": "Usage limit", "placeholder": "Unlimited" },CODE
LOW⚡docs/plans/6.0-admin-spa.md511 "promotion": { "name": { "label": "Name", "placeholder": "Summer Sale" } },CODE
LOW⚡docs/plans/6.0-admin-spa.md514 "stock_location": { "name": { "label": "Name", "placeholder": "Brooklyn warehouse" },CODE
LOW⚡docs/plans/6.0-admin-spa.md515 "admin_name": { "label": "Internal name", "placeholder": "Optional — shown only in the admin" CODE
LOWdocs/plans/decisions.md3396("Acme" / "Acme Ltd" / "ACME Limited"), so the backfill into real CompanyCODE
LOWdocs/api-reference/store.yaml3042 address1: '123 Main St',CODE
LOWdocs/api-reference/store.yaml7291 address1: '123 Main St',CODE
LOWdocs/api-reference/storefront.yaml15793 dummy_key: PUBLICKEY123CODE
LOWdocs/api-reference/platform.yaml7228 dummy_key: PUBLICKEY123CODE
LOWdocs/api-reference/platform.yaml7252 dummy_key: PUBLICKEY123CODE
LOWdocs/api-reference/platform.yaml7323 dummy_key: PUBLICKEY123CODE
LOWdocs/api-reference/platform.yaml7400 dummy_key: PUBLICKEY123CODE
LOWdocs/api-reference/platform.yaml7476 dummy_key: UPDATED-DUMMY-KEY-123CODE
LOWspree/core/app/models/spree/gateway/bogus.rb14 preference :dummy_key, :string, default: 'PUBLICKEY123'CODE
LOWspree/core/app/models/spree/gateway/bogus.rb187 [:dummy_key]CODE
LOWspree/core/spec/mailers/spree/admin_user_mailer_spec.rb5 let(:admin_user) { create(:admin_user, email: 'admin@example.com') }CODE
LOWspree/core/spec/mailers/spree/admin_user_mailer_spec.rb12 expect(message.to).to eq(['admin@example.com'])CODE
LOW⚡…/core/spec/mailers/spree/email_template_mailer_spec.rb9 mail = described_class.test_email(store, 'admin@example.com', editable_key,CODE
LOW⚡…/core/spec/mailers/spree/email_template_mailer_spec.rb13 expect(mail.to).to eq(['admin@example.com'])CODE
LOW⚡…/core/spec/mailers/spree/email_template_mailer_spec.rb20 mail = described_class.test_email(store, 'admin@example.com', editable_key, branding: { card_color: '#123456' })CODE
LOW…/core/spec/workflows/spree/customers/anonymize_spec.rb201 first_name: 'Dana', last_name: 'Reyes', phone: '555-0100').CODE
LOWspree/core/spec/models/spree/user_identity_spec.rb82 email: 'user@example.com',CODE
LOWspree/core/spec/models/spree/user_identity_spec.rb116 expect(user.email).to eq('user@example.com')CODE
LOWspree/core/spec/models/spree/cart_spec.rb291 expect(cart.name).to eq('John Doe')CODE
LOWspree/core/spec/models/spree/order_spec.rb143 it { is_expected.to eq('John Doe') }CODE
LOW…core/spec/models/spree/customer_standing_scope_spec.rb5 let!(:parent) { create(:company, store: store, name: 'Acme Corp') }CODE
LOWspree/core/spec/models/spree/payment_method_spec.rb515 expect(gateway.reload.options).to include(dummy_secret_key: 'sk_live_secret', dummy_key: 'PUBLICKEY123')CODE
LOWspree/core/spec/models/spree/user_spec.rb11 expect(user.full_name).to eq('John Doe')CODE
LOWspree/core/spec/models/spree/address_spec.rb698 address.update!(phone: '555-0000', first_name: 'Other')CODE
LOWspree/core/spec/models/spree/address_spec.rb868 address1: '123 Main St',CODE
LOWspree/core/spec/models/spree/address_spec.rb871 phone: '555-1234',CODE
LOWspree/core/spec/models/spree/address_spec.rb1042 country_code: 'US', phone: '555-1212', alternative_phone: '555-1213' }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb4 let(:user) { create(:user, email: 'user@example.com', password: 'password123') }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb5 let(:params) { { email: 'user@example.com', password: 'password123' } }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb24 allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user)CODE
LOW…hentication/strategies/email_password_strategy_spec.rb47 let(:params) { { email: 'user@example.com', password: 'wrongpassword' } }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb53 allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user)CODE
LOW…hentication/strategies/email_password_strategy_spec.rb66 allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user)CODE
LOW…hentication/strategies/email_password_strategy_spec.rb104 allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(bare_user)CODE
LOW…hentication/strategies/email_password_strategy_spec.rb115 allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(partial_user)CODE
LOW…hentication/strategies/email_password_strategy_spec.rb147 let(:params) { { email: 'user@example.com', password: '' } }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb158 let(:params) { { email: 'user@example.com' } }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb185 let(:admin_user) { create(:admin_user, email: 'admin@example.com', password: 'admin123') }CODE
LOW…hentication/strategies/email_password_strategy_spec.rb186 let(:params) { { email: 'admin@example.com', password: 'admin123' } }CODE
LOW…/spree/authentication/strategies/base_strategy_spec.rb4 let(:params) { { email: 'user@example.com', password: 'secret' } }CODE
LOW…/spec/models/spree/concerns/admin_user_methods_spec.rb31 expect(admin_user.full_name).to eq('John Doe')CODE
LOW…c/models/concerns/spree/ransackable_attributes_spec.rb43 other = create(:supplier, store: store, name: 'Globex', contact_name: 'John Doe', email: 'hello@globex.test')CODE
LOW…re/spec/presenters/spree/csv/formula_sanitizer_spec.rb26 expect(described_class.cell('123 Main St')).to eq('123 Main St')CODE
LOW…e/spec/presenters/spree/csv/customer_presenter_spec.rb10 address1: '123 Main St',CODE
LOW…e/spec/presenters/spree/csv/customer_presenter_spec.rb16 phone: '555-1234')CODE
LOWspree/core/spec/lib/tasks/preferences_json_spec.rb68 id = insert_row(YAML.dump({ dummy_key: 'pk_1', dummy_secret_key: 'sk_live_1' }), type: 'Spree::Gateway::Bogus')CODE
LOWspree/core/spec/lib/tasks/preferences_json_spec.rb72 expect(column(id, 'preferences_json')).to eq('dummy_key' => 'pk_1')CODE
LOWspree/core/spec/lib/tasks/preferences_json_spec.rb188 "UPDATE spree_payment_methods SET preferences = #{connection.quote({ dummy_key: 'pk_1', dummy_secret_key: 'sk_leCODE
LOW…/db/migrate/rename_metafields_to_custom_fields_spec.rb28 resource: product, custom_field_definition: definition, value: 'placeholder'CODE
LOW…/subscribers/spree/admin_user_email_subscriber_spec.rb7 let(:admin_user) { create(:admin_user, email: 'admin@example.com') }CODE
LOW…core/spec/services/spree/customers/data_export_spec.rb170 address.update_columns(alternative_phone: '555-0100', latitude: 51.52, longitude: -0.15)CODE
LOW…core/spec/services/spree/customers/data_export_spec.rb174 expect(exported[:alternative_phone]).to eq('555-0100')CODE
1165 more matches not shown…
Hyper-Verbose Identifiers433 hits · 447 pts
SeverityFileLineSnippetContext
LOWdocs/plans/5.5-6.0-resource-translations-api.md88 def destroy_locale_translation(locale)CODE
LOWdocs/plans/5.4-disjunctive-option-faceting.md26def group_option_values_by_type(prefixed_ids)CODE
LOWspree/core/app/mailers/spree/base_mailer.rb176 def ensure_default_action_mailer_url_host(store_url = nil)CODE
LOW…/core/app/workflows/spree/fulfillments/replacements.rb49 def allocate_replacement_stock(fulfillment)CODE
LOWspree/core/app/workflows/spree/fulfillments/create.rb290 def destroy_drained_shipments(source_shipments, capture_delivery_method:)CODE
LOWspree/core/app/workflows/spree/carts/complete.rb381 def report_unmatched_override(override)CODE
LOW…e/core/app/workflows/spree/carts/recalculate_totals.rb232 def update_adjustable_columns(adjustable, attributes)CODE
LOW…ree/core/app/workflows/spree/refunds/order_payments.rb41 def issue_refund_store_credit(order:, amount:, record:, memo:, refunder: nil)CODE
LOW…ore/app/workflows/spree/returns/returnable_quantity.rb38 def ensure_returnable_quantities(items, action:)CODE
LOWspree/core/app/workflows/spree/orders/complete.rb142 def allocate_fulfillment_stock(fulfillment)CODE
LOWspree/core/app/models/spree/payment.rb428 def add_gateway_processing_error(error_message)CODE
LOW⚡spree/core/app/models/spree/price.rb144 def compare_at_price_including_vat_for(_price_options = {})CODE
LOW⚡spree/core/app/models/spree/price.rb150 def display_price_including_vat_for(_price_options = {})CODE
LOW⚡spree/core/app/models/spree/price.rb156 def display_compare_at_price_including_vat_for(_price_options = {})CODE
LOWspree/core/app/models/spree/promotion_rule.rb65 def eligibility_error_message(key, options = {})CODE
LOWspree/core/app/models/spree/store_credit_category.rb29 def default_reimbursement_category(options = {})CODE
LOWspree/core/app/models/spree/product.rb745 def variants_and_option_values(current_currency = nil)CODE
LOWspree/core/app/models/spree/product.rb988 def preferred_default_variant(reload: false)CODE
LOWspree/core/app/models/spree/seller.rb340 def set_payout_account_reference(provider, account_reference)CODE
LOWspree/core/app/models/spree/current.rb184 def quantity_rules_resolver_for(company: nil, user: nil, channel: nil)CODE
LOWspree/core/app/models/spree/export.rb251 def decode_prefixed_id_filters(params)CODE
LOWspree/core/app/models/spree/store_credit.rb280 def create_credit_record_params(amount)CODE
LOWspree/core/app/models/spree/order.rb414 def promotion_actions_of_scope(scope)CODE
LOWspree/core/app/models/spree/order.rb1220 def valid_order_routing_strategy_class(klass_name)CODE
LOWspree/core/app/models/spree/fulfillment_changer.rb108 def get_desired_shipment_inventory_unit(state)CODE
LOWspree/core/app/models/spree/payment_session.rb114 def apply_settlement_metadata(payment, metadata)CODE
LOW⚡spree/core/app/models/spree/payment_method.rb219 def create_payment_setup_session(customer:, external_data: {})CODE
LOW⚡spree/core/app/models/spree/payment_method.rb225 def complete_payment_setup_session(setup_session:, params: {})CODE
LOWspree/core/app/models/spree/import_row.rb74 def attribute_by_schema_field(schema_field, mappings = nil)CODE
LOWspree/core/app/models/spree/import_mapping.rb34 def try_to_auto_assign_file_column(csv_headers)CODE
LOWspree/core/app/models/spree/store.rb631 def states_available_for_checkout(country)CODE
LOWspree/core/app/models/spree/store.rb781 def translate_with_store_locale_fallback(key)CODE
LOWspree/core/app/models/spree/price_list.rb244 def adjustment_percentage_for(quantity = nil)CODE
LOWspree/core/app/models/spree/digital_asset.rb66 def effective_authorized_clicks(store = self.store)CODE
LOWspree/core/app/models/spree/digital_asset.rb72 def effective_authorized_days(store = self.store)CODE
LOWspree/core/app/models/spree/line_item.rb422 def update_price_from_modifier(currency, opts)CODE
LOWspree/core/app/models/spree/gateway.rb45 def gateway_dashboard_payment_url(_payment)CODE
LOWspree/core/app/models/spree/promotion/rules/category.rb154 def category_ids_in_order_including_ancestors(order)CODE
LOWspree/core/app/models/spree/promotion/rules/country.rb56 def compute_eligible_country_codes(order)CODE
LOWspree/core/app/models/spree/promotion_handler/coupon.rb161 def clear_persisted_coupon_code(code)CODE
LOWspree/core/app/models/spree/promotion_handler/coupon.rb183 def remove_promotion_adjustments(promotion)CODE
LOWspree/core/app/models/spree/promotion_handler/coupon.rb187 def remove_promotion_line_items(promotion)CODE
LOWspree/core/app/models/spree/adjusters/promotion.rb146 def distribute_over_line_items(chosen)CODE
LOWspree/core/app/models/spree/product/channels.rb124 def apply_product_publications(publications_params)CODE
LOWspree/core/app/models/spree/product/channels.rb168 def decode_publication_channel_id(value)CODE
LOWspree/core/app/models/spree/tax_provider/internal.rb111 def sweep_internal_duty_tax_lines(owner)CODE
LOWspree/core/app/models/spree/stock/estimator.rb48 def choose_default_delivery_rate(delivery_rates)CODE
LOWspree/core/app/models/spree/stock/splitter/weight.rb61 def split_package_contents_over_threshold(package)CODE
LOWspree/core/app/models/spree/stock/splitter/weight.rb71 def split_content_item_over_threshold(content_item)CODE
LOW…odels/spree/authentication/strategies/base_strategy.rb94 def find_or_create_user_from_oauth(provider:, uid:, info:, tokens: {})CODE
LOW…pp/models/spree/order_routing/rules/minimize_splits.rb24 def required_quantity_by_variant(order)CODE
LOWspree/core/app/models/spree/gateway/bogus.rb74 def gateway_dashboard_payment_url(payment)CODE
LOWspree/core/app/models/spree/gateway/bogus.rb141 def create_payment_setup_session(customer:, external_data: {})CODE
LOWspree/core/app/models/spree/gateway/bogus.rb152 def complete_payment_setup_session(setup_session:, params: {})CODE
LOWspree/core/app/models/concerns/spree/acted_by.rb182 def define_transitional_actor_reader(name)CODE
LOW…pp/models/concerns/spree/translatable_resource_slug.rb6 def localized_slugs_for_store(store)CODE
LOWspree/core/app/models/concerns/spree/user_reporting.rb42 def completed_orders_for_store(store)CODE
LOW…re/app/models/concerns/spree/personal_data_matching.rb75 def personal_newsletter_subscribers(customer, email:)CODE
LOW…re/app/models/concerns/spree/personal_data_matching.rb113 def with_email_not_owned_by_others(model, email, customer_type:, customer_id:)CODE
LOW…ree/core/app/models/concerns/spree/customer_methods.rb303 def last_incomplete_spree_order(store, options = {})CODE
373 more matches not shown…
Hallucination Indicators18 hits · 185 pts
SeverityFileLineSnippetContext
CRITICALspree/core/app/tools/spree/agent_tools/import_tool.rb61 import.class.name.demodulize.underscore.tr('_', ' ')CODE
CRITICAL⚡spree/core/app/models/spree/payment_method.rb234 self.class.name.demodulize.titleize.gsub(/Gateway/, '').stripCODE
CRITICALspree/core/app/models/spree/taxon_rules/available_on.rb8 date = value.to_i.days.ago.beginning_of_day.in_time_zone(timezone)CODE
CRITICAL…core/app/models/spree/collection_rules/available_on.rb9 date = value.to_i.days.ago.beginning_of_day.in_time_zone(timezone)CODE
CRITICAL…pp/jobs/spree/collections/regenerate_time_based_job.rb10 types = Rails.application.config.spree.time_based_collection_rules.map(&:to_s)CODE
CRITICALspree/core/config/initializers/active_storage.rb1Rails.application.config.active_storage.content_types_to_serve_as_binary.delete('image/svg+xml')CODE
CRITICAL…ee/core/spec/workflows/spree/returns/lifecycle_spec.rb366 return_record.order.payments.completed.first.update_column(:amount, 500)CODE
CRITICALspree/core/spec/models/spree/cart_spec.rb230 cart.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false)CODE
CRITICALspree/core/spec/models/spree/order_group_spec.rb174 order.fulfillments.sole.fulfillment_items.sole.update_columns(quantity: 2)CODE
CRITICALspree/core/spec/models/spree/order_spec.rb2041 order.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false)CODE
CRITICALspree/core/spec/services/spree/carts/update_spec.rb936 cart.line_items.first.variant.stock_levels.first.set_count_on_hand(20)CODE
CRITICALspree/core/spec/services/spree/carts/update_spec.rb988 cart.line_items.first.variant.stock_levels.first.set_count_on_hand(2)CODE
CRITICAL…e/core/spec/services/spree/store_credits/apply_spec.rb177 by_credit = order.reload.payments.store_credits.checkout.to_a.group_by(&:source_id).transform_values { |paymentsCODE
CRITICAL…e/emails/spec/mailers/spree/order_group_mailer_spec.rb113 group.orders.first.fulfillments.first.selected_delivery_rate.update_columns(unpriced: true)CODE
CRITICAL…e/emails/spec/mailers/spree/order_group_mailer_spec.rb144 order.fulfillments.sole.fulfillment_items.sole.update_columns(quantity: 2)CODE
CRITICAL…ontrollers/spree/api/v3/store/carts_controller_spec.rb498 cart.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false)CODE
CRITICAL…ontrollers/spree/api/v3/store/carts_controller_spec.rb524 cart.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false)CODE
CRITICAL…ontrollers/spree/api/v3/store/carts_controller_spec.rb993 order.line_items.first.variant.stock_levels.first.set_count_on_hand(20)CODE
Modern AI Meta-Vocabulary39 hits · 110 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md91Spree comes with [agent skills](https://github.com/spree/agent-skills), which teach Claude Code, Codex, Cursor, Copilot CODE
MEDIUMREADME.md113* **[Agentic Development](https://spreecommerce.org/docs/developer/agentic/overview)** — [agent skills](https://github.cCOMMENT
MEDIUMdocs/plans/6.0-delivery-rate-provider.md500### Phase 5 — reference external provider ✅ shipped (initial scaffold)COMMENT
MEDIUMdocs/plans/5.5-agent-skills.md26- **Distribution channel is the [`skills`](https://github.com/vercel-labs/skills) CLI** (`npx skills add spree/agent-skiCODE
MEDIUMdocs/plans/5.6-project-layout-and-dashboard.md200// scaffold.ts (excerpt — new phase 2b: dashboard)COMMENT
MEDIUMdocs/plans/5.6-project-layout-and-dashboard.md499### Phase 5: Add dashboard scaffolding to create-spree-app *(implemented)*COMMENT
MEDIUMdocs/plans/6.0-cli-configurator.md188 name: My Store # from the scaffold promptCODE
MEDIUMdocs/plans/6.0-core-rewrite-tasks.md135- Retired with no bridge (plan-sanctioned): `ShipmentHandler` (inlined into `after_fulfill` until Wave 4 providers), `StCODE
MEDIUMspree/core/app/tools/spree/agent_tools/query_report.rb92 # and the rows are what fills a context window.COMMENT
MEDIUMspree/core/app/workflows/spree/orders/cancel.rb3 # Cancels an order — the orchestration that used to hide insideCOMMENT
MEDIUM…pp/jobs/spree/collections/regenerate_time_based_job.rb4 # which event-driven regeneration can't keep fresh. Scheduled by the host appCOMMENT
MEDIUM…enerators/spree/api_resource/api_resource_generator.rb6 # spree:api_resource — scaffold a complete v3-conformant API resource onCOMMENT
MEDIUM…ib/generators/spree/subscriber/subscriber_generator.rb4 # spree:subscriber — scaffold an event subscriber and register it.COMMENT
MEDIUMspree/mcp/lib/spree/mcp/exports.rb19 # of a context window. Beyond it the client is told the size and givenCOMMENT
MEDIUM…/spree/api/v3/admin/translations/batches_controller.rb18 # The orchestration (resolve → upsert → rollback) lives inCOMMENT
MEDIUM…ee/api/spec/lib/spree/api/agent_tools_contract_spec.rb248 # resource whose controller orchestrates is reached through thatCOMMENT
MEDIUM…ee/api/spec/lib/spree/api/agent_tools_contract_spec.rb249 # orchestration rather than around it — an order is writable now, andCOMMENT
MEDIUMspree/api/lib/spree/api/agent_resource_map.rb272 # orchestrates — an order, a refund, a stock level — would haveCOMMENT
MEDIUMspree/api/lib/spree/api/agent_resource_map.rb273 # skipped that orchestration. A dispatched write IS the controller,COMMENT
MEDIUMpackages/dashboard-starter/README.md5> **Monorepo note.** The canonical source of this template lives at `packages/dashboard-starter` in [spree/spree](https:CODE
MEDIUMpackages/cli/src/context.ts54 // scaffold to mount THIS dir (`./server:/rails`). The rewrite lands in theCOMMENT
MEDIUMpackages/cli/src/commands/init.ts282// clone, or a scaffold whose install step failed — mirroringCOMMENT
MEDIUMpackages/cli/src/commands/dev.ts55 // scaffold, a fresh clone) without requiring anyone to run `spree init`.COMMENT
MEDIUMpackages/cli/src/commands/plugin.ts431// Post-scaffold install + bannerCOMMENT
MEDIUMpackages/cli/src/commands/add.ts222 `Could not ${outcome === 'unreadable' ? 'read' : 'write'} ${pc.bold(file)}${outcome === 'unreadable' ? ' as JSCODE
MEDIUMpackages/cli/src/commands/add.ts292 // repair a broken one (old scaffold output) — one gatekeeper for both.COMMENT
MEDIUMpackages/cli/src/commands/add.ts425// cookie. A localhost value can only be that scaffold output, never a realCOMMENT
MEDIUMpackages/create-spree-app/tests/scaffold.test.ts76// `spree init` is shelled out to; the scaffold only decides its arguments.COMMENT
MEDIUMpackages/create-spree-app/tests/scaffold.test.ts441 // scaffold calls process.exit(1) for non-empty dirs, so we mock itCOMMENT
MEDIUMpackages/create-spree-app/tests/templates.test.ts39 // local mail catcher takes them. The scaffold probes them and writes theCOMMENT
MEDIUMpackages/create-spree-app/tests/templates.test.ts91 // The floor must admit every CLI capability the scaffold calls — theCOMMENT
MEDIUMpackages/create-spree-app/tests/prompts.test.ts83 // the scaffold: the seed runs before the store is configured through theCOMMENT
MEDIUMpackages/create-spree-app/tests/dashboard.test.ts15 // own summary because the scaffold prints its own.COMMENT
MEDIUMpackages/create-spree-app/src/scaffold.ts111 // failures warn and continue: they must never abort the scaffold beforeCOMMENT
MEDIUMpackages/create-spree-app/src/scaffold.ts195 // Sample data is never part of a scaffold: first-run setup configures theCOMMENT
MEDIUMpackages/create-spree-app/src/dashboard.ts25 // --quiet: the scaffold's own summary cards cover these — the command'sCOMMENT
MEDIUMpackages/create-spree-app/src/templates/package-json.ts34 // The floor matches the CLI behavior this scaffold relies on (theCOMMENT
MEDIUMpackages/create-spree-app/src/templates/package-json.ts38 // the scaffold calls, or the scaffold asks for something the pinned CLICOMMENT
MEDIUM.github/CONTRIBUTING.md518We also ship [agent skills](https://spreecommerce.org/docs/developer/agentic/agent-skills) (`npx skills add spree/agent-CODE
Decorative Section Separators35 hits · 87 pts
SeverityFileLineSnippetContext
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb34 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb36 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb53 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb55 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb77 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb79 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb127 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb129 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb197 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb199 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb222 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb224 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb264 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb266 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb287 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb289 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb392 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb394 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb427 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb429 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb455 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb457 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb481 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb483 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb507 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb509 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb537 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb539 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb571 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb573 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb600 # ---------------------------------------------------------------COMMENT
MEDIUM…pec/models/spree/order_routing/strategy/parity_spec.rb602 # ---------------------------------------------------------------COMMENT
MEDIUMpackages/sdk/src/webhooks/index.ts4// ─── Verification ──────────────────────────────────────────────COMMENT
MEDIUMpackages/sdk/src/webhooks/index.ts52// ─── Types ─────────────────────────────────────────────────────COMMENT
MEDIUMpackages/sdk/src/webhooks/index.ts99// ─── Construction ──────────────────────────────────────────────COMMENT
Synthetic Comment Markers11 hits · 70 pts
SeverityFileLineSnippetContext
HIGHdocs/plans/6.0-returns-exchanges-claims.md663 # resellable: }]`; nil receives everything as requested and resellableCOMMENT
HIGHspree/core/app/workflows/spree/returns/receive.rb11 # resellable: }]`; nil receives everything as requested and resellableCOMMENT
HIGH…s/spree/api/v3/admin/orders/returns_controller_spec.rb175 # Omitting `items` means "everything as requested"; naming an empty listCOMMENT
HIGHpackages/dashboard/e2e/gift-cards.spec.ts37 test('creates a gift card with an auto-generated code', async ({ page }) => {CODE
HIGHpackages/dashboard/e2e/gift-cards.spec.ts47 // Auto-generated code is uppercase hex; just confirm a row with theCOMMENT
HIGHpackages/dashboard/src/locales/en.json1574 "help": "1 issues a single card. More than 1 issues a batch with auto-generated codes.",CODE
HIGHpackages/dashboard/src/locales/en.json4068 "create_description": "Issue a single gift card or generate a batch with auto-generated codes.",CODE
HIGHpackages/dashboard/src/locales/en.json4973 "description": "Auto-generated codes for this promotion. Read-only — regenerate by changing the promotion's numbCODE
HIGHpackages/dashboard/src/locales/en.json4974 "description_with_count": "{{count}} auto-generated codes. Read-only — regenerate by changing the promotion's nuCODE
HIGHpackages/admin-sdk/examples/order-exchanges/receive.ts9// Omit `items` to receive everything as requested and resellable.COMMENT
HIGHpackages/admin-sdk/examples/order-returns/receive.ts9// Omit `items` to receive everything as requested and resellable.COMMENT
Self-Referential Comments20 hits · 60 pts
SeverityFileLineSnippetContext
MEDIUMspree/core/app/tools/spree/agent_tools/create_import.rb11 # Creating the import reads the file's header row and proposes a columnCOMMENT
MEDIUMspree/core/app/models/spree/invitation.rb134 # This method is kept for backwards compatibility.COMMENT
MEDIUMspree/core/app/models/spree/refresh_token.rb43 # Create a refresh token for a user.COMMENT
MEDIUMspree/core/app/models/spree/webhook_delivery.rb118 # Create a new delivery with the same payload and queue it.COMMENT
MEDIUMspree/core/app/models/spree/storefront/access_policy.rb15 # This class is the storefront's extension seam: replace it viaCOMMENT
MEDIUM…/models/concerns/spree/translatable_resource_scopes.rb7 # This method is to be used when you've already joined on the translatable table itselfCOMMENT
MEDIUMspree/core/spec/spec_helper.rb39# This file is copied to ~/spec when you run 'ruby script/generate rspec'COMMENT
MEDIUMspree/core/spec/models/spree/stock_level_spec.rb37 # Creating a level propagates more of them across the store's locations,COMMENT
MEDIUMspree/core/lib/spree/core.rb244 # This method is defined within the core gem on purpose.COMMENT
MEDIUMspree/core/lib/spree/core.rb260 # This method is defined within the core gem on purpose.COMMENT
MEDIUMspree/core/lib/spree/events.rb11 # This module provides a clean API for publishing events and subscribingCOMMENT
MEDIUMspree/core/lib/spree/events.rb128 # This method is idempotent - calling it multiple times has no effectCOMMENT
MEDIUM…/spree/events/adapters/active_support_notifications.rb92 # Create a single AS::N subscription that catches all Spree eventsCOMMENT
MEDIUMspree/providers/stripe/spec/support/vcr.rb28 # Creating a webhook endpoint returns its signing secret in the responseCOMMENT
MEDIUMspree/emails/spec/spec_helper.rb30# This file is copied to ~/spec when you run 'ruby script/generate rspec'COMMENT
MEDIUMspree/dashboard/spec/spec_helper.rb30# This file is copied to ~/spec when you run 'ruby script/generate rspec'COMMENT
MEDIUM…p/controllers/spree/api/v3/admin/sellers_controller.rb206 # Creating a seller provisions their stock location too, so it goesCOMMENT
MEDIUMspree/api/config/routes.rb901 # Creating an invitation is hiring, so it lives on `team`; chasing orCOMMENT
MEDIUMspree/api/spec/spec_helper.rb25# This file is copied to spec/ when you run 'rails generate rspec:install'COMMENT
MEDIUM…pi/spec/integration/spree/api/v3/admin/markets_spec.rb217 # Create a second market so the target isn't the last one in the store.COMMENT
Redundant / Tautological Comments18 hits · 32 pts
SeverityFileLineSnippetContext
LOWspree/core/app/models/spree/product.rb806 # Check if the product is digital by checking if any of its shipping methods are digital deliveryCOMMENT
LOWspree/core/app/models/spree/webhook_endpoint.rb107 # Check if this endpoint is subscribed to a specific event.COMMENT
LOWspree/core/app/models/spree/webhook_endpoint.rb173 # Check if the endpoint was auto-disabledCOMMENT
LOWspree/core/app/models/spree/webhook_endpoint.rb180 # Check if auto-disable threshold has been reachedCOMMENT
LOW⚡spree/core/app/models/spree/order.rb584 # Check if the shipping address is a quick checkout addressCOMMENT
LOW⚡spree/core/app/models/spree/order.rb592 # Check if quick checkout is available for this orderCOMMENT
LOW⚡spree/core/app/models/spree/order.rb599 # Check if quick checkout requires an address collectionCOMMENT
LOW⚡spree/core/app/models/spree/webhook_delivery.rb58 # Check if the delivery was successfulCOMMENT
LOW⚡spree/core/app/models/spree/webhook_delivery.rb65 # Check if the delivery failedCOMMENT
LOW⚡spree/core/app/models/spree/webhook_delivery.rb72 # Check if the delivery is pendingCOMMENT
LOWspree/core/app/models/spree/stock/quantifier.rb101 # Check if any of variant stock items is backorderableCOMMENT
LOWspree/core/app/models/concerns/spree/publishable.rb170 # Check if a parent class has an explicitly set prefixCOMMENT
LOW…/spree/promotion_handler/coupon_with_gift_card_spec.rb131 # Set total to less than the gift card payment amountCOMMENT
LOWspree/core/lib/spree/events.rb203 # Check if events are enabledCOMMENT
LOWspree/core/lib/spree/events.rb232 # Check if automatic lifecycle events (*.created/updated/deleted) are enabledCOMMENT
LOWspree/core/lib/spree/core/dependencies_helper.rb64 # Check if a specific dependency has been overriddenCOMMENT
LOW…ee/api/app/serializers/spree/api/v3/base_serializer.rb255 # Check if an association should be expandedCOMMENT
LOW…/app/controllers/concerns/spree/api/v3/http_caching.rb47 # Check if the current user is a guest (no authentication)COMMENT
Structural Annotation Overuse5 hits · 10 pts
SeverityFileLineSnippetContext
LOWdocs/plans/5.4-metafield-translations.md261### Step 1: MigrationCOMMENT
LOW⚡docs/plans/5.4-metafield-translations.md295### Step 2: Model changesCOMMENT
LOW⚡docs/plans/5.4-metafield-translations.md302### Step 3: Serializer changesCOMMENT
LOW⚡docs/plans/5.4-metafield-translations.md308### Step 4: Controller changesCOMMENT
LOW⚡docs/plans/5.4-metafield-translations.md314### Step 5: TestsCOMMENT
Slop Phrases3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMspree/core/config/i18n-tasks.yml183## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.:COMMENT
MEDIUMspree/core/lib/spree/core.rb273 # you can use Spree.payment_methodsCOMMENT
LOWspree/lib/generators/spree/install/install_generator.rb69 say_status :skipping, "migrations (don't forget to run rake db:migrate)"CODE
Verbosity Indicators1 hit · 1 pts
SeverityFileLineSnippetContext
LOWspree/core/app/models/concerns/spree/user_roles.rb6 has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, as: :user, dependent: :destroy_async #CODE