The personal finance app for everyone (by everyone)
This report summarizes scanner evidence for we-promise/sure, a Ruby project with 10,476 GitHub stars. SynthScan examined 704,703 lines of code across 5770 source files, recording 2182 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 5.7 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 1660 finding(s).
Are imports declared and package/API names verified? 145 finding(s).
Are wrappers, guards, and repeated structures necessary? 994 finding(s).
Which changes need focused human review? 2182 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 2182 distinct pattern matches across 15 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 |
|---|---|---|---|---|
| MEDIUM⚡ | compose.example.yml | 1 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | compose.example.yml | 3 | # =========================================================================== | COMMENT |
| MEDIUM | compose.example.yml | 23 | # ---------------- | COMMENT |
| MEDIUM | compose.example.yml | 30 | # ---------------------------------------- | COMMENT |
| MEDIUM | compose.example.ai.yml | 1 | # =========================================================================== | COMMENT |
| MEDIUM | compose.example.ai.yml | 4 | # =========================================================================== | COMMENT |
| MEDIUM | compose.example.ai.yml | 44 | # ---------------- | COMMENT |
| MEDIUM | compose.example.ai.yml | 51 | # ---------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/budget.rb | 401 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | app/models/budget.rb | 403 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 443 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 445 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 473 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 475 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/qif_import.rb | 194 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/models/qif_import.rb | 196 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/models/qif_import.rb | 281 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/models/qif_import.rb | 283 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/models/qif_import.rb | 440 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/models/qif_import.rb | 442 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1289 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1291 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1298 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1300 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 452 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 454 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 926 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 928 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1047 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1049 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1072 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1074 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/provider/yahoo_finance.rb | 796 | # ================================ | COMMENT |
| MEDIUM⚡ | app/models/provider/yahoo_finance.rb | 798 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 121 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 123 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 192 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 194 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 568 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 570 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 723 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 725 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 779 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 781 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 968 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 970 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/twelve_data.rb | 60 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/twelve_data.rb | 62 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/twelve_data.rb | 130 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/twelve_data.rb | 132 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/alpha_vantage.rb | 89 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/alpha_vantage.rb | 91 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 80 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 82 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 180 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 182 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 205 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/moex_public.rb | 207 | # ================================ | COMMENT |
| 317 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/snaptrade_account.rb | 199 | def cash_equivalent_position_value(currency_code = currency) | CODE |
| LOW | app/models/category_import.rb | 113 | def ensure_placeholder_category(name) | CODE |
| LOW | app/models/redbark_item.rb | 35 | def import_latest_redbark_data(sync: nil) | CODE |
| LOW | app/models/account.rb | 255 | def create_from_simplefin_account(simplefin_account, account_type, subtype = nil) | CODE |
| LOW | app/models/account.rb | 304 | def create_from_enable_banking_account(enable_banking_account, account_type, subtype = nil) | CODE |
| LOW | app/models/account.rb | 355 | def create_from_coinbase_account(coinbase_account) | CODE |
| LOW | app/models/account.rb | 380 | def create_from_binance_account(binance_account) | CODE |
| LOW | app/models/account.rb | 433 | def create_from_trade_republic_account(trade_republic_account) | CODE |
| LOW⚡ | app/models/account.rb | 452 | def create_from_kraken_account(kraken_account) | CODE |
| LOW⚡ | app/models/account.rb | 458 | def create_from_coinspot_account(coinspot_account) | CODE |
| LOW⚡ | app/models/account.rb | 465 | def create_from_onchain_wallet_account(onchain_wallet_account) | CODE |
| LOW | app/models/account.rb | 487 | def create_from_crypto_exchange_account(provider_account, family:) | CODE |
| LOW | app/models/account.rb | 549 | def build_simplefin_accountable_attributes(simplefin_account, account_type, subtype) | CODE |
| LOW | app/models/entry_search.rb | 65 | def apply_uncategorized_filter(scope, uncategorized) | CODE |
| LOW | app/models/category.rb | 289 | def localized_default_name_for(name) | CODE |
| LOW | app/models/category.rb | 296 | def default_category_translation_key_for(name) | CODE |
| LOW | app/models/investment_statement.rb | 291 | def convert_to_family_currency(amount, from_currency) | CODE |
| LOW | app/models/market_data_importer.rb | 152 | def get_first_required_exchange_rate_date(from_currency:) | CODE |
| LOW | app/models/rule_import.rb | 113 | def extract_conditions_and_actions(fragments) | CODE |
| LOW | app/models/rule_import.rb | 133 | def create_or_update_rule_from_row(row) | CODE |
| LOW | app/models/rule_import.rb | 224 | def resolve_import_condition_value(condition_data) | CODE |
| LOW | app/models/rule_import.rb | 249 | def resolve_import_action_value(action_data) | CODE |
| LOW | app/models/rule_import.rb | 277 | def resolve_import_multi_tag_value(value) | CODE |
| LOW | app/models/goal.rb | 216 | def whole_account_conflicts_on(account_ids, excluding_link_id: nil) | CODE |
| LOW | app/models/invitation.rb | 54 | def release_provider_item_ownership(user) | CODE |
| LOW | app/models/ai_health.rb | 310 | def openai_compatible_provider_name(value) | CODE |
| LOW⚡ | app/models/sure_import.rb | 62 | def dry_run_totals_from_ndjson(content) | CODE |
| LOW⚡ | app/models/sure_import.rb | 66 | def dry_run_totals_from_line_type_counts(counts) | CODE |
| LOW⚡ | app/models/sure_import.rb | 72 | def expected_record_counts_from_ndjson(content) | CODE |
| LOW⚡ | app/models/sure_import.rb | 76 | def expected_record_counts_from_line_type_counts(counts) | CODE |
| LOW | app/models/sure_import.rb | 312 | def build_readback_verification(before_counts:, status_for_mismatch:, reused_counts: {}, created_counts: {}) | CODE |
| LOW | app/models/sophtron_item.rb | 69 | def import_latest_sophtron_data(sync: nil) | CODE |
| LOW | app/models/sophtron_item.rb | 269 | def persist_remote_sophtron_accounts(accounts) | CODE |
| LOW | app/models/brex_account.rb | 190 | def build_institution_metadata(snapshot, kind) | CODE |
| LOW | app/models/provider_merchant.rb | 47 | def convert_to_family_merchant_for(family, attributes = {}) | CODE |
| LOW | app/models/snaptrade_item.rb | 43 | def import_latest_snaptrade_data(sync: nil) | CODE |
| LOW | app/models/indexa_capital_item.rb | 47 | def import_latest_indexa_capital_data(sync: nil) | CODE |
| LOW | app/models/family.rb | 183 | def resolved_categorization_provider(&on_jev_error) | CODE |
| LOW | app/models/family.rb | 221 | def shadow_categorization_provider(&on_jev_error) | CODE |
| LOW | app/models/family.rb | 276 | def request_plaid_transactions_refreshes_later(source:) | CODE |
| LOW | app/models/family.rb | 305 | def secondary_enabled_currency_objects(extra: []) | CODE |
| LOW | app/models/family.rb | 309 | def capture_plaid_refresh_enqueue_failure(source:, error_class:) | CODE |
| LOW | app/models/family.rb | 363 | def auto_share_existing_accounts_with(user) | CODE |
| LOW | app/models/family.rb | 452 | def auto_categorize_transactions_later(transactions, rule_run_id: nil) | CODE |
| LOW | app/models/family.rb | 456 | def auto_categorize_transactions(transaction_ids) | CODE |
| LOW | app/models/family.rb | 482 | def auto_detect_transaction_merchants_later(transactions, rule_run_id: nil) | CODE |
| LOW | app/models/family.rb | 486 | def auto_detect_transaction_merchants(transaction_ids) | CODE |
| LOW | app/models/family.rb | 605 | def securities_with_plan_restrictions(provider:) | CODE |
| LOW | app/models/questrade_account.rb | 142 | def extract_institution_metadata(data) | CODE |
| LOW | app/models/enable_banking_item.rb | 424 | def import_accounts_from_session(accounts_data) | CODE |
| LOW⚡ | app/models/valuation.rb | 11 | def build_reconciliation_name(accountable_type) | CODE |
| LOW⚡ | app/models/valuation.rb | 15 | def build_opening_anchor_name(accountable_type) | CODE |
| LOW⚡ | app/models/valuation.rb | 19 | def build_current_anchor_name(accountable_type) | CODE |
| LOW | app/models/chat.rb | 213 | def undelivered_error_payload(assistant_message) | CODE |
| LOW | app/models/pdf_import.rb | 467 | def partition_already_recorded(candidates) | CODE |
| LOW | app/models/investment.rb | 132 | def subtypes_grouped_for_select(currency: nil) | CODE |
| LOW | app/models/account_statement.rb | 126 | def reconciliation_statuses_for(statements, account:) | CODE |
| LOW | app/models/account_statement.rb | 167 | def allowed_content_types_for_filename(filename) | CODE |
| LOW | app/models/trade_import.rb | 81 | def investment_activity_label_for(qty) | CODE |
| LOW | app/models/transaction.rb | 357 | def set_preloaded_activity_security(security) | CODE |
| 557 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pipelock.example.yaml | 4 | # This file is validated in CI with Pipelock 3.4.0. See the release changelog | COMMENT |
| MEDIUM⚡ | compose.example.yml | 8 | # This file is an example Docker Compose configuration for self hosting | COMMENT |
| MEDIUM | compose.example.ai.yml | 151 | # Create the dirs yourself first so they are owned by your host user | COMMENT |
| MEDIUM | app/models/recurring_transaction.rb | 429 | # Create a manual recurring transfer from an existing Transfer pair. | COMMENT |
| MEDIUM | app/models/recurring_transaction.rb | 483 | # Create a manual recurring transaction from an existing transaction | COMMENT |
| MEDIUM | app/models/assistant/function/import_bank_statement.rb | 132 | # Create a CSV from extracted transactions | COMMENT |
| MEDIUM | app/models/assistant/function/import_bank_statement.rb | 135 | # Create a TransactionImport | COMMENT |
| MEDIUM | …/models/plaid_account/transactions/category_matcher.rb | 11 | # This class is simply a FAST and CHEAP way to match categories that are high confidence. | COMMENT |
| MEDIUM | app/models/family/monobank_connectable.rb | 13 | # Create a Monobank connection with the given personal token and start its first sync. | COMMENT |
| MEDIUM | app/models/family/fio_connectable.rb | 13 | # Create a Fio connection with the given API token and start its first sync. A token | COMMENT |
| MEDIUM | app/models/family/data_exporter.rb | 12 | # Create a StringIO to hold the zip data in memory | COMMENT |
| MEDIUM | app/models/family/data_importer.rb | 662 | # Creating a series generates its own occurrences, so each of these matches | COMMENT |
| MEDIUM | app/models/family/up_connectable.rb | 13 | # Create an Up item with the given token and trigger an initial sync. | COMMENT |
| MEDIUM | app/models/family/auto_transfer_matchable.rb | 129 | # Create the transfer for a matched candidate, tolerating a concurrent sync | COMMENT |
| MEDIUM | app/models/provider/configurable.rb | 125 | # Define a custom check for whether this provider is configured | COMMENT |
| MEDIUM | app/models/provider/configurable.rb | 133 | # Define a configuration field | COMMENT |
| MEDIUM | app/models/sophtron_entry/processor.rb | 137 | # Create a stable merchant ID from the merchant name | COMMENT |
| MEDIUM | app/models/mercury_entry/processor.rb | 99 | # Create a stable merchant ID from the counterparty name | COMMENT |
| MEDIUM | app/models/vector_store/base.rb | 7 | # Create a new vector store / collection / namespace | COMMENT |
| MEDIUM | app/models/eval/langfuse/client.rb | 248 | # Create a new request with the same properties (needed for retry since request body may be consumed) | COMMENT |
| MEDIUM | app/models/coinbase_account/processor.rb | 206 | # Create the trade | COMMENT |
| MEDIUM | app/models/lunchflow_entry/processor.rb | 85 | # Create a deterministic hash from key transaction attributes | COMMENT |
| MEDIUM | app/models/lunchflow_entry/processor.rb | 142 | # Create a stable merchant ID from the merchant name | COMMENT |
| MEDIUM | app/models/concerns/enrichable.rb | 4 | # This module defines how models should, lock, unlock, and edit attributes | COMMENT |
| MEDIUM | app/jobs/rule_job.rb | 18 | # Create the RuleRun record first with pending status | COMMENT |
| MEDIUM | app/jobs/rule_job.rb | 70 | # Create a failed rule run if we hadn't created one yet | COMMENT |
| MEDIUM | app/controllers/lunchflow_items_controller.rb | 185 | # Create the internal Account with proper balance initialization | COMMENT |
| MEDIUM | app/controllers/simplefin_items_controller.rb | 137 | # Create a Sync and enqueue it to run asynchronously with a runtime-only flag | COMMENT |
| MEDIUM | app/controllers/up_items_controller.rb | 28 | # Create an Up connection and kick off its first sync. | COMMENT |
| MEDIUM | app/controllers/snaptrade_items_controller.rb | 641 | # Create the Sure account | COMMENT |
| MEDIUM | app/controllers/plaid_items_controller.rb | 133 | # Create the link via AccountProvider | COMMENT |
| MEDIUM | app/controllers/monobank_items_controller.rb | 13 | # Create a Monobank connection and kick off its first sync. | COMMENT |
| MEDIUM | app/controllers/fio_items_controller.rb | 19 | # Create a Fio connection and kick off its first sync. | COMMENT |
| MEDIUM | app/controllers/fio_items_controller.rb | 130 | # Create a new Sure account for the connection's account and link the two. | COMMENT |
| MEDIUM | app/controllers/oidc_accounts_controller.rb | 174 | # Create the OIDC (or other SSO) identity | COMMENT |
| MEDIUM | app/controllers/enable_banking_items_controller.rb | 257 | # Create the internal Account (uses save! internally, will raise on failure) | COMMENT |
| MEDIUM | app/controllers/mercury_items_controller.rb | 185 | # Create the internal Account with proper balance initialization | COMMENT |
| MEDIUM | app/controllers/api/v1/test_controller.rb | 20 | # Create a mock resource that belongs to a different family | COMMENT |
| MEDIUM | app/controllers/api/v1/tags_controller.rb | 44 | # Create a new tag for the family | COMMENT |
| MEDIUM | test/models/coinstats_item_test.rb | 160 | # Create a linked account | COMMENT |
| MEDIUM | test/models/coinstats_item_test.rb | 178 | # Create an unlinked account | COMMENT |
| MEDIUM | test/models/coinstats_item_test.rb | 209 | # Create a linked account | COMMENT |
| MEDIUM | test/models/coinstats_item_test.rb | 223 | # Create an unlinked account | COMMENT |
| MEDIUM⚡ | test/models/income_statement_test.rb | 711 | # Create a fresh family with ONLY tax-advantaged accounts | COMMENT |
| MEDIUM⚡ | test/models/income_statement_test.rb | 719 | # Create a 401k account (tax-deferred) | COMMENT |
| MEDIUM⚡ | test/models/income_statement_test.rb | 727 | # Create a Roth IRA account (tax-exempt) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 234 | # Create a regular transfer between accounts | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 248 | # Create a loan payment transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 261 | # Create a one-time transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 274 | # Create a payment transaction (credit card payment) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 287 | # Create an excluded transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 348 | # Create a truly empty family | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 380 | # Create a transfer to investment account (marked as investment_contribution) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 429 | # Create a Roth IRA (tax-exempt) investment account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 437 | # Create a dividend transaction in the Roth IRA | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 451 | # Create a 401k (tax-deferred) investment account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 459 | # Create a dividend transaction in the 401k | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 473 | # Create a taxable brokerage account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 481 | # Create a dividend transaction in the taxable account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 495 | # Create a crypto account (default taxable) | COMMENT |
| 138 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pipelock.example.yaml | 1 | # Pipelock configuration for Docker Compose | COMMENT |
| LOW | compose.example.yml | 1 | # =========================================================================== | COMMENT |
| LOW | compose.example.yml | 21 | # | COMMENT |
| LOW | compose.example.yml | 61 | OPENAI_MODEL: ${OPENAI_MODEL:-} | COMMENT |
| LOW | compose.example.ai.yml | 1 | # =========================================================================== | COMMENT |
| LOW | compose.example.ai.yml | 21 | # directly to Sure's /mcp endpoint. Note: /mcp is still reachable | COMMENT |
| LOW | compose.example.ai.yml | 41 | # https://github.com/we-promise/sure/blob/main/docs/hosting/docker.md | COMMENT |
| LOW | compose.example.ai.yml | 81 | # Set both values to activate. MCP_USER_EMAIL must match an existing user's email. | COMMENT |
| LOW | compose.example.ai.yml | 101 | # | COMMENT |
| LOW | compose.example.ai.yml | 141 | image: ghcr.io/luckypipewrench/pipelock:3.4.0@sha256:2e6caa43967a5ef19cacbce00188d829c1b5de1eb0ad304a51d2085f32c5694 | COMMENT |
| LOW | app/constraints/super_admin_constraint.rb | 1 | # Routing constraint for mounting engines that bypass ApplicationController | COMMENT |
| LOW | app/models/snaptrade_account.rb | 81 | # { | COMMENT |
| LOW | app/models/worker_ai_health.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | app/models/worker_ai_health.rb | 21 | # times (or across a few replicas) can see more than one process's result, | COMMENT |
| LOW | app/models/account.rb | 121 | } | COMMENT |
| LOW | app/models/account.rb | 221 | COMMENT | |
| LOW | app/models/investment_statement.rb | 321 | # Callers that need return trends should call combined_holding_trend only | COMMENT |
| LOW | app/models/goal.rb | 1 | class Goal < ApplicationRecord | COMMENT |
| LOW | app/models/goal.rb | 41 | # the monthly job would leave a brand-new one wrong until the 1st, so the | COMMENT |
| LOW | app/models/goal.rb | 81 | # own account lock in association order. Two goals saving links on the same | COMMENT |
| LOW | app/models/goal.rb | 101 | FUNDABLE_ACCOUNT_TYPES = %w[Depository Investment].freeze | COMMENT |
| LOW | app/models/goal.rb | 181 | # Whole-account links held by OTHER goals of this family on any of | COMMENT |
| LOW | app/models/goal.rb | 221 | # two requests can both find no conflict and both commit a whole-account | COMMENT |
| LOW | app/models/goal.rb | 381 | # earmarked slice (goal_accounts.allocated_amount) or — when unallocated — | COMMENT |
| LOW | app/models/goal.rb | 481 | COMMENT | |
| LOW | app/models/goal.rb | 541 | # for counts as found: it did its job. Without that term, coming home from | COMMENT |
| LOW | app/models/goal.rb | 561 | # the transaction is stamped and a second attempt on the same outflow is | COMMENT |
| LOW | app/models/goal.rb | 601 | # A fixed earmark never has that window, because shrinking it caps the | COMMENT |
| LOW | app/models/goal.rb | 701 | (remaining_amount.to_d / months_remaining.to_d).ceil(2) | COMMENT |
| LOW | app/models/goal.rb | 761 | # pending-pledge badge) so the Stimulus controller only has to render | COMMENT |
| LOW | app/models/goal.rb | 1061 | base = contributions_basis? ? net_contributed_for(account) : account.balance.to_d | COMMENT |
| LOW | app/models/goal.rb | 1181 | # already been closed for. | COMMENT |
| LOW | app/models/goal.rb | 1381 | errors.add(:currency, :locked_after_linked) | COMMENT |
| LOW | app/models/sophtron_item.rb | 1 | # Represents a Sophtron integration item for a family. | COMMENT |
| LOW | app/models/entry.rb | 361 | COMMENT | |
| LOW | app/models/sophtron_account.rb | 1 | # Represents a single bank account from Sophtron. | COMMENT |
| LOW | app/models/family.rb | 141 | # without a Current.user (the nightly insights job). Preview access is a | COMMENT |
| LOW | app/models/family.rb | 201 | COMMENT | |
| LOW | app/models/family.rb | 661 | COMMENT | |
| LOW | app/models/family.rb | 761 | # Not a plain `inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }` | COMMENT |
| LOW | app/models/enable_banking_item.rb | 361 | COMMENT | |
| LOW | app/models/insight.rb | 1 | # A proactive, typed observation about a family's finances, produced nightly | COMMENT |
| LOW | app/models/insight.rb | 41 | # Mirrors the DB unique index so direct callers get a validation error | COMMENT |
| LOW | app/models/recurring_occurrence.rb | 1 | # One expected instance of a recurring obligation: the August rent, this | COMMENT |
| LOW | app/models/loan.rb | 21 | # schedule, no tab. VARIABLE_RATE_TYPES is the form's vocabulary only, | COMMENT |
| LOW | app/models/loan.rb | 61 | # Deliberately still nil for a variable loan even though it now has a | COMMENT |
| LOW | app/models/loan.rb | 161 | # Assembles variable_rate_schedule from the form's rows. | COMMENT |
| LOW | app/models/loan.rb | 281 | end | COMMENT |
| LOW | app/models/loan.rb | 441 | # What the loan was written for, which is not always what the account has | COMMENT |
| LOW | app/models/mobile_device.rb | 61 | COMMENT | |
| LOW | app/models/setting.rb | 21 | # Deliberately no OPENROUTER_API_KEY fallback: an operator holding that key | COMMENT |
| LOW | app/models/budget_category.rb | 61 | # ⚠️ Does NOT recompute the rollover chain, on purpose. The caller must | COMMENT |
| LOW | app/models/transaction.rb | 81 | TRANSFER_KINDS = %w[funds_movement cc_payment loan_payment investment_contribution].freeze | COMMENT |
| LOW | app/models/transaction.rb | 121 | # DataEnrichment sources that represent automatic category assignment | COMMENT |
| LOW | app/models/transaction.rb | 141 | # aborts the whole query rather than one row, and it reads "no", "False" and | COMMENT |
| LOW | app/models/transaction.rb | 201 | # Pending transaction scopes - filter based on provider pending flags in extra JSONB | COMMENT |
| LOW | app/models/transaction.rb | 261 | # Overarching grouping method for all transfer-type transactions | COMMENT |
| LOW | app/models/budget.rb | 181 | # --- Cash on hand, next to the plan --- | COMMENT |
| LOW | app/models/goal_pledge.rb | 41 | # | COMMENT |
| LOW | app/models/security.rb | 41 | Setting.brand_fetch_icon_url(base_asset, namespace: "crypto") | COMMENT |
| 513 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/models/goal.rb | 1267 | "#{symbol}#{amount_f.round.to_i.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse}" | CODE |
| CRITICAL | app/models/provider/coinspot_adapter.rb | 21 | coinspot_items = family.coinspot_items.active.credentials_configured.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL | app/models/provider/coinspot_adapter.rb | 116 | credentialed_items = family.coinspot_items.active.credentials_configured.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL | app/models/provider/kraken_adapter.rb | 16 | kraken_items = family.kraken_items.active.credentials_configured.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL | app/models/provider/kraken_adapter.rb | 97 | credentialed_items = family.kraken_items.active.credentials_configured.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL | app/javascript/controllers/sankey_preview_controller.js | 218 | const feedback = this.formTarget.elements.feedback.value.trim(); | CODE |
| CRITICAL | app/controllers/insights_controller.rb | 14 | Current.family.insights.visible.active.update_all(status: "read", read_at: Time.current, updated_at: Time.current) | CODE |
| CRITICAL | app/controllers/insights_controller.rb | 71 | @feed_insights = Current.family.insights.visible.ordered.limit(Insight::FEED_LIMIT).to_a | CODE |
| CRITICAL | app/controllers/categories_controller.rb | 134 | Current.family.categories.alphabetically.roots.where.not(id: @category.id) | CODE |
| CRITICAL | app/controllers/brex_items_controller.rb | 35 | brex_items: Current.family.brex_items.active.ordered.includes(:syncs, :brex_accounts)) | CODE |
| CRITICAL | app/controllers/wise_items_controller.rb | 286 | wise_items: Current.family.wise_items.active.ordered.includes(:syncs, :wise_accounts)) | CODE |
| CRITICAL | app/controllers/pages_controller.rb | 276 | insights = Current.family.insights.visible.ordered.limit(Insight::FEED_LIMIT) | CODE |
| CRITICAL | app/controllers/trade_republic_items_controller.rb | 621 | Current.family.trade_republic_items.active.where.not(id: @trade_republic_item.id) | CODE |
| CRITICAL | app/controllers/accounts_controller.rb | 28 | @fio_items = visible_provider_items(family.fio_items.active.ordered.with_attached_logo.includes(:fio_accounts)) | CODE |
| CRITICAL | app/controllers/kraken_items_controller.rb | 171 | credentialed_items = Current.family.kraken_items.active.credentials_configured.ordered.select(&:credentials_config | CODE |
| CRITICAL | app/controllers/mercury_items_controller.rb | 430 | mercury_items: Current.family.mercury_items.active.ordered.includes(:syncs, :mercury_account | CODE |
| CRITICAL | app/controllers/mercury_items_controller.rb | 709 | Current.family.mercury_items.active.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 271 | @wise_items = Current.family.wise_items.active.ordered.includes(:syncs, :wise_accounts) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 273 | @mercury_items = Current.family.mercury_items.active.ordered.includes(:syncs, :mercury_accounts) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 275 | @brex_items = Current.family.brex_items.active.ordered.includes(:syncs, :brex_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 293 | @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 329 | @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 335 | @questrade_items = Current.family.questrade_items.active.ordered.select(:id) | CODE |
| CRITICAL | app/controllers/settings/api_keys_controller.rb | 9 | @api_keys = Current.user.api_keys.active.visible.order(created_at: :desc) | CODE |
| CRITICAL | app/controllers/settings/api_keys_controller.rb | 57 | @api_key = Current.user.api_keys.active.visible.find(params[:id]) | CODE |
| CRITICAL | test/system/bills_mobile_test.rb | 20 | page.driver.browser.manage.window.resize_to(*PHONE) | CODE |
| CRITICAL | test/system/bills_mobile_test.rb | 24 | page.driver.browser.manage.window.resize_to(1400, 1400) | CODE |
| CRITICAL | test/system/bills_mobile_test.rb | 99 | page.driver.browser.manage.window.resize_to(1920, 1400) | CODE |
| CRITICAL | test/system/bills_mobile_test.rb | 111 | page.driver.browser.manage.window.resize_to(*PHONE) | CODE |
| CRITICAL | test/system/bill_drawer_test.rb | 37 | page.driver.browser.manage.window.resize_to(375, 812) | CODE |
| CRITICAL | test/system/bill_drawer_test.rb | 54 | page.driver.browser.manage.window.resize_to(1400, 1400) | CODE |
| CRITICAL | test/controllers/insights_controller_test.rb | 134 | @user.family.insights.active.where.not(id: @insight.id).update_all(status: "read") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | config/locales/views/settings/api_keys/uk.yml | 34 | your_api_key: "Ваш ключ API" | CODE |
| HIGH | config/locales/views/settings/api_keys/nb.yml | 65 | your_api_key: "Din API-nøkkel" | CODE |
| HIGH | config/locales/views/settings/api_keys/ca.yml | 36 | your_api_key: La teva clau API | CODE |
| HIGH | config/locales/views/settings/api_keys/ca.yml | 119 | your_api_key: La teva clau API | CODE |
| HIGH | config/locales/views/settings/api_keys/pt-BR.yml | 66 | your_api_key: "Sua Chave de API" | CODE |
| HIGH | config/locales/views/settings/api_keys/es.yml | 40 | your_api_key: Tu clave API | CODE |
| HIGH | config/locales/views/settings/api_keys/es.yml | 107 | your_api_key: Tu Clave API | CODE |
| HIGH | config/locales/views/settings/api_keys/hu.yml | 38 | your_api_key: "Az API-kulcsod" | CODE |
| HIGH | config/locales/views/settings/api_keys/hu.yml | 98 | your_api_key: "Az API-kulcsod" | CODE |
| HIGH | config/locales/views/settings/api_keys/ro.yml | 66 | your_api_key: "Cheia ta API" | CODE |
| HIGH | config/locales/views/settings/api_keys/pt-PT.yml | 37 | your_api_key: "A Sua Chave de API" | CODE |
| HIGH | config/locales/views/settings/api_keys/de.yml | 57 | your_api_key: Dein API-Key | CODE |
| HIGH | config/locales/views/settings/api_keys/de.yml | 89 | your_api_key: Dein API-Schlüssel | CODE |
| HIGH | config/locales/views/settings/api_keys/it.yml | 53 | your_api_key: "La tua chiave API" | CODE |
| HIGH | config/locales/views/settings/api_keys/it.yml | 114 | your_api_key: "La tua chiave API" | CODE |
| HIGH | config/locales/views/settings/api_keys/pl.yml | 24 | your_api_key: Twój klucz API | CODE |
| HIGH | config/locales/views/settings/api_keys/pl.yml | 120 | your_api_key: Twój klucz API | CODE |
| HIGH | config/locales/views/settings/api_keys/en.yml | 37 | your_api_key: "Your API Key" | CODE |
| HIGH | config/locales/views/settings/api_keys/ru.yml | 35 | your_api_key: Ваш API-ключ | CODE |
| HIGH | config/locales/views/settings/api_keys/ru.yml | 133 | your_api_key: Ваш API-ключ | CODE |
| HIGH | config/locales/views/settings/api_keys/fr.yml | 30 | your_api_key: Votre clé API | CODE |
| HIGH | config/locales/views/settings/api_keys/fr.yml | 113 | your_api_key: Votre clé API | CODE |
| HIGH | config/locales/views/settings/api_keys/zh-TW.yml | 42 | your_api_key: 您的 API 金鑰 | CODE |
| HIGH | config/locales/views/settings/api_keys/zh-TW.yml | 109 | your_api_key: 您的 API 金鑰 | CODE |
| HIGH | config/locales/views/settings/api_keys/tr.yml | 25 | your_api_key: API Anahtarınız | CODE |
| HIGH | config/locales/views/settings/api_keys/tr.yml | 140 | your_api_key: API Anahtarınız | CODE |
| HIGH | config/locales/views/settings/api_keys/vi.yml | 38 | your_api_key: "Khóa API của bạn" | CODE |
| HIGH | config/locales/views/settings/api_keys/vi.yml | 98 | your_api_key: "Khóa API của bạn" | CODE |
| HIGH | config/locales/views/settings/api_keys/zh-CN.yml | 31 | your_api_key: 您的 API 密钥 | CODE |
| HIGH | config/locales/views/settings/api_keys/zh-CN.yml | 91 | your_api_key: 您的 API 密钥 | CODE |
| HIGH | config/locales/views/settings/api_keys/nl.yml | 66 | your_api_key: "Uw API Key" | CODE |
| HIGH | docs/hosting/ai.md | 1570 | QDRANT_API_KEY=your-api-key # Optional, for authenticated instances | CODE |
| HIGH | docs/llm-guides/adding-a-securities-provider.md | 402 | provider = Provider::YourProvider.new("your_api_key") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/sso_provider_tester.rb | 66 | # Check if issuer matches exactly. OIDC discovery requires the configured | COMMENT |
| LOW | app/models/llm_usage.rb | 250 | # Check if this usage record represents a failed API call | COMMENT |
| LOW | app/models/oidc_identity.rb | 69 | # Check if user is in any of the mapped groups | COMMENT |
| LOW | app/models/enable_banking_account.rb | 30 | # Check if account_id looks like a valid UUID (not an identification_hash) | COMMENT |
| LOW | app/models/setting.rb | 262 | # Check if it's a declared field first | COMMENT |
| LOW | app/models/setting.rb | 291 | # Check if a dynamic field exists (useful to distinguish nil value vs missing key) | COMMENT |
| LOW | app/models/setting.rb | 296 | # Check if dynamic entry exists | COMMENT |
| LOW | app/models/holding.rb | 102 | # Check if this holding's cost_basis can be overwritten by the given source | COMMENT |
| LOW | app/models/holding.rb | 134 | # Check if this holding's security can be changed by provider sync | COMMENT |
| LOW | app/models/holding.rb | 139 | # Check if user has remapped this holding to a different security | COMMENT |
| LOW | app/models/holding.rb | 246 | # Check if cost_basis is known (has a source and positive value) | COMMENT |
| LOW | app/models/simplefin_item.rb | 196 | # Check if linked via legacy FK (use to_s for UUID comparison safety) | COMMENT |
| LOW | app/models/simplefin_item.rb | 202 | # Check if linked via AccountProvider | COMMENT |
| LOW | app/models/simplefin_item.rb | 384 | # Check if last sync was more than 3 days ago | COMMENT |
| LOW | app/models/simplefin_item.rb | 394 | # Check if linked accounts have recent transactions | COMMENT |
| LOW | app/models/simplefin_item.rb | 417 | # Check if the SimpleFin connection needs user attention | COMMENT |
| LOW | app/models/user.rb | 234 | # Check if user has a local password set (can authenticate locally) | COMMENT |
| LOW | app/models/recurring_transaction.rb | 653 | # Check if this recurring transaction should be marked inactive | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 286 | # Check if this account has any stored transactions | COMMENT |
| LOW | app/models/recurring_transaction/identifier.rb | 242 | # Check if the last occurrence was within the last 45 days | COMMENT |
| LOW | app/models/recurring_transaction/identifier.rb | 246 | # Check if transactions occur on similar days (within 5 days of each other) | COMMENT |
| LOW | app/models/provider/openai.rb | 318 | # Check if the specified model supports vision/PDF input | COMMENT |
| LOW | app/models/provider/factory.rb | 59 | # Check if a provider type has a registered adapter | COMMENT |
| LOW | app/models/provider/factory.rb | 82 | # Check if any provider supports a given account type | COMMENT |
| LOW | app/models/provider/syncable.rb | 18 | # Check if the item is currently syncing | COMMENT |
| LOW | app/models/provider/syncable.rb | 30 | # Check if the item requires an update (e.g., re-authentication) | COMMENT |
| LOW | app/models/provider/configurable.rb | 77 | # Check if provider is configured (all required fields present) | COMMENT |
| LOW | app/models/provider/configurable.rb | 162 | # Check if provider is properly configured | COMMENT |
| LOW | app/models/provider/configurable.rb | 225 | # Check if this field has a value | COMMENT |
| LOW | app/models/provider/openai/auto_categorizer.rb | 304 | # Check if one contains the other | COMMENT |
| LOW | app/models/provider/openai/auto_categorizer.rb | 445 | # Check if there's content after the thinking block | COMMENT |
| LOW | app/models/provider/openai/bank_statement_extractor.rb | 152 | # Check if we've seen this exact transaction in a different chunk | COMMENT |
| LOW | app/models/provider/openai/auto_merchant_detector.rb | 196 | # Check if too many nulls OR missing results were returned | COMMENT |
| LOW | app/models/rule/condition_filter/transaction_details.rb | 28 | # Check if extra field is empty or null | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 452 | # Check if holdings are not supported (501 response) | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 477 | # Check if this account has any stored transactions | COMMENT |
| LOW | app/models/eval/sample.rb | 77 | # Check if null is expected | COMMENT |
| LOW | app/models/eval/metrics/chat_metrics.rb | 102 | # Check if this specific function was called correctly | COMMENT |
| LOW⚡ | app/models/eval/runners/categorization_runner.rb | 195 | # Check if actual matches any acceptable category (primary or alternatives) | COMMENT |
| LOW⚡ | app/models/eval/runners/categorization_runner.rb | 203 | # Check if actual matches parent of expected category | COMMENT |
| LOW | app/models/account/linkable.rb | 72 | # Check if account is linked to a specific provider | COMMENT |
| LOW | app/models/account/linkable.rb | 89 | # Check if holdings can be deleted | COMMENT |
| LOW | app/models/account/provider_import_adapter.rb | 115 | # Check if duplicate is protected - if so, link but don't modify | COMMENT |
| LOW | app/models/coinbase_account/processor.rb | 190 | # Check if trade already exists by external_id | COMMENT |
| LOW | app/models/lunchflow_entry/processor.rb | 90 | # Check if entry with this external_id already exists | COMMENT |
| LOW | app/models/lunchflow_entry/processor.rb | 127 | # Check if an entry with this external_id already exists in the account | COMMENT |
| LOW | app/models/lunchflow_entry/processor.rb | 224 | # Check if this transaction is marked as pending | COMMENT |
| LOW | app/models/concerns/enrichable.rb | 109 | # Check if any virtual attributes changed by comparing current value with what we set | COMMENT |
| LOW | app/models/concerns/currency_normalizable.rb | 53 | # Check if a currency code is valid in the Money gem | COMMENT |
| LOW | app/jobs/snaptrade_connection_cleanup_job.rb | 26 | # Check if other accounts still use this authorization | COMMENT |
| LOW | app/jobs/indexa_capital_connection_cleanup_job.rb | 15 | # Check if other accounts still use this connection | COMMENT |
| LOW | app/jobs/identify_recurring_transactions_job.rb | 15 | # Check if this job is stale (a newer one was scheduled) | COMMENT |
| LOW | app/jobs/identify_recurring_transactions_job.rb | 19 | # Check if there are still incomplete syncs - if so, skip and let the last sync trigger it | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 16 | # Check if family has credentials | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 24 | # Check if already cached | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 61 | # Check if family has Lunchflow credentials configured | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 179 | # Check if this lunchflow_account is already linked | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 255 | # Check if account is already linked | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 261 | # Check if family has Lunchflow credentials configured | COMMENT |
| LOW | app/controllers/lunchflow_items_controller.rb | 347 | # Check if account is already linked | COMMENT |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/data_migrations/balance_component_migrator.rb | 4 | # Step 1: Update flows factor | COMMENT |
| LOW⚡ | app/data_migrations/balance_component_migrator.rb | 12 | # Step 2: Set start values using LOCF (Last Observation Carried Forward) | COMMENT |
| LOW | app/data_migrations/balance_component_migrator.rb | 33 | # Step 3: Calculate net inflows | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 12 | # Step 1: Fetch all accounts from Mercury | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 27 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 81 | # Step 3: Fetch transactions only for linked accounts with active status | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 74 | # Step 1: Fetch all accounts from Sophtron | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 89 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 138 | # Step 3: Fetch transactions only for linked accounts with active status | COMMENT |
| LOW | app/models/property/avm_import.rb | 17 | # Step 1: validates the inputs, then spends one provider request. Returns | COMMENT |
| LOW | app/models/property/avm_import.rb | 36 | # Step 2: creates the active property account from the user-confirmed | COMMENT |
| LOW⚡ | app/models/provider/snaptrade.rb | 130 | # Step 1: ask SnapTrade for a device code and the user code to confirm. | COMMENT |
| LOW | app/models/provider/snaptrade.rb | 177 | # Step 2: redeem the device code once the user has confirmed it. Until they | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 19 | # Step 1: Fetch and store all accounts (with connection metadata for institutions) | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 22 | # Step 2: For linked accounts only, fetch transactions and balances. | COMMENT |
| LOW⚡ | app/models/snaptrade_item/importer.rb | 24 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/snaptrade_item/importer.rb | 27 | # Step 2: For LINKED accounts only, fetch holdings and activities | COMMENT |
| LOW⚡ | app/models/questrade_item/importer.rb | 32 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/questrade_item/importer.rb | 35 | # Step 2: For LINKED accounts only, fetch data | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 14 | # Step 1: Fetch all accounts from Lunchflow | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 39 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 32 | # Step 1: Update the provider merchant with website + logo | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 38 | # Step 2: Deduplicate — find other merchants with the same website_url | COMMENT |
| LOW⚡ | app/models/indexa_capital_item/importer.rb | 24 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/indexa_capital_item/importer.rb | 27 | # Step 2: For LINKED accounts only, fetch holdings data | COMMENT |
| LOW | app/models/simplefin_item/importer.rb | 532 | # Step 2: Fetch transactions/holdings using the regular window. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 17 | # Step 1: Claim the new token and update the existing item's access_url. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 21 | # Step 2: Sync the item to import fresh data. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 19 | # Step 1: Validate token and fetch profiles, then proceed to profile selection. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 50 | # Step 2: Show profile selection. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 62 | # Step 3: Create one WiseItem per selected profile. | COMMENT |
| LOW | app/controllers/properties_controller.rb | 141 | # Step 1: spend one provider request, then show the fetched data for | COMMENT |
| LOW⚡ | app/controllers/onchain_wallet_items_controller.rb | 49 | # Step 1: paste an address. | COMMENT |
| LOW⚡ | app/controllers/onchain_wallet_items_controller.rb | 54 | # Step 2: work out the chain if it wasn't given, then show what is there. | COMMENT |
| LOW | app/controllers/onchain_wallet_items_controller.rb | 87 | # Step 3: track the assets that were ticked. | COMMENT |
| LOW | test/models/balance/forward_calculator_test.rb | 785 | # Step 1: Create account with a EUR entry and a stale exchange rate (1:1 EUR→USD). | COMMENT |
| LOW⚡ | test/models/balance/forward_calculator_test.rb | 803 | # Step 2: Corrected exchange rate arrives later (e.g. daily cron imports it). | COMMENT |
| LOW⚡ | test/models/balance/forward_calculator_test.rb | 806 | # Step 3: Next sync requests incremental from today — but the guard should | COMMENT |
| LOW⚡ | test/system/property_test.rb | 85 | # Step 2: Enter balance information | COMMENT |
| LOW⚡ | test/system/property_test.rb | 90 | # Step 3: Enter address information | COMMENT |
| LOW | test/system/accounts_test.rb | 26 | # Step 1: Select property type and enter basic details | COMMENT |
| LOW⚡ | test/system/accounts_test.rb | 37 | # Step 2: Enter balance information | COMMENT |
| LOW⚡ | test/system/accounts_test.rb | 42 | # Step 3: Enter address information | COMMENT |
| LOW | docs/hosting/docker.md | 9 | ### Step 1: Install Docker | COMMENT |
| LOW | docs/hosting/docker.md | 22 | ### Step 2: Configure your Docker Compose file and environment | COMMENT |
| LOW | docs/hosting/docker.md | 168 | ### Step 4: Run the app | COMMENT |
| LOW | docs/hosting/docker.md | 182 | ### Step 5: Create your account | COMMENT |
| LOW | docs/hosting/docker.md | 199 | ### Step 6: Run the app in the background | COMMENT |
| LOW | docs/hosting/docker.md | 213 | ### Step 7: Enjoy! | COMMENT |
| LOW | docs/hosting/hetzner.md | 14 | ## Step 1: Server Setup and Security | COMMENT |
| LOW | docs/hosting/hetzner.md | 53 | ## Step 2: Create Application Directory | COMMENT |
| LOW | docs/hosting/hetzner.md | 64 | ## Step 3: Configure Environment Variables | COMMENT |
| LOW | docs/hosting/hetzner.md | 93 | ## Step 4: Set Up Reverse Proxy with SSL | COMMENT |
| LOW | docs/hosting/hetzner.md | 140 | ## Step 5: Deploy the Application | COMMENT |
| LOW | docs/hosting/hetzner.md | 161 | ## Step 6: Test the Deployment | COMMENT |
| LOW | docs/hosting/hetzner.md | 189 | ## Step 7: Set Up Automated Backups | COMMENT |
| LOW | docs/hosting/hetzner.md | 234 | ## Step 8: Set Up Basic Monitoring | COMMENT |
| LOW | docs/llm-guides/adding-a-securities-provider.md | 29 | ## Step 1: Create the Provider Class | COMMENT |
| LOW | docs/llm-guides/adding-a-securities-provider.md | 271 | ## Step 2: Register in the Provider Registry | COMMENT |
| LOW | docs/llm-guides/adding-a-securities-provider.md | 307 | ## Step 3: Add Settings | COMMENT |
| 10 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/data_migrations/balance_component_migrator.rb | 4 | # Step 1: Update flows factor | COMMENT |
| LOW⚡ | app/data_migrations/balance_component_migrator.rb | 12 | # Step 2: Set start values using LOCF (Last Observation Carried Forward) | COMMENT |
| LOW | app/data_migrations/balance_component_migrator.rb | 33 | # Step 3: Calculate net inflows | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 12 | # Step 1: Fetch all accounts from Mercury | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 27 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW | app/models/mercury_item/importer.rb | 81 | # Step 3: Fetch transactions only for linked accounts with active status | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 74 | # Step 1: Fetch all accounts from Sophtron | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 89 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW | app/models/sophtron_item/importer.rb | 138 | # Step 3: Fetch transactions only for linked accounts with active status | COMMENT |
| LOW | app/models/property/avm_import.rb | 17 | # Step 1: validates the inputs, then spends one provider request. Returns | COMMENT |
| LOW | app/models/property/avm_import.rb | 36 | # Step 2: creates the active property account from the user-confirmed | COMMENT |
| LOW⚡ | app/models/provider/snaptrade.rb | 130 | # Step 1: ask SnapTrade for a device code and the user code to confirm. | COMMENT |
| LOW | app/models/provider/snaptrade.rb | 177 | # Step 2: redeem the device code once the user has confirmed it. Until they | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 19 | # Step 1: Fetch and store all accounts (with connection metadata for institutions) | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 22 | # Step 2: For linked accounts only, fetch transactions and balances. | COMMENT |
| LOW⚡ | app/models/snaptrade_item/importer.rb | 24 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/snaptrade_item/importer.rb | 27 | # Step 2: For LINKED accounts only, fetch holdings and activities | COMMENT |
| LOW⚡ | app/models/questrade_item/importer.rb | 32 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/questrade_item/importer.rb | 35 | # Step 2: For LINKED accounts only, fetch data | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 14 | # Step 1: Fetch all accounts from Lunchflow | COMMENT |
| LOW | app/models/lunchflow_item/importer.rb | 39 | # Step 2: Update linked accounts and create records for new accounts from API | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 32 | # Step 1: Update the provider merchant with website + logo | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 38 | # Step 2: Deduplicate — find other merchants with the same website_url | COMMENT |
| LOW⚡ | app/models/indexa_capital_item/importer.rb | 24 | # Step 1: Fetch and store all accounts | COMMENT |
| LOW⚡ | app/models/indexa_capital_item/importer.rb | 27 | # Step 2: For LINKED accounts only, fetch holdings data | COMMENT |
| LOW | app/models/concerns/enrichable.rb | 105 | # So we need to check if the value actually changed by comparing before/after | COMMENT |
| LOW | app/models/simplefin_item/importer.rb | 532 | # Step 2: Fetch transactions/holdings using the regular window. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 17 | # Step 1: Claim the new token and update the existing item's access_url. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 21 | # Step 2: Sync the item to import fresh data. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 19 | # Step 1: Validate token and fetch profiles, then proceed to profile selection. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 50 | # Step 2: Show profile selection. | COMMENT |
| LOW | app/controllers/wise_items_controller.rb | 62 | # Step 3: Create one WiseItem per selected profile. | COMMENT |
| LOW | app/controllers/properties_controller.rb | 141 | # Step 1: spend one provider request, then show the fetched data for | COMMENT |
| LOW⚡ | app/controllers/onchain_wallet_items_controller.rb | 49 | # Step 1: paste an address. | COMMENT |
| LOW⚡ | app/controllers/onchain_wallet_items_controller.rb | 54 | # Step 2: work out the chain if it wasn't given, then show what is there. | COMMENT |
| LOW | app/controllers/onchain_wallet_items_controller.rb | 87 | # Step 3: track the assets that were ticked. | COMMENT |
| LOW | test/models/balance/forward_calculator_test.rb | 785 | # Step 1: Create account with a EUR entry and a stale exchange rate (1:1 EUR→USD). | COMMENT |
| LOW⚡ | test/models/balance/forward_calculator_test.rb | 803 | # Step 2: Corrected exchange rate arrives later (e.g. daily cron imports it). | COMMENT |
| LOW⚡ | test/models/balance/forward_calculator_test.rb | 806 | # Step 3: Next sync requests incremental from today — but the guard should | COMMENT |
| LOW⚡ | test/system/property_test.rb | 85 | # Step 2: Enter balance information | COMMENT |
| LOW⚡ | test/system/property_test.rb | 90 | # Step 3: Enter address information | COMMENT |
| LOW | test/system/accounts_test.rb | 26 | # Step 1: Select property type and enter basic details | COMMENT |
| LOW⚡ | test/system/accounts_test.rb | 37 | # Step 2: Enter balance information | COMMENT |
| LOW⚡ | test/system/accounts_test.rb | 42 | # Step 3: Enter address information | COMMENT |
| LOW⚡ | mobile/lib/services/sync_service.dart | 543 | // Step 1: Process pending deletes (do this first to free up resources) | COMMENT |
| LOW⚡ | mobile/lib/services/sync_service.dart | 549 | // Step 2: Upload pending transactions | COMMENT |
| LOW⚡ | mobile/lib/services/sync_service.dart | 555 | // Step 3: Download transactions from server | COMMENT |
| LOW⚡ | mobile/lib/services/sync_service.dart | 561 | // Step 4: Sync accounts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/demo/generator.rb | 47 | create_family_and_users!("Demo Family", "user@example.com", onboarded: true, subscribed: true) | CODE |
| LOW | app/models/demo/generator.rb | 62 | create_family_and_users!("Demo Family", "user@example.com", onboarded: false, subscribed: false) | CODE |
| LOW | app/models/demo/generator.rb | 91 | def generate_default_data!(skip_clear: false, email: "user@example.com") | CODE |
| LOW | app/models/account/provider_import_adapter.rb | 363 | # This handles case variations in merchant names (e.g., "ACME Corp" vs "Acme Corp") | COMMENT |
| LOW | test/integration/rack_attack_test.rb | 60 | assert_equal "user@example.com", email_block.call(login_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 103 | assert_equal "user@example.com", api_login_email_block.call(api_login_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 107 | assert_equal "user@example.com", api_sso_link_email_block.call(sso_link_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 129 | request = throttle_request("/sessions.json", method: "POST", params: { "email" => "user@example.com" }) | CODE |
| LOW | test/integration/rack_attack_test.rb | 131 | assert_equal "user@example.com", email_block.call(request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 145 | unrelated_request = throttle_request("/sessions_other", method: "POST", params: { "email" => "user@example.com" }) | CODE |
| LOW | test/integration/rack_attack_test.rb | 165 | request = throttle_request("/api/v1/auth/login", method: "POST", non_rewindable_json_body: { email: "user@example.co | CODE |
| LOW | test/integration/rack_attack_test.rb | 172 | assert_equal({ "email" => "user@example.com" }, JSON.parse(request.body.read)) | CODE |
| LOW | test/models/provider_merchant_test.rb | 57 | { field: "name", imported_value: "Acme Inc", kept_value: "Acme" } ], | CODE |
| LOW | test/models/provider_merchant_test.rb | 58 | merchant.import_diff({ "name" => "Acme Inc", "website_url" => "https://acme.io" }) | CODE |
| LOW | test/models/indexa_capital_item_test.rb | 37 | username: "user@example.com", document: "12345678A", password: "secret" | CODE |
| LOW | test/models/address_test.rb | 6 | line1: "123 Main St", | CODE |
| LOW | test/models/address_test.rb | 18 | line1: "123 Main St", | CODE |
| LOW⚡ | test/models/user_test.rb | 57 | user = User.new(email: "user@example.com") | CODE |
| LOW⚡ | test/models/user_test.rb | 58 | assert_equal "user@example.com", user.display_name | CODE |
| LOW⚡ | test/models/user_test.rb | 66 | user = User.new(email: "user@example.com") | CODE |
| LOW | test/models/provider/anthropic_test.rb | 70 | Setting.stubs(:anthropic_access_token).returns("fake-token-1") | CODE |
| LOW | test/models/provider/anthropic_test.rb | 74 | ClimateControl.modify("ANTHROPIC_API_KEY" => "fake-token-2") do | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 78 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 81 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 89 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 92 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 100 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 103 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 225 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 228 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 236 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 240 | line1: "123 Main Street", | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 261 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 264 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 273 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW⚡ | test/models/provider/realie_test.rb | 279 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW | test/models/provider/realie_test.rb | 53 | query: { "address" => "123 Main Street", "state" => "CA" }, | CODE |
| LOW | test/models/provider/realie_test.rb | 59 | line1: "123 Main Street", | CODE |
| LOW | test/models/provider/realie_test.rb | 114 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW | test/models/provider/realie_test.rb | 118 | line1: "123 Main Street", | CODE |
| LOW | test/models/provider/realie_test.rb | 132 | .with(query: hash_including("address" => "123 Main Street")) | CODE |
| LOW | test/models/provider/realie_test.rb | 136 | line1: "123 Main Street", | CODE |
| LOW | test/models/provider/realie_test.rb | 201 | query: { "address" => "123 Main Street", "state" => "CA" }, | CODE |
| LOW | test/models/provider/realie_test.rb | 207 | line1: "123 Main Street", | CODE |
| LOW | test/models/provider/realie_test.rb | 290 | response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA") | CODE |
| LOW | test/models/provider/indexa_capital_test.rb | 13 | username: "user@example.com", | CODE |
| LOW | test/models/provider/indexa_capital_test.rb | 28 | Provider::IndexaCapital.new(username: "user@example.com") | CODE |
| LOW | test/models/provider/indexa_capital_test.rb | 32 | Provider::IndexaCapital.new(username: "user@example.com", document: "12345678A") | CODE |
| LOW | …ls/provider/anthropic/bank_statement_extractor_test.rb | 16 | "account_holder" => "Jane Doe", | CODE |
| LOW | …ls/provider/anthropic/bank_statement_extractor_test.rb | 37 | assert_equal "Jane Doe", result[:account_holder] | CODE |
| LOW | …odels/provider/openai/bank_statement_extractor_test.rb | 15 | "account_holder" => "John Doe", | CODE |
| LOW | …odels/provider/openai/bank_statement_extractor_test.rb | 46 | assert_equal "John Doe", result[:account_holder] | CODE |
| LOW | …odels/provider/openai/bank_statement_extractor_test.rb | 89 | "account_holder" => "John Doe", | CODE |
| LOW⚡ | test/models/mercury_entry/processor_test.rb | 58 | process(tx(counterparty_name: "Acme Corp")) | CODE |
| LOW⚡ | test/models/mercury_entry/processor_test.rb | 59 | assert_equal "Acme Corp", @account.entries.last.name | CODE |
| LOW | test/models/questrade_account/processor_test.rb | 8 | @questrade_item = @family.questrade_items.create!(name: "Test", refresh_token: "dummy-token") | CODE |
| LOW⚡ | test/system/property_test.rb | 92 | fill_in "Address Line 1", with: "123 Main St" | CODE |
| LOW | test/system/property_test.rb | 106 | assert_equal "123 Main St", created_account.property.address.line1 | CODE |
| LOW⚡ | test/system/accounts_test.rb | 44 | fill_in "Address Line 1", with: "123 Main St" | CODE |
| LOW | test/system/accounts_test.rb | 58 | assert_equal "123 Main St", created_account.property.address.line1 | CODE |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | compose.example.ai.yml | 100 | # turn, so it has to be sized as a sum rather than simply set higher: | COMMENT |
| LOW | app/models/redbark_item.rb | 16 | # Validate on every save, not just create - an update must never blank the key | COMMENT |
| MEDIUM | app/models/loan.rb | 37 | # amortises what was actually lent -- but it is what makes leverage readable: | COMMENT |
| MEDIUM | app/models/loan.rb | 52 | # it is a loan whose leverage nobody has told us. | COMMENT |
| MEDIUM | app/models/loan.rb | 453 | # principal, the insurance base, how much has been repaid, and the leverage | COMMENT |
| LOW | app/models/simplefin_account.rb | 109 | # For custom currency URLs, we'll just use the last part as currency code | COMMENT |
| MEDIUM | app/models/assistant.rb | 11 | # Statement Vault + provenance tools back the wealth agent-harness workflow | COMMENT |
| MEDIUM | app/models/assistant.rb | 12 | # documented in docs/llm-guides/wealth-agent-harness.md. GetValuations is the | COMMENT |
| MEDIUM | app/models/holding.rb | 217 | # typically be for real tickers not CUSTOM: ones. A more robust solution would track which | COMMENT |
| LOW | app/models/simplefin_item.rb | 214 | # We don't destroy it because has_one :account, dependent: :nullify would nullify the FK we just set | COMMENT |
| LOW | app/models/simplefin_item.rb | 216 | # trigger autosave on the preloaded account association, reverting the FK we just set! | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 90 | # Generate comprehensive realistic demo data with multi-currency | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 310 | # leverage and insurance cards rather than hiding both. | COMMENT |
| MEDIUM | …ls/simplefin_account/investments/holdings_processor.rb | 52 | # Parse provider data with robust fallbacks across SimpleFin sources | COMMENT |
| MEDIUM | test/models/demo/generator_test.rb | 122 | # The leverage card reads the loan's down payment; the cash-flow history | COMMENT |
| LOW | test/models/coinstats_account/processor_test.rb | 36 | # Should not raise, just return early | COMMENT |
| LOW | test/models/portfolio/xirr_test.rb | 352 | # ends stops a future "just use a safer constant" from quietly reintroducing | COMMENT |
| MEDIUM | test/controllers/loans_controller_test.rb | 11 | # The overview only shows what the loan actually records: a leverage figure | COMMENT |
| MEDIUM | test/controllers/loans_controller_test.rb | 79 | # A negative opening valuation (imports produce them) has no leverage band, | COMMENT |
| LOW | test/controllers/settings/providers_controller_test.rb | 414 | # Entry should be removed, not just set to nil | COMMENT |
| LOW | config/initializers/00_ssl.rb | 257 | # Fallback: just use the custom CA (may break connections to public services) | COMMENT |
| MEDIUM | lib/generators/provider/family/family_generator.rb | 217 | # This approach is more robust than trying to append to an existing include line | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/models/assistant/token_budget.rb | 4 | # Shared resolution of the model's context window so prompt assembly and the | COMMENT |
| MEDIUM | app/models/sophtron_item/importer.rb | 5 | # This class orchestrates the complete import process for a SophtronItem: | COMMENT |
| MEDIUM | app/models/sophtron_item/syncer.rb | 26 | # This method orchestrates all phases of the sync: | COMMENT |
| MEDIUM | app/models/provider/openai.rb | 465 | # caller batches are split to fit the model's context window. `fixed` is | COMMENT |
| MEDIUM | app/models/provider/openai/auto_merchant_detector.rb | 462 | # Enhanced developer message with few-shot examples for smaller/local LLMs | COMMENT |
| MEDIUM | app/models/vector_store/embeddable.rb | 39 | # embedding model token limits. | COMMENT |
| MEDIUM | app/models/vector_store/pgvector.rb | 10 | # - An embedding model endpoint (EMBEDDING_URI_BASE / EMBEDDING_MODEL) | COMMENT |
| MEDIUM | app/models/vector_store/qdrant.rb | 4 | # Like the Pgvector adapter you still supply your own embedding model; Qdrant | COMMENT |
| MEDIUM | app/models/vector_store/qdrant.rb | 10 | # - An embedding model endpoint (EMBEDDING_MODEL_URL / EMBEDDING_MODEL_NAME) | COMMENT |
| MEDIUM | app/controllers/pages_controller.rb | 4 | # Per-widget dashboard layout guardrails. Deterministic defaults the masonry | COMMENT |
| MEDIUM | app/controllers/pages_controller.rb | 314 | # Resolves a section's layout guardrails, applying the user's height preset | COMMENT |
| MEDIUM | test/models/demo/generator_test.rb | 201 | # the public orchestration. Unrelated history and provider syncs are omitted | COMMENT |
| MEDIUM | test/models/demo/generator_test.rb | 233 | # Exercise the actual account/transaction orchestration without generating | COMMENT |
| MEDIUM | test/models/assistant/configurable_test.rb | 48 | # The roster only itemizes when the model's context window is comfortable | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/models/assistant/function/update_bill.rb | 175 | error: "No account named #{params["account_name"].inspect} that you can add bills to", | CODE |
| MEDIUM | app/models/assistant/function/create_bill.rb | 144 | error: "No account named #{name.inspect} that you can add bills to", | CODE |
| MEDIUM | config/initializers/doorkeeper.rb | 414 | # For example you can add an additional database column to `oauth_applications` table, | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 71 | # Don't forget to include Doorkeeper ORM mixins into your custom models: | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 102 | # [NOTE] If you apply this option on already existing project don't forget to manually | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 102 | # [NOTE] If you apply this option on already existing project don't forget to manually | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 536 | # them to make sure you doesn't get NoMethodError exception. | COMMENT |
| MEDIUM | spec/spec_helper.rb | 48 | # with RSpec, but feel free to customize to your heart's content. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/concerns/currency_normalizable.rb | 9 | # Usage: | COMMENT |
| LOW | app/jobs/snaptrade_activities_fetch_job.rb | 7 | # Usage: | COMMENT |
| LOW | app/services/provider_loader.rb | 6 | # Usage: | COMMENT |
| LOW | test/support/provider_adapter_test_interface.rb | 4 | # Usage: | COMMENT |
| LOW | lib/generators/provider/family/family_generator.rb | 6 | # Usage: | COMMENT |
| LOW | lib/generators/provider/global/global_generator.rb | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/controllers/rules_controller_test.rb | 476 | # raising it, which would otherwise log the reset as requested and redirect | COMMENT |