See what sticks
This report summarizes scanner evidence for antiwork/gumroad, a Ruby project with 10,064 GitHub stars. SynthScan examined 1,124,148 lines of code across 7220 source files, recording 2922 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 3.4 (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? 2530 finding(s).
Are imports declared and package/API names verified? 281 finding(s).
Are wrappers, guards, and repeated structures necessary? 1552 finding(s).
Which changes need focused human review? 2922 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 2922 distinct pattern matches across 13 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 | …dekiq/auto_top_up_negative_destination_balances_job.rb | 64 | def refresh_funded_state_ttls(candidates) | CODE |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 350 | def confirm_destination_funding(transfer, request) | CODE |
| LOW | …idekiq/suspend_accounts_with_payment_address_worker.rb | 15 | def suspend_users_with_same_payment_address(suspended_user) | CODE |
| LOW | …idekiq/suspend_accounts_with_payment_address_worker.rb | 26 | def suspend_users_with_same_stripe_fingerprint(suspended_user) | CODE |
| LOW | app/sidekiq/generate_canada_sales_report_job.rb | 304 | def canadian_candidate_seller_ids(starts_at, ends_at) | CODE |
| LOW | app/sidekiq/generate_canada_sales_report_job.rb | 330 | def seller_ids_with_reportable_activity(starts_at, ends_at) | CODE |
| LOW | app/sidekiq/generate_canada_sales_report_job.rb | 355 | def determine_country_name_and_province_name(purchase) | CODE |
| LOW | app/sidekiq/fail_abandoned_purchase_worker.rb | 65 | def reschedule_for_outstanding_payment(payment_intent) | CODE |
| LOW | app/sidekiq/send_workflow_installment_worker.rb | 131 | def find_installment_and_rule(installment_id) | CODE |
| LOW | app/sidekiq/send_workflow_installment_worker.rb | 165 | def current_recipient_reference_time(installment:, purchase_id:, follower_id:, affiliate_user_id:, subscription_id:) | CODE |
| LOW | app/sidekiq/send_workflow_installment_worker.rb | 189 | def reschedule_with_current_rule(installment:, installment_rule:, version:, purchase_id:, follower_id:, affiliate_us | CODE |
| LOW | app/sidekiq/send_workflow_installment_worker.rb | 282 | def current_audience_member_and_match(installment:, email:, filters: nil) | CODE |
| LOW | app/sidekiq/send_workflow_installment_worker.rb | 306 | def affiliate_reference_times(installment:, member:, current_match:, affiliate_user_id:) | CODE |
| LOW | app/sidekiq/create_stripe_apple_pay_domain_worker.rb | 44 | def claim_existing_registration(user_id, domain) | CODE |
| LOW⚡ | app/sidekiq/send_workflow_post_emails_job.rb | 256 | def delivery_targets_for_purchase(member:, id:, log_unresolvable:) | CODE |
| LOW⚡ | app/sidekiq/send_workflow_post_emails_job.rb | 266 | def delivery_targets_for_follower(member:, id:, log_unresolvable:) | CODE |
| LOW⚡ | app/sidekiq/send_workflow_post_emails_job.rb | 276 | def delivery_targets_for_affiliate(member:, id:, log_unresolvable:) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 294 | def enqueue_installment_worker(created_at:, purchase_id: nil, follower_id: nil, affiliate_user_id: nil, preserve_ref | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 349 | def requeue_for_seller_fanout_limit(*args) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 365 | def requeue_for_daily_blast_limit(*args) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 375 | def defer_schedule_intent_until(run_at) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 404 | def merge_confirmed_followers_after_cutoff(members) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 456 | def merge_affiliates_after_cutoff(members) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 474 | def follower_confirmation_times_by_id(members) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 491 | def affiliate_recipients_by_key(members) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 531 | def normalize_affiliate_matches(members) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 544 | def resolve_affiliate_triggers(member:, id:) | CODE |
| LOW | app/sidekiq/send_workflow_post_emails_job.rb | 584 | def log_unresolvable_recipient(member:, type:) | CODE |
| LOW | …idekiq/generate_fees_by_creator_location_report_job.rb | 145 | def determine_country_name_and_state_name(purchase) | CODE |
| LOW | app/sidekiq/alert_on_stuck_piracy_reports_job.rb | 133 | def repeat_counter_notice_section(counts) | CODE |
| LOW | app/sidekiq/create_india_sales_report_job.rb | 209 | def india_chargeback_reversals(start_date, end_date) | CODE |
| LOW | app/sidekiq/google_calendar_invite_job.rb | 45 | def insert_or_refresh_and_insert_event(gcal_api, integration, event) | CODE |
| LOW | app/sidekiq/transcode_video_for_streaming_worker.rb | 140 | def fail_unsubmitted_transcode(transcoded_video) | CODE |
| LOW | …idekiq/alert_on_blocked_established_subscribers_job.rb | 110 | def established_charge_counts(subscription_ids) | CODE |
| LOW | …idekiq/alert_on_blocked_established_subscribers_job.rb | 200 | def live_subscription_ids_among(subscription_ids) | CODE |
| LOW | app/sidekiq/create_canada_monthly_sales_report_job.rb | 176 | def taxjar_product_tax_code_for(link) | CODE |
| LOW | app/sidekiq/remove_deleted_files_from_s3_job.rb | 67 | def gather_transcoded_video_keys(file) | CODE |
| LOW | app/sidekiq/send_post_blast_emails_job.rb | 253 | def revalidate_snapshotted_members(snapshotted_ids) | CODE |
| LOW | app/sidekiq/send_post_blast_emails_job.rb | 314 | def write_non_opener_checkpoint(checkpoint_key, emails) | CODE |
| LOW | …_unclaimed_balances_of_inactive_stripe_accounts_job.rb | 104 | def previous_transfer_made_by_this_job(stripe_account_id) | CODE |
| LOW | app/sidekiq/schedule_workflow_installment_job.rb | 118 | def reschedule_pending_resubscribed_memberships(installment, old_delayed_delivery_time, cutoff_reference_time) | CODE |
| LOW | app/sidekiq/schedule_workflow_installment_job.rb | 166 | def resubscription_exclusion_context(workflow) | CODE |
| LOW | app/sidekiq/post_to_ping_endpoints_worker.rb | 49 | def notify_undeliverable_subscriptions(subscriptions) | CODE |
| LOW | app/sidekiq/schedule_abandoned_cart_emails_job.rb | 77 | def schedule_emails_for_window(window, limit:) | CODE |
| LOW | app/sidekiq/schedule_abandoned_cart_emails_job.rb | 129 | def matched_workflow_ids_and_product_ids_by_cart_id(cart_product_ids_with_cart_ids) | CODE |
| LOW | app/sidekiq/send_post_blast_emails_slice_job.rb | 124 | def finalize_partition_if_complete(partition_key, total_chunks) | CODE |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 209 | def prefetch_partial_refund_adjustments(purchases_scope) | CODE |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 262 | def resolve_geoip_fallback_purchases(purchases_scope, unresolved_us_tuple_keys, aggregation) | CODE |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 385 | def refund_totals_by_purchase(purchase_ids) | CODE |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 469 | def chargeback_purchase_filters(scope) | CODE |
| LOW | app/sidekiq/reconcile_client_confirmed_charge_job.rb | 117 | def payment_intent_id_from_stripe_charge(stripe_charge) | CODE |
| LOW | app/sidekiq/reconcile_client_confirmed_charge_job.rb | 129 | def search_payment_intent_id_by_transfer_group(charge, purchase) | CODE |
| LOW | …p/sidekiq/create_us_state_monthly_sales_reports_job.rb | 183 | def taxjar_product_tax_code_for(link) | CODE |
| LOW | app/sidekiq/generate_sales_report_job.rb | 222 | def update_job_status_to_completed(country_code, start_time, end_time, sales_type, download_url) | CODE |
| LOW | app/sidekiq/repair_order_charge_outcomes_job.rb | 168 | def order_ids_with_checkout_failed(after_id:, ceiling:, limit:) | CODE |
| LOW | app/sidekiq/send_year_in_review_email_job.rb | 72 | def calculate_stats_by_country(data) | CODE |
| LOW | …q/retry_stripe_rejected_payout_setup_for_seller_job.rb | 121 | def payout_setup_failure_notes(user) | CODE |
| LOW | app/sidekiq/lift_platform_stripe_pause_job.rb | 163 | def release_failed_payout_hold(user_id, transfers_active:) | CODE |
| LOW | app/sidekiq/generate_ssl_certificate.rb | 96 | def seconds_until_rate_limit_resets(exception) | CODE |
| LOW | …lert_on_stale_blocks_holding_established_buyers_job.rb | 550 | def linked_to_suspended_account(emails) | CODE |
| 1381 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vite.config.ts | 21 | }, | COMMENT |
| LOW | docker/ci/restore_test_db.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker/ci/dump_test_db.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker/web/database_migration.sh | 61 | COMMENT | |
| LOW | docker/base/generate_tag_for_test_image.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker/base/generate_tag_for_test_image.sh | 21 | # - *.md any markdown file (verified: no specs read .md fixtures, | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 121 | # released before returning on every path (ensure below), including inside the rescues. | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 141 | current_balance_pairs = Balance.unpaid | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 181 | current_window_usd_cents = current_window_ids.sum { |id| current_balance_usd_cents.fetch(id, 0) } | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 281 | # here and the dedupe_key write below — if the worker dies in it, the transfer_key must not | COMMENT |
| LOW | …dekiq/auto_top_up_negative_destination_balances_job.rb | 321 | COMMENT | |
| LOW | app/sidekiq/generate_canada_sales_report_job.rb | 21 | COMMENT | |
| LOW | …idekiq/record_product_file_missing_from_storage_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …idekiq/record_product_file_missing_from_storage_job.rb | 21 | # row is left alive, so the seller's file list is unchanged — a dead row is not | COMMENT |
| LOW | …idekiq/record_product_file_missing_from_storage_job.rb | 41 | sidekiq_options retry: 1, queue: :low, lock: :until_executed | COMMENT |
| LOW | …idekiq/record_product_file_missing_from_storage_job.rb | 61 | # S3Retrievable#confirm_s3_key!). Recording "nothing in storage" for such a | COMMENT |
| LOW | …idekiq/record_product_file_missing_from_storage_job.rb | 101 | COMMENT | |
| LOW | …idekiq/generate_fees_by_creator_location_report_job.rb | 21 | # Sales leg. not_chargedback_for_tax_reporting keeps, on top of the reversed (won) | COMMENT |
| LOW | …dekiq/dispatch_pending_failed_refund_exceptions_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/create_india_sales_report_job.rb | 61 | # and makes re-generating a past month's report deterministic: a refund issued later | COMMENT |
| LOW | app/sidekiq/refresh_affiliate_earnings_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …/sidekiq/alert_on_negative_destination_balances_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …/sidekiq/alert_on_negative_destination_balances_job.rb | 101 | end | COMMENT |
| LOW | app/sidekiq/resize_oversized_asset_preview_worker.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …p/sidekiq/release_chargeback_rate_payout_pauses_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …idekiq/alert_on_blocked_established_subscribers_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …idekiq/alert_on_blocked_established_subscribers_job.rb | 21 | # The decline codes an in-app PlatformBlock check can set on a RENEWAL. Purchase::Risk's IP check | COMMENT |
| LOW | app/sidekiq/submit_paypal_dispute_evidence_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/alert_on_blocked_established_buyers_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/upload_us_states_sales_tax_to_taxjar_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …sidekiq/perform_payouts_up_to_delay_days_ago_worker.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/send_post_blast_emails_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …_unclaimed_balances_of_inactive_stripe_accounts_job.rb | 61 | else | COMMENT |
| LOW | …_unclaimed_balances_of_inactive_stripe_accounts_job.rb | 81 | COMMENT | |
| LOW | …merchant_account_payment_method_availability_worker.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/verify_finance_reports_delivery_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/verify_finance_reports_delivery_job.rb | 21 | recurring_lock_ttl max_attempt: 30.minutes | COMMENT |
| LOW | app/sidekiq/verify_finance_reports_delivery_job.rb | 101 | # each one independently and a newer completion can't mask an older gap. | COMMENT |
| LOW | app/sidekiq/requeue_transiently_failed_payouts_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/refresh_audience_member_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/stale_transient_suppression_sweep_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/stale_transient_suppression_sweep_job.rb | 21 | LOOKBACK_WINDOW = 60.days | COMMENT |
| LOW | app/sidekiq/resend_confirmation_email_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/schedule_abandoned_cart_emails_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/stripe_payouts_paused_email_job.rb | 21 | # concurrent pause/resume webhook while deciding whether to email. | COMMENT |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 81 | # (Pre-cutover refunds are instead netted into their purchase's month by the partial-refund | COMMENT |
| LOW | …/sidekiq/create_global_sales_tax_summary_report_job.rb | 201 | } | COMMENT |
| LOW | …p/sidekiq/alert_sellers_of_undelivered_receipts_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | …p/sidekiq/alert_sellers_of_undelivered_receipts_job.rb | 21 | # persists, so the next run continues rather than skipping what this one did not reach. | COMMENT |
| LOW | …p/sidekiq/alert_sellers_of_undelivered_receipts_job.rb | 181 | return stored.to_i if stored.present? | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 21 | # This job is the sole owner of evidence with no seller window: it either opens the window and | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 41 | # is measured on event_created_at (when the processor raised the dispute) because that is the | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 101 | claimed = false | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 121 | claimed = dispute_evidence.claim_seller_contacted_window!(at: window_start) | COMMENT |
| LOW | app/sidekiq/create_missing_dispute_evidence_job.rb | 161 | # the notice they got at formalization had no link, because there was no evidence record | COMMENT |
| LOW | app/sidekiq/create_vat_report_job.rb | 61 | # original purchase. A refund is an event of its own period (matching how OSS/MOSS | COMMENT |
| LOW | app/sidekiq/create_vat_report_job.rb | 81 | # Chargeback (debit) leg: disputes formalized on this day claw their money back in | COMMENT |
| LOW | app/sidekiq/repair_order_charge_outcomes_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| 939 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/sidekiq/pdf_unstampable_notifier_job.rb | 16 | product.product_files.alive.pdf.pdf_stamp_enabled.where(stampable_pdf: nil).find_each do |product_file| | CODE |
| CRITICAL | app/sidekiq/recurring_charge_worker.rb | 72 | new_price = subscription.link.prices.is_buy.alive.find_by(recurrence: latest_applicable_plan_change.recurrence | CODE |
| CRITICAL | app/sidekiq/detect_failing_paypal_rails_job.rb | 59 | MerchantAccount.paypal.alive.charge_processor_alive.where.not(user_id: nil) | CODE |
| CRITICAL | app/sidekiq/schedule_membership_price_updates_job.rb | 31 | new_product_price = subscription.link.prices.is_buy.alive.find_by(recurrence: plan_change.recurrence) || | CODE |
| CRITICAL | app/sidekiq/schedule_membership_price_updates_job.rb | 75 | subscription.subscription_plan_changes.for_product_price_change.alive.where.not(id: new_plan_change.id).each(&:mar | CODE |
| CRITICAL | app/sidekiq/lift_platform_stripe_pause_job.rb | 41 | accounts = user.merchant_accounts.alive.charge_processor_alive.stripe.select(&:is_a_gumroad_managed_stripe_account | CODE |
| CRITICAL | app/models/offer_code.rb | 691 | if product.offer_codes.alive.is_cancellation_discount.where.not(id: id).exists? | CODE |
| CRITICAL | app/models/subscription.rb | 190 | installments = link.installments.not_workflow_installment.alive.published.where("published_at >= ?", created_at) | CODE |
| CRITICAL | app/models/link.rb | 1506 | user.custom_fields.not_is_post_purchase.global.to_a.concat(custom_fields.not_is_post_purchase) | CODE |
| CRITICAL | app/models/concerns/purchase/blockable.rb | 812 | return unless subscription.purchases.successful.non_free.where.not(id:).exists?(credit_card_id:) | CODE |
| CRITICAL | app/presenters/reviews_presenter.rb | 22 | purchases: user.purchases.not_is_deleted_by_buyer.allowing_reviews_to_be_counted.where.missing(:product_review).jo | CODE |
| CRITICAL | app/presenters/url_redirect_presenter.rb | 135 | purchase_custom_fields: purchase.purchase_custom_fields.is_post_purchase.with_attached_files.where.not(custom_ | CODE |
| CRITICAL | app/presenters/profile_presenter.rb | 43 | memberships = seller.products.membership.alive.not_archived.includes(ProductPresenter::ASSOCIATIONS_FOR_CARD) | CODE |
| CRITICAL | app/presenters/utm_link_presenter.rb | 56 | posts = *seller.installments.audience_type.shown_on_profile.not_workflow_installment.published.includes(:seller).o | CODE |
| CRITICAL | app/javascript/components/Checkout/index.test.tsx | 333 | state.surcharges.result.buyer_currency_quote.line_allocations.slice(0, 1); | CODE |
| CRITICAL | app/javascript/pages/Settings/Main/Show.tsx | 417 | {form.data.user.seller_refund_policy.allowed_refund_periods_in_days.map(({ key, value }) => ( | CODE |
| CRITICAL | app/controllers/third_party_analytics_controller.rb | 25 | user_snippets = @product.user.third_party_analytics.universal.alive.where(location: [params[:location], "all"]).pluc | CODE |
| CRITICAL | …pi/internal/installments/remaining_sends_controller.rb | 65 | @installment = current_seller.installments.alive.published.not_workflow_installment.find_by_external_id(params[:id | CODE |
| CRITICAL | …services/content_moderation/moderate_record_service.rb | 282 | user.links.alive.not_draft.where.not(id: record.id).exists? || user.sales.successful.exists? | CODE |
| CRITICAL | …youts/processor/stripe/stripe_payout_processor_test.rb | 2942 | assert_equal(-5_00, payment.user.reload.balances.unpaid.sum(:holding_amount_cents)) | CODE |
| CRITICAL | …youts/processor/stripe/stripe_payout_processor_test.rb | 3251 | assert_equal(-5_00, payment.user.reload.balances.unpaid.sum(:holding_amount_cents)) | CODE |
| CRITICAL | test/controllers/api/v2/thumbnails_controller_test.rb | 75 | assert_equal({ "width" => 1006, "height" => 1006 }, @product.thumbnail.file.blob.metadata.slice("width", "height")) | CODE |
| CRITICAL | …tration/paypal/paypal_merchant_account_manager_spec.rb | 531 | creator.merchant_accounts.alive.paypal.where.not(charge_processor_merchant_id: new_paypal_merchant_id) | CODE |
| CRITICAL | …implementations/stripe/stripe_charge_processor_spec.rb | 5867 | disputed_purchase.dispute.reload.dispute_evidence.customer_communication_file.attach(fixture_file_upload("test.p | CODE |
| CRITICAL | …implementations/stripe/stripe_charge_processor_spec.rb | 5897 | disputed_purchase.dispute.reload.dispute_evidence.customer_communication_file.attach(fixture_file_upload("test.pdf | CODE |
| CRITICAL | spec/models/asset_preview_variant_queries_spec.rb | 17 | expect(preview.file.blob.variant_records.reload.map(&:variation_digest)).not_to include(preview.retina_variant.varia | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1299 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1308 | replacement_archive = purchase1.link.product_files_archives.alive.entity_archives.where.not(id: archive.id).sole | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1315 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL | spec/presenters/library_presenter_spec.rb | 1328 | expect(purchase1.link.product_files_archives.alive.entity_archives.map(&:product_files_archive_state)).to eq(["t | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1350 | replacement_archive = purchase1.link.product_files_archives.alive.entity_archives.where.not(id: archive.id).sole | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1358 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1367 | replacement_archive = purchase1.link.product_files_archives.alive.entity_archives.where.not(id: archive.id).sole | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1371 | stale_failure_recovery_archive = purchase1.link.product_files_archives.alive.entity_archives.where(product_files | CODE |
| CRITICAL⚡ | spec/presenters/library_presenter_spec.rb | 1379 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL | spec/presenters/library_presenter_spec.rb | 1395 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL | spec/presenters/library_presenter_spec.rb | 1410 | archives = purchase1.link.product_files_archives.alive.entity_archives.order(:id) | CODE |
| CRITICAL | spec/presenters/library_presenter_spec.rb | 1475 | member.link.product_files.alive.where.not(id: granted_file.id).each(&:mark_deleted!) | CODE |
| CRITICAL | spec/requests/password_visibility_spec.rb | 15 | page.driver.browser.switch_to.active_element.send_keys(key) | CODE |
| CRITICAL | spec/requests/password_visibility_spec.rb | 18 | page.driver.browser.switch_to.active_element.send_keys(key) | CODE |
| CRITICAL | spec/requests/mcp_server_spec.rb | 1319 | expect(product.tiers.alive.sole.alive_prices.is_buy.pluck(:recurrence, :price_cents)).to eq([["yearly", 5000]]) | CODE |
| CRITICAL | spec/requests/settings/social_connections_spec.rb | 115 | page.driver.browser.manage.window.resize_to(375, 667) | CODE |
| CRITICAL | spec/requests/products/dropbox_spec.rb | 94 | cancelled_db_file = product.user.dropbox_files.reload.where.not(state: "successfully_uploaded").first | CODE |
| CRITICAL | spec/requests/products/show/reviews_spec.rb | 110 | page.driver.browser.switch_to.active_element.send_keys(:arrow_left) | CODE |
| CRITICAL | spec/requests/products/show/reviews_spec.rb | 116 | page.driver.browser.switch_to.active_element.send_keys(:arrow_up) | CODE |
| CRITICAL | spec/requests/products/edit/membership_tiers_spec.rb | 410 | expect(@product.tier_category.variants.reload.alive.in_order.pluck(:name)).to eq ["Second tier", "Untitled"] | CODE |
| CRITICAL | spec/requests/products/edit/digital_versions_spec.rb | 91 | expect(product.variant_categories.first.variants.reload.alive.in_order.pluck(:name)).to eq ["Basic Bundle", "First | CODE |
| CRITICAL | spec/requests/wishlists/wishlist_card_controls_spec.rb | 24 | page.driver.browser.switch_to.active_element.send_keys(:enter) | CODE |
| CRITICAL | spec/requests/emails/edit_spec.rb | 507 | expect(follower_installment.reload.product_files_archives.alive.sole.url.split("/").last).to eq("Updated_Follower_Po | CODE |
| CRITICAL⚡ | spec/requests/analytics/date_range_spec.rb | 27 | page.driver.browser.switch_to.active_element.send_keys(:arrow_down, :enter) | CODE |
| CRITICAL⚡ | spec/requests/analytics/date_range_spec.rb | 31 | page.driver.browser.switch_to.active_element.send_keys(:arrow_up, :space) | CODE |
| CRITICAL⚡ | spec/requests/analytics/date_range_spec.rb | 34 | page.driver.browser.switch_to.active_element.send_keys(:escape) | CODE |
| CRITICAL | spec/modules/with_product_files_spec.rb | 672 | expect(installment.product_files_archives.alive.first.url.split("/").last).to include(installment.name.split(" " | CODE |
| CRITICAL | …ntrollers/links_controller_archive_lock_window_spec.rb | 103 | archive_ids = product.reload.product_files_archives.folder_archives.alive.pluck(:id) | CODE |
| CRITICAL | spec/controllers/api/v2/offer_codes_controller_spec.rb | 229 | expect(result).to eq(success: true, offer_code: @product.reload.offer_codes.alive.first.as_json(api_scopes: ["ed | CODE |
| CRITICAL | spec/controllers/api/v2/offer_codes_controller_spec.rb | 282 | expect(result).to eq(success: true, offer_code: @product.reload.offer_codes.alive.first.as_json(api_scopes: ["vi | CODE |
| CRITICAL | spec/controllers/api/v2/offer_codes_controller_spec.rb | 389 | expect(result).to eq(success: true, offer_code: @product.reload.offer_codes.alive.first.as_json(api_scopes: ["ed | CODE |
| CRITICAL | spec/services/product_duplicator_service_spec.rb | 77 | expect(duplicate_product.prices.alive.first.attributes.except(*do_not_compare)).to eq(product.prices.alive.first.att | CODE |
| CRITICAL | spec/services/product_duplicator_service_spec.rb | 234 | expect(duplicate_product.variant_categories.alive.first.variants.pluck(:name)).to eq ["Untitled", "Second"] | CODE |
| CRITICAL | spec/services/subscription/updater_service_spec.rb | 556 | @subscription.reload.purchases.is_original_subscription_purchase.not_is_archived_original_subscription_purch | CODE |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …controllers/concerns/agent_conversation_persistence.rb | 234 | # ── Turn liveness markers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 201 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 268 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 270 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 287 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 289 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 304 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 306 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 453 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 455 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 699 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 701 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 714 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 716 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 774 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 776 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 800 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 802 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 853 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 855 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 914 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 916 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 931 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 933 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 957 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 959 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 1548 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 1550 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 1970 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 1972 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2361 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2363 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2553 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2555 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2745 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 2747 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3430 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3432 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3469 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3471 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3670 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3697 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …youts/processor/stripe/stripe_payout_processor_test.rb | 3699 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/models/purchase_test.rb | 3919 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | test/models/purchase_test.rb | 3921 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | test/models/purchase_test.rb | 3928 | # ========================================================================== | COMMENT |
| MEDIUM⚡ | test/models/purchase_test.rb | 3930 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2832 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2834 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2859 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2861 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2932 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2934 | # ========================================================================== | COMMENT |
| MEDIUM | test/models/purchase_test.rb | 2966 | # ========================================================================== | COMMENT |
| 51 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/Settings/PaymentsPage/AccountDetailsSection.test.tsx | 54 | street_address: "123 Main St", | CODE |
| LOW | …ts/Settings/PaymentsPage/LegalGuardianSection.test.tsx | 20 | phone: "555-0100", | CODE |
| LOW | …omponents/Settings/PaymentsPage/BankAccountSection.tsx | 855 | Pick<React.ComponentPropsWithoutRef<"input">, "placeholder" | "pattern" | "inputMode" | "title"> | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 183 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 196 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 209 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 222 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 296 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 309 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 322 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 335 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 375 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 388 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 401 | "buyer_name": "John Doe", | CODE |
| LOW | …ript/components/ApiDocumentation/Endpoints/Payouts.tsx | 414 | "buyer_name": "Jane Doe", | CODE |
| LOW | …ript/components/ProductEdit/ProductTab/TiersEditor.tsx | 458 | const placeholderExtension = editor.extensionManager.extensions.find(({ name }) => name === "placeholder"); | CODE |
| LOW | app/javascript/data/card_payment_method_data.test.ts | 49 | address: "123 Main St", | CODE |
| LOW | app/javascript/data/card_payment_method_data.test.ts | 90 | address: "123 Main St", | CODE |
| LOW | app/javascript/data/card_payment_method_data.test.ts | 99 | line1: "123 Main St", | CODE |
| LOW | app/javascript/data/card_payment_method_data.test.ts | 359 | line1: "123 Main St", | CODE |
| LOW | app/javascript/data/payment_method_result.test.ts | 90 | address: "123 Main St", | CODE |
| LOW | app/javascript/data/payment_method_result.test.ts | 181 | address: "123 Main St", | CODE |
| LOW | app/javascript/pages/Settings/Payments/Show.test.tsx | 86 | street_address: "123 Main St", | CODE |
| LOW | app/javascript/pages/Settings/Payments/Show.test.tsx | 538 | business_street_address: "123 Main St", | CODE |
| LOW | app/javascript/pages/Settings/Payments/Show.test.tsx | 583 | business_street_address: "123 Main St", | CODE |
| LOW | test/models/subscription_test.rb | 5271 | user = create_user(email: "user@example.com") | CODE |
| LOW | test/models/subscription_test.rb | 5274 | assert_equal({ subscription: "user@example.com", purchase: "purchase@example.com", user: "user@example.com" }, subsc | CODE |
| LOW | …st/models/product_shipping_supported_countries_test.rb | 66 | create_membership_purchase(link: product, subscription:, country: "Germany", full_name: "Jane Doe", | CODE |
| LOW | test/models/purchase_test.rb | 557 | purchase.email = "testingtesting123@example.org" | CODE |
| LOW | test/models/purchase_test.rb | 4907 | assert_equal "foo@bar.com", purchase.email | CODE |
| LOW | test/models/link_test.rb | 3170 | description = "<h1><span>Heading in span</span></h1><b>Bold</b><p><style>color: red</style><strong class=\"something | CODE |
| LOW⚡ | test/services/gdpr_buyer_erasure_service_test.rb | 84 | full_name: "Jane Doe", | CODE |
| LOW⚡ | test/services/gdpr_buyer_erasure_service_test.rb | 86 | street_address: "123 Main St", | CODE |
| LOW⚡ | test/services/gdpr_buyer_erasure_service_test.rb | 95 | custom_fields: '{"phone": "555-1234"}', | CODE |
| LOW⚡ | test/services/gdpr_buyer_erasure_service_test.rb | 99 | p.update_columns(full_name: "Jane Doe", ip_address: "1.2.3.5", browser_guid: "guid-2") | CODE |
| LOW | test/services/gdpr_buyer_erasure_service_test.rb | 176 | assert_not_includes history.(purchase), "Jane Doe" | CODE |
| LOW | test/services/gdpr_buyer_erasure_service_test.rb | 198 | assert_not_includes history.(), "Jane Doe" | CODE |
| LOW | …/sidekiq/million_dollar_milestone_check_worker_spec.rb | 30 | street_address: "123 Main St", | CODE |
| LOW | …ec/sidekiq/update_product_files_archive_worker_spec.rb | 779 | { "type" => "paragraph", "content" => [{ "type" => "text", "text" => "Lorem ipsum" }] }, | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 11 | @purchase = create(:purchase, link:, seller: link.user, email: "to@example.org") | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 24 | expect(mail.to).to eq(["to@example.org"]) | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 74 | @purchase = create(:purchase, link:, seller: link.user, email: "to@example.org") | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 221 | email: "to@example.org", | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 1169 | let(:seller) { create(:named_seller, name: "John Doe") } | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 1189 | expect(mail.body).to have_link("John Doe", href: "http://seller.test.gumroad.com:31337", exact: true, count: 3) | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 1197 | let(:seller1) { create(:user, name: "John Doe", username: "johndoe") } | CODE |
| LOW | spec/mailers/customer_mailer_spec.rb | 1521 | expect(mail.body).to have_link("John Doe", href: "http://johndoe.test.gumroad.com:31337", exact: true, count | CODE |
| LOW | spec/mailers/community_chat_recap_mailer_spec.rb | 8 | let(:seller) { create(:user, name: "John Doe") } | CODE |
| LOW | spec/mailers/concerns/rescue_smtp_errors_spec.rb | 12 | mail(from: "foo@bar.com", body: "") | CODE |
| LOW | …tration/stripe/stripe_merchant_account_manager_spec.rb | 13720 | create(:user_compliance_info, user:, street_address: "123 Main Street") | CODE |
| LOW | …youts/processor/paypal/paypal_payout_processor_spec.rb | 407 | let(:user) { create(:user_with_compliance_info, payment_address: "user@example.com") } | CODE |
| LOW | spec/models/url_redirect_spec.rb | 647 | { "type" => "paragraph", "content" => [{ "type" => "text", "text" => "Lorem ipsum" }] }, | CODE |
| LOW⚡ | spec/models/url_redirect_spec.rb | 1031 | old_variant_rich_content = create(:rich_content, entity: old_variant, title: "Old variant page title", descripti | CODE |
| LOW⚡ | spec/models/url_redirect_spec.rb | 1032 | create(:rich_content, entity: variant1, title: "Variant 1 page title", description: [{ "type" => "paragraph", "c | CODE |
| LOW⚡ | spec/models/url_redirect_spec.rb | 1033 | variant2_rich_content = create(:rich_content, entity: variant2, title: "Variant 2 page title", description: [{ " | CODE |
| LOW | spec/models/url_redirect_spec.rb | 1095 | @rich_content = create(:product_rich_content, entity: @product, title: "Page title", description: [{ "type" => " | CODE |
| LOW | spec/models/url_redirect_spec.rb | 1108 | create(:rich_content, entity: variant1, title: "Variant 1 page title", description: [{ "type" => "paragraph", "c | CODE |
| LOW | spec/models/url_redirect_spec.rb | 1109 | variant2_rich_content = create(:rich_content, entity: variant2, title: "Variant 2 page title", description: [{ " | CODE |
| LOW | spec/models/url_redirect_spec.rb | 1277 | { "type" => "paragraph", "content" => [{ "type" => "text", "text" => "Lorem ipsum" }] }, | CODE |
| LOW | spec/models/url_redirect_spec.rb | 1285 | { "type" => "paragraph", "content" => [{ "type" => "text", "text" => "Lorem ipsum" }] }, | CODE |
| 160 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/sidekiq/concerns/deploy_blocking_job_tracking.rb | 10 | # This module is the mechanism behind the deploy pipeline's "wait for the app to say it is | COMMENT |
| MEDIUM | …s/payments/integrations/paypal_integration_rest_api.rb | 15 | # Create a partner (Gumroad) referral for the given merchant which pre-fills the data when that merchant signs up for | COMMENT |
| MEDIUM | app/models/purchase.rb | 2213 | # Creating a url redirect for purchases which are failed but will appear to have gone through to buyer. create_url_r | COMMENT |
| MEDIUM | app/presenters/rendering_extension.rb | 56 | # Creating a new Gumroad requires a confirmed email (the server enforces | COMMENT |
| MEDIUM | app/modules/user/async_devise_notification.rb | 3 | # This module is responsible for sending Devise email notifications via ActiveJob. | COMMENT |
| MEDIUM | app/services/order/charge_service.rb | 22 | # Create a combined charge for all purchases belonging to the same seller | COMMENT |
| MEDIUM | …rvices/dispute_evidence/create_from_dispute_service.rb | 3 | # Create a dispute_evidence record that will be submitted to Stripe | COMMENT |
| MEDIUM | app/services/follower/create_service.rb | 24 | # Creating a Follower row sends a "Please confirm your follow request" email | COMMENT |
| MEDIUM | app/services/creator_analytics/following.rb | 28 | # This method is used for displaying the running total of followers. | COMMENT |
| MEDIUM | app/services/purchase/create_service.rb | 193 | # Creating the dependent analytics row on an unsaved parent raises | COMMENT |
| MEDIUM | config/anycable.yml | 1 | # This file contains per-environment settings for AnyCable. | COMMENT |
| MEDIUM | config/.rails-rubocop.yml | 152 | # Defining a method with parameters needs parentheses. | COMMENT |
| MEDIUM | config/initializers/rpush.rb | 27 | # Define a custom logger. | COMMENT |
| MEDIUM | config/initializers/wrap_parameters.rb | 5 | # This file contains settings for ActionController::ParamsWrapper which | COMMENT |
| MEDIUM | config/initializers/permissions_policy.rb | 5 | # Define an application-wide HTTP permissions policy. For further | COMMENT |
| MEDIUM | config/initializers/content_security_policy.rb | 5 | # Define an application-wide content security policy. | COMMENT |
| MEDIUM | config/initializers/rack_attack.rb | 178 | # Creating a brand account sends a Devise confirmation email to whatever | COMMENT |
| MEDIUM | spec/sidekiq/generate_ssl_certificate_spec.rb | 55 | # Creating the custom domain enqueues its own GenerateSslCertificate | COMMENT |
| MEDIUM | spec/models/concerns/attribute_blockable_spec.rb | 411 | # Create a custom test model with its own blockable attributes | COMMENT |
| MEDIUM | spec/models/concerns/affiliate/cookies_spec.rb | 210 | # Create a padded cookie ID that won't match the affiliate's current cookie_id format | COMMENT |
| MEDIUM | spec/requests/workflows_spec.rb | 1673 | # Create a seller with colon in name (simulating legacy data) | COMMENT |
| MEDIUM | spec/requests/settings/payments_spec.rb | 375 | # Create a fresh user with Stripe Connect but no phone number to simulate the reported bug | COMMENT |
| MEDIUM | spec/requests/discover/blackfriday_spec.rb | 104 | # Create the BLACKFRIDAY2025 offer code and associate it with the product | COMMENT |
| MEDIUM | spec/requests/emails/edit_spec.rb | 88 | create(:seller_profile_posts_section, seller:) # Create a profile section | CODE |
| MEDIUM | spec/requests/emails/create_spec.rb | 567 | # Create a draft email from the "Share" tab of a bundle product | COMMENT |
| MEDIUM | spec/requests/checkout/subscription_restart_spec.rb | 100 | # Create a real Stripe PaymentIntent on the Connect account that requires 3DS action. | COMMENT |
| MEDIUM | …ec/requests/subscription/tiered_membership_sca_spec.rb | 21 | # Create a real Stripe PaymentIntent on the Connect account that requires 3DS action. | COMMENT |
| MEDIUM | spec/support/factories/subscriptions.rb | 27 | # Create a temporary payment_option without validation to satisfy subscription validation | COMMENT |
| MEDIUM | spec/controllers/purchases_controller_spec.rb | 1783 | # Create a purchase with the same external_id as the charge (the bug scenario) | COMMENT |
| MEDIUM | spec/controllers/payouts/exportables_controller_spec.rb | 97 | # Create a payment before the OLDEST_DISPLAYABLE_PAYOUT_PERIOD_END_DATE | COMMENT |
| MEDIUM | spec/controllers/concerns/search_products_spec.rb | 6 | # Create a test controller that includes the concern | COMMENT |
| MEDIUM | spec/services/post_email_api_spec.rb | 95 | # Create an email with local part longer than 64 characters | COMMENT |
| MEDIUM | …ces/content_moderation/moderate_record_service_spec.rb | 135 | # Creating the fixture is itself a moderated save now, so it has to happen | COMMENT |
| MEDIUM | .buildkite/scripts/create_github_release.sh | 54 | # Create the GitHub Release | COMMENT |
| MEDIUM | db/schema.rb | 1 | # This file is auto-generated from the current state of the database. Instead | COMMENT |
| MEDIUM | db/schema.rb | 5 | # This file is the source Rails uses to define your schema when running `bin/rails | COMMENT |
| MEDIUM | db/seeds/010_stripe_merchant_account_seeds.rb | 3 | # Create the shared Stripe merchant account | COMMENT |
| MEDIUM | db/seeds/030_paypal_merchant_account_seeds.rb | 3 | # Create the shared PayPal merchant accounts | COMMENT |
| MEDIUM | db/seeds/020_braintree_merchant_account_seeds.rb | 3 | # Create the shared Braintree merchant accounts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …lementations/stripe/stripe_merchant_account_manager.rb | 248 | # outside of production to facilitate testing and debugging. | COMMENT |
| MEDIUM | app/models/customer_email_info.rb | 12 | # Queries `email_info_charges` first to leverage the index since there is no `purchase_id` on the associated | COMMENT |
| LOW | app/models/order.rb | 111 | # Since the data is identical, we can just use one of the purchases as the source of that data. | COMMENT |
| MEDIUM | app/models/charge.rb | 292 | # Queries `email_info_charges` first to leverage the index since there is no `purchase_id` on the associated | COMMENT |
| MEDIUM | app/modules/product/stats.rb | 7 | # Essentially returns a sum of "active customers" (for each product) | COMMENT |
| LOW | app/controllers/checkout_controller.rb | 97 | # record already has — including the empty hash CartProduct#assign_default_values just set | COMMENT |
| MEDIUM | …rs/global_affiliates/product_eligibility_controller.rb | 28 | # endpoint (GET /l/:permalink.json) to leverage its URL routing — that | COMMENT |
| MEDIUM | test/buildkite_deploy_skip_annotation_test.sh | 14 | # repo root as cwd. Extract each function on its own so the harness is just what it says. | COMMENT |
| MEDIUM | test/sidekiq/send_year_in_review_email_job_test.rb | 11 | # rather than the harness's stubbed client. The CI job runs Elasticsearch as of #6205. | COMMENT |
| MEDIUM | test/models/installment_test.rb | 521 | # Minitest harness stubs EsClient globally (see test_helper.rb), so a live | COMMENT |
| MEDIUM | test/models/link_test.rb | 2296 | # (see Product::Stats), so the harness's canned zero responses would make it | COMMENT |
| MEDIUM | …t/presenters/dashboard_products_page_presenter_test.rb | 13 | # harness installs process-wide is fine. | COMMENT |
| MEDIUM⚡ | test/support/model_factories.rb | 889 | # (monthly_recurring_revenue et al.) that the stubbed-ES Minitest harness | COMMENT |
| MEDIUM | test/support/real_elasticsearch_bridge.rb | 5 | # The harness stubs Elasticsearch process-wide for stability (see test_helper.rb), | COMMENT |
| MEDIUM | test/lib/vcr_bridge_test.rb | 6 | # recorded by the RSpec suite replays under the Minitest harness with no network | COMMENT |
| MEDIUM | test/controllers/api/v2/thumbnails_controller_test.rb | 15 | # The Minitest harness swaps ActiveStorage's default service for a local Disk | COMMENT |
| MEDIUM | spec/services/subscription/updater_service_spec.rb | 1350 | # don't enqueue sale notification for the upgrade purchase to facilitate testing | COMMENT |
| MEDIUM | spec/services/subscription/updater_service_spec.rb | 2662 | # don't enqueue sale notification for the upgrade purchase to facilitate testing | COMMENT |
| MEDIUM | .buildkite/scripts/deploy_production_test.sh | 4 | # That script is never executed by CI (it only ever gets `bash -n`), so this harness is the | COMMENT |
| MEDIUM | .buildkite/scripts/deploy_production_test.sh | 50 | # The real call sites, so the harness tests the ARGUMENTS that actually ship too. | COMMENT |
| MEDIUM | lib/utilities/compliance/countries.rb | 56 | # This list reflects countries under comprehensive OFAC sanctions. | COMMENT |
| MEDIUM | lib/utilities/compliance/countries.rb | 141 | # comprehensive program. Checkout (and other for_select consumers) must not offer it. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/product/prices.rb | 174 | # if more routes open up to change product price, make sure to wrap in transaction and use this method | COMMENT |
| LOW | config/puma.rb | 47 | # you need to make sure to reconnect any threads in the `on_worker_boot` | COMMENT |
| MEDIUM | config/initializers/friendly_id.rb | 58 | # 'slug', but you can change it if you wish. | COMMENT |
| MEDIUM | config/initializers/friendly_id.rb | 62 | # By default, slug has no size limit, but you can change it if you wish. | COMMENT |
| LOW | config/initializers/friendly_id.rb | 101 | # ASCII. If you use this, don't forget to add "babosa" to your Gemfile. | COMMENT |
| LOW | config/initializers/friendly_id.rb | 101 | # ASCII. If you use this, don't forget to add "babosa" to your Gemfile. | COMMENT |
| MEDIUM | …implementations/paypal/paypal_charge_processor_spec.rb | 10 | # - After this point, you can use the PayPal express checkout token for all further operations available in the charge | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/controllers/links_controller_test.rb | 9096 | # still reports the id as requested, the variants updater never removes it. | COMMENT |
| HIGH | spec/services/username_generator_service_spec.rb | 10 | it "returns a username generated by OpenAI", :vcr do | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/web/database_migration.sh | 33 | # Set MIGRATION_LOCK_INDEX to the index of MIGRATION_LOCK_KEY to enable the lock | COMMENT |
| LOW | app/sidekiq/recurring_charge_worker.rb | 57 | # Check if the user has initiated any plan changes that must be applied at | COMMENT |
| LOW | app/controllers/secure_redirect_controller.rb | 46 | # Check if confirmation text matches any of the allowed texts | COMMENT |
| LOW | app/services/ssl_certificates/generate.rb | 69 | # Check if we have hit the rate limit. | COMMENT |
| LOW | config/environments/production.rb | 73 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. | COMMENT |
| LOW | config/environments/staging.rb | 74 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. | COMMENT |
| LOW | spec/requests/discover/discover_domain_spec.rb | 44 | # Set sales_volume to make sure featured products are predictable | COMMENT |
| LOW | .github/workflows/build-test-image.yml | 145 | # Check if the images already exist (content-addressed cache hit). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/javascript/components/Analytics/SalesChart.test.tsx | 96 | // Fix "now" to mid-afternoon so the projection guardrails (first hour of the day, | COMMENT |
| MEDIUM | app/services/charge/presentment_orchestrator.rb | 25 | # closed instead of reporting a generic orchestration failure. | COMMENT |
| MEDIUM | app/services/ai/store_agent_service.rb | 12 | # keeps an LLM hallucination or a prompt injection from silently changing a store. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sidekiq/regenerate_sales_related_products_infos_job.rb | 3 | # WARNING: This job can be very slow, and add a lot of rows to the DB. | COMMENT |
| LOW⚡ | app/models/installment.rb | 613 | # NOTE: This method is now only used in one place (PostPresenter), and shouldn't be expected to create any new records | COMMENT |
| LOW | docs/deploying.md | 68 | #### Step 1: Hotfix branch creation | COMMENT |
| LOW | docs/deploying.md | 101 | #### Step 2: Make changes in the branch as required | COMMENT |
| LOW | docs/deploying.md | 105 | #### Step 3: Actual deployment | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/concerns/unused_columns.rb | 11 | # Example usage: | COMMENT |
| LOW | .agents/skills/gumroad-prod-console/scripts/setup.sh | 6 | # Usage: | COMMENT |
| LOW | …ents/skills/gumroad-prod-console/scripts/prod_query.sh | 3 | # Usage: | COMMENT |
| LOW | spec/support/capybara_helpers.rb | 119 | # Usage: | COMMENT |