The personal finance app for everyone (by everyone)
This report summarizes scanner evidence for we-promise/sure, a Ruby project with 10,742 GitHub stars. SynthScan examined 774,680 lines of code across 6122 source files, recording 2378 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 5.5 (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.
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? 1833 finding(s).
Are imports declared and package/API names verified? 158 finding(s).
Are wrappers, guards, and repeated structures necessary? 1083 finding(s).
Which changes need focused human review? 2378 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 2378 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 | 407 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | app/models/budget.rb | 409 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 449 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 451 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 479 | # ============================================================================= | COMMENT |
| MEDIUM | app/models/budget.rb | 481 | # ============================================================================= | 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 | 1334 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1336 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1343 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app/models/demo/generator.rb | 1345 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 479 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 481 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 953 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 955 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1092 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1094 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1117 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1269 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 1271 | # --------------------------------------------------------------------------- | 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 | 977 | # ================================ | COMMENT |
| MEDIUM | app/models/provider/yahoo_finance.rb | 979 | # ================================ | 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 |
| 327 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/models/snaptrade_account.rb | 202 | 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 | 40 | def import_latest_redbark_data(sync: nil, fetched_at: Time.current) | CODE |
| LOW | app/models/account.rb | 301 | def create_from_simplefin_account(simplefin_account, account_type, subtype = nil) | CODE |
| LOW | app/models/account.rb | 350 | def create_from_enable_banking_account(enable_banking_account, account_type, subtype = nil) | CODE |
| LOW | app/models/account.rb | 401 | def create_from_coinbase_account(coinbase_account) | CODE |
| LOW | app/models/account.rb | 426 | def create_from_binance_account(binance_account) | CODE |
| LOW | app/models/account.rb | 479 | def create_from_trade_republic_account(trade_republic_account) | CODE |
| LOW⚡ | app/models/account.rb | 498 | def create_from_kraken_account(kraken_account) | CODE |
| LOW⚡ | app/models/account.rb | 504 | def create_from_coinspot_account(coinspot_account) | CODE |
| LOW⚡ | app/models/account.rb | 511 | def create_from_onchain_wallet_account(onchain_wallet_account) | CODE |
| LOW | app/models/account.rb | 533 | def create_from_crypto_exchange_account(provider_account, family:) | CODE |
| LOW | app/models/account.rb | 595 | def build_simplefin_accountable_attributes(simplefin_account, account_type, subtype) | CODE |
| LOW | app/models/account.rb | 916 | def restore_status_after_failed_enqueue(restoring) | CODE |
| LOW | app/models/category.rb | 290 | def localized_default_name_for(name) | CODE |
| LOW | app/models/category.rb | 297 | 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 | 123 | def extract_conditions_and_actions(fragments) | CODE |
| LOW | app/models/rule_import.rb | 143 | def create_or_update_rule_from_row(row) | CODE |
| LOW | app/models/rule_import.rb | 241 | def resolve_import_condition_value(condition_data) | CODE |
| LOW | app/models/rule_import.rb | 266 | def resolve_import_action_value(action_data) | CODE |
| LOW | app/models/rule_import.rb | 296 | def resolve_import_multi_tag_value(value) | CODE |
| LOW | app/models/rule_import.rb | 304 | def resolve_import_split_value(value) | CODE |
| LOW | app/models/redbark_account.rb | 106 | def normalized_liability_balance(balance:, accountable_type: nil, account: nil) | CODE |
| LOW | app/models/goal.rb | 220 | def whole_account_conflicts_on(account_ids, excluding_link_id: nil) | CODE |
| LOW | app/models/income_statement.rb | 149 | def daily_expense_category_ids(period:) | CODE |
| LOW | app/models/income_statement.rb | 265 | def unfiltered_daily_expense_series(period) | CODE |
| LOW | app/models/income_statement.rb | 284 | def daily_expense_by_category(period) | 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 | 313 | 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 | 78 | 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 | 197 | def resolved_categorization_provider(&on_jev_error) | CODE |
| LOW | app/models/family.rb | 235 | def shadow_categorization_provider(&on_jev_error) | CODE |
| LOW | app/models/family.rb | 296 | def request_plaid_transactions_refreshes_later(source:) | CODE |
| LOW | app/models/family.rb | 325 | def secondary_enabled_currency_objects(extra: []) | CODE |
| LOW | app/models/family.rb | 329 | def capture_plaid_refresh_enqueue_failure(source:, error_class:) | CODE |
| LOW | app/models/family.rb | 383 | def auto_share_existing_accounts_with(user) | CODE |
| LOW⚡ | app/models/family.rb | 504 | def auto_categorize_transactions_later(transactions, rule_run_id: nil) | CODE |
| LOW⚡ | app/models/family.rb | 510 | def auto_categorize_transactions(transaction_ids) | CODE |
| LOW⚡ | app/models/family.rb | 518 | def bayes_categorize_uncategorized(scope = categorizable_transactions) | CODE |
| LOW | app/models/family.rb | 600 | def auto_detect_transaction_merchants_later(transactions, rule_run_id: nil) | CODE |
| LOW | app/models/family.rb | 604 | def auto_detect_transaction_merchants(transaction_ids) | CODE |
| LOW | app/models/family.rb | 732 | 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/rule.rb | 200 | def scope_for_transaction_ids(ids) | CODE |
| LOW⚡ | app/models/valuation.rb | 12 | def build_reconciliation_name(accountable_type) | CODE |
| LOW⚡ | app/models/valuation.rb | 17 | def build_opening_anchor_name(accountable_type) | CODE |
| LOW⚡ | app/models/valuation.rb | 22 | def build_current_anchor_name(accountable_type) | CODE |
| 636 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 | 141 | delegated_type :accountable, types: Accountable::TYPES, dependent: :destroy | COMMENT |
| LOW | app/models/account.rb | 261 | manager = Account::OpeningBalanceManager.new(account) | COMMENT |
| LOW | app/models/account.rb | 561 | # An exchange account's ledger is imported from inception, so it opens at | COMMENT |
| LOW | app/models/account.rb | 681 | end | COMMENT |
| LOW | app/models/account.rb | 721 | # DestroyJob retries a deadlock, so the account stays pending_deletion (and | COMMENT |
| LOW | app/models/investment_statement.rb | 321 | # Callers that need return trends should call combined_holding_trend only | COMMENT |
| LOW | app/models/redbark_account.rb | 21 | validates :name, :currency, :redbark_account_id, presence: true | COMMENT |
| LOW | app/models/redbark_account.rb | 41 | # unrelated update! (upsert_from_redbark! touching balance, name, currency | COMMENT |
| LOW | app/models/redbark_account.rb | 81 | # * Plaid (US / CA) reports the amount owed as a POSITIVE balance for | COMMENT |
| LOW | app/models/redbark_account.rb | 101 | # @param accountable_type [String] the accountable type of the Sure account | 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 | # than permanently snapshot a partial subtotal. | COMMENT |
| LOW | app/models/goal.rb | 101 | COMMENT | |
| LOW | app/models/goal.rb | 141 | # in December — so RefreshMaintainedGoalTargetsJob rewrites `target_amount` | COMMENT |
| LOW | app/models/goal.rb | 181 | triples.map { |(_, goal_id, amount)| { goal_id: goal_id, allocated_amount: amount } } | COMMENT |
| LOW | app/models/goal.rb | 221 | ids = Array(account_ids).compact | COMMENT |
| LOW | app/models/goal.rb | 521 | convert_to_goal_currency(median).to_d.positive? | COMMENT |
| LOW | app/models/goal.rb | 581 | Money.new(amount, currency) | COMMENT |
| LOW | app/models/goal.rb | 601 | # guessing would silently pick a side; the caller has to say which pot the | COMMENT |
| LOW | app/models/goal.rb | 641 | if native_amount > link.allocated_amount.to_d | COMMENT |
| LOW | app/models/goal.rb | 821 | def projection_payload | COMMENT |
| LOW | app/models/goal.rb | 1121 | base = contributions_basis? ? net_contributed_for(account) : account.balance.to_d | COMMENT |
| LOW | app/models/goal.rb | 1241 | end | COMMENT |
| LOW | app/models/goal.rb | 1261 | attrs[:consumed_amount] = 0 if completed_amount.present? | COMMENT |
| LOW | app/models/goal.rb | 1441 | COMMENT | |
| LOW | app/models/income_statement.rb | 121 | currency: family.currency | COMMENT |
| LOW | app/models/sophtron_item.rb | 1 | # Represents a Sophtron integration item for a family. | COMMENT |
| LOW | app/models/entry.rb | 41 | validate :cannot_unexclude_split_parent | COMMENT |
| LOW | app/models/entry.rb | 421 | # Checks if entry should be protected from provider sync overwrites. | COMMENT |
| LOW | app/models/entry.rb | 621 | end | COMMENT |
| LOW | app/models/entry.rb | 741 | # category or merchant selected either still fails the presence | COMMENT |
| LOW | app/models/background_job_health.rb | 1 | require "sidekiq/api" | COMMENT |
| LOW | app/models/sophtron_account.rb | 1 | # Represents a single bank account from Sophtron. | COMMENT |
| LOW | app/models/family.rb | 141 | # indexed query rather than loading every family and asking each in Ruby. | COMMENT |
| LOW | app/models/family.rb | 801 | end | COMMENT |
| LOW | app/models/family.rb | 941 | # resolves both forms, and is the same lookup `Localize#resolved_timezone` | 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/rule.rb | 41 | # | COMMENT |
| LOW | app/models/rule.rb | 121 | rescue Rule::SafeRegex::TimeoutError | 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 | 141 | .sort_by(&:first) | COMMENT |
| 610 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 | 504 | # Create a manual recurring transfer from an existing Transfer pair. | COMMENT |
| MEDIUM | app/models/recurring_transaction.rb | 629 | # 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 | 174 | # 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 | 235 | # 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 | 113 | # Create a deterministic hash from key transaction attributes | COMMENT |
| MEDIUM | app/models/lunchflow_entry/processor.rb | 182 | # 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/controllers/lunchflow_items_controller.rb | 185 | # Create the internal Account with proper balance initialization | COMMENT |
| MEDIUM | app/controllers/simplefin_items_controller.rb | 141 | # 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 | 45 | # 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 | 888 | # Create a fresh family with ONLY tax-advantaged accounts | COMMENT |
| MEDIUM⚡ | test/models/income_statement_test.rb | 896 | # Create a 401k account (tax-deferred) | COMMENT |
| MEDIUM⚡ | test/models/income_statement_test.rb | 904 | # Create a Roth IRA account (tax-exempt) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 380 | # Create a regular transfer between accounts | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 394 | # Create a loan payment transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 407 | # Create a one-time transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 420 | # Create a payment transaction (credit card payment) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 433 | # Create an excluded transaction | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 494 | # Create a truly empty family | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 526 | # Create a transfer to investment account (marked as investment_contribution) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 606 | # Create a Roth IRA (tax-exempt) investment account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 614 | # Create a dividend transaction in the Roth IRA | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 628 | # Create a 401k (tax-deferred) investment account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 636 | # Create a dividend transaction in the 401k | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 650 | # Create a taxable brokerage account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 658 | # Create a dividend transaction in the taxable account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 672 | # Create a crypto account (default taxable) | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 680 | # Create a transaction in the crypto account | COMMENT |
| MEDIUM | test/models/income_statement_test.rb | 692 | # Create a crypto account in a tax-deferred retirement account | COMMENT |
| 136 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/models/goal.rb | 1338 | "#{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 | 216 | 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 | 173 | 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/binance_items_controller.rb | 64 | binance_items = Current.family.binance_items.active.ordered.select(&:credentials_configured?) | 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 | 310 | insights = Current.family.insights.visible.ordered.limit(Insight::FEED_LIMIT) | CODE |
| CRITICAL | app/controllers/trade_republic_items_controller.rb | 628 | Current.family.trade_republic_items.active.where.not(id: @trade_republic_item.id) | CODE |
| CRITICAL | app/controllers/coinbase_items_controller.rb | 72 | coinbase_items = Current.family.coinbase_items.active.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL | app/controllers/accounts_controller.rb | 30 | @fio_items = visible_provider_items(family.fio_items.active.ordered.with_attached_logo.includes(:fio_accounts)) | CODE |
| CRITICAL | app/controllers/kraken_items_controller.rb | 172 | 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 | 710 | Current.family.mercury_items.active.ordered.select(&:credentials_configured?) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 284 | @wise_items = Current.family.wise_items.active.ordered.includes(:syncs, :wise_accounts) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 286 | @mercury_items = Current.family.mercury_items.active.ordered.includes(:syncs, :mercury_accounts) | CODE |
| CRITICAL⚡ | app/controllers/settings/providers_controller.rb | 288 | @brex_items = Current.family.brex_items.active.ordered.includes(:syncs, :brex_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 306 | @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 344 | @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts) | CODE |
| CRITICAL | app/controllers/settings/providers_controller.rb | 350 | @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/models/balance_sheet_test.rb | 222 | assert_equal %w[Savings Checking Another Brokerage], balance_sheet.assets.account_groups.first.accounts.map(&:name) | CODE |
| CRITICAL | test/models/balance_sheet_test.rb | 223 | assert_equal %w[Card], balance_sheet.liabilities.account_groups.first.accounts.map(&:name) | CODE |
| CRITICAL | test/system/category_rule_prompt_test.rb | 80 | other_entry = @user.family.entries.transactions.where.not(id: @entry.id).order(date: :desc).first | 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/bills_mobile_test.rb | 171 | page.driver.browser.manage.window.resize_to(1920, 1400) | CODE |
| CRITICAL | test/system/combobox_dark_theme_test.rb | 23 | 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 | 151 | @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 | 37 | 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 | 1648 | 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 | 253 | # 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 | 278 | # Check if it's a declared field first | COMMENT |
| LOW | app/models/setting.rb | 307 | # Check if a dynamic field exists (useful to distinguish nil value vs missing key) | COMMENT |
| LOW | app/models/setting.rb | 312 | # Check if dynamic entry exists | COMMENT |
| LOW | app/models/holding.rb | 103 | # Check if this holding's cost_basis can be overwritten by the given source | COMMENT |
| LOW | app/models/holding.rb | 135 | # Check if this holding's security can be changed by provider sync | COMMENT |
| LOW | app/models/holding.rb | 140 | # Check if user has remapped this holding to a different security | COMMENT |
| LOW | app/models/holding.rb | 247 | # 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 | 245 | # Check if user has a local password set (can authenticate locally) | COMMENT |
| LOW | app/models/recurring_transaction.rb | 802 | # 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 | 245 | # Check if the last occurrence was within the last 45 days | COMMENT |
| LOW | app/models/recurring_transaction/identifier.rb | 249 | # Check if transactions occur on similar days (within 5 days of each other) | COMMENT |
| LOW | app/models/provider/openai.rb | 332 | # 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 | 279 | # Check if one contains the other | COMMENT |
| LOW | app/models/provider/openai/auto_categorizer.rb | 437 | # Check if there's content after the thinking block | COMMENT |
| LOW | app/models/provider/openai/bank_statement_extractor.rb | 156 | # Check if we've seen this exact transaction in a different chunk | COMMENT |
| LOW | app/models/provider/openai/auto_merchant_detector.rb | 180 | # 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 | 483 | # Check if holdings are not supported (501 response) | 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 | 188 | # Check if actual matches any acceptable category (primary or alternatives) | COMMENT |
| LOW⚡ | app/models/eval/runners/categorization_runner.rb | 196 | # 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 | 118 | # Check if entry with this external_id already exists | COMMENT |
| LOW | app/models/lunchflow_entry/processor.rb | 155 | # Check if an entry with this external_id already exists in the account | COMMENT |
| LOW | app/models/lunchflow_entry/processor.rb | 273 | # 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 |
| LOW | app/controllers/lunchflow_items_controller.rb | 387 | # Check if this lunchflow_account is already linked to another account | COMMENT |
| 41 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 | 18 | # Step 1: validates the inputs, then spends one provider request. Returns | COMMENT |
| LOW | app/models/property/avm_import.rb | 40 | # 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 | 23 | # Step 1: Fetch and store all accounts (with connection metadata for institutions) | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 26 | # 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 | 42 | # Step 1: Update the provider merchant's website. ProviderMerchant generates | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 47 | # 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 | 27 | # Step 1: Claim the new token and update the existing item's access_url. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 31 | # 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 | 182 | # 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 | 267 | ### Step 4: Run the app | COMMENT |
| LOW | docs/hosting/docker.md | 281 | ### Step 5: Create your account | COMMENT |
| LOW | docs/hosting/docker.md | 298 | ### Step 6: Run the app in the background | COMMENT |
| LOW | docs/hosting/docker.md | 312 | ### 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 | 213 | ## 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/models/demo/generator.rb | 62 | create_family_and_users!("Demo Family", "user@example.com", onboarded: true, subscribed: true) | CODE |
| LOW | app/models/demo/generator.rb | 77 | create_family_and_users!("Demo Family", "user@example.com", onboarded: false, subscribed: false) | CODE |
| LOW | app/models/demo/generator.rb | 106 | def generate_default_data!(skip_clear: false, email: "user@example.com") | CODE |
| LOW | app/models/account/provider_import_adapter.rb | 365 | # This handles case variations in merchant names (e.g., "ACME Corp" vs "Acme Corp") | COMMENT |
| LOW | …mailers/previews/demo_family_refresh_mailer_preview.rb | 4 | super_admin: User.new(email: "admin@example.com"), | CODE |
| LOW | test/integration/rack_attack_test.rb | 61 | assert_equal "user@example.com", email_block.call(login_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 104 | assert_equal "user@example.com", api_login_email_block.call(api_login_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 108 | assert_equal "user@example.com", api_sso_link_email_block.call(sso_link_request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 260 | request = throttle_request("/sessions.json", method: "POST", params: { "email" => "user@example.com" }) | CODE |
| LOW | test/integration/rack_attack_test.rb | 262 | assert_equal "user@example.com", email_block.call(request) | CODE |
| LOW | test/integration/rack_attack_test.rb | 276 | unrelated_request = throttle_request("/sessions_other", method: "POST", params: { "email" => "user@example.com" }) | CODE |
| LOW | test/integration/rack_attack_test.rb | 296 | 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 | 303 | 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/demo/generator_test.rb | 11 | User.find_by!(email: "user@example.com").update!(email: "existing-user@example.com") | CODE |
| LOW | test/models/demo/generator_test.rb | 21 | family = User.find_by!(email: "user@example.com").family | CODE |
| LOW | test/models/demo/generator_test.rb | 33 | User.find_by!(email: "user@example.com").update!(email: "existing-user@example.com") | CODE |
| LOW | test/models/demo/generator_test.rb | 42 | item = User.find_by!(email: "user@example.com").family.onchain_wallet_item | CODE |
| LOW | test/models/provider/anthropic_test.rb | 105 | Setting.stubs(:anthropic_access_token).returns("fake-token-1") | CODE |
| LOW | test/models/provider/anthropic_test.rb | 109 | 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 | test/models/provider/chimnie_test.rb | 214 | address = { line1: "123 Main Street", locality: "Los Angeles", region: "CA", postal_code: "90001", country: "US" } | CODE |
| LOW | test/models/provider/chimnie_test.rb | 224 | us_address = { line1: "123 Main Street", locality: "Los Angeles", region: "CA", postal_code: "90001" } | 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 |
| 27 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 | 18 | # Step 1: validates the inputs, then spends one provider request. Returns | COMMENT |
| LOW | app/models/property/avm_import.rb | 40 | # 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 | 23 | # Step 1: Fetch and store all accounts (with connection metadata for institutions) | COMMENT |
| LOW⚡ | app/models/redbark_item/importer.rb | 26 | # 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 | 42 | # Step 1: Update the provider merchant's website. ProviderMerchant generates | COMMENT |
| LOW⚡ | app/models/provider_merchant/enhancer.rb | 47 | # 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 | 27 | # Step 1: Claim the new token and update the existing item's access_url. | COMMENT |
| LOW⚡ | app/jobs/simplefin_connection_update_job.rb | 31 | # 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 | 182 | # 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 | 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 | 503 | # 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 | 218 | # 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 | 105 | # Generate comprehensive realistic demo data with multi-currency | COMMENT |
| MEDIUM | app/models/demo/generator.rb | 337 | # 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 | 163 | # 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 | 476 | # 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 | 487 | # caller batches are split to fit the model's context window. `fixed` is | COMMENT |
| MEDIUM | app/models/provider/openai/auto_merchant_detector.rb | 456 | # 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 | 348 | # Resolves a section's layout guardrails, applying the user's height preset | COMMENT |
| MEDIUM | test/models/demo/generator_test.rb | 242 | # the public orchestration. Unrelated history and provider syncs are omitted | COMMENT |
| MEDIUM | test/models/demo/generator_test.rb | 274 | # 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 |
| MEDIUM | test/lib/generators/provider/family_generator_test.rb | 232 | # Evaluate the actual scaffold in an isolated namespace, without installing a | 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 | 396 | # For example you can add an additional database column to `oauth_applications` table, | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 49 | # Don't forget to include Doorkeeper ORM mixins into your custom models: | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 80 | # [NOTE] If you apply this option on already existing project don't forget to manually | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 80 | # [NOTE] If you apply this option on already existing project don't forget to manually | COMMENT |
| LOW | config/initializers/doorkeeper.rb | 518 | # 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 | 646 | # raising it, which would otherwise log the reset as requested and redirect | COMMENT |