AI Slop Code RIsk Monitor

we-promise/sure

The personal finance app for everyone (by everyone)

5.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

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.

5.7
Adjusted Signal
5.7
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
10.5K
Stars
Ruby
Language
704.7K
Lines of Code
5.8K
Files
2.2K
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 14.8/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 1660 finding(s).

Hallucinated Dependency & Supply Chain Risk 4.1/100 · LOW

Are imports declared and package/API names verified? 145 finding(s).

Agent Over-Engineering Ratio 11.8/100 · LOW

Are wrappers, guards, and repeated structures necessary? 994 finding(s).

PR Review Velocity Impact 23.9/100 · LOW

Which changes need focused human review? 2182 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 32HIGH 34MEDIUM 606LOW 1510

Directory Score Breakdown

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.

Pattern Findings

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.

Decorative Section Separators377 hits · 1143 pts
SeverityFileLineSnippetContext
MEDIUM⚡compose.example.yml1# ===========================================================================COMMENT
MEDIUM⚡compose.example.yml3# ===========================================================================COMMENT
MEDIUMcompose.example.yml23# ----------------COMMENT
MEDIUMcompose.example.yml30# ----------------------------------------COMMENT
MEDIUMcompose.example.ai.yml1# ===========================================================================COMMENT
MEDIUMcompose.example.ai.yml4# ===========================================================================COMMENT
MEDIUMcompose.example.ai.yml44# ----------------COMMENT
MEDIUMcompose.example.ai.yml51# ----------------------------------------COMMENT
MEDIUM⚡app/models/budget.rb401 # =============================================================================COMMENT
MEDIUM⚡app/models/budget.rb403 # =============================================================================COMMENT
MEDIUMapp/models/budget.rb443 # =============================================================================COMMENT
MEDIUMapp/models/budget.rb445 # =============================================================================COMMENT
MEDIUMapp/models/budget.rb473 # =============================================================================COMMENT
MEDIUMapp/models/budget.rb475 # =============================================================================COMMENT
MEDIUMapp/models/qif_import.rb194 # ------------------------------------------------------------------COMMENT
MEDIUMapp/models/qif_import.rb196 # ------------------------------------------------------------------COMMENT
MEDIUMapp/models/qif_import.rb281 # ------------------------------------------------------------------COMMENT
MEDIUMapp/models/qif_import.rb283 # ------------------------------------------------------------------COMMENT
MEDIUMapp/models/qif_import.rb440 # ------------------------------------------------------------------COMMENT
MEDIUMapp/models/qif_import.rb442 # ------------------------------------------------------------------COMMENT
MEDIUM⚡app/models/demo/generator.rb1289 # ---------------------------------------------------------------------------COMMENT
MEDIUM⚡app/models/demo/generator.rb1291 # ---------------------------------------------------------------------------COMMENT
MEDIUM⚡app/models/demo/generator.rb1298 # ---------------------------------------------------------------------------COMMENT
MEDIUM⚡app/models/demo/generator.rb1300 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb452 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb454 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb926 # -----------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb928 # -----------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1047 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1049 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1072 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1074 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1224 # ---------------------------------------------------------------------------COMMENT
MEDIUMapp/models/demo/generator.rb1226 # ---------------------------------------------------------------------------COMMENT
MEDIUM⚡app/models/provider/yahoo_finance.rb796 # ================================COMMENT
MEDIUM⚡app/models/provider/yahoo_finance.rb798 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb121 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb123 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb192 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb194 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb568 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb570 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb723 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb725 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb779 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb781 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb968 # ================================COMMENT
MEDIUMapp/models/provider/yahoo_finance.rb970 # ================================COMMENT
MEDIUMapp/models/provider/twelve_data.rb60 # ================================COMMENT
MEDIUMapp/models/provider/twelve_data.rb62 # ================================COMMENT
MEDIUMapp/models/provider/twelve_data.rb130 # ================================COMMENT
MEDIUMapp/models/provider/twelve_data.rb132 # ================================COMMENT
MEDIUMapp/models/provider/alpha_vantage.rb89 # ================================COMMENT
MEDIUMapp/models/provider/alpha_vantage.rb91 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb80 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb82 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb180 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb182 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb205 # ================================COMMENT
MEDIUMapp/models/provider/moex_public.rb207 # ================================COMMENT
317 more matches not shown…
Hyper-Verbose Identifiers617 hits · 634 pts
SeverityFileLineSnippetContext
LOWapp/models/snaptrade_account.rb199 def cash_equivalent_position_value(currency_code = currency)CODE
LOWapp/models/category_import.rb113 def ensure_placeholder_category(name)CODE
LOWapp/models/redbark_item.rb35 def import_latest_redbark_data(sync: nil)CODE
LOWapp/models/account.rb255 def create_from_simplefin_account(simplefin_account, account_type, subtype = nil)CODE
LOWapp/models/account.rb304 def create_from_enable_banking_account(enable_banking_account, account_type, subtype = nil)CODE
LOWapp/models/account.rb355 def create_from_coinbase_account(coinbase_account)CODE
LOWapp/models/account.rb380 def create_from_binance_account(binance_account)CODE
LOWapp/models/account.rb433 def create_from_trade_republic_account(trade_republic_account)CODE
LOW⚡app/models/account.rb452 def create_from_kraken_account(kraken_account)CODE
LOW⚡app/models/account.rb458 def create_from_coinspot_account(coinspot_account)CODE
LOW⚡app/models/account.rb465 def create_from_onchain_wallet_account(onchain_wallet_account)CODE
LOWapp/models/account.rb487 def create_from_crypto_exchange_account(provider_account, family:)CODE
LOWapp/models/account.rb549 def build_simplefin_accountable_attributes(simplefin_account, account_type, subtype)CODE
LOWapp/models/entry_search.rb65 def apply_uncategorized_filter(scope, uncategorized)CODE
LOWapp/models/category.rb289 def localized_default_name_for(name)CODE
LOWapp/models/category.rb296 def default_category_translation_key_for(name)CODE
LOWapp/models/investment_statement.rb291 def convert_to_family_currency(amount, from_currency)CODE
LOWapp/models/market_data_importer.rb152 def get_first_required_exchange_rate_date(from_currency:)CODE
LOWapp/models/rule_import.rb113 def extract_conditions_and_actions(fragments)CODE
LOWapp/models/rule_import.rb133 def create_or_update_rule_from_row(row)CODE
LOWapp/models/rule_import.rb224 def resolve_import_condition_value(condition_data)CODE
LOWapp/models/rule_import.rb249 def resolve_import_action_value(action_data)CODE
LOWapp/models/rule_import.rb277 def resolve_import_multi_tag_value(value)CODE
LOWapp/models/goal.rb216 def whole_account_conflicts_on(account_ids, excluding_link_id: nil)CODE
LOWapp/models/invitation.rb54 def release_provider_item_ownership(user)CODE
LOWapp/models/ai_health.rb310 def openai_compatible_provider_name(value)CODE
LOW⚡app/models/sure_import.rb62 def dry_run_totals_from_ndjson(content)CODE
LOW⚡app/models/sure_import.rb66 def dry_run_totals_from_line_type_counts(counts)CODE
LOW⚡app/models/sure_import.rb72 def expected_record_counts_from_ndjson(content)CODE
LOW⚡app/models/sure_import.rb76 def expected_record_counts_from_line_type_counts(counts)CODE
LOWapp/models/sure_import.rb312 def build_readback_verification(before_counts:, status_for_mismatch:, reused_counts: {}, created_counts: {})CODE
LOWapp/models/sophtron_item.rb69 def import_latest_sophtron_data(sync: nil)CODE
LOWapp/models/sophtron_item.rb269 def persist_remote_sophtron_accounts(accounts)CODE
LOWapp/models/brex_account.rb190 def build_institution_metadata(snapshot, kind)CODE
LOWapp/models/provider_merchant.rb47 def convert_to_family_merchant_for(family, attributes = {})CODE
LOWapp/models/snaptrade_item.rb43 def import_latest_snaptrade_data(sync: nil)CODE
LOWapp/models/indexa_capital_item.rb47 def import_latest_indexa_capital_data(sync: nil)CODE
LOWapp/models/family.rb183 def resolved_categorization_provider(&on_jev_error)CODE
LOWapp/models/family.rb221 def shadow_categorization_provider(&on_jev_error)CODE
LOWapp/models/family.rb276 def request_plaid_transactions_refreshes_later(source:)CODE
LOWapp/models/family.rb305 def secondary_enabled_currency_objects(extra: [])CODE
LOWapp/models/family.rb309 def capture_plaid_refresh_enqueue_failure(source:, error_class:)CODE
LOWapp/models/family.rb363 def auto_share_existing_accounts_with(user)CODE
LOWapp/models/family.rb452 def auto_categorize_transactions_later(transactions, rule_run_id: nil)CODE
LOWapp/models/family.rb456 def auto_categorize_transactions(transaction_ids)CODE
LOWapp/models/family.rb482 def auto_detect_transaction_merchants_later(transactions, rule_run_id: nil)CODE
LOWapp/models/family.rb486 def auto_detect_transaction_merchants(transaction_ids)CODE
LOWapp/models/family.rb605 def securities_with_plan_restrictions(provider:)CODE
LOWapp/models/questrade_account.rb142 def extract_institution_metadata(data)CODE
LOWapp/models/enable_banking_item.rb424 def import_accounts_from_session(accounts_data)CODE
LOW⚡app/models/valuation.rb11 def build_reconciliation_name(accountable_type)CODE
LOW⚡app/models/valuation.rb15 def build_opening_anchor_name(accountable_type)CODE
LOW⚡app/models/valuation.rb19 def build_current_anchor_name(accountable_type)CODE
LOWapp/models/chat.rb213 def undelivered_error_payload(assistant_message)CODE
LOWapp/models/pdf_import.rb467 def partition_already_recorded(candidates)CODE
LOWapp/models/investment.rb132 def subtypes_grouped_for_select(currency: nil)CODE
LOWapp/models/account_statement.rb126 def reconciliation_statuses_for(statements, account:)CODE
LOWapp/models/account_statement.rb167 def allowed_content_types_for_filename(filename)CODE
LOWapp/models/trade_import.rb81 def investment_activity_label_for(qty)CODE
LOWapp/models/transaction.rb357 def set_preloaded_activity_security(security)CODE
557 more matches not shown…
Self-Referential Comments198 hits · 604 pts
SeverityFileLineSnippetContext
MEDIUMpipelock.example.yaml4# This file is validated in CI with Pipelock 3.4.0. See the release changelogCOMMENT
MEDIUM⚡compose.example.yml8# This file is an example Docker Compose configuration for self hostingCOMMENT
MEDIUMcompose.example.ai.yml151 # Create the dirs yourself first so they are owned by your host userCOMMENT
MEDIUMapp/models/recurring_transaction.rb429 # Create a manual recurring transfer from an existing Transfer pair.COMMENT
MEDIUMapp/models/recurring_transaction.rb483 # Create a manual recurring transaction from an existing transactionCOMMENT
MEDIUMapp/models/assistant/function/import_bank_statement.rb132 # Create a CSV from extracted transactionsCOMMENT
MEDIUMapp/models/assistant/function/import_bank_statement.rb135 # Create a TransactionImportCOMMENT
MEDIUM…/models/plaid_account/transactions/category_matcher.rb11# This class is simply a FAST and CHEAP way to match categories that are high confidence.COMMENT
MEDIUMapp/models/family/monobank_connectable.rb13 # Create a Monobank connection with the given personal token and start its first sync.COMMENT
MEDIUMapp/models/family/fio_connectable.rb13 # Create a Fio connection with the given API token and start its first sync. A tokenCOMMENT
MEDIUMapp/models/family/data_exporter.rb12 # Create a StringIO to hold the zip data in memoryCOMMENT
MEDIUMapp/models/family/data_importer.rb662 # Creating a series generates its own occurrences, so each of these matchesCOMMENT
MEDIUMapp/models/family/up_connectable.rb13 # Create an Up item with the given token and trigger an initial sync.COMMENT
MEDIUMapp/models/family/auto_transfer_matchable.rb129 # Create the transfer for a matched candidate, tolerating a concurrent syncCOMMENT
MEDIUMapp/models/provider/configurable.rb125 # Define a custom check for whether this provider is configuredCOMMENT
MEDIUMapp/models/provider/configurable.rb133 # Define a configuration fieldCOMMENT
MEDIUMapp/models/sophtron_entry/processor.rb137 # Create a stable merchant ID from the merchant nameCOMMENT
MEDIUMapp/models/mercury_entry/processor.rb99 # Create a stable merchant ID from the counterparty nameCOMMENT
MEDIUMapp/models/vector_store/base.rb7 # Create a new vector store / collection / namespaceCOMMENT
MEDIUMapp/models/eval/langfuse/client.rb248 # Create a new request with the same properties (needed for retry since request body may be consumed)COMMENT
MEDIUMapp/models/coinbase_account/processor.rb206 # Create the tradeCOMMENT
MEDIUMapp/models/lunchflow_entry/processor.rb85 # Create a deterministic hash from key transaction attributesCOMMENT
MEDIUMapp/models/lunchflow_entry/processor.rb142 # Create a stable merchant ID from the merchant nameCOMMENT
MEDIUMapp/models/concerns/enrichable.rb4# This module defines how models should, lock, unlock, and edit attributesCOMMENT
MEDIUMapp/jobs/rule_job.rb18 # Create the RuleRun record first with pending statusCOMMENT
MEDIUMapp/jobs/rule_job.rb70 # Create a failed rule run if we hadn't created one yetCOMMENT
MEDIUMapp/controllers/lunchflow_items_controller.rb185 # Create the internal Account with proper balance initializationCOMMENT
MEDIUMapp/controllers/simplefin_items_controller.rb137 # Create a Sync and enqueue it to run asynchronously with a runtime-only flagCOMMENT
MEDIUMapp/controllers/up_items_controller.rb28 # Create an Up connection and kick off its first sync.COMMENT
MEDIUMapp/controllers/snaptrade_items_controller.rb641 # Create the Sure accountCOMMENT
MEDIUMapp/controllers/plaid_items_controller.rb133 # Create the link via AccountProviderCOMMENT
MEDIUMapp/controllers/monobank_items_controller.rb13 # Create a Monobank connection and kick off its first sync.COMMENT
MEDIUMapp/controllers/fio_items_controller.rb19 # Create a Fio connection and kick off its first sync.COMMENT
MEDIUMapp/controllers/fio_items_controller.rb130 # Create a new Sure account for the connection's account and link the two.COMMENT
MEDIUMapp/controllers/oidc_accounts_controller.rb174 # Create the OIDC (or other SSO) identityCOMMENT
MEDIUMapp/controllers/enable_banking_items_controller.rb257 # Create the internal Account (uses save! internally, will raise on failure)COMMENT
MEDIUMapp/controllers/mercury_items_controller.rb185 # Create the internal Account with proper balance initializationCOMMENT
MEDIUMapp/controllers/api/v1/test_controller.rb20 # Create a mock resource that belongs to a different familyCOMMENT
MEDIUMapp/controllers/api/v1/tags_controller.rb44 # Create a new tag for the familyCOMMENT
MEDIUMtest/models/coinstats_item_test.rb160 # Create a linked accountCOMMENT
MEDIUMtest/models/coinstats_item_test.rb178 # Create an unlinked accountCOMMENT
MEDIUMtest/models/coinstats_item_test.rb209 # Create a linked accountCOMMENT
MEDIUMtest/models/coinstats_item_test.rb223 # Create an unlinked accountCOMMENT
MEDIUM⚡test/models/income_statement_test.rb711 # Create a fresh family with ONLY tax-advantaged accountsCOMMENT
MEDIUM⚡test/models/income_statement_test.rb719 # Create a 401k account (tax-deferred)COMMENT
MEDIUM⚡test/models/income_statement_test.rb727 # Create a Roth IRA account (tax-exempt)COMMENT
MEDIUMtest/models/income_statement_test.rb234 # Create a regular transfer between accountsCOMMENT
MEDIUMtest/models/income_statement_test.rb248 # Create a loan payment transactionCOMMENT
MEDIUMtest/models/income_statement_test.rb261 # Create a one-time transactionCOMMENT
MEDIUMtest/models/income_statement_test.rb274 # Create a payment transaction (credit card payment)COMMENT
MEDIUMtest/models/income_statement_test.rb287 # Create an excluded transactionCOMMENT
MEDIUMtest/models/income_statement_test.rb348 # Create a truly empty familyCOMMENT
MEDIUMtest/models/income_statement_test.rb380 # Create a transfer to investment account (marked as investment_contribution)COMMENT
MEDIUMtest/models/income_statement_test.rb429 # Create a Roth IRA (tax-exempt) investment accountCOMMENT
MEDIUMtest/models/income_statement_test.rb437 # Create a dividend transaction in the Roth IRACOMMENT
MEDIUMtest/models/income_statement_test.rb451 # Create a 401k (tax-deferred) investment accountCOMMENT
MEDIUMtest/models/income_statement_test.rb459 # Create a dividend transaction in the 401kCOMMENT
MEDIUMtest/models/income_statement_test.rb473 # Create a taxable brokerage accountCOMMENT
MEDIUMtest/models/income_statement_test.rb481 # Create a dividend transaction in the taxable accountCOMMENT
MEDIUMtest/models/income_statement_test.rb495 # Create a crypto account (default taxable)COMMENT
138 more matches not shown…
Over-Commented Block573 hits · 528 pts
SeverityFileLineSnippetContext
LOWpipelock.example.yaml1# Pipelock configuration for Docker ComposeCOMMENT
LOWcompose.example.yml1# ===========================================================================COMMENT
LOWcompose.example.yml21#COMMENT
LOWcompose.example.yml61 OPENAI_MODEL: ${OPENAI_MODEL:-}COMMENT
LOWcompose.example.ai.yml1# ===========================================================================COMMENT
LOWcompose.example.ai.yml21# directly to Sure's /mcp endpoint. Note: /mcp is still reachableCOMMENT
LOWcompose.example.ai.yml41# https://github.com/we-promise/sure/blob/main/docs/hosting/docker.mdCOMMENT
LOWcompose.example.ai.yml81 # Set both values to activate. MCP_USER_EMAIL must match an existing user's email.COMMENT
LOWcompose.example.ai.yml101 #COMMENT
LOWcompose.example.ai.yml141 image: ghcr.io/luckypipewrench/pipelock:3.4.0@sha256:2e6caa43967a5ef19cacbce00188d829c1b5de1eb0ad304a51d2085f32c5694COMMENT
LOWapp/constraints/super_admin_constraint.rb1# Routing constraint for mounting engines that bypass ApplicationControllerCOMMENT
LOWapp/models/snaptrade_account.rb81 # {COMMENT
LOWapp/models/worker_ai_health.rb1# frozen_string_literal: trueCOMMENT
LOWapp/models/worker_ai_health.rb21# times (or across a few replicas) can see more than one process's result,COMMENT
LOWapp/models/account.rb121 }COMMENT
LOWapp/models/account.rb221COMMENT
LOWapp/models/investment_statement.rb321 # Callers that need return trends should call combined_holding_trend onlyCOMMENT
LOWapp/models/goal.rb1class Goal < ApplicationRecordCOMMENT
LOWapp/models/goal.rb41 # the monthly job would leave a brand-new one wrong until the 1st, so theCOMMENT
LOWapp/models/goal.rb81 # own account lock in association order. Two goals saving links on the sameCOMMENT
LOWapp/models/goal.rb101 FUNDABLE_ACCOUNT_TYPES = %w[Depository Investment].freezeCOMMENT
LOWapp/models/goal.rb181 # Whole-account links held by OTHER goals of this family on any ofCOMMENT
LOWapp/models/goal.rb221 # two requests can both find no conflict and both commit a whole-accountCOMMENT
LOWapp/models/goal.rb381 # earmarked slice (goal_accounts.allocated_amount) or — when unallocated —COMMENT
LOWapp/models/goal.rb481COMMENT
LOWapp/models/goal.rb541 # for counts as found: it did its job. Without that term, coming home fromCOMMENT
LOWapp/models/goal.rb561 # the transaction is stamped and a second attempt on the same outflow isCOMMENT
LOWapp/models/goal.rb601 # A fixed earmark never has that window, because shrinking it caps theCOMMENT
LOWapp/models/goal.rb701 (remaining_amount.to_d / months_remaining.to_d).ceil(2)COMMENT
LOWapp/models/goal.rb761 # pending-pledge badge) so the Stimulus controller only has to renderCOMMENT
LOWapp/models/goal.rb1061 base = contributions_basis? ? net_contributed_for(account) : account.balance.to_dCOMMENT
LOWapp/models/goal.rb1181 # already been closed for.COMMENT
LOWapp/models/goal.rb1381 errors.add(:currency, :locked_after_linked)COMMENT
LOWapp/models/sophtron_item.rb1# Represents a Sophtron integration item for a family.COMMENT
LOWapp/models/entry.rb361COMMENT
LOWapp/models/sophtron_account.rb1# Represents a single bank account from Sophtron.COMMENT
LOWapp/models/family.rb141 # without a Current.user (the nightly insights job). Preview access is aCOMMENT
LOWapp/models/family.rb201COMMENT
LOWapp/models/family.rb661COMMENT
LOWapp/models/family.rb761 # Not a plain `inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }`COMMENT
LOWapp/models/enable_banking_item.rb361COMMENT
LOWapp/models/insight.rb1# A proactive, typed observation about a family's finances, produced nightlyCOMMENT
LOWapp/models/insight.rb41 # Mirrors the DB unique index so direct callers get a validation errorCOMMENT
LOWapp/models/recurring_occurrence.rb1# One expected instance of a recurring obligation: the August rent, thisCOMMENT
LOWapp/models/loan.rb21 # schedule, no tab. VARIABLE_RATE_TYPES is the form's vocabulary only,COMMENT
LOWapp/models/loan.rb61 # Deliberately still nil for a variable loan even though it now has aCOMMENT
LOWapp/models/loan.rb161 # Assembles variable_rate_schedule from the form's rows.COMMENT
LOWapp/models/loan.rb281 endCOMMENT
LOWapp/models/loan.rb441 # What the loan was written for, which is not always what the account hasCOMMENT
LOWapp/models/mobile_device.rb61COMMENT
LOWapp/models/setting.rb21 # Deliberately no OPENROUTER_API_KEY fallback: an operator holding that keyCOMMENT
LOWapp/models/budget_category.rb61 # ⚠️ Does NOT recompute the rollover chain, on purpose. The caller mustCOMMENT
LOWapp/models/transaction.rb81 TRANSFER_KINDS = %w[funds_movement cc_payment loan_payment investment_contribution].freezeCOMMENT
LOWapp/models/transaction.rb121 # DataEnrichment sources that represent automatic category assignmentCOMMENT
LOWapp/models/transaction.rb141 # aborts the whole query rather than one row, and it reads "no", "False" andCOMMENT
LOWapp/models/transaction.rb201 # Pending transaction scopes - filter based on provider pending flags in extra JSONBCOMMENT
LOWapp/models/transaction.rb261 # Overarching grouping method for all transfer-type transactionsCOMMENT
LOWapp/models/budget.rb181 # --- Cash on hand, next to the plan ---COMMENT
LOWapp/models/goal_pledge.rb41 #COMMENT
LOWapp/models/security.rb41 Setting.brand_fetch_icon_url(base_asset, namespace: "crypto")COMMENT
513 more matches not shown…
Hallucination Indicators32 hits · 335 pts
SeverityFileLineSnippetContext
CRITICALapp/models/goal.rb1267 "#{symbol}#{amount_f.round.to_i.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse}"CODE
CRITICALapp/models/provider/coinspot_adapter.rb21 coinspot_items = family.coinspot_items.active.credentials_configured.ordered.select(&:credentials_configured?)CODE
CRITICALapp/models/provider/coinspot_adapter.rb116 credentialed_items = family.coinspot_items.active.credentials_configured.ordered.select(&:credentials_configured?)CODE
CRITICALapp/models/provider/kraken_adapter.rb16 kraken_items = family.kraken_items.active.credentials_configured.ordered.select(&:credentials_configured?)CODE
CRITICALapp/models/provider/kraken_adapter.rb97 credentialed_items = family.kraken_items.active.credentials_configured.ordered.select(&:credentials_configured?)CODE
CRITICALapp/javascript/controllers/sankey_preview_controller.js218 const feedback = this.formTarget.elements.feedback.value.trim();CODE
CRITICALapp/controllers/insights_controller.rb14 Current.family.insights.visible.active.update_all(status: "read", read_at: Time.current, updated_at: Time.current)CODE
CRITICALapp/controllers/insights_controller.rb71 @feed_insights = Current.family.insights.visible.ordered.limit(Insight::FEED_LIMIT).to_aCODE
CRITICALapp/controllers/categories_controller.rb134 Current.family.categories.alphabetically.roots.where.not(id: @category.id)CODE
CRITICALapp/controllers/brex_items_controller.rb35 brex_items: Current.family.brex_items.active.ordered.includes(:syncs, :brex_accounts))CODE
CRITICALapp/controllers/wise_items_controller.rb286 wise_items: Current.family.wise_items.active.ordered.includes(:syncs, :wise_accounts))CODE
CRITICALapp/controllers/pages_controller.rb276 insights = Current.family.insights.visible.ordered.limit(Insight::FEED_LIMIT)CODE
CRITICALapp/controllers/trade_republic_items_controller.rb621 Current.family.trade_republic_items.active.where.not(id: @trade_republic_item.id)CODE
CRITICALapp/controllers/accounts_controller.rb28 @fio_items = visible_provider_items(family.fio_items.active.ordered.with_attached_logo.includes(:fio_accounts))CODE
CRITICALapp/controllers/kraken_items_controller.rb171 credentialed_items = Current.family.kraken_items.active.credentials_configured.ordered.select(&:credentials_configCODE
CRITICALapp/controllers/mercury_items_controller.rb430 mercury_items: Current.family.mercury_items.active.ordered.includes(:syncs, :mercury_accountCODE
CRITICALapp/controllers/mercury_items_controller.rb709 Current.family.mercury_items.active.ordered.select(&:credentials_configured?)CODE
CRITICAL⚡app/controllers/settings/providers_controller.rb271 @wise_items = Current.family.wise_items.active.ordered.includes(:syncs, :wise_accounts)CODE
CRITICAL⚡app/controllers/settings/providers_controller.rb273 @mercury_items = Current.family.mercury_items.active.ordered.includes(:syncs, :mercury_accounts)CODE
CRITICAL⚡app/controllers/settings/providers_controller.rb275 @brex_items = Current.family.brex_items.active.ordered.includes(:syncs, :brex_accounts)CODE
CRITICALapp/controllers/settings/providers_controller.rb293 @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts)CODE
CRITICALapp/controllers/settings/providers_controller.rb329 @trade_republic_items = Current.family.trade_republic_items.active.ordered.includes(:trade_republic_accounts)CODE
CRITICALapp/controllers/settings/providers_controller.rb335 @questrade_items = Current.family.questrade_items.active.ordered.select(:id)CODE
CRITICALapp/controllers/settings/api_keys_controller.rb9 @api_keys = Current.user.api_keys.active.visible.order(created_at: :desc)CODE
CRITICALapp/controllers/settings/api_keys_controller.rb57 @api_key = Current.user.api_keys.active.visible.find(params[:id])CODE
CRITICALtest/system/bills_mobile_test.rb20 page.driver.browser.manage.window.resize_to(*PHONE)CODE
CRITICALtest/system/bills_mobile_test.rb24 page.driver.browser.manage.window.resize_to(1400, 1400)CODE
CRITICALtest/system/bills_mobile_test.rb99 page.driver.browser.manage.window.resize_to(1920, 1400)CODE
CRITICALtest/system/bills_mobile_test.rb111 page.driver.browser.manage.window.resize_to(*PHONE)CODE
CRITICALtest/system/bill_drawer_test.rb37 page.driver.browser.manage.window.resize_to(375, 812)CODE
CRITICALtest/system/bill_drawer_test.rb54 page.driver.browser.manage.window.resize_to(1400, 1400)CODE
CRITICALtest/controllers/insights_controller_test.rb134 @user.family.insights.active.where.not(id: @insight.id).update_all(status: "read")CODE
Magic Placeholder Names33 hits · 165 pts
SeverityFileLineSnippetContext
HIGHconfig/locales/views/settings/api_keys/uk.yml34 your_api_key: "Ваш ключ API"CODE
HIGHconfig/locales/views/settings/api_keys/nb.yml65 your_api_key: "Din API-nøkkel"CODE
HIGHconfig/locales/views/settings/api_keys/ca.yml36 your_api_key: La teva clau APICODE
HIGHconfig/locales/views/settings/api_keys/ca.yml119 your_api_key: La teva clau APICODE
HIGHconfig/locales/views/settings/api_keys/pt-BR.yml66 your_api_key: "Sua Chave de API"CODE
HIGHconfig/locales/views/settings/api_keys/es.yml40 your_api_key: Tu clave APICODE
HIGHconfig/locales/views/settings/api_keys/es.yml107 your_api_key: Tu Clave APICODE
HIGHconfig/locales/views/settings/api_keys/hu.yml38 your_api_key: "Az API-kulcsod"CODE
HIGHconfig/locales/views/settings/api_keys/hu.yml98 your_api_key: "Az API-kulcsod"CODE
HIGHconfig/locales/views/settings/api_keys/ro.yml66 your_api_key: "Cheia ta API"CODE
HIGHconfig/locales/views/settings/api_keys/pt-PT.yml37 your_api_key: "A Sua Chave de API"CODE
HIGHconfig/locales/views/settings/api_keys/de.yml57 your_api_key: Dein API-KeyCODE
HIGHconfig/locales/views/settings/api_keys/de.yml89 your_api_key: Dein API-SchlüsselCODE
HIGHconfig/locales/views/settings/api_keys/it.yml53 your_api_key: "La tua chiave API"CODE
HIGHconfig/locales/views/settings/api_keys/it.yml114 your_api_key: "La tua chiave API"CODE
HIGHconfig/locales/views/settings/api_keys/pl.yml24 your_api_key: Twój klucz APICODE
HIGHconfig/locales/views/settings/api_keys/pl.yml120 your_api_key: Twój klucz APICODE
HIGHconfig/locales/views/settings/api_keys/en.yml37 your_api_key: "Your API Key"CODE
HIGHconfig/locales/views/settings/api_keys/ru.yml35 your_api_key: Ваш API-ключCODE
HIGHconfig/locales/views/settings/api_keys/ru.yml133 your_api_key: Ваш API-ключCODE
HIGHconfig/locales/views/settings/api_keys/fr.yml30 your_api_key: Votre clé APICODE
HIGHconfig/locales/views/settings/api_keys/fr.yml113 your_api_key: Votre clé APICODE
HIGHconfig/locales/views/settings/api_keys/zh-TW.yml42 your_api_key: 您的 API 金鑰CODE
HIGHconfig/locales/views/settings/api_keys/zh-TW.yml109 your_api_key: 您的 API 金鑰CODE
HIGHconfig/locales/views/settings/api_keys/tr.yml25 your_api_key: API AnahtarınızCODE
HIGHconfig/locales/views/settings/api_keys/tr.yml140 your_api_key: API AnahtarınızCODE
HIGHconfig/locales/views/settings/api_keys/vi.yml38 your_api_key: "Khóa API của bạn"CODE
HIGHconfig/locales/views/settings/api_keys/vi.yml98 your_api_key: "Khóa API của bạn"CODE
HIGHconfig/locales/views/settings/api_keys/zh-CN.yml31 your_api_key: 您的 API 密钥CODE
HIGHconfig/locales/views/settings/api_keys/zh-CN.yml91 your_api_key: 您的 API 密钥CODE
HIGHconfig/locales/views/settings/api_keys/nl.yml66 your_api_key: "Uw API Key"CODE
HIGHdocs/hosting/ai.md1570QDRANT_API_KEY=your-api-key # Optional, for authenticated instancesCODE
HIGHdocs/llm-guides/adding-a-securities-provider.md402provider = Provider::YourProvider.new("your_api_key")CODE
Redundant / Tautological Comments103 hits · 156 pts
SeverityFileLineSnippetContext
LOWapp/models/sso_provider_tester.rb66 # Check if issuer matches exactly. OIDC discovery requires the configuredCOMMENT
LOWapp/models/llm_usage.rb250 # Check if this usage record represents a failed API callCOMMENT
LOWapp/models/oidc_identity.rb69 # Check if user is in any of the mapped groupsCOMMENT
LOWapp/models/enable_banking_account.rb30 # Check if account_id looks like a valid UUID (not an identification_hash)COMMENT
LOWapp/models/setting.rb262 # Check if it's a declared field firstCOMMENT
LOWapp/models/setting.rb291 # Check if a dynamic field exists (useful to distinguish nil value vs missing key)COMMENT
LOWapp/models/setting.rb296 # Check if dynamic entry existsCOMMENT
LOWapp/models/holding.rb102 # Check if this holding's cost_basis can be overwritten by the given sourceCOMMENT
LOWapp/models/holding.rb134 # Check if this holding's security can be changed by provider syncCOMMENT
LOWapp/models/holding.rb139 # Check if user has remapped this holding to a different securityCOMMENT
LOWapp/models/holding.rb246 # Check if cost_basis is known (has a source and positive value)COMMENT
LOWapp/models/simplefin_item.rb196 # Check if linked via legacy FK (use to_s for UUID comparison safety)COMMENT
LOWapp/models/simplefin_item.rb202 # Check if linked via AccountProviderCOMMENT
LOWapp/models/simplefin_item.rb384 # Check if last sync was more than 3 days agoCOMMENT
LOWapp/models/simplefin_item.rb394 # Check if linked accounts have recent transactionsCOMMENT
LOWapp/models/simplefin_item.rb417 # Check if the SimpleFin connection needs user attentionCOMMENT
LOWapp/models/user.rb234 # Check if user has a local password set (can authenticate locally)COMMENT
LOWapp/models/recurring_transaction.rb653 # Check if this recurring transaction should be marked inactiveCOMMENT
LOWapp/models/mercury_item/importer.rb286 # Check if this account has any stored transactionsCOMMENT
LOWapp/models/recurring_transaction/identifier.rb242 # Check if the last occurrence was within the last 45 daysCOMMENT
LOWapp/models/recurring_transaction/identifier.rb246 # Check if transactions occur on similar days (within 5 days of each other)COMMENT
LOWapp/models/provider/openai.rb318 # Check if the specified model supports vision/PDF inputCOMMENT
LOWapp/models/provider/factory.rb59 # Check if a provider type has a registered adapterCOMMENT
LOWapp/models/provider/factory.rb82 # Check if any provider supports a given account typeCOMMENT
LOWapp/models/provider/syncable.rb18 # Check if the item is currently syncingCOMMENT
LOWapp/models/provider/syncable.rb30 # Check if the item requires an update (e.g., re-authentication)COMMENT
LOWapp/models/provider/configurable.rb77 # Check if provider is configured (all required fields present)COMMENT
LOWapp/models/provider/configurable.rb162 # Check if provider is properly configuredCOMMENT
LOWapp/models/provider/configurable.rb225 # Check if this field has a valueCOMMENT
LOWapp/models/provider/openai/auto_categorizer.rb304 # Check if one contains the otherCOMMENT
LOWapp/models/provider/openai/auto_categorizer.rb445 # Check if there's content after the thinking blockCOMMENT
LOWapp/models/provider/openai/bank_statement_extractor.rb152 # Check if we've seen this exact transaction in a different chunkCOMMENT
LOWapp/models/provider/openai/auto_merchant_detector.rb196 # Check if too many nulls OR missing results were returnedCOMMENT
LOWapp/models/rule/condition_filter/transaction_details.rb28 # Check if extra field is empty or nullCOMMENT
LOWapp/models/lunchflow_item/importer.rb452 # Check if holdings are not supported (501 response)COMMENT
LOWapp/models/lunchflow_item/importer.rb477 # Check if this account has any stored transactionsCOMMENT
LOWapp/models/eval/sample.rb77 # Check if null is expectedCOMMENT
LOWapp/models/eval/metrics/chat_metrics.rb102 # Check if this specific function was called correctlyCOMMENT
LOW⚡app/models/eval/runners/categorization_runner.rb195 # Check if actual matches any acceptable category (primary or alternatives)COMMENT
LOW⚡app/models/eval/runners/categorization_runner.rb203 # Check if actual matches parent of expected categoryCOMMENT
LOWapp/models/account/linkable.rb72 # Check if account is linked to a specific providerCOMMENT
LOWapp/models/account/linkable.rb89 # Check if holdings can be deletedCOMMENT
LOWapp/models/account/provider_import_adapter.rb115 # Check if duplicate is protected - if so, link but don't modifyCOMMENT
LOWapp/models/coinbase_account/processor.rb190 # Check if trade already exists by external_idCOMMENT
LOWapp/models/lunchflow_entry/processor.rb90 # Check if entry with this external_id already existsCOMMENT
LOWapp/models/lunchflow_entry/processor.rb127 # Check if an entry with this external_id already exists in the accountCOMMENT
LOWapp/models/lunchflow_entry/processor.rb224 # Check if this transaction is marked as pendingCOMMENT
LOWapp/models/concerns/enrichable.rb109 # Check if any virtual attributes changed by comparing current value with what we setCOMMENT
LOWapp/models/concerns/currency_normalizable.rb53 # Check if a currency code is valid in the Money gemCOMMENT
LOWapp/jobs/snaptrade_connection_cleanup_job.rb26 # Check if other accounts still use this authorizationCOMMENT
LOWapp/jobs/indexa_capital_connection_cleanup_job.rb15 # Check if other accounts still use this connectionCOMMENT
LOWapp/jobs/identify_recurring_transactions_job.rb15 # Check if this job is stale (a newer one was scheduled)COMMENT
LOWapp/jobs/identify_recurring_transactions_job.rb19 # Check if there are still incomplete syncs - if so, skip and let the last sync trigger itCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb16 # Check if family has credentialsCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb24 # Check if already cachedCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb61 # Check if family has Lunchflow credentials configuredCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb179 # Check if this lunchflow_account is already linkedCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb255 # Check if account is already linkedCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb261 # Check if family has Lunchflow credentials configuredCOMMENT
LOWapp/controllers/lunchflow_items_controller.rb347 # Check if account is already linkedCOMMENT
43 more matches not shown…
Structural Annotation Overuse70 hits · 125 pts
SeverityFileLineSnippetContext
LOW⚡app/data_migrations/balance_component_migrator.rb4 # Step 1: Update flows factorCOMMENT
LOW⚡app/data_migrations/balance_component_migrator.rb12 # Step 2: Set start values using LOCF (Last Observation Carried Forward)COMMENT
LOWapp/data_migrations/balance_component_migrator.rb33 # Step 3: Calculate net inflowsCOMMENT
LOWapp/models/mercury_item/importer.rb12 # Step 1: Fetch all accounts from MercuryCOMMENT
LOWapp/models/mercury_item/importer.rb27 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOWapp/models/mercury_item/importer.rb81 # Step 3: Fetch transactions only for linked accounts with active statusCOMMENT
LOWapp/models/sophtron_item/importer.rb74 # Step 1: Fetch all accounts from SophtronCOMMENT
LOWapp/models/sophtron_item/importer.rb89 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOWapp/models/sophtron_item/importer.rb138 # Step 3: Fetch transactions only for linked accounts with active statusCOMMENT
LOWapp/models/property/avm_import.rb17 # Step 1: validates the inputs, then spends one provider request. ReturnsCOMMENT
LOWapp/models/property/avm_import.rb36 # Step 2: creates the active property account from the user-confirmedCOMMENT
LOW⚡app/models/provider/snaptrade.rb130 # Step 1: ask SnapTrade for a device code and the user code to confirm.COMMENT
LOWapp/models/provider/snaptrade.rb177 # Step 2: redeem the device code once the user has confirmed it. Until theyCOMMENT
LOW⚡app/models/redbark_item/importer.rb19 # Step 1: Fetch and store all accounts (with connection metadata for institutions)COMMENT
LOW⚡app/models/redbark_item/importer.rb22 # Step 2: For linked accounts only, fetch transactions and balances.COMMENT
LOW⚡app/models/snaptrade_item/importer.rb24 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/snaptrade_item/importer.rb27 # Step 2: For LINKED accounts only, fetch holdings and activitiesCOMMENT
LOW⚡app/models/questrade_item/importer.rb32 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/questrade_item/importer.rb35 # Step 2: For LINKED accounts only, fetch dataCOMMENT
LOWapp/models/lunchflow_item/importer.rb14 # Step 1: Fetch all accounts from LunchflowCOMMENT
LOWapp/models/lunchflow_item/importer.rb39 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOW⚡app/models/provider_merchant/enhancer.rb32 # Step 1: Update the provider merchant with website + logoCOMMENT
LOW⚡app/models/provider_merchant/enhancer.rb38 # Step 2: Deduplicate — find other merchants with the same website_urlCOMMENT
LOW⚡app/models/indexa_capital_item/importer.rb24 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/indexa_capital_item/importer.rb27 # Step 2: For LINKED accounts only, fetch holdings dataCOMMENT
LOWapp/models/simplefin_item/importer.rb532 # Step 2: Fetch transactions/holdings using the regular window.COMMENT
LOW⚡app/jobs/simplefin_connection_update_job.rb17 # Step 1: Claim the new token and update the existing item's access_url.COMMENT
LOW⚡app/jobs/simplefin_connection_update_job.rb21 # Step 2: Sync the item to import fresh data.COMMENT
LOWapp/controllers/wise_items_controller.rb19 # Step 1: Validate token and fetch profiles, then proceed to profile selection.COMMENT
LOWapp/controllers/wise_items_controller.rb50 # Step 2: Show profile selection.COMMENT
LOWapp/controllers/wise_items_controller.rb62 # Step 3: Create one WiseItem per selected profile.COMMENT
LOWapp/controllers/properties_controller.rb141 # Step 1: spend one provider request, then show the fetched data forCOMMENT
LOW⚡app/controllers/onchain_wallet_items_controller.rb49 # Step 1: paste an address.COMMENT
LOW⚡app/controllers/onchain_wallet_items_controller.rb54 # Step 2: work out the chain if it wasn't given, then show what is there.COMMENT
LOWapp/controllers/onchain_wallet_items_controller.rb87 # Step 3: track the assets that were ticked.COMMENT
LOWtest/models/balance/forward_calculator_test.rb785 # 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.rb803 # Step 2: Corrected exchange rate arrives later (e.g. daily cron imports it).COMMENT
LOW⚡test/models/balance/forward_calculator_test.rb806 # Step 3: Next sync requests incremental from today — but the guard shouldCOMMENT
LOW⚡test/system/property_test.rb85 # Step 2: Enter balance informationCOMMENT
LOW⚡test/system/property_test.rb90 # Step 3: Enter address informationCOMMENT
LOWtest/system/accounts_test.rb26 # Step 1: Select property type and enter basic detailsCOMMENT
LOW⚡test/system/accounts_test.rb37 # Step 2: Enter balance informationCOMMENT
LOW⚡test/system/accounts_test.rb42 # Step 3: Enter address informationCOMMENT
LOWdocs/hosting/docker.md9### Step 1: Install DockerCOMMENT
LOWdocs/hosting/docker.md22### Step 2: Configure your Docker Compose file and environmentCOMMENT
LOWdocs/hosting/docker.md168### Step 4: Run the appCOMMENT
LOWdocs/hosting/docker.md182### Step 5: Create your accountCOMMENT
LOWdocs/hosting/docker.md199### Step 6: Run the app in the backgroundCOMMENT
LOWdocs/hosting/docker.md213### Step 7: Enjoy!COMMENT
LOWdocs/hosting/hetzner.md14## Step 1: Server Setup and SecurityCOMMENT
LOWdocs/hosting/hetzner.md53## Step 2: Create Application DirectoryCOMMENT
LOWdocs/hosting/hetzner.md64## Step 3: Configure Environment VariablesCOMMENT
LOWdocs/hosting/hetzner.md93## Step 4: Set Up Reverse Proxy with SSLCOMMENT
LOWdocs/hosting/hetzner.md140## Step 5: Deploy the ApplicationCOMMENT
LOWdocs/hosting/hetzner.md161## Step 6: Test the DeploymentCOMMENT
LOWdocs/hosting/hetzner.md189## Step 7: Set Up Automated BackupsCOMMENT
LOWdocs/hosting/hetzner.md234## Step 8: Set Up Basic MonitoringCOMMENT
LOWdocs/llm-guides/adding-a-securities-provider.md29## Step 1: Create the Provider ClassCOMMENT
LOWdocs/llm-guides/adding-a-securities-provider.md271## Step 2: Register in the Provider RegistryCOMMENT
LOWdocs/llm-guides/adding-a-securities-provider.md307## Step 3: Add SettingsCOMMENT
10 more matches not shown…
Verbosity Indicators48 hits · 92 pts
SeverityFileLineSnippetContext
LOW⚡app/data_migrations/balance_component_migrator.rb4 # Step 1: Update flows factorCOMMENT
LOW⚡app/data_migrations/balance_component_migrator.rb12 # Step 2: Set start values using LOCF (Last Observation Carried Forward)COMMENT
LOWapp/data_migrations/balance_component_migrator.rb33 # Step 3: Calculate net inflowsCOMMENT
LOWapp/models/mercury_item/importer.rb12 # Step 1: Fetch all accounts from MercuryCOMMENT
LOWapp/models/mercury_item/importer.rb27 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOWapp/models/mercury_item/importer.rb81 # Step 3: Fetch transactions only for linked accounts with active statusCOMMENT
LOWapp/models/sophtron_item/importer.rb74 # Step 1: Fetch all accounts from SophtronCOMMENT
LOWapp/models/sophtron_item/importer.rb89 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOWapp/models/sophtron_item/importer.rb138 # Step 3: Fetch transactions only for linked accounts with active statusCOMMENT
LOWapp/models/property/avm_import.rb17 # Step 1: validates the inputs, then spends one provider request. ReturnsCOMMENT
LOWapp/models/property/avm_import.rb36 # Step 2: creates the active property account from the user-confirmedCOMMENT
LOW⚡app/models/provider/snaptrade.rb130 # Step 1: ask SnapTrade for a device code and the user code to confirm.COMMENT
LOWapp/models/provider/snaptrade.rb177 # Step 2: redeem the device code once the user has confirmed it. Until theyCOMMENT
LOW⚡app/models/redbark_item/importer.rb19 # Step 1: Fetch and store all accounts (with connection metadata for institutions)COMMENT
LOW⚡app/models/redbark_item/importer.rb22 # Step 2: For linked accounts only, fetch transactions and balances.COMMENT
LOW⚡app/models/snaptrade_item/importer.rb24 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/snaptrade_item/importer.rb27 # Step 2: For LINKED accounts only, fetch holdings and activitiesCOMMENT
LOW⚡app/models/questrade_item/importer.rb32 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/questrade_item/importer.rb35 # Step 2: For LINKED accounts only, fetch dataCOMMENT
LOWapp/models/lunchflow_item/importer.rb14 # Step 1: Fetch all accounts from LunchflowCOMMENT
LOWapp/models/lunchflow_item/importer.rb39 # Step 2: Update linked accounts and create records for new accounts from APICOMMENT
LOW⚡app/models/provider_merchant/enhancer.rb32 # Step 1: Update the provider merchant with website + logoCOMMENT
LOW⚡app/models/provider_merchant/enhancer.rb38 # Step 2: Deduplicate — find other merchants with the same website_urlCOMMENT
LOW⚡app/models/indexa_capital_item/importer.rb24 # Step 1: Fetch and store all accountsCOMMENT
LOW⚡app/models/indexa_capital_item/importer.rb27 # Step 2: For LINKED accounts only, fetch holdings dataCOMMENT
LOWapp/models/concerns/enrichable.rb105 # So we need to check if the value actually changed by comparing before/afterCOMMENT
LOWapp/models/simplefin_item/importer.rb532 # Step 2: Fetch transactions/holdings using the regular window.COMMENT
LOW⚡app/jobs/simplefin_connection_update_job.rb17 # Step 1: Claim the new token and update the existing item's access_url.COMMENT
LOW⚡app/jobs/simplefin_connection_update_job.rb21 # Step 2: Sync the item to import fresh data.COMMENT
LOWapp/controllers/wise_items_controller.rb19 # Step 1: Validate token and fetch profiles, then proceed to profile selection.COMMENT
LOWapp/controllers/wise_items_controller.rb50 # Step 2: Show profile selection.COMMENT
LOWapp/controllers/wise_items_controller.rb62 # Step 3: Create one WiseItem per selected profile.COMMENT
LOWapp/controllers/properties_controller.rb141 # Step 1: spend one provider request, then show the fetched data forCOMMENT
LOW⚡app/controllers/onchain_wallet_items_controller.rb49 # Step 1: paste an address.COMMENT
LOW⚡app/controllers/onchain_wallet_items_controller.rb54 # Step 2: work out the chain if it wasn't given, then show what is there.COMMENT
LOWapp/controllers/onchain_wallet_items_controller.rb87 # Step 3: track the assets that were ticked.COMMENT
LOWtest/models/balance/forward_calculator_test.rb785 # 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.rb803 # Step 2: Corrected exchange rate arrives later (e.g. daily cron imports it).COMMENT
LOW⚡test/models/balance/forward_calculator_test.rb806 # Step 3: Next sync requests incremental from today — but the guard shouldCOMMENT
LOW⚡test/system/property_test.rb85 # Step 2: Enter balance informationCOMMENT
LOW⚡test/system/property_test.rb90 # Step 3: Enter address informationCOMMENT
LOWtest/system/accounts_test.rb26 # Step 1: Select property type and enter basic detailsCOMMENT
LOW⚡test/system/accounts_test.rb37 # Step 2: Enter balance informationCOMMENT
LOW⚡test/system/accounts_test.rb42 # Step 3: Enter address informationCOMMENT
LOW⚡mobile/lib/services/sync_service.dart543 // Step 1: Process pending deletes (do this first to free up resources)COMMENT
LOW⚡mobile/lib/services/sync_service.dart549 // Step 2: Upload pending transactionsCOMMENT
LOW⚡mobile/lib/services/sync_service.dart555 // Step 3: Download transactions from serverCOMMENT
LOW⚡mobile/lib/services/sync_service.dart561 // Step 4: Sync accountsCOMMENT
Fake / Example Data80 hits · 90 pts
SeverityFileLineSnippetContext
LOWapp/models/demo/generator.rb47 create_family_and_users!("Demo Family", "user@example.com", onboarded: true, subscribed: true)CODE
LOWapp/models/demo/generator.rb62 create_family_and_users!("Demo Family", "user@example.com", onboarded: false, subscribed: false)CODE
LOWapp/models/demo/generator.rb91 def generate_default_data!(skip_clear: false, email: "user@example.com")CODE
LOWapp/models/account/provider_import_adapter.rb363 # This handles case variations in merchant names (e.g., "ACME Corp" vs "Acme Corp")COMMENT
LOWtest/integration/rack_attack_test.rb60 assert_equal "user@example.com", email_block.call(login_request)CODE
LOWtest/integration/rack_attack_test.rb103 assert_equal "user@example.com", api_login_email_block.call(api_login_request)CODE
LOWtest/integration/rack_attack_test.rb107 assert_equal "user@example.com", api_sso_link_email_block.call(sso_link_request)CODE
LOWtest/integration/rack_attack_test.rb129 request = throttle_request("/sessions.json", method: "POST", params: { "email" => "user@example.com" })CODE
LOWtest/integration/rack_attack_test.rb131 assert_equal "user@example.com", email_block.call(request)CODE
LOWtest/integration/rack_attack_test.rb145 unrelated_request = throttle_request("/sessions_other", method: "POST", params: { "email" => "user@example.com" })CODE
LOWtest/integration/rack_attack_test.rb165 request = throttle_request("/api/v1/auth/login", method: "POST", non_rewindable_json_body: { email: "user@example.coCODE
LOWtest/integration/rack_attack_test.rb172 assert_equal({ "email" => "user@example.com" }, JSON.parse(request.body.read))CODE
LOWtest/models/provider_merchant_test.rb57 { field: "name", imported_value: "Acme Inc", kept_value: "Acme" } ],CODE
LOWtest/models/provider_merchant_test.rb58 merchant.import_diff({ "name" => "Acme Inc", "website_url" => "https://acme.io" })CODE
LOWtest/models/indexa_capital_item_test.rb37 username: "user@example.com", document: "12345678A", password: "secret"CODE
LOWtest/models/address_test.rb6 line1: "123 Main St",CODE
LOWtest/models/address_test.rb18 line1: "123 Main St",CODE
LOW⚡test/models/user_test.rb57 user = User.new(email: "user@example.com")CODE
LOW⚡test/models/user_test.rb58 assert_equal "user@example.com", user.display_nameCODE
LOW⚡test/models/user_test.rb66 user = User.new(email: "user@example.com")CODE
LOWtest/models/provider/anthropic_test.rb70 Setting.stubs(:anthropic_access_token).returns("fake-token-1")CODE
LOWtest/models/provider/anthropic_test.rb74 ClimateControl.modify("ANTHROPIC_API_KEY" => "fake-token-2") doCODE
LOW⚡test/models/provider/realie_test.rb78 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb81 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOW⚡test/models/provider/realie_test.rb89 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb92 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOW⚡test/models/provider/realie_test.rb100 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb103 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOW⚡test/models/provider/realie_test.rb225 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb228 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOW⚡test/models/provider/realie_test.rb236 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb240 line1: "123 Main Street",CODE
LOW⚡test/models/provider/realie_test.rb261 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb264 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOW⚡test/models/provider/realie_test.rb273 .with(query: hash_including("address" => "123 Main Street"))CODE
LOW⚡test/models/provider/realie_test.rb279 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOWtest/models/provider/realie_test.rb53 query: { "address" => "123 Main Street", "state" => "CA" },CODE
LOWtest/models/provider/realie_test.rb59 line1: "123 Main Street",CODE
LOWtest/models/provider/realie_test.rb114 .with(query: hash_including("address" => "123 Main Street"))CODE
LOWtest/models/provider/realie_test.rb118 line1: "123 Main Street",CODE
LOWtest/models/provider/realie_test.rb132 .with(query: hash_including("address" => "123 Main Street"))CODE
LOWtest/models/provider/realie_test.rb136 line1: "123 Main Street",CODE
LOWtest/models/provider/realie_test.rb201 query: { "address" => "123 Main Street", "state" => "CA" },CODE
LOWtest/models/provider/realie_test.rb207 line1: "123 Main Street",CODE
LOWtest/models/provider/realie_test.rb290 response = @provider.fetch_property_valuation(line1: "123 Main Street", region: "CA")CODE
LOWtest/models/provider/indexa_capital_test.rb13 username: "user@example.com",CODE
LOWtest/models/provider/indexa_capital_test.rb28 Provider::IndexaCapital.new(username: "user@example.com")CODE
LOWtest/models/provider/indexa_capital_test.rb32 Provider::IndexaCapital.new(username: "user@example.com", document: "12345678A")CODE
LOW…ls/provider/anthropic/bank_statement_extractor_test.rb16 "account_holder" => "Jane Doe",CODE
LOW…ls/provider/anthropic/bank_statement_extractor_test.rb37 assert_equal "Jane Doe", result[:account_holder]CODE
LOW…odels/provider/openai/bank_statement_extractor_test.rb15 "account_holder" => "John Doe",CODE
LOW…odels/provider/openai/bank_statement_extractor_test.rb46 assert_equal "John Doe", result[:account_holder]CODE
LOW…odels/provider/openai/bank_statement_extractor_test.rb89 "account_holder" => "John Doe",CODE
LOW⚡test/models/mercury_entry/processor_test.rb58 process(tx(counterparty_name: "Acme Corp"))CODE
LOW⚡test/models/mercury_entry/processor_test.rb59 assert_equal "Acme Corp", @account.entries.last.nameCODE
LOWtest/models/questrade_account/processor_test.rb8 @questrade_item = @family.questrade_items.create!(name: "Test", refresh_token: "dummy-token")CODE
LOW⚡test/system/property_test.rb92 fill_in "Address Line 1", with: "123 Main St"CODE
LOWtest/system/property_test.rb106 assert_equal "123 Main St", created_account.property.address.line1CODE
LOW⚡test/system/accounts_test.rb44 fill_in "Address Line 1", with: "123 Main St"CODE
LOWtest/system/accounts_test.rb58 assert_equal "123 Main St", created_account.property.address.line1CODE
20 more matches not shown…
AI Slop Vocabulary22 hits · 52 pts
SeverityFileLineSnippetContext
LOWcompose.example.ai.yml100 # turn, so it has to be sized as a sum rather than simply set higher:COMMENT
LOWapp/models/redbark_item.rb16 # Validate on every save, not just create - an update must never blank the keyCOMMENT
MEDIUMapp/models/loan.rb37 # amortises what was actually lent -- but it is what makes leverage readable:COMMENT
MEDIUMapp/models/loan.rb52 # it is a loan whose leverage nobody has told us.COMMENT
MEDIUMapp/models/loan.rb453 # principal, the insurance base, how much has been repaid, and the leverageCOMMENT
LOWapp/models/simplefin_account.rb109 # For custom currency URLs, we'll just use the last part as currency codeCOMMENT
MEDIUMapp/models/assistant.rb11 # Statement Vault + provenance tools back the wealth agent-harness workflowCOMMENT
MEDIUMapp/models/assistant.rb12 # documented in docs/llm-guides/wealth-agent-harness.md. GetValuations is theCOMMENT
MEDIUMapp/models/holding.rb217 # typically be for real tickers not CUSTOM: ones. A more robust solution would track whichCOMMENT
LOWapp/models/simplefin_item.rb214 # We don't destroy it because has_one :account, dependent: :nullify would nullify the FK we just setCOMMENT
LOWapp/models/simplefin_item.rb216 # trigger autosave on the preloaded account association, reverting the FK we just set!COMMENT
MEDIUMapp/models/demo/generator.rb90 # Generate comprehensive realistic demo data with multi-currencyCOMMENT
MEDIUMapp/models/demo/generator.rb310 # leverage and insurance cards rather than hiding both.COMMENT
MEDIUM…ls/simplefin_account/investments/holdings_processor.rb52 # Parse provider data with robust fallbacks across SimpleFin sourcesCOMMENT
MEDIUMtest/models/demo/generator_test.rb122 # The leverage card reads the loan's down payment; the cash-flow historyCOMMENT
LOWtest/models/coinstats_account/processor_test.rb36 # Should not raise, just return earlyCOMMENT
LOWtest/models/portfolio/xirr_test.rb352 # ends stops a future "just use a safer constant" from quietly reintroducingCOMMENT
MEDIUMtest/controllers/loans_controller_test.rb11 # The overview only shows what the loan actually records: a leverage figureCOMMENT
MEDIUMtest/controllers/loans_controller_test.rb79 # A negative opening valuation (imports produce them) has no leverage band,COMMENT
LOWtest/controllers/settings/providers_controller_test.rb414 # Entry should be removed, not just set to nilCOMMENT
LOWconfig/initializers/00_ssl.rb257 # Fallback: just use the custom CA (may break connections to public services)COMMENT
MEDIUMlib/generators/provider/family/family_generator.rb217 # This approach is more robust than trying to append to an existing include lineCOMMENT
Modern AI Meta-Vocabulary14 hits · 42 pts
SeverityFileLineSnippetContext
MEDIUMapp/models/assistant/token_budget.rb4 # Shared resolution of the model's context window so prompt assembly and theCOMMENT
MEDIUMapp/models/sophtron_item/importer.rb5# This class orchestrates the complete import process for a SophtronItem:COMMENT
MEDIUMapp/models/sophtron_item/syncer.rb26 # This method orchestrates all phases of the sync:COMMENT
MEDIUMapp/models/provider/openai.rb465 # caller batches are split to fit the model's context window. `fixed` isCOMMENT
MEDIUMapp/models/provider/openai/auto_merchant_detector.rb462 # Enhanced developer message with few-shot examples for smaller/local LLMsCOMMENT
MEDIUMapp/models/vector_store/embeddable.rb39 # embedding model token limits.COMMENT
MEDIUMapp/models/vector_store/pgvector.rb10# - An embedding model endpoint (EMBEDDING_URI_BASE / EMBEDDING_MODEL)COMMENT
MEDIUMapp/models/vector_store/qdrant.rb4# Like the Pgvector adapter you still supply your own embedding model; QdrantCOMMENT
MEDIUMapp/models/vector_store/qdrant.rb10# - An embedding model endpoint (EMBEDDING_MODEL_URL / EMBEDDING_MODEL_NAME)COMMENT
MEDIUMapp/controllers/pages_controller.rb4 # Per-widget dashboard layout guardrails. Deterministic defaults the masonryCOMMENT
MEDIUMapp/controllers/pages_controller.rb314 # Resolves a section's layout guardrails, applying the user's height presetCOMMENT
MEDIUMtest/models/demo/generator_test.rb201 # the public orchestration. Unrelated history and provider syncs are omittedCOMMENT
MEDIUMtest/models/demo/generator_test.rb233 # Exercise the actual account/transaction orchestration without generatingCOMMENT
MEDIUMtest/models/assistant/configurable_test.rb48 # The roster only itemizes when the model's context window is comfortableCOMMENT
Slop Phrases8 hits · 16 pts
SeverityFileLineSnippetContext
MEDIUMapp/models/assistant/function/update_bill.rb175 error: "No account named #{params["account_name"].inspect} that you can add bills to",CODE
MEDIUMapp/models/assistant/function/create_bill.rb144 error: "No account named #{name.inspect} that you can add bills to",CODE
MEDIUMconfig/initializers/doorkeeper.rb414 # For example you can add an additional database column to `oauth_applications` table,COMMENT
LOWconfig/initializers/doorkeeper.rb71 # Don't forget to include Doorkeeper ORM mixins into your custom models:COMMENT
LOWconfig/initializers/doorkeeper.rb102 # [NOTE] If you apply this option on already existing project don't forget to manuallyCOMMENT
LOWconfig/initializers/doorkeeper.rb102 # [NOTE] If you apply this option on already existing project don't forget to manuallyCOMMENT
LOWconfig/initializers/doorkeeper.rb536 # them to make sure you doesn't get NoMethodError exception.COMMENT
MEDIUMspec/spec_helper.rb48# with RSpec, but feel free to customize to your heart's content.COMMENT
Example Usage Blocks6 hits · 9 pts
SeverityFileLineSnippetContext
LOWapp/models/concerns/currency_normalizable.rb9# Usage:COMMENT
LOWapp/jobs/snaptrade_activities_fetch_job.rb7# Usage:COMMENT
LOWapp/services/provider_loader.rb6# Usage:COMMENT
LOWtest/support/provider_adapter_test_interface.rb4# Usage:COMMENT
LOWlib/generators/provider/family/family_generator.rb6# Usage:COMMENT
LOWlib/generators/provider/global/global_generator.rb6# Usage:COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHtest/controllers/rules_controller_test.rb476 # raising it, which would otherwise log the reset as requested and redirectCOMMENT