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.
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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 1751 finding(s).
Are imports declared and package/API names verified? 1243 finding(s).
Are wrappers, guards, and repeated structures necessary? 468 finding(s).
Which changes need focused human review? 3029 finding(s).
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.
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.
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.
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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pnpm-workspace.yaml | 1 | packages: | COMMENT |
| LOW | pnpm-workspace.yaml | 81 | # upstream releases for a full week. | COMMENT |
| LOW | pnpm-workspace.yaml | 101 | # chokidar 4.0.3 — via tsup | COMMENT |
| LOW | pnpm-workspace.yaml | 121 | # npm_and_yarn updater chokes on pnpm's `workspace:` protocol during | COMMENT |
| LOW | pnpm-workspace.yaml | 141 | '@base-ui/utils': 0.4.0 | COMMENT |
| LOW | .config/wt.toml | 1 | # worktrunk project config — see CLAUDE.md "Worktrees" and scripts/worktree/. | 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 | 41 | COMMENT | |
| LOW | docs/plans/6.0-tax-provider.md | 261 | # Customer (durable profile value), Company (the entity's registration, | COMMENT |
| LOW | docs/plans/6.0-tax-provider.md | 381 | # app/models/spree/tax_identifier/validation_result.rb | COMMENT |
| LOW | docs/plans/6.0-tax-provider.md | 661 | # require a connected Integration. | COMMENT |
| LOW | docs/plans/6.0-tax-provider.md | 681 | # @param context [Hash] untyped provider extras from set_tax_line_context | COMMENT |
| LOW | docs/plans/6.0-tax-provider.md | 801 | ```ruby | COMMENT |
| LOW | docs/plans/6.0-returns-exchanges-claims.md | 881 | **Resumption needs no cursor.** The legacy `number` carries onto the new | COMMENT |
| LOW | docs/plans/6.0-multi-vendor-marketplace.md | 301 | has_many :products, class_name: 'Spree::Product', dependent: :nullify | COMMENT |
| LOW | docs/plans/6.0-multi-vendor-marketplace.md | 321 | # nil ⇒ store default (store preference), matching today's | COMMENT |
| LOW | docs/plans/6.0-multi-vendor-marketplace.md | 501 | # include_shipping : bool — also commission the seller order's delivery amounts | COMMENT |
| LOW | docs/plans/6.0-multi-vendor-marketplace.md | 661 | end | COMMENT |
| LOW | docs/plans/6.0-b2b-quantity-rules.md | 201 | is not yet met. | COMMENT |
| LOW | docs/plans/5.6-admin-spa-csv-import.md | 161 | render json: serialize_resource(@resource), status: :created | 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 | 181 | include Spree::Metadata | COMMENT |
| LOW | docs/plans/6.0-replace-taxons-with-categories.md | 621 | # rake spree:migrate_taxons_to_categories_and_collections | COMMENT |
| LOW | docs/plans/6.0-replace-taxons-with-categories.md | 641 | # childless after step 1 (keep non-empty roots as top-level categories), then | COMMENT |
| LOW | spree/template.rb | 1 | require 'shellwords' | COMMENT |
| LOW | …nce_tasks/spree/maintenance_tasks/upgrade/rake_step.rb | 21 | COMMENT | |
| LOW | …ree/core/app/tools/spree/agent_tools/resource_write.rb | 1 | module Spree | COMMENT |
| LOW | …/app/tools/spree/agent_tools/propose_import_mapping.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/create_import.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/upload_file.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/create_export.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/query_report.rb | 81 | # granted `read_reports` and `read_orders` could group by the product | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/import_tool.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/tools/spree/agent_tools/import_tool.rb | 41 | # including its reads. An import is not the resource: it is whatever | COMMENT |
| LOW | spree/core/app/mailers/spree/base_mailer.rb | 101 | end | COMMENT |
| LOW | spree/core/app/mailers/spree/email_template_mailer.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 21 | # carrying customer-identifiable data extends this flow in the same | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 121 | COMMENT | |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 181 | # their street address sitting in the database, and erasure has to reach | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 201 | # | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 261 | COMMENT | |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 281 | purchases_about_person(model, customer, email: @original_email) | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 381 | COMMENT | |
| LOW | spree/core/app/workflows/spree/customers/anonymize.rb | 461 | COMMENT | |
| LOW | spree/core/app/workflows/spree/customers/create.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/create.rb | 21 | # The customer record — built (unsaved) while :validate runs. | COMMENT |
| LOW | spree/core/app/workflows/spree/customers/create.rb | 181 | # created directly was agreed to at registration. | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/fulfill.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/fulfill.rb | 21 | class Fulfill < Spree::Workflow | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/fulfill.rb | 61 | # a split the shelf check refused. | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/fulfill.rb | 141 | # paid-in-full guard denied it: `paid?` requires a positive total, so | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/fulfill.rb | 161 | # that would take it below zero is one of two things, and only the | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/cancel.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/create.rb | 1 | module Spree | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/create.rb | 21 | # that parcel holds. | COMMENT |
| LOW | spree/core/app/workflows/spree/fulfillments/create.rb | 41 | COMMENT | |
| LOW | spree/core/app/workflows/spree/fulfillments/update.rb | 1 | module Spree | COMMENT |
| LOW | …ore/app/workflows/spree/fulfillments/mark_delivered.rb | 1 | module Spree | COMMENT |
| 1161 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/prototype/SKILL.md | 21 | 3. **Every variant fully works.** Real interactions, real motion, realistic content — actual product-shaped copy, plausi | CODE |
| LOW | docs/plans/5.5-admin-customers-api.md | 201 | "address1": "123 Main St", | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 505 | "code": { "label": "Code", "placeholder": "SUMMER2026" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 508 | "usage_limit": { "label": "Usage limit", "placeholder": "Unlimited" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 511 | "promotion": { "name": { "label": "Name", "placeholder": "Summer Sale" } }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 514 | "stock_location": { "name": { "label": "Name", "placeholder": "Brooklyn warehouse" }, | CODE |
| LOW⚡ | docs/plans/6.0-admin-spa.md | 515 | "admin_name": { "label": "Internal name", "placeholder": "Optional — shown only in the admin" | CODE |
| LOW | docs/plans/decisions.md | 3396 | ("Acme" / "Acme Ltd" / "ACME Limited"), so the backfill into real Company | CODE |
| LOW | docs/api-reference/store.yaml | 3042 | address1: '123 Main St', | CODE |
| LOW | docs/api-reference/store.yaml | 7291 | 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 | spree/core/app/models/spree/gateway/bogus.rb | 14 | preference :dummy_key, :string, default: 'PUBLICKEY123' | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 187 | [: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⚡ | …/core/spec/mailers/spree/email_template_mailer_spec.rb | 9 | mail = described_class.test_email(store, 'admin@example.com', editable_key, | CODE |
| LOW⚡ | …/core/spec/mailers/spree/email_template_mailer_spec.rb | 13 | expect(mail.to).to eq(['admin@example.com']) | CODE |
| LOW⚡ | …/core/spec/mailers/spree/email_template_mailer_spec.rb | 20 | mail = described_class.test_email(store, 'admin@example.com', editable_key, branding: { card_color: '#123456' }) | CODE |
| LOW | …/core/spec/workflows/spree/customers/anonymize_spec.rb | 201 | first_name: 'Dana', last_name: 'Reyes', phone: '555-0100'). | CODE |
| LOW | spree/core/spec/models/spree/user_identity_spec.rb | 82 | email: 'user@example.com', | CODE |
| LOW | spree/core/spec/models/spree/user_identity_spec.rb | 116 | expect(user.email).to eq('user@example.com') | CODE |
| LOW | spree/core/spec/models/spree/cart_spec.rb | 291 | expect(cart.name).to eq('John Doe') | CODE |
| LOW | spree/core/spec/models/spree/order_spec.rb | 143 | it { is_expected.to eq('John Doe') } | CODE |
| LOW | …core/spec/models/spree/customer_standing_scope_spec.rb | 5 | let!(:parent) { create(:company, store: store, name: 'Acme Corp') } | CODE |
| LOW | spree/core/spec/models/spree/payment_method_spec.rb | 515 | expect(gateway.reload.options).to include(dummy_secret_key: 'sk_live_secret', dummy_key: 'PUBLICKEY123') | CODE |
| LOW | spree/core/spec/models/spree/user_spec.rb | 11 | expect(user.full_name).to eq('John Doe') | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 698 | address.update!(phone: '555-0000', first_name: 'Other') | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 868 | address1: '123 Main St', | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 871 | phone: '555-1234', | CODE |
| LOW | spree/core/spec/models/spree/address_spec.rb | 1042 | country_code: 'US', phone: '555-1212', alternative_phone: '555-1213' } | 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 | 66 | allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(user) | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 104 | allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(bare_user) | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 115 | allow(strategy).to receive(:find_user_by_email).with('user@example.com').and_return(partial_user) | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 147 | let(:params) { { email: 'user@example.com', password: '' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 158 | let(:params) { { email: 'user@example.com' } } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 185 | let(:admin_user) { create(:admin_user, email: 'admin@example.com', password: 'admin123') } | CODE |
| LOW | …hentication/strategies/email_password_strategy_spec.rb | 186 | let(:params) { { email: 'admin@example.com', password: 'admin123' } } | 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 | 31 | expect(admin_user.full_name).to eq('John Doe') | CODE |
| LOW | …c/models/concerns/spree/ransackable_attributes_spec.rb | 43 | 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.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 | spree/core/spec/lib/tasks/preferences_json_spec.rb | 68 | id = insert_row(YAML.dump({ dummy_key: 'pk_1', dummy_secret_key: 'sk_live_1' }), type: 'Spree::Gateway::Bogus') | CODE |
| LOW | spree/core/spec/lib/tasks/preferences_json_spec.rb | 72 | expect(column(id, 'preferences_json')).to eq('dummy_key' => 'pk_1') | CODE |
| LOW | spree/core/spec/lib/tasks/preferences_json_spec.rb | 188 | "UPDATE spree_payment_methods SET preferences = #{connection.quote({ dummy_key: 'pk_1', dummy_secret_key: 'sk_le | CODE |
| LOW | …/db/migrate/rename_metafields_to_custom_fields_spec.rb | 28 | resource: product, custom_field_definition: definition, value: 'placeholder' | CODE |
| LOW | …/subscribers/spree/admin_user_email_subscriber_spec.rb | 7 | let(:admin_user) { create(:admin_user, email: 'admin@example.com') } | CODE |
| LOW | …core/spec/services/spree/customers/data_export_spec.rb | 170 | address.update_columns(alternative_phone: '555-0100', latitude: 51.52, longitude: -0.15) | CODE |
| LOW | …core/spec/services/spree/customers/data_export_spec.rb | 174 | expect(exported[:alternative_phone]).to eq('555-0100') | CODE |
| 1165 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/plans/5.5-6.0-resource-translations-api.md | 88 | 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 | 176 | def ensure_default_action_mailer_url_host(store_url = nil) | CODE |
| LOW | …/core/app/workflows/spree/fulfillments/replacements.rb | 49 | def allocate_replacement_stock(fulfillment) | CODE |
| LOW | spree/core/app/workflows/spree/fulfillments/create.rb | 290 | def destroy_drained_shipments(source_shipments, capture_delivery_method:) | CODE |
| LOW | spree/core/app/workflows/spree/carts/complete.rb | 381 | def report_unmatched_override(override) | CODE |
| LOW | …e/core/app/workflows/spree/carts/recalculate_totals.rb | 232 | def update_adjustable_columns(adjustable, attributes) | CODE |
| LOW | …ree/core/app/workflows/spree/refunds/order_payments.rb | 41 | def issue_refund_store_credit(order:, amount:, record:, memo:, refunder: nil) | CODE |
| LOW | …ore/app/workflows/spree/returns/returnable_quantity.rb | 38 | def ensure_returnable_quantities(items, action:) | CODE |
| LOW | spree/core/app/workflows/spree/orders/complete.rb | 142 | def allocate_fulfillment_stock(fulfillment) | CODE |
| LOW | spree/core/app/models/spree/payment.rb | 428 | def add_gateway_processing_error(error_message) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 144 | def compare_at_price_including_vat_for(_price_options = {}) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 150 | def display_price_including_vat_for(_price_options = {}) | CODE |
| LOW⚡ | spree/core/app/models/spree/price.rb | 156 | 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/store_credit_category.rb | 29 | def default_reimbursement_category(options = {}) | CODE |
| LOW | spree/core/app/models/spree/product.rb | 745 | def variants_and_option_values(current_currency = nil) | CODE |
| LOW | spree/core/app/models/spree/product.rb | 988 | def preferred_default_variant(reload: false) | CODE |
| LOW | spree/core/app/models/spree/seller.rb | 340 | def set_payout_account_reference(provider, account_reference) | CODE |
| LOW | spree/core/app/models/spree/current.rb | 184 | def quantity_rules_resolver_for(company: nil, user: nil, channel: nil) | CODE |
| LOW | spree/core/app/models/spree/export.rb | 251 | def decode_prefixed_id_filters(params) | CODE |
| LOW | spree/core/app/models/spree/store_credit.rb | 280 | def create_credit_record_params(amount) | CODE |
| LOW | spree/core/app/models/spree/order.rb | 414 | def promotion_actions_of_scope(scope) | CODE |
| LOW | spree/core/app/models/spree/order.rb | 1220 | def valid_order_routing_strategy_class(klass_name) | CODE |
| LOW | spree/core/app/models/spree/fulfillment_changer.rb | 108 | def get_desired_shipment_inventory_unit(state) | CODE |
| LOW | spree/core/app/models/spree/payment_session.rb | 114 | def apply_settlement_metadata(payment, metadata) | CODE |
| LOW⚡ | spree/core/app/models/spree/payment_method.rb | 219 | def create_payment_setup_session(customer:, external_data: {}) | CODE |
| LOW⚡ | spree/core/app/models/spree/payment_method.rb | 225 | def complete_payment_setup_session(setup_session:, params: {}) | CODE |
| LOW | spree/core/app/models/spree/import_row.rb | 74 | def attribute_by_schema_field(schema_field, mappings = nil) | CODE |
| LOW | spree/core/app/models/spree/import_mapping.rb | 34 | def try_to_auto_assign_file_column(csv_headers) | CODE |
| LOW | spree/core/app/models/spree/store.rb | 631 | def states_available_for_checkout(country) | CODE |
| LOW | spree/core/app/models/spree/store.rb | 781 | def translate_with_store_locale_fallback(key) | CODE |
| LOW | spree/core/app/models/spree/price_list.rb | 244 | def adjustment_percentage_for(quantity = nil) | CODE |
| LOW | spree/core/app/models/spree/digital_asset.rb | 66 | def effective_authorized_clicks(store = self.store) | CODE |
| LOW | spree/core/app/models/spree/digital_asset.rb | 72 | def effective_authorized_days(store = self.store) | CODE |
| LOW | spree/core/app/models/spree/line_item.rb | 422 | def update_price_from_modifier(currency, opts) | CODE |
| LOW | spree/core/app/models/spree/gateway.rb | 45 | def gateway_dashboard_payment_url(_payment) | CODE |
| LOW | spree/core/app/models/spree/promotion/rules/category.rb | 154 | def category_ids_in_order_including_ancestors(order) | CODE |
| LOW | spree/core/app/models/spree/promotion/rules/country.rb | 56 | def compute_eligible_country_codes(order) | CODE |
| LOW | spree/core/app/models/spree/promotion_handler/coupon.rb | 161 | def clear_persisted_coupon_code(code) | CODE |
| LOW | spree/core/app/models/spree/promotion_handler/coupon.rb | 183 | def remove_promotion_adjustments(promotion) | CODE |
| LOW | spree/core/app/models/spree/promotion_handler/coupon.rb | 187 | def remove_promotion_line_items(promotion) | CODE |
| LOW | spree/core/app/models/spree/adjusters/promotion.rb | 146 | def distribute_over_line_items(chosen) | CODE |
| LOW | spree/core/app/models/spree/product/channels.rb | 124 | def apply_product_publications(publications_params) | CODE |
| LOW | spree/core/app/models/spree/product/channels.rb | 168 | def decode_publication_channel_id(value) | CODE |
| LOW | spree/core/app/models/spree/tax_provider/internal.rb | 111 | def sweep_internal_duty_tax_lines(owner) | CODE |
| LOW | spree/core/app/models/spree/stock/estimator.rb | 48 | def choose_default_delivery_rate(delivery_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 | 94 | 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 | 74 | def gateway_dashboard_payment_url(payment) | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 141 | def create_payment_setup_session(customer:, external_data: {}) | CODE |
| LOW | spree/core/app/models/spree/gateway/bogus.rb | 152 | def complete_payment_setup_session(setup_session:, params: {}) | CODE |
| LOW | spree/core/app/models/concerns/spree/acted_by.rb | 182 | def define_transitional_actor_reader(name) | CODE |
| LOW | …pp/models/concerns/spree/translatable_resource_slug.rb | 6 | def localized_slugs_for_store(store) | CODE |
| LOW | spree/core/app/models/concerns/spree/user_reporting.rb | 42 | def completed_orders_for_store(store) | CODE |
| LOW | …re/app/models/concerns/spree/personal_data_matching.rb | 75 | def personal_newsletter_subscribers(customer, email:) | CODE |
| LOW | …re/app/models/concerns/spree/personal_data_matching.rb | 113 | def with_email_not_owned_by_others(model, email, customer_type:, customer_id:) | CODE |
| LOW | …ree/core/app/models/concerns/spree/customer_methods.rb | 303 | def last_incomplete_spree_order(store, options = {}) | CODE |
| 373 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | spree/core/app/tools/spree/agent_tools/import_tool.rb | 61 | import.class.name.demodulize.underscore.tr('_', ' ') | CODE |
| CRITICAL⚡ | spree/core/app/models/spree/payment_method.rb | 234 | self.class.name.demodulize.titleize.gsub(/Gateway/, '').strip | 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 | …core/app/models/spree/collection_rules/available_on.rb | 9 | date = value.to_i.days.ago.beginning_of_day.in_time_zone(timezone) | CODE |
| CRITICAL | …pp/jobs/spree/collections/regenerate_time_based_job.rb | 10 | types = Rails.application.config.spree.time_based_collection_rules.map(&:to_s) | 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 | …ee/core/spec/workflows/spree/returns/lifecycle_spec.rb | 366 | return_record.order.payments.completed.first.update_column(:amount, 500) | CODE |
| CRITICAL | spree/core/spec/models/spree/cart_spec.rb | 230 | cart.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false) | CODE |
| CRITICAL | spree/core/spec/models/spree/order_group_spec.rb | 174 | order.fulfillments.sole.fulfillment_items.sole.update_columns(quantity: 2) | CODE |
| CRITICAL | spree/core/spec/models/spree/order_spec.rb | 2041 | order.line_items.first.variant.stock_levels.update_all(count_on_hand: 0, backorderable: false) | CODE |
| CRITICAL | spree/core/spec/services/spree/carts/update_spec.rb | 936 | cart.line_items.first.variant.stock_levels.first.set_count_on_hand(20) | CODE |
| CRITICAL | spree/core/spec/services/spree/carts/update_spec.rb | 988 | cart.line_items.first.variant.stock_levels.first.set_count_on_hand(2) | CODE |
| CRITICAL | …e/core/spec/services/spree/store_credits/apply_spec.rb | 177 | by_credit = order.reload.payments.store_credits.checkout.to_a.group_by(&:source_id).transform_values { |payments | CODE |
| CRITICAL | …e/emails/spec/mailers/spree/order_group_mailer_spec.rb | 113 | group.orders.first.fulfillments.first.selected_delivery_rate.update_columns(unpriced: true) | CODE |
| CRITICAL | …e/emails/spec/mailers/spree/order_group_mailer_spec.rb | 144 | order.fulfillments.sole.fulfillment_items.sole.update_columns(quantity: 2) | CODE |
| CRITICAL | …ontrollers/spree/api/v3/store/carts_controller_spec.rb | 498 | 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.rb | 524 | 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.rb | 993 | order.line_items.first.variant.stock_levels.first.set_count_on_hand(20) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 91 | Spree comes with [agent skills](https://github.com/spree/agent-skills), which teach Claude Code, Codex, Cursor, Copilot | CODE |
| MEDIUM | README.md | 113 | * **[Agentic Development](https://spreecommerce.org/docs/developer/agentic/overview)** — [agent skills](https://github.c | COMMENT |
| MEDIUM | docs/plans/6.0-delivery-rate-provider.md | 500 | ### Phase 5 — reference external provider ✅ shipped (initial scaffold) | 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 | docs/plans/6.0-cli-configurator.md | 188 | name: My Store # from the scaffold prompt | CODE |
| MEDIUM | docs/plans/6.0-core-rewrite-tasks.md | 135 | - Retired with no bridge (plan-sanctioned): `ShipmentHandler` (inlined into `after_fulfill` until Wave 4 providers), `St | CODE |
| MEDIUM | spree/core/app/tools/spree/agent_tools/query_report.rb | 92 | # and the rows are what fills a context window. | COMMENT |
| MEDIUM | spree/core/app/workflows/spree/orders/cancel.rb | 3 | # Cancels an order — the orchestration that used to hide inside | COMMENT |
| MEDIUM | …pp/jobs/spree/collections/regenerate_time_based_job.rb | 4 | # which event-driven regeneration can't keep fresh. Scheduled by the host app | 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/mcp/lib/spree/mcp/exports.rb | 19 | # of a context window. Beyond it the client is told the size and given | COMMENT |
| MEDIUM | …/spree/api/v3/admin/translations/batches_controller.rb | 18 | # The orchestration (resolve → upsert → rollback) lives in | COMMENT |
| MEDIUM | …ee/api/spec/lib/spree/api/agent_tools_contract_spec.rb | 248 | # resource whose controller orchestrates is reached through that | COMMENT |
| MEDIUM | …ee/api/spec/lib/spree/api/agent_tools_contract_spec.rb | 249 | # orchestration rather than around it — an order is writable now, and | COMMENT |
| MEDIUM | spree/api/lib/spree/api/agent_resource_map.rb | 272 | # orchestrates — an order, a refund, a stock level — would have | COMMENT |
| MEDIUM | spree/api/lib/spree/api/agent_resource_map.rb | 273 | # skipped that orchestration. A dispatched write IS the controller, | 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 | 54 | // scaffold to mount THIS dir (`./server:/rails`). The rewrite lands in the | COMMENT |
| MEDIUM | packages/cli/src/commands/init.ts | 282 | // clone, or a scaffold whose install step failed — mirroring | COMMENT |
| MEDIUM | packages/cli/src/commands/dev.ts | 55 | // scaffold, a fresh clone) without requiring anyone to run `spree init`. | COMMENT |
| MEDIUM | packages/cli/src/commands/plugin.ts | 431 | // Post-scaffold install + banner | COMMENT |
| MEDIUM | packages/cli/src/commands/add.ts | 222 | `Could not ${outcome === 'unreadable' ? 'read' : 'write'} ${pc.bold(file)}${outcome === 'unreadable' ? ' as JS | CODE |
| MEDIUM | packages/cli/src/commands/add.ts | 292 | // repair a broken one (old scaffold output) — one gatekeeper for both. | COMMENT |
| MEDIUM | packages/cli/src/commands/add.ts | 425 | // cookie. A localhost value can only be that scaffold output, never a real | COMMENT |
| MEDIUM | packages/create-spree-app/tests/scaffold.test.ts | 76 | // `spree init` is shelled out to; the scaffold only decides its arguments. | COMMENT |
| MEDIUM | packages/create-spree-app/tests/scaffold.test.ts | 441 | // scaffold calls process.exit(1) for non-empty dirs, so we mock it | COMMENT |
| MEDIUM | packages/create-spree-app/tests/templates.test.ts | 39 | // local mail catcher takes them. The scaffold probes them and writes the | COMMENT |
| MEDIUM | packages/create-spree-app/tests/templates.test.ts | 91 | // The floor must admit every CLI capability the scaffold calls — the | COMMENT |
| MEDIUM | packages/create-spree-app/tests/prompts.test.ts | 83 | // the scaffold: the seed runs before the store is configured through the | COMMENT |
| MEDIUM | packages/create-spree-app/tests/dashboard.test.ts | 15 | // own summary because the scaffold prints its own. | COMMENT |
| MEDIUM | packages/create-spree-app/src/scaffold.ts | 111 | // failures warn and continue: they must never abort the scaffold before | COMMENT |
| MEDIUM | packages/create-spree-app/src/scaffold.ts | 195 | // Sample data is never part of a scaffold: first-run setup configures the | COMMENT |
| MEDIUM | packages/create-spree-app/src/dashboard.ts | 25 | // --quiet: the scaffold's own summary cards cover these — the command's | 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 | packages/create-spree-app/src/templates/package-json.ts | 38 | // the scaffold calls, or the scaffold asks for something the pinned CLI | COMMENT |
| MEDIUM | .github/CONTRIBUTING.md | 518 | We also ship [agent skills](https://spreecommerce.org/docs/developer/agentic/agent-skills) (`npx skills add spree/agent- | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 34 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 36 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 53 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 55 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 77 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 79 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 127 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 129 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 197 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 199 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 222 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 224 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 264 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 266 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 287 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 289 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 392 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 394 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 427 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 429 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 455 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 457 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 481 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 483 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 507 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 509 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 537 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 539 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 571 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 573 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 600 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | …pec/models/spree/order_routing/strategy/parity_spec.rb | 602 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/sdk/src/webhooks/index.ts | 4 | // ─── Verification ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/sdk/src/webhooks/index.ts | 52 | // ─── Types ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/sdk/src/webhooks/index.ts | 99 | // ─── Construction ────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/plans/6.0-returns-exchanges-claims.md | 663 | # resellable: }]`; nil receives everything as requested and resellable | COMMENT |
| HIGH | spree/core/app/workflows/spree/returns/receive.rb | 11 | # resellable: }]`; nil receives everything as requested and resellable | COMMENT |
| HIGH | …s/spree/api/v3/admin/orders/returns_controller_spec.rb | 175 | # Omitting `items` means "everything as requested"; naming an empty list | COMMENT |
| HIGH | packages/dashboard/e2e/gift-cards.spec.ts | 37 | test('creates a gift card with an auto-generated code', async ({ page }) => { | CODE |
| HIGH | packages/dashboard/e2e/gift-cards.spec.ts | 47 | // Auto-generated code is uppercase hex; just confirm a row with the | COMMENT |
| HIGH | packages/dashboard/src/locales/en.json | 1574 | "help": "1 issues a single card. More than 1 issues a batch with auto-generated codes.", | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 4068 | "create_description": "Issue a single gift card or generate a batch with auto-generated codes.", | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 4973 | "description": "Auto-generated codes for this promotion. Read-only — regenerate by changing the promotion's numb | CODE |
| HIGH | packages/dashboard/src/locales/en.json | 4974 | "description_with_count": "{{count}} auto-generated codes. Read-only — regenerate by changing the promotion's nu | CODE |
| HIGH | packages/admin-sdk/examples/order-exchanges/receive.ts | 9 | // Omit `items` to receive everything as requested and resellable. | COMMENT |
| HIGH | packages/admin-sdk/examples/order-returns/receive.ts | 9 | // Omit `items` to receive everything as requested and resellable. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spree/core/app/tools/spree/agent_tools/create_import.rb | 11 | # Creating the import reads the file's header row and proposes a column | COMMENT |
| MEDIUM | spree/core/app/models/spree/invitation.rb | 134 | # This method is kept for backwards compatibility. | COMMENT |
| MEDIUM | spree/core/app/models/spree/refresh_token.rb | 43 | # Create a refresh token for a user. | COMMENT |
| MEDIUM | spree/core/app/models/spree/webhook_delivery.rb | 118 | # Create a new delivery with the same payload and queue it. | COMMENT |
| MEDIUM | spree/core/app/models/spree/storefront/access_policy.rb | 15 | # This class is the storefront's extension seam: replace it via | 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 | spree/core/spec/models/spree/stock_level_spec.rb | 37 | # Creating a level propagates more of them across the store's locations, | COMMENT |
| MEDIUM | spree/core/lib/spree/core.rb | 244 | # This method is defined within the core gem on purpose. | COMMENT |
| MEDIUM | spree/core/lib/spree/core.rb | 260 | # This method is defined within the core gem on purpose. | COMMENT |
| MEDIUM | spree/core/lib/spree/events.rb | 11 | # This module provides a clean API for publishing events and subscribing | COMMENT |
| MEDIUM | spree/core/lib/spree/events.rb | 128 | # 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/providers/stripe/spec/support/vcr.rb | 28 | # Creating a webhook endpoint returns its signing secret in the response | 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/dashboard/spec/spec_helper.rb | 30 | # This file is copied to ~/spec when you run 'ruby script/generate rspec' | COMMENT |
| MEDIUM | …p/controllers/spree/api/v3/admin/sellers_controller.rb | 206 | # Creating a seller provisions their stock location too, so it goes | COMMENT |
| MEDIUM | spree/api/config/routes.rb | 901 | # Creating an invitation is hiring, so it lives on `team`; chasing or | 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 | 217 | # Create a second market so the target isn't the last one in the store. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spree/core/app/models/spree/product.rb | 806 | # 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 | 107 | # Check if this endpoint is subscribed to a specific event. | COMMENT |
| LOW | spree/core/app/models/spree/webhook_endpoint.rb | 173 | # Check if the endpoint was auto-disabled | COMMENT |
| LOW | spree/core/app/models/spree/webhook_endpoint.rb | 180 | # Check if auto-disable threshold has been reached | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 584 | # Check if the shipping address is a quick checkout address | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 592 | # Check if quick checkout is available for this order | COMMENT |
| LOW⚡ | spree/core/app/models/spree/order.rb | 599 | # Check if quick checkout requires an address collection | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 58 | # Check if the delivery was successful | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 65 | # Check if the delivery failed | COMMENT |
| LOW⚡ | spree/core/app/models/spree/webhook_delivery.rb | 72 | # Check if the delivery is pending | COMMENT |
| LOW | spree/core/app/models/spree/stock/quantifier.rb | 101 | # Check if any of variant stock items is backorderable | COMMENT |
| LOW | spree/core/app/models/concerns/spree/publishable.rb | 170 | # Check if a parent class has an explicitly set prefix | COMMENT |
| LOW | …/spree/promotion_handler/coupon_with_gift_card_spec.rb | 131 | # Set total to less than the gift card payment amount | COMMENT |
| LOW | spree/core/lib/spree/events.rb | 203 | # Check if events are enabled | COMMENT |
| LOW | spree/core/lib/spree/events.rb | 232 | # Check if automatic lifecycle events (*.created/updated/deleted) are enabled | COMMENT |
| LOW | spree/core/lib/spree/core/dependencies_helper.rb | 64 | # Check if a specific dependency has been overridden | COMMENT |
| LOW | …ee/api/app/serializers/spree/api/v3/base_serializer.rb | 255 | # Check if an association should be expanded | COMMENT |
| LOW | …/app/controllers/concerns/spree/api/v3/http_caching.rb | 47 | # Check if the current user is a guest (no authentication) | COMMENT |
| 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 |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spree/core/config/i18n-tasks.yml | 183 | ## 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 | 273 | # you can use Spree.payment_methods | COMMENT |
| LOW | spree/lib/generators/spree/install/install_generator.rb | 69 | 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 |