Open Source eCommerce Platform for B2B, Marketplace, and Enterprise. REST API, TypeScript SDK, and production-ready Next.js storefront. Self-host it. Own your stack. No vendor lock-in. Zero platform fees.
This report presents the forensic synthetic code analysis of spree/spree, a Ruby project with 15,592 GitHub stars. SynthScan v2.0 examined 478,721 lines of code across 3554 source files, recording 1356 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 3.9 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).
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.
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.
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.
The scanner identified 1356 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/plans/5.5-admin-customers-api.md | 201 | "address1": "123 Main St", | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 502 | "code": { "label": "Code", "placeholder": "SUMMER2026" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 505 | "usage_limit": { "label": "Usage limit", "placeholder": "Unlimited" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 508 | "promotion": { "name": { "label": "Name", "placeholder": "Summer Sale" } }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 511 | "stock_location": { "name": { "label": "Name", "placeholder": "Brooklyn warehouse" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 512 | "admin_name": { "label": "Internal name", "placeholder": "Optional — shown only in the admin" | CODE |
| LOW | docs/plans/decisions.md | 77 | ("Acme" / "Acme Ltd" / "ACME Limited"), so the backfill into real Company | CODE |
| LOW | docs/api-reference/store.yaml | 1936 | address1: '123 Main St', | CODE |
| LOW | docs/api-reference/store.yaml | 6049 | address1: '123 Main St', | CODE |
| LOW | docs/api-reference/storefront.yaml | 15793 | dummy_key: PUBLICKEY123 | CODE |
| LOW | docs/api-reference/platform.yaml | 7228 | dummy_key: PUBLICKEY123 | CODE |
| LOW | docs/api-reference/platform.yaml | 7252 | dummy_key: PUBLICKEY123 | CODE |
| LOW | docs/api-reference/platform.yaml | 7323 | dummy_key: PUBLICKEY123 | CODE |
| LOW | docs/api-reference/platform.yaml | 7400 | dummy_key: PUBLICKEY123 | CODE |
| LOW | docs/api-reference/platform.yaml | 7476 | dummy_key: UPDATED-DUMMY-KEY-123 | CODE |
| LOW | docs/api-reference/admin.yaml | 77 | email: 'admin@example.com', | CODE |
| LOW | docs/api-reference/admin.yaml | 82 | source: spree api post /auth/login -d '{"email":"admin@example.com","password":"password123"}' | CODE |
| LOW | docs/api-reference/admin.yaml | 559 | email: 'admin@example.com', | CODE |
| LOW | docs/api-reference/admin.yaml | 564 | source: spree api post /auth/password_resets -d '{"email":"admin@example.com","redirect_url":"https://admin.your | CODE |
| LOW | docs/api-reference/admin.yaml | 12370 | - key: dummy_key | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 12 | preference :dummy_key, :string, default: 'PUBLICKEY123' | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 173 | [:dummy_key] | CODE |
| LOW | spree/core/spec/mailers/spree/admin_user_mailer_spec.rb | 5 | let(:admin_user) { create(:admin_user, email: 'admin@example.com') } | CODE |
| LOW | spree/core/spec/mailers/spree/admin_user_mailer_spec.rb | 12 | expect(message.to).to eq(['admin@example.com']) | CODE |
| LOW | spree/core/spec/mailers/spree/admin_user_mailer_spec.rb | 90 | expect(message.to).to eq(['admin@example.com']) | CODE |
| LOW | spree/core/spec/models/spree/user_identity_spec.rb | 54 | email: 'user@example.com', | CODE |
| LOW | spree/core/spec/models/spree/user_identity_spec.rb | 88 | expect(user.email).to eq('user@example.com') | CODE |
| LOW | spree/core/spec/models/spree/order_spec.rb | 175 | it { is_expected.to eq('John Doe') } | CODE |
| LOW | spree/core/spec/models/spree/user_spec.rb | 27 | expect(user.full_name).to eq('John Doe') | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 874 | address1: '123 Main St', | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 877 | phone: '555-1234', | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 133 | order.email = 'user@example.com' | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 193 | order.email = 'user@example.com' | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 205 | order.email = 'user@example.com' | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 227 | order.email = 'user@example.com' | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 273 | order.email = 'user@example.com' | CODE |
| LOW | spree/core/spec/models/spree/order/checkout_spec.rb | 483 | order.email = 'spree@example.org' | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 4 | let(:user) { create(:user, email: 'user@example.com', password: 'password123') } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 5 | let(:params) { { email: 'user@example.com', password: 'password123' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 24 | allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user) | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 47 | let(:params) { { email: 'user@example.com', password: 'wrongpassword' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 53 | allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user) | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 87 | let(:params) { { email: 'user@example.com', password: '' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 98 | let(:params) { { email: 'user@example.com' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 125 | let(:admin_user) { create(:admin_user, email: 'admin@example.com', password: 'admin123') } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 126 | let(:params) { { email: 'admin@example.com', password: 'admin123' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 137 | allow(strategy).to receive(:find_user_by_email).with('admin@example.com').and_return(admin_user) | CODE |
| LOW | …/spree/authentication/strategies/base_strategy_spec.rb | 4 | let(:params) { { email: 'user@example.com', password: 'secret' } } | CODE |
| LOW | …/spec/models/spree/concerns/admin_user_methods_spec.rb | 55 | expect(admin_user.full_name).to eq('John Doe') | CODE |
| LOW | …re/spec/presenters/spree/csv/formula_sanitizer_spec.rb | 26 | expect(described_class.cell('123 Main St')).to eq('123 Main St') | CODE |
| LOW | …e/spec/presenters/spree/csv/customer_presenter_spec.rb | 10 | address1: '123 Main St', | CODE |
| LOW | …e/spec/presenters/spree/csv/customer_presenter_spec.rb | 16 | phone: '555-1234') | CODE |
| LOW | …/subscribers/spree/admin_user_email_subscriber_spec.rb | 7 | let(:admin_user) { create(:admin_user, email: 'admin@example.com') } | CODE |
| LOW⚡ | …services/spree/imports/row_processors/customer_spec.rb | 29 | 'phone' => '555-0101', | CODE |
| LOW⚡ | …services/spree/imports/row_processors/customer_spec.rb | 32 | 'company' => 'Acme Corp', | CODE |
| LOW⚡ | …services/spree/imports/row_processors/customer_spec.rb | 33 | 'address1' => '123 Main St', | CODE |
| LOW | …services/spree/imports/row_processors/customer_spec.rb | 49 | expect(user.phone).to eq '555-0101' | CODE |
| LOW | …services/spree/imports/row_processors/customer_spec.rb | 61 | expect(address.company).to eq 'Acme Corp' | CODE |
| LOW | …services/spree/imports/row_processors/customer_spec.rb | 62 | expect(address.address1).to eq '123 Main St' | CODE |
| LOW | …services/spree/imports/row_processors/customer_spec.rb | 122 | 'phone' => '555-0101' | CODE |
| 513 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/plans/5.5-6.0-resource-translations-api.md | 84 | def destroy_locale_translation(locale) | CODE |
| LOW | docs/plans/5.4-disjunctive-option-faceting.md | 26 | def group_option_values_by_type(prefixed_ids) | CODE |
| LOW | spree/core/app/mailers/spree/base_mailer.rb | 111 | def ensure_default_action_mailer_url_host(store_url = nil) | CODE |
| LOW | spree/core/app/models/spree/payment.rb | 267 | def add_gateway_processing_error(error_message) | CODE |
| LOW | spree/core/app/models/spree/refund.rb | 49 | def total_amount_reimbursed_for(reimbursement) | CODE |
| LOW | spree/core/app/models/spree/shipment.rb | 485 | def update_attributes_and_order(params = {}) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 127 | def compare_at_price_including_vat_for(price_options) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 132 | def display_price_including_vat_for(price_options) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 136 | def display_compare_at_price_including_vat_for(price_options) | CODE |
| LOW | spree/core/app/models/spree/promotion_rule.rb | 65 | def eligibility_error_message(key, options = {}) | CODE |
| LOW | spree/core/app/models/spree/fulfilment_changer.rb | 100 | def get_desired_shipment_inventory_unit(state) | CODE |
| LOW | spree/core/app/models/spree/store_credit_category.rb | 38 | def default_reimbursement_category(_options = {}) | CODE |
| LOW | spree/core/app/models/spree/product.rb | 607 | def variants_and_option_values(current_currency = nil) | CODE |
| LOW | spree/core/app/models/spree/reimbursement.rb | 81 | def build_from_customer_return(customer_return) | CODE |
| LOW | spree/core/app/models/spree/export.rb | 163 | def decode_prefixed_id_filters(params) | CODE |
| LOW | spree/core/app/models/spree/store_credit.rb | 208 | def create_credit_record_params(amount) | CODE |
| LOW | spree/core/app/models/spree/taxon.rb | 271 | def regenerate_taxon_products(only_once: false) | CODE |
| LOW | spree/core/app/models/spree/order.rb | 574 | def find_line_item_by_variant(variant, options = {}) | CODE |
| LOW | spree/core/app/models/spree/order.rb | 703 | def available_payment_methods(store = nil) | CODE |
| LOW | spree/core/app/models/spree/order.rb | 1077 | def valid_order_routing_strategy_class(klass_name) | CODE |
| LOW⚡ | spree/core/app/models/spree/payment_method.rb | 127 | def create_payment_setup_session(customer:, external_data: {}) | CODE |
| LOW⚡ | spree/core/app/models/spree/payment_method.rb | 133 | def complete_payment_setup_session(setup_session:, params: {}) | CODE |
| LOW | spree/core/app/models/spree/import_row.rb | 88 | def attribute_by_schema_field(schema_field, mappings = nil) | CODE |
| LOW | spree/core/app/models/spree/import_mapping.rb | 35 | def try_to_auto_assign_file_column(csv_headers) | CODE |
| LOW | spree/core/app/models/spree/stock_transfer.rb | 67 | def find_stock_location_with_location_id(location_id) | CODE |
| LOW | spree/core/app/models/spree/store.rb | 315 | def states_available_for_checkout(country) | CODE |
| LOW | spree/core/app/models/spree/store.rb | 410 | def translate_with_store_locale_fallback(key) | CODE |
| LOW | spree/core/app/models/spree/line_item.rb | 300 | def update_price_from_modifier(currency, opts) | CODE |
| LOW | spree/core/app/models/spree/gateway.rb | 41 | def gateway_dashboard_payment_url(_payment) | CODE |
| LOW | spree/core/app/models/spree/promotion/rules/country.rb | 47 | def compute_eligible_country_isos(order) | CODE |
| LOW | spree/core/app/models/spree/promotion/rules/taxon.rb | 109 | def taxon_ids_in_order_including_ancestors(order) | CODE |
| LOW | spree/core/app/models/spree/order/store_credit.rb | 4 | def add_store_credit_payments(amount = nil) | CODE |
| LOW | …e/core/app/models/spree/search_provider/meilisearch.rb | 353 | def metafield_filter_condition(key, value) | CODE |
| LOW | …e/core/app/models/spree/search_provider/meilisearch.rb | 377 | def format_metafield_filter_value(value, numeric) | CODE |
| LOW | …e/core/app/models/spree/search_provider/meilisearch.rb | 391 | def group_option_values_by_type(prefixed_ids) | CODE |
| LOW | …e/core/app/models/spree/search_provider/meilisearch.rb | 401 | def build_grouped_option_conditions(grouped) | CODE |
| LOW | spree/core/app/models/spree/calculator/default_tax.rb | 35 | def compute_shipment_or_line_item(item) | CODE |
| LOW⚡ | …dels/spree/calculator/returns/default_refund_amount.rb | 21 | def weighted_order_adjustment_amount(return_item) | CODE |
| LOW⚡ | …dels/spree/calculator/returns/default_refund_amount.rb | 25 | def percentage_of_order_total(return_item) | CODE |
| LOW⚡ | …dels/spree/calculator/returns/default_refund_amount.rb | 31 | def weighted_line_item_pre_tax_amount(return_item) | CODE |
| LOW | spree/core/app/models/spree/promotion_handler/coupon.rb | 123 | def remove_promotion_adjustments(promotion) | CODE |
| LOW | spree/core/app/models/spree/promotion_handler/coupon.rb | 129 | def remove_promotion_line_items(promotion) | CODE |
| LOW | spree/core/app/models/spree/product/channels.rb | 117 | def apply_product_publications(publications_params) | CODE |
| LOW | spree/core/app/models/spree/product/channels.rb | 153 | def decode_publication_channel_id(value) | CODE |
| LOW | …e/app/models/spree/adjustable/promotion_accumulator.rb | 50 | def item_total_with_promotion(promotion_id) | CODE |
| LOW | …ore/app/models/spree/adjustable/adjustments_updater.rb | 44 | def update_adjustable_attributes(attributes) | CODE |
| LOW | spree/core/app/models/spree/stock/estimator.rb | 21 | def choose_default_shipping_rate(shipping_rates) | CODE |
| LOW | spree/core/app/models/spree/stock/splitter/weight.rb | 61 | def split_package_contents_over_threshold(package) | CODE |
| LOW | spree/core/app/models/spree/stock/splitter/weight.rb | 71 | def split_content_item_over_threshold(content_item) | CODE |
| LOW | …odels/spree/authentication/strategies/base_strategy.rb | 43 | def find_or_create_user_from_oauth(provider:, uid:, info:, tokens: {}) | CODE |
| LOW | …pp/models/spree/order_routing/rules/minimize_splits.rb | 24 | def required_quantity_by_variant(order) | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 127 | def create_payment_setup_session(customer:, external_data: {}) | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 138 | def complete_payment_setup_session(setup_session:, params: {}) | CODE |
| LOW | spree/core/app/models/spree/reimbursement/credit.rb | 14 | def total_amount_reimbursed_for(reimbursement) | CODE |
| LOW | …odels/spree/reimbursement/reimbursement_type_engine.rb | 33 | def calculate_reimbursement_type(return_item) | CODE |
| LOW | …pp/models/concerns/spree/translatable_resource_slug.rb | 6 | def localized_slugs_for_store(store) | CODE |
| LOW | …core/app/models/concerns/spree/metafield_filterable.rb | 68 | def metafield_filter_condition(definition, predicate, value) | CODE |
| LOW | …core/app/models/concerns/spree/metafield_filterable.rb | 88 | def metafield_value_expression(column, field_type) | CODE |
| LOW | …core/app/models/concerns/spree/metafield_filterable.rb | 130 | def metafield_value_condition(field_type, predicate, value) | CODE |
| LOW | spree/core/app/models/concerns/spree/metafields.rb | 11 | def extract_namespace_and_key(key_with_namespace) | CODE |
| 210 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pnpm-workspace.yaml | 1 | packages: | COMMENT |
| LOW | pnpm-workspace.yaml | 21 | # dangerouslyAllowAllBuilds: explicitly pinned to false. install scripts | COMMENT |
| LOW | pnpm-workspace.yaml | 41 | # security advisories. Dependabot cannot open these PRs itself — its | COMMENT |
| LOW | .claude/hooks/post-edit-format.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .claude/hooks/pre-commit-gate.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .claude/hooks/pre-commit-gate.sh | 21 | # git commit/push invocation. Handles env-var prefixes (FOO=bar, env FOO=bar) | COMMENT |
| LOW | docs/plans/6.0-tax-provider.md | 281 | # Commit tax for a completed order. Creates a tax document in external | COMMENT |
| LOW | docs/plans/6.0-returns-exchanges-claims.md | 521 | ``` | COMMENT |
| LOW | docs/plans/6.0-multi-vendor-marketplace.md | 181 | has_many :role_users, class_name: 'Spree::RoleUser', as: :resource, dependent: :destroy | COMMENT |
| LOW | docs/plans/5.6-admin-spa-csv-import.md | 161 | render json: serialize_resource(@resource), status: :created | COMMENT |
| LOW | docs/plans/6.0-remove-master-variant.md | 221 | # rake spree:remove_master_variant | COMMENT |
| LOW | docs/plans/5.4-search-provider.md | 161 | # Search, filter, and return facets in one call. | COMMENT |
| LOW | docs/plans/6.0-replace-taxons-with-categories.md | 401 | ### Phase 2: Data migration (rake task) | COMMENT |
| LOW | docs/plans/6.0-typed-stock-movements.md | 341 | add_column :spree_stock_items, :allocated_count, :integer, null: false, default: 0 | COMMENT |
| LOW | spree/core/app/models/spree/base.rb | 81 | # wire (e.g. `"currency"` for `Spree::Promotion::Rules::Currency`, | COMMENT |
| LOW | spree/core/app/models/spree/base.rb | 101 | # Resolves against `available_types` where the class defines it, so an | COMMENT |
| LOW | spree/core/app/models/spree/adjustment.rb | 1 | # Adjustments represent a change to the +item_total+ of an Order. Each adjustment | COMMENT |
| LOW | spree/core/app/models/spree/allowed_origin.rb | 61 | # @return [Boolean] | COMMENT |
| LOW | spree/core/app/models/spree/metafield.rb | 41 | belongs_to :metafield_definition, class_name: 'Spree::MetafieldDefinition' | COMMENT |
| LOW | spree/core/app/models/spree/custom_field.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/stock_item.rb | 81 | # Units already allocated to pending shipments at this stock item. | COMMENT |
| LOW | spree/core/app/models/spree/product.rb | 1 | # PRODUCTS | COMMENT |
| LOW | spree/core/app/models/spree/product.rb | 241 | end | COMMENT |
| LOW | spree/core/app/models/spree/rich_text_sanitizer.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spree/core/app/models/spree/api_key.rb | 121 | COMMENT | |
| LOW | spree/core/app/models/spree/current.rb | 41 | # Returns the locale that base (untranslated) record columns are authored | COMMENT |
| LOW | spree/core/app/models/spree/order_routing_rule.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/reimbursement.rb | 41 | # The reimbursement_models property should contain an array of all models that provide | COMMENT |
| LOW | spree/core/app/models/spree/setup_tasks.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/export.rb | 21 | # | COMMENT |
| LOW | spree/core/app/models/spree/export.rb | 41 | # | COMMENT |
| LOW | spree/core/app/models/spree/market.rb | 101 | countries.map(&:iso).compact.sort | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 21 | # class OrderAuditLogger < Spree::Subscriber | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 41 | # | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 61 | # # Handle payment refund | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 81 | # @return [void] | COMMENT |
| LOW | spree/core/app/models/spree/subscriber.rb | 101 | # @param method_name [Symbol] Method to call for this event | COMMENT |
| LOW | spree/core/app/models/spree/payment_response.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/ability.rb | 1 | # Implementation class for Cancan gem. Permissions are configured through | COMMENT |
| LOW | spree/core/app/models/spree/payment_method.rb | 61 | COMMENT | |
| LOW | spree/core/app/models/spree/payment_method.rb | 81 | # - Transition payment session to completed/failed | COMMENT |
| LOW | spree/core/app/models/spree/import.rb | 41 | validate :ensure_attachment_content_type | COMMENT |
| LOW | spree/core/app/models/spree/import.rb | 101 | # and the console, where the caller needs the data to exist when the call | COMMENT |
| LOW | spree/core/app/models/spree/import.rb | 121 | # validated against the store's allowed origins — the import-done email | COMMENT |
| LOW | spree/core/app/models/spree/import.rb | 421 | COMMENT | |
| LOW | spree/core/app/models/spree/price_list.rb | 41 | end | COMMENT |
| LOW | spree/core/app/models/spree/event.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spree/core/app/models/spree/gateway.rb | 1 | module Spree | COMMENT |
| LOW | …pp/models/spree/promotion/actions/create_line_items.rb | 21 | COMMENT | |
| LOW | …pp/models/spree/promotion/actions/create_line_items.rb | 41 | # - Promo adds 1 item A to cart if order total greater then $30 | COMMENT |
| LOW | spree/core/app/models/spree/order/payments.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/permission_sets/base.rb | 1 | # Base class for all permission sets. | COMMENT |
| LOW | spree/core/app/models/spree/permission_sets/base.rb | 41 | # Delegates the `can` method to the ability instance. | COMMENT |
| LOW | …dels/spree/permission_sets/configuration_management.rb | 1 | # Permission set for managing store configuration and settings. | COMMENT |
| LOW | spree/core/app/models/spree/search_provider/base.rb | 21 | # Search and paginate products. Does NOT compute filter facets — use #filters for that. | COMMENT |
| LOW | spree/core/app/models/spree/search_provider/base.rb | 61 | # | COMMENT |
| LOW | spree/core/app/models/spree/promotion_handler/cart.rb | 1 | module Spree | COMMENT |
| LOW | …item/exchange_variant_eligibility/same_option_value.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/models/spree/checkout/requirements.rb | 1 | module Spree | COMMENT |
| 225 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | spree/core/app/models/spree/payment_method.rb | 142 | self.class.name.demodulize.titleize.gsub(/Gateway/, '').strip | CODE |
| CRITICAL⚡ | …dels/spree/calculator/returns/default_refund_amount.rb | 22 | inventory_unit.order.adjustments.eligible.non_tax.sum(:amount) * percentage_of_order_total(return_item) | CODE |
| CRITICAL | spree/core/app/models/spree/taxon_rules/available_on.rb | 8 | date = value.to_i.days.ago.beginning_of_day.in_time_zone(timezone) | CODE |
| CRITICAL | …ript/spree/core/controllers/address_form_controller.js | 51 | this.stateLabelTarget.parentNode.parentNode.classList.remove('hidden') | CODE |
| CRITICAL | spree/core/config/initializers/active_storage.rb | 1 | Rails.application.config.active_storage.content_types_to_serve_as_binary.delete('image/svg+xml') | CODE |
| CRITICAL | spree/core/spec/models/spree/order_spec.rb | 2879 | order.line_items.first.variant.stock_items.update_all(count_on_hand: 0, backorderable: false) | CODE |
| CRITICAL | spree/core/spec/services/spree/carts/update_spec.rb | 570 | order.line_items.first.variant.stock_items.first.set_count_on_hand(20) | CODE |
| CRITICAL | spree/core/spec/services/spree/carts/update_spec.rb | 615 | order.line_items.first.variant.stock_items.first.set_count_on_hand(2) | CODE |
| CRITICAL⚡ | spree/admin/app/javascript/spree/admin/application.js | 196 | Turbo.navigator.delegate.adapter.progressBar.setValue(0) | CODE |
| CRITICAL⚡ | spree/admin/app/javascript/spree/admin/application.js | 197 | Turbo.navigator.delegate.adapter.progressBar.show() | CODE |
| CRITICAL⚡ | spree/admin/app/javascript/spree/admin/application.js | 200 | Turbo.navigator.delegate.adapter.progressBar.setValue(1) | CODE |
| CRITICAL⚡ | spree/admin/app/javascript/spree/admin/application.js | 201 | Turbo.navigator.delegate.adapter.progressBar.hide() | CODE |
| CRITICAL | …ipt/spree/admin/controllers/address_form_controller.js | 51 | this.stateLabelTarget.parentNode.parentNode.classList.remove('hidden') | CODE |
| CRITICAL | …/controllers/concerns/spree/admin/analytics_concern.rb | 16 | 1.month.ago.end_of_day.to_date.in_time_zone(current_timezone) | CODE |
| CRITICAL | …/controllers/concerns/spree/admin/analytics_concern.rb | 22 | Time.zone.now.beginning_of_day.to_date.in_time_zone(current_timezone) | CODE |
| CRITICAL | …ontrollers/spree/api/v3/store/carts_controller_spec.rb | 449 | cart.line_items.first.variant.stock_items.update_all(count_on_hand: 0, backorderable: false) | CODE |
| CRITICAL | …ontrollers/spree/api/v3/store/carts_controller_spec.rb | 475 | cart.line_items.first.variant.stock_items.update_all(count_on_hand: 0, backorderable: false) | CODE |
| CRITICAL | …ontrollers/spree/api/v3/store/carts_controller_spec.rb | 702 | order.line_items.first.variant.stock_items.first.set_count_on_hand(20) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 36 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 38 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 55 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 57 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 79 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 81 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 129 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 131 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 199 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 201 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 224 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 226 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 266 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 268 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 289 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 291 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 421 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 423 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 459 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 461 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 487 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 489 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 513 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 515 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 539 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 541 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 569 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 571 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 603 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 605 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 632 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 634 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …ee/admin/config/initializers/spree_admin_navigation.rb | 5 | # =============================================== | COMMENT |
| MEDIUM⚡ | …ee/admin/config/initializers/spree_admin_navigation.rb | 7 | # =============================================== | COMMENT |
| MEDIUM | …ee/admin/config/initializers/spree_admin_navigation.rb | 213 | # =============================================== | COMMENT |
| MEDIUM | …ee/admin/config/initializers/spree_admin_navigation.rb | 215 | # =============================================== | COMMENT |
| MEDIUM | …ee/admin/config/initializers/spree_admin_navigation.rb | 374 | # =============================================== | COMMENT |
| MEDIUM | …ee/admin/config/initializers/spree_admin_navigation.rb | 376 | # =============================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1281 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1283 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1359 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1361 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1433 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1435 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1493 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1495 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1554 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1556 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1615 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1617 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1662 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1664 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1705 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1707 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1740 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1742 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1775 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1777 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1788 | # ========================================== | COMMENT |
| MEDIUM | spree/admin/config/initializers/spree_admin_tables.rb | 1790 | # ========================================== | COMMENT |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spree/core/app/models/spree/legacy_admin_user.rb | 2 | # This class is separate from LegacyUser to support distinct customer vs staff models. | COMMENT |
| MEDIUM | spree/core/app/models/spree/invitation.rb | 105 | # This method is kept for backwards compatibility. | COMMENT |
| MEDIUM | spree/core/app/models/spree/refresh_token.rb | 34 | # Create a refresh token for a user | COMMENT |
| MEDIUM | spree/core/app/models/spree/webhook_delivery.rb | 89 | # Create a new delivery with the same payload and queue it. | COMMENT |
| MEDIUM | …/models/concerns/spree/translatable_resource_scopes.rb | 7 | # This method is to be used when you've already joined on the translatable table itself | COMMENT |
| MEDIUM | spree/core/spec/spec_helper.rb | 39 | # This file is copied to ~/spec when you run 'ruby script/generate rspec' | COMMENT |
| MEDIUM | …/core/spec/models/spree/shipment/custom_events_spec.rb | 43 | # Create a second shipment that won't be shipped | COMMENT |
| MEDIUM | …/spec/models/concerns/spree/has_image_alt_text_spec.rb | 4 | # Create a dummy class to test the concern | COMMENT |
| MEDIUM | spree/core/lib/spree/core.rb | 210 | # This method is defined within the core gem on purpose. | COMMENT |
| MEDIUM | spree/core/lib/spree/core.rb | 226 | # This method is defined within the core gem on purpose. | COMMENT |
| MEDIUM | spree/core/lib/spree/events.rb | 10 | # This module provides a clean API for publishing events and subscribing | COMMENT |
| MEDIUM | spree/core/lib/spree/events.rb | 109 | # This method is idempotent - calling it multiple times has no effect | COMMENT |
| MEDIUM | …/spree/events/adapters/active_support_notifications.rb | 92 | # Create a single AS::N subscription that catches all Spree events | COMMENT |
| MEDIUM | spree/emails/spec/spec_helper.rb | 30 | # This file is copied to ~/spec when you run 'ruby script/generate rspec' | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/navigation.rb | 163 | # Create a section header item | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 18 | # Create a text field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 50 | # Create a number field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 71 | # Create a money/currency field with Spree form styling and locale-aware formatting | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 133 | # Create an email field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 147 | # Create a date field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 161 | # Create a datetime field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 175 | # Create a textarea with Spree form styling and auto-grow functionality | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 196 | # Create a rich text area (Trix editor) with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 211 | # Create a select field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 236 | # Create a collection select field with Spree form styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 262 | # Create a checkbox with Spree custom control styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 277 | # Create a radio button with Spree custom control styling | COMMENT |
| MEDIUM | spree/admin/app/models/spree/admin/form_builder.rb | 298 | # Create a direct file upload field with Spree form styling | COMMENT |
| MEDIUM | …min/app/controllers/spree/admin/payments_controller.rb | 98 | # This method is overridden because we don't want order to have invalid payment since we are doing `order.next` | COMMENT |
| MEDIUM | …ee/admin/app/helpers/spree/admin/bulk_editor_helper.rb | 4 | # Define the cell actions using Stimulus keyboard event filters | COMMENT |
| MEDIUM⚡ | …ee/admin/config/initializers/spree_admin_navigation.rb | 2 | # This file defines the default sidebar and settings navigation for Spree Admin | COMMENT |
| MEDIUM | spree/admin/spec/spec_helper.rb | 29 | # This file is copied to ~/spec when you run 'ruby script/generate rspec' | COMMENT |
| MEDIUM | …/admin/spec/models/spree/admin/navigation/item_spec.rb | 171 | # Create a child without active_condition so it will check its own children | COMMENT |
| MEDIUM | …n/spec/helpers/spree/admin/json_preview_helper_spec.rb | 92 | # Create a mock model that doesn't have a serializer | COMMENT |
| MEDIUM | spree/dashboard/spec/spec_helper.rb | 30 | # This file is copied to ~/spec when you run 'ruby script/generate rspec' | COMMENT |
| MEDIUM | spree/api/spec/spec_helper.rb | 25 | # This file is copied to spec/ when you run 'rails generate rspec:install' | COMMENT |
| MEDIUM | …pi/spec/integration/spree/api/v3/admin/markets_spec.rb | 258 | # Create a second market so the target isn't the last one in the store. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 56 | Then connect the [docs MCP server](https://spreecommerce.org/docs/developer/agentic/mcp) and let your agent build with y | CODE |
| MEDIUM | README.md | 87 | * **[Agentic Development](https://spreecommerce.org/docs/developer/agentic/overview)** — [25 agent skills](https://githu | COMMENT |
| MEDIUM | docs/plans/5.5-agent-skills.md | 26 | - **Distribution channel is the [`skills`](https://github.com/vercel-labs/skills) CLI** (`npx skills add spree/agent-ski | CODE |
| MEDIUM | docs/plans/5.6-project-layout-and-dashboard.md | 200 | // scaffold.ts (excerpt — new phase 2b: dashboard) | COMMENT |
| MEDIUM | docs/plans/5.6-project-layout-and-dashboard.md | 499 | ### Phase 5: Add dashboard scaffolding to create-spree-app *(implemented)* | COMMENT |
| MEDIUM | …enerators/spree/api_resource/api_resource_generator.rb | 6 | # spree:api_resource — scaffold a complete v3-conformant API resource on | COMMENT |
| MEDIUM | …ib/generators/spree/subscriber/subscriber_generator.rb | 4 | # spree:subscriber — scaffold an event subscriber and register it. | COMMENT |
| MEDIUM | …/spree/api/v3/admin/translations/batches_controller.rb | 27 | # The orchestration (resolve → upsert → rollback) lives in | COMMENT |
| MEDIUM | packages/dashboard-starter/README.md | 5 | > **Monorepo note.** The canonical source of this template lives at `packages/dashboard-starter` in [spree/spree](https: | CODE |
| MEDIUM | packages/cli/src/context.ts | 40 | // scaffold to mount THIS dir (`./backend:/rails`). The rewrite lands in the | COMMENT |
| MEDIUM | packages/cli/src/commands/init.ts | 54 | // operator gave at scaffold time. Load sample data later any time with | COMMENT |
| MEDIUM | packages/cli/src/commands/init.ts | 192 | // clone, or a scaffold whose install step failed — mirroring | COMMENT |
| MEDIUM | packages/cli/src/commands/dev.ts | 62 | // scaffold, a fresh clone) without requiring anyone to run `spree init`. | COMMENT |
| MEDIUM | packages/cli/src/commands/plugin.ts | 415 | // Post-scaffold install + banner | COMMENT |
| MEDIUM | packages/cli/src/commands/add.ts | 72 | // repair a broken one (old scaffold output) — one gatekeeper for both. | COMMENT |
| MEDIUM | packages/cli/src/commands/add.ts | 184 | // cookie. A localhost value can only be that scaffold output, never a real | COMMENT |
| MEDIUM | packages/create-spree-app/tests/scaffold.test.ts | 299 | // scaffold calls process.exit(1) for non-empty dirs, so we mock it | COMMENT |
| MEDIUM | packages/create-spree-app/src/scaffold.ts | 114 | // must never abort the scaffold before Phase 4: `spree init` is what | COMMENT |
| MEDIUM | packages/create-spree-app/src/scaffold.ts | 156 | // Remove the partial scaffold so the recovery command (`spree add | COMMENT |
| MEDIUM | packages/create-spree-app/src/dashboard.ts | 18 | // --quiet: the scaffold's own summary cards cover the dashboard — the | COMMENT |
| MEDIUM | packages/create-spree-app/src/templates/package-json.ts | 34 | // The floor matches the CLI behavior this scaffold relies on (the | COMMENT |
| MEDIUM | .github/CONTRIBUTING.md | 470 | We also ship [agent skills](https://spreecommerce.org/docs/developer/agentic/agent-skills) (`npx skills add spree/agent- | CODE |
| MEDIUM | .github/workflows/packages.yml | 334 | # npm would ship a scaffold whose install fails until the dashboard | COMMENT |
| MEDIUM | .github/workflows/packages.yml | 483 | # Gated on release-cli: the dashboard scaffold phase delegates to the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spree/core/app/models/spree/product.rb | 672 | # Check if the product is digital by checking if any of its shipping methods are digital delivery | COMMENT |
| LOW | spree/core/app/models/spree/webhook_endpoint.rb | 52 | # Check if this endpoint is subscribed to a specific event | COMMENT |
| LOW | spree/core/app/models/spree/webhook_endpoint.rb | 113 | # Check if the endpoint was auto-disabled | COMMENT |
| LOW | spree/core/app/models/spree/webhook_endpoint.rb | 120 | # Check if auto-disable threshold has been reached | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 466 | # Check if the shipping address is a quick checkout address | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 474 | # Check if quick checkout is available for this order | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 481 | # Check if quick checkout requires an address collection | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 29 | # Check if the delivery was successful | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 36 | # Check if the delivery failed | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 43 | # Check if the delivery is pending | COMMENT |
| LOW | spree/core/app/models/spree/stock/quantifier.rb | 86 | # Check if any of variant stock items is backorderable | COMMENT |
| LOW | spree/core/app/models/concerns/spree/publishable.rb | 114 | # Check if a parent class has an explicitly set prefix | COMMENT |
| LOW | …/core/app/services/spree/taxons/regenerate_products.rb | 41 | # Check if taxon still exists (may have been destroyed) | COMMENT |
| LOW | …/spree/promotion_handler/coupon_with_gift_card_spec.rb | 128 | # Set total to less than the gift card payment amount | COMMENT |
| LOW | spree/core/lib/spree/events.rb | 183 | # Check if events are enabled | COMMENT |
| LOW | spree/core/lib/spree/events.rb | 212 | # Check if automatic lifecycle events (*.created/updated/deleted) are enabled | COMMENT |
| LOW | spree/core/lib/spree/core/dependencies_helper.rb | 60 | # Check if a specific dependency has been overridden | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation.rb | 68 | # Check if item exists | COMMENT |
| LOW⚡ | spree/admin/app/models/spree/admin/table.rb | 25 | # Check if date range filter is enabled | COMMENT |
| LOW⚡ | spree/admin/app/models/spree/admin/table.rb | 31 | # Check if row actions are enabled | COMMENT |
| LOW⚡ | spree/admin/app/models/spree/admin/table.rb | 37 | # Check if edit row action is enabled | COMMENT |
| LOW⚡ | spree/admin/app/models/spree/admin/table.rb | 43 | # Check if delete row action is enabled | COMMENT |
| LOW | spree/admin/app/models/spree/admin/table.rb | 103 | # Check if column exists | COMMENT |
| LOW | spree/admin/app/models/spree/admin/table.rb | 251 | # Check if bulk operations are enabled (has any bulk actions) | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation/item.rb | 26 | # Check if this item should be visible for the given user/context | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation/item.rb | 45 | # Check if this item is active based on current path | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation/item.rb | 62 | # Check if any child item is active | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation/item.rb | 123 | # Check if this is a section header | COMMENT |
| LOW | spree/admin/app/models/spree/admin/table/column.rb | 70 | # Check if column uses custom sort scopes instead of ransack | COMMENT |
| LOW | spree/admin/app/models/spree/admin/table/visibility.rb | 8 | # Check if component is visible for the given context | COMMENT |
| LOW | spree/admin/app/models/spree/admin/table/filter.rb | 79 | # Check if this operator requires a value | COMMENT |
| LOW | …ee/admin/app/models/spree/admin/table/query_builder.rb | 37 | # Check if there are any filters | COMMENT |
| LOW | …ree/admin/app/models/spree/admin/table/filter_group.rb | 40 | # Check if group is empty | COMMENT |
| LOW | …/app/controllers/concerns/spree/admin/table_concern.rb | 32 | # Check if a table is registered for this controller | COMMENT |
| LOW | …/app/controllers/concerns/spree/admin/table_concern.rb | 55 | # Check if current sort uses a custom scope | COMMENT |
| LOW | spree/admin/lib/spree/admin/engine.rb | 169 | # Check if a context exists | COMMENT |
| LOW | spree/admin/lib/spree/admin/engine.rb | 235 | # Check if a table is registered | COMMENT |
| LOW | …ee/api/app/serializers/spree/api/v3/base_serializer.rb | 51 | # Check if an association should be expanded | COMMENT |
| LOW | …/app/controllers/concerns/spree/api/v3/http_caching.rb | 20 | # Check if the current user is a guest (no authentication) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/controllers/spree/admin/gift_cards_controller_spec.rb | 204 | it 'creates a gift card with an auto-generated code' do | CODE |
| HIGH | packages/dashboard/e2e/gift-cards.spec.ts | 29 | test('creates a gift card with an auto-generated code', async ({ page }) => { | CODE |
| HIGH | packages/dashboard/e2e/gift-cards.spec.ts | 39 | // Auto-generated code is uppercase hex; just confirm a row with the | COMMENT |
| HIGH | packages/dashboard/src/locales/en.json | 717 | "help": "1 issues a single card. More than 1 issues a batch with auto-generated codes." | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 951 | "description": "Auto-generated codes for this promotion. Read-only — regenerate by changing the promotion's numb | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 952 | "description_with_count": "{{count}} auto-generated codes. Read-only — regenerate by changing the promotion's nu | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 1692 | "create_description": "Issue a single gift card or generate a batch with auto-generated codes.", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/plans/5.4-metafield-translations.md | 261 | ### Step 1: Migration | COMMENT |
| LOW⚡ | docs/plans/5.4-metafield-translations.md | 295 | ### Step 2: Model changes | COMMENT |
| LOW⚡ | docs/plans/5.4-metafield-translations.md | 302 | ### Step 3: Serializer changes | COMMENT |
| LOW⚡ | docs/plans/5.4-metafield-translations.md | 308 | ### Step 4: Controller changes | COMMENT |
| LOW⚡ | docs/plans/5.4-metafield-translations.md | 314 | ### Step 5: Tests | COMMENT |
| LOW | packages/dashboard-core/src/hooks/use-direct-upload.ts | 59 | // Step 1: Get presigned upload URL | COMMENT |
| LOW | packages/dashboard-core/src/hooks/use-direct-upload.ts | 77 | // Step 2: Upload file directly to storage. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spree/core/spec/models/spree/tax_rate_spec.rb | 129 | # henceforth a net price and will not change. | COMMENT |
| MEDIUM | spree/core/lib/spree/core/controller_helpers/store.rb | 41 | # (to facilitate differing prices depending on VAT rate for digital products in Europe, see | COMMENT |
| LOW | spree/admin/app/models/spree/admin/navigation.rb | 21 | # Support both block styles: |nav| nav.add or just add | COMMENT |
| LOW | …ree/admin/app/models/spree/admin/navigation/builder.rb | 32 | # Support both block styles: |nav| nav.add or just add | COMMENT |
| MEDIUM | …ee/admin/controllers/autocomplete_select_controller.js | 7 | // that scenarios are handled in the more robust select_controller.js | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spree/core/config/i18n-tasks.yml | 169 | ## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.: | COMMENT |
| MEDIUM | spree/core/lib/spree/core.rb | 234 | # you can use Spree.payment_methods | COMMENT |
| MEDIUM | spree/admin/config/i18n-tasks.yml | 185 | ## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.: | COMMENT |
| LOW | spree/lib/generators/spree/install/install_generator.rb | 91 | say_status :skipping, "migrations (don't forget to run rake db:migrate)" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spree/core/app/models/concerns/spree/user_roles.rb | 6 | has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, as: :user, dependent: :destroy_async # | CODE |
| LOW | …/core/app/services/spree/products/auto_match_taxons.rb | 12 | # we need to check if existing taxons still match | COMMENT |
| LOW | …/core/app/services/spree/products/auto_match_taxons.rb | 21 | # we need to check if product matches any existing taxons | COMMENT |
| LOW | packages/dashboard-core/src/hooks/use-direct-upload.ts | 59 | // Step 1: Get presigned upload URL | COMMENT |
| LOW | packages/dashboard-core/src/hooks/use-direct-upload.ts | 77 | // Step 2: Upload file directly to storage. | COMMENT |