A beautiful, private, local-first personal finance tracker. Investments, net worth, spending, and simulations.
This report presents the forensic synthetic code analysis of wealthfolio/wealthfolio, a Rust project with 8,243 GitHub stars. SynthScan v2.0 examined 629,494 lines of code across 1899 source files, recording 1359 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 4.4 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1359 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | compose.yml | 24 | # ── Authentication ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | compose.yml | 43 | # ── OIDC / SSO (optional) ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 9 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 11 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 31 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 33 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 202 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 204 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 327 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 329 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 415 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 417 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 500 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/types.rs | 502 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 550 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 552 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 651 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 653 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 761 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 763 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 1211 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 1213 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 1320 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/client.rs | 1322 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 19 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 21 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 32 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 34 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 129 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 131 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 160 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 162 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 442 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 444 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 547 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/enroll_service.rs | 549 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/device-sync/src/engine/runtime.rs | 13 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/engine/runtime.rs | 15 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/engine/runtime.rs | 53 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/device-sync/src/engine/runtime.rs | 176 | // ─── Pairing flow store ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/market-data/src/provider/metal_price_api/mod.rs | 467 | // ── Integration tests (require METAL_PRICE_API_KEY env var) ────── | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 11 | //! ┌─────────────────────────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 14 | //! │ ┌────────────────────────────────────────────────────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 18 | //! │ └────────────────────────────────────────────────────────────────────────┘ │ | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 21 | //! │ ┌────────────────────────────────────────────────────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 25 | //! │ └────────────────────────────────────────────────────────────────────────┘ │ | COMMENT |
| MEDIUM⚡ | crates/market-data/src/resolver/mod.rs | 26 | //! └─────────────────────────────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM | crates/market-data/src/resolver/exchange_registry.rs | 11 | // ── JSON schema ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/market-data/src/resolver/exchange_registry.rs | 54 | // ── Public API type for frontend consumption ───────────────────────────────── | COMMENT |
| MEDIUM | crates/market-data/src/resolver/exchange_registry.rs | 84 | // ── Registry with pre-built indexes ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/agent-tools/src/tools/activity_import.rs | 80 | // ── Resolved asset identity (populated during validation) ────────────── | COMMENT |
| MEDIUM | crates/agent-tools/src/tools/activity_import.rs | 91 | // ── Duplicate / validation ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/agent-tools/src/tools/activity_import.rs | 233 | // ── get_import_mapping ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/agent-tools/src/tools/activity_import.rs | 305 | // ── prepare_activity_import ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/agent-tools/src/tools/activity_import.rs | 375 | // ── commit_activity_import ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/core/src/goals/goals_service.rs | 27 | // ─── Shared helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/core/src/quotes/client.rs | 9 | //! ┌─────────────────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/core/src/quotes/client.rs | 12 | //! │ Asset ─────────────────────────────────────────────▶ core::Quote │ | COMMENT |
| MEDIUM⚡ | crates/core/src/quotes/client.rs | 16 | //! │ ┌─────────────────────────────────────────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/core/src/quotes/client.rs | 21 | //! │ │ convert ◀──────┘ │ │ | COMMENT |
| 587 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | playwright.config.ts | 41 | }, | COMMENT |
| LOW | playwright.config.ts | 61 | // }, | COMMENT |
| LOW | compose.yml | 21 | # Required — generate with: openssl rand -base64 32 | COMMENT |
| LOW | compose.yml | 41 | # WF_AUTH_REQUIRED: "true" | COMMENT |
| LOW | crates/device-sync/src/types.rs | 161 | pub user_id: String, | COMMENT |
| LOW | crates/device-sync/src/types.rs | 181 | pub app_version: Option<String>, | COMMENT |
| LOW | crates/device-sync/src/types.rs | 201 | COMMENT | |
| LOW | crates/device-sync/src/types.rs | 281 | COMMENT | |
| LOW | crates/device-sync/src/types.rs | 341 | /// Response from creating a pairing session. | COMMENT |
| LOW | crates/device-sync/src/types.rs | 381 | #[serde(alias = "claimer_device_id")] | COMMENT |
| LOW | crates/device-sync/src/types.rs | 401 | pub signature: String, | COMMENT |
| LOW | crates/device-sync/src/types.rs | 421 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | crates/device-sync/src/types.rs | 441 | pub e2ee_key_version: i32, | COMMENT |
| LOW | crates/device-sync/src/types.rs | 461 | /// Message timestamp | COMMENT |
| LOW | crates/device-sync/src/types.rs | 481 | /// Optional HMAC proof that device successfully decrypted the RK bundle | COMMENT |
| LOW | crates/device-sync/src/lib.rs | 1 | //! Wealthfolio Device Sync - Cloud-based device synchronization for Wealthfolio. | COMMENT |
| LOW | crates/device-sync/src/lib.rs | 21 | //! ).await?; | COMMENT |
| LOW | crates/market-data/src/lib.rs | 1 | //! Wealthfolio Market Data Crate | COMMENT |
| LOW | crates/market-data/src/lib.rs | 21 | //! v | COMMENT |
| LOW | crates/market-data/src/lib.rs | 41 | //! | COMMENT |
| LOW | crates/market-data/src/provider/mod.rs | 1 | //! Market data provider abstractions and implementations. | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 21 | /// | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 41 | /// supports_historical: true, | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 61 | /// Provider priority for ordering. | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 81 | COMMENT | |
| LOW | crates/market-data/src/provider/traits.rs | 101 | /// | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 121 | /// # Arguments | COMMENT |
| LOW | crates/market-data/src/provider/traits.rs | 141 | /// * `symbol` - The symbol to fetch profile for | COMMENT |
| LOW | crates/market-data/src/provider/capabilities.rs | 1 | //! Provider capabilities and rate limiting configuration. | COMMENT |
| LOW | crates/market-data/src/provider/metal_price_api/mod.rs | 1 | //! Metal Price API provider for precious metals market data. | COMMENT |
| LOW | crates/market-data/src/provider/metal_price_api/mod.rs | 41 | struct MetalPriceResponse { | COMMENT |
| LOW | crates/market-data/src/provider/metal_price_api/mod.rs | 61 | #[serde(default)] | COMMENT |
| LOW | crates/market-data/src/provider/finnhub/mod.rs | 61 | /// High prices | COMMENT |
| LOW | crates/market-data/src/provider/finnhub/mod.rs | 81 | /// Search results | COMMENT |
| LOW | crates/market-data/src/provider/alpha_vantage/mod.rs | 101 | struct CryptoDailyResponse { | COMMENT |
| LOW | crates/market-data/src/provider/alpha_vantage/mod.rs | 261 | #[allow(dead_code)] | COMMENT |
| LOW | crates/market-data/src/provider/alpha_vantage/mod.rs | 301 | COMMENT | |
| LOW | crates/market-data/src/provider/marketdata_app/mod.rs | 1 | //! MarketData.app provider implementation. | COMMENT |
| LOW | crates/market-data/src/provider/marketdata_app/mod.rs | 41 | /// Open prices | COMMENT |
| LOW | crates/market-data/src/provider/marketdata_app/mod.rs | 61 | /// Response from the prices endpoint for latest quote. | COMMENT |
| LOW | crates/market-data/src/provider/us_treasury_calc/mod.rs | 1 | //! US Treasury calculated-price provider. | COMMENT |
| LOW | crates/market-data/src/models/coverage.rs | 1 | //! Provider market coverage restrictions. | COMMENT |
| LOW | crates/market-data/src/models/profile.rs | 1 | use serde::{Deserialize, Serialize}; | COMMENT |
| LOW | crates/market-data/src/models/mod.rs | 1 | //! Market data models | COMMENT |
| LOW | crates/market-data/src/models/provider_params.rs | 61 | #[serde(flatten)] | COMMENT |
| LOW | crates/market-data/src/registry/validator.rs | 1 | //! Quote data validation. | COMMENT |
| LOW | crates/market-data/src/registry/provider_registry.rs | 41 | /// Create a new provider registry. | COMMENT |
| LOW | crates/market-data/src/registry/circuit_breaker.rs | 1 | //! Per-provider circuit breaker for fault tolerance. | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 1 | //! Error types and retry classification for the market data crate. | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 21 | #[error("Symbol not found: {0}")] | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 61 | /// The provider doesn't know how to handle this instrument. | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 81 | /// Description of the validation failure | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 101 | /// The provider that doesn't support it | COMMENT |
| LOW | crates/market-data/src/errors/mod.rs | 121 | /// | COMMENT |
| LOW | crates/market-data/src/errors/retry.rs | 1 | /// Classification for retry policy. | COMMENT |
| LOW | crates/market-data/src/errors/retry.rs | 21 | /// Used for transient errors like rate limiting (429) or timeout. | COMMENT |
| LOW | crates/market-data/src/resolver/asset_resolver.rs | 1 | //! Asset resolver - resolves from Asset.provider_overrides. | COMMENT |
| LOW | crates/market-data/src/resolver/chain.rs | 1 | //! Resolver chain - composite resolver that tries resolvers in order. | COMMENT |
| LOW | crates/market-data/src/resolver/chain.rs | 21 | /// A resolver returning `None` means it cannot handle the request, | COMMENT |
| LOW | crates/market-data/src/resolver/mod.rs | 1 | //! Symbol resolution for market data providers. | COMMENT |
| 278 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/features/allocations/sota-target-model-spec.md | 1004 | export async function getAllocationAdvisorState( | CODE |
| LOW | docs/features/allocations/sota-target-model-spec.md | 1010 | export async function calculateRebalanceScenarios( | CODE |
| LOW | packages/ui/src/components/ui/chart.tsx | 303 | function getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) { | CODE |
| LOW | packages/ui/src/components/ui/empty-placeholder.tsx | 60 | EmptyPlaceholder.Description = function EmptyPlaceholderDescription({ | CODE |
| LOW | …i/src/components/data-grid/data-grid-cell-variants.tsx | 1436 | function formatDateInputForDisplay(date: Date | string | undefined): string { | CODE |
| LOW | packages/addon-sdk/README.md | 253 | function InvestmentFeesTrackerAddon({ ctx }: { ctx: AddonContext }) { | CODE |
| LOW | packages/addon-sdk/src/permissions.ts | 265 | export function getPermissionCategoriesByRisk( | CODE |
| LOW | packages/addon-sdk/src/permissions.ts | 306 | export function getUndeclaredDetectedFunctions(permission: Permission): string[] { | CODE |
| LOW | packages/addon-sdk/src/permissions.ts | 315 | export function hasUndeclaredDetectedFunctions(permission: Permission): boolean { | CODE |
| LOW | e2e/helpers.ts | 70 | async function canSkipLoginAndOnboardingUi(page: Page) { | CODE |
| LOW | e2e/helpers.ts | 114 | async function waitForLoginOnboardingOrApp(page: Page, timeout: number) { | CODE |
| LOW | e2e/helpers.ts | 404 | export async function completeOnboardingIfNeeded(page: Page) { | CODE |
| LOW | e2e/02-activities.spec.ts | 304 | async function fillInternalTransferCashAmount(value: number) { | CODE |
| LOW | e2e/04-csv-import.spec.ts | 35 | async function proceedThroughImportWizard(page: Page, csvPath: string, accountName: string) { | CODE |
| LOW | e2e/10-symbol-mapping-validation.spec.ts | 172 | async function setOpenSheetToManualPricing() { | CODE |
| LOW | e2e/12-asset-backed-income-subtypes.spec.ts | 214 | async function expectHoldingVisibleInAccount(symbol: string, quantity: number) { | CODE |
| LOW | e2e/15-csv-import-currency-resolution.spec.ts | 30 | async function searchImportedKwebActivity(page: Page) { | CODE |
| LOW | e2e/14-stock-short-workflow.spec.ts | 186 | async function assertBuyFormDoesNotOfferBuyShort(page: Page) { | CODE |
| LOW | apps/frontend/src/addons/activation-coordinator.ts | 70 | export function getPublishedActivationEpoch(): number { | CODE |
| LOW | apps/frontend/src/addons/activation-coordinator.ts | 74 | export function subscribeToActivationEpoch(listener: () => void): () => void { | CODE |
| LOW | apps/frontend/src/addons/contribution-registry.ts | 50 | function normalizeContributedRoutePath(path: unknown): string | null { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 140 | export function setAddonNavigationHandler(navigate: (route: string) => void) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 144 | export function clearAddonNavigationHandler(navigate: (route: string) => void) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 206 | function getOwnedAddonRouteNamespaces(addonId: string) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 220 | function getRequestedRouteNamespace(path: string) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 225 | function isAddonRouteNamespaceAllowed(addonId: string, path: string) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 260 | function hasRegisteredAddonNavPrefix(addonId: string, path: string) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 398 | export function subscribeToNavigationUpdates(callback: () => void) { | CODE |
| LOW | apps/frontend/src/addons/addons-runtime-context.ts | 407 | export function triggerAllDisableCallbacks() { | CODE |
| LOW | apps/frontend/src/addons/addons-core.ts | 76 | function validateAddonCompatibility(manifest: AddonManifest): boolean { | CODE |
| LOW | apps/frontend/src/addons/iframe/addon-sandbox-theme.ts | 14 | export function collectAddonThemeSnapshot(): AddonThemeSnapshot { | CODE |
| LOW | apps/frontend/src/addons/iframe/addon-sandbox-entry.tsx | 174 | function createAddonModuleRegistry(code: string, files: SandboxAddonFile[] = []) { | CODE |
| LOW | …ontend/src/addons/iframe/addon-module-rewriter.test.ts | 13 | function shouldRewriteStaticSpecifier(specifier: string) { | CODE |
| LOW | apps/frontend/src/addons/iframe/addon-iframe-manager.ts | 104 | function createAddonLoadCancelledError(addonId: string, reason = "was unloaded before it loaded") { | CODE |
| LOW | apps/frontend/src/addons/iframe/addon-iframe-manager.ts | 182 | function notifyPermissionDenialOnce(addonId: string, method: string | undefined, error: unknown) { | CODE |
| LOW | apps/frontend/src/addons/iframe/addon-iframe-manager.ts | 246 | function notifyClassifiedAddonErrorOnce(addonId: string, rawMessage: string | undefined) { | CODE |
| LOW | apps/frontend/src/addons/iframe/host-dependencies.ts | 76 | export function isHostDependencySpecifier(specifier: string) { | CODE |
| LOW | apps/frontend/src/addons/iframe/host-dependencies.ts | 80 | export function createHostDependencyModuleUrl(specifier: string, objectUrls: Map<string, string>) { | CODE |
| LOW | …t-planner/components/retirement-dashboard-skeleton.tsx | 3 | export function RetirementDashboardSkeleton() { | CODE |
| LOW | …ement-planner/components/retirement-coverage-chart.tsx | 33 | function CoverageProjectionTooltip({ | CODE |
| LOW | …retirement-planner/components/sidebar-configurator.tsx | 167 | function highContributionGrowthWarning(value: number, t: TFunction) { | CODE |
| LOW | …/features/goals/retirement-planner/lib/plan-adapter.ts | 8 | export function inferBirthYearMonthFromAge(age: number, asOf = new Date()) { | CODE |
| LOW | …/features/goals/retirement-planner/lib/plan-adapter.ts | 60 | export function normalizeDashboardRetirementPlan(plan: RetirementPlan): RetirementPlan { | CODE |
| LOW | …eatures/goals/retirement-planner/lib/dashboard-math.ts | 25 | export function projectedAnnualExpenseNominalAtAge(plan: RetirementPlan, age: number) { | CODE |
| LOW | …eatures/goals/retirement-planner/lib/dashboard-math.ts | 64 | export function projectedAnnualIncomeNominalAtAge( | CODE |
| LOW | …eatures/goals/retirement-planner/lib/dashboard-math.ts | 95 | export function incomeStreamMonthlyAmount(plan: RetirementPlan, stream: RetirementIncomeStream) { | CODE |
| LOW | …eatures/goals/retirement-planner/lib/dashboard-math.ts | 152 | export function resolveCoverageAnnualNominalValues({ | CODE |
| LOW | …eatures/goals/retirement-planner/lib/dashboard-math.ts | 257 | export function deriveRetirementReadiness({ | CODE |
| LOW | …ures/goals/retirement-planner/pages/dashboard-page.tsx | 85 | function RetirementAnalysisPendingColumn({ error }: { error: Error | null }) { | CODE |
| LOW | …tures/goals/retirement-planner/pages/risk-lab-page.tsx | 909 | function MonteCarloDistributionSection({ | CODE |
| LOW | …lio-connect/providers/wealthfolio-connect-provider.tsx | 203 | function EnabledWealthfolioConnectProvider({ children }: { children: ReactNode }) { | CODE |
| LOW | …lio-connect/providers/wealthfolio-connect-provider.tsx | 858 | export function WealthfolioConnectProvider({ children }: { children: ReactNode }) { | CODE |
| LOW | …ealthfolio-connect/hooks/use-aggregated-sync-status.ts | 11 | function determineAggregatedStatus( | CODE |
| LOW | …/src/features/wealthfolio-connect/lib/auth-callback.ts | 15 | function isConfiguredHostedCallbackUrl(url: URL, hostedCallbackUrl: string | null): boolean { | CODE |
| LOW | …atures/wealthfolio-connect/lib/broker-sync-messages.ts | 21 | export function getBrokerSyncIssueMessage( | CODE |
| LOW | …/features/wealthfolio-connect/lib/import-run-review.ts | 1 | export function hasReviewableActivityWarnings(warnings: number | null | undefined): boolean { | CODE |
| LOW | …rc/features/wealthfolio-connect/pages/connect-page.tsx | 719 | function BrokerSyncAttentionSection({ | CODE |
| LOW | …/features/spending/components/spending-tab-content.tsx | 135 | function isSpendingDashboardPeriod( | CODE |
| LOW | …/features/spending/components/spending-tab-content.tsx | 141 | function normalizeSpendingDashboardPeriod( | CODE |
| LOW | …/features/spending/components/spending-tab-content.tsx | 187 | function insightPeriodForDashboardInterval(code: SpendingDashboardPeriod): ReportsPeriod { | CODE |
| 232 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/market-data/src/provider/yahoo/mod.rs | 171 | // Step 1: Get cookie from fc.yahoo.com | COMMENT |
| LOW | crates/market-data/src/provider/yahoo/mod.rs | 191 | // Step 2: Get crumb using cookie | COMMENT |
| LOW | crates/core/src/utils/isin.rs | 148 | // Step 1: Convert characters to digit string | COMMENT |
| LOW | crates/core/src/utils/isin.rs | 160 | // Step 2: Apply Luhn algorithm | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5709 | // Step 1: Deposit 10,000 EUR | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5725 | // Step 2: Buy 10 AAPL @ $100 + $5 fee, fx_rate = 0.93 | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5743 | // Step 3: Sell all 10 AAPL @ $100 + $5 fee, fx_rate = 0.95 | COMMENT |
| LOW | …es/storage-sqlite/src/assets/alternative_repository.rs | 57 | // Step 1: Find and unlink any liabilities that reference this asset | COMMENT |
| LOW⚡ | …es/storage-sqlite/src/assets/alternative_repository.rs | 92 | // Step 2: Delete all quotes for this asset with source = 'MANUAL' | COMMENT |
| LOW⚡ | …es/storage-sqlite/src/assets/alternative_repository.rs | 101 | // Step 3: Delete the asset record | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 179 | // Step 1: Sync connections (platforms) | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 196 | // Step 2: Sync accounts (filter by sync_enabled) | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 250 | // Step 3: Sync data for all synced accounts based on their tracking mode | COMMENT |
| LOW⚡ | e2e/helpers.ts | 428 | // Step 1: Info screen — click Continue | COMMENT |
| LOW⚡ | e2e/helpers.ts | 432 | // Step 2: Preferences — keep e2e assertions deterministic and pick CAD. | COMMENT |
| LOW⚡ | e2e/helpers.ts | 439 | // Step 3: Appearance — pick Light theme and continue | COMMENT |
| LOW⚡ | e2e/helpers.ts | 444 | // Step 4: Finish onboarding | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1005 | // Step 1: re-run backend validation on importable drafts so we catch | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1027 | // Step 2: filter again after backend validation — only import rows the | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1043 | // Step 3: create pending assets, then import the validated activities. | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1122 | // Step 4: success path — save template + persist tool result. | COMMENT |
| LOW | apps/tauri/src/listeners.rs | 261 | // Step 0: Resolve account scope. Specific requests are processed as-is; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/market-data/src/provider/yahoo/mod.rs | 171 | // Step 1: Get cookie from fc.yahoo.com | COMMENT |
| LOW | crates/market-data/src/provider/yahoo/mod.rs | 191 | // Step 2: Get crumb using cookie | COMMENT |
| LOW | crates/core/src/utils/isin.rs | 148 | // Step 1: Convert characters to digit string | COMMENT |
| LOW | crates/core/src/utils/isin.rs | 160 | // Step 2: Apply Luhn algorithm | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5709 | // Step 1: Deposit 10,000 EUR | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5725 | // Step 2: Buy 10 AAPL @ $100 + $5 fee, fx_rate = 0.93 | COMMENT |
| LOW | …re/src/portfolio/snapshot/holdings_calculator_tests.rs | 5743 | // Step 3: Sell all 10 AAPL @ $100 + $5 fee, fx_rate = 0.95 | COMMENT |
| LOW | …es/storage-sqlite/src/assets/alternative_repository.rs | 57 | // Step 1: Find and unlink any liabilities that reference this asset | COMMENT |
| LOW⚡ | …es/storage-sqlite/src/assets/alternative_repository.rs | 92 | // Step 2: Delete all quotes for this asset with source = 'MANUAL' | COMMENT |
| LOW⚡ | …es/storage-sqlite/src/assets/alternative_repository.rs | 101 | // Step 3: Delete the asset record | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 179 | // Step 1: Sync connections (platforms) | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 196 | // Step 2: Sync accounts (filter by sync_enabled) | COMMENT |
| LOW | crates/connect/src/broker/orchestrator.rs | 250 | // Step 3: Sync data for all synced accounts based on their tracking mode | COMMENT |
| LOW⚡ | e2e/helpers.ts | 428 | // Step 1: Info screen — click Continue | COMMENT |
| LOW⚡ | e2e/helpers.ts | 432 | // Step 2: Preferences — keep e2e assertions deterministic and pick CAD. | COMMENT |
| LOW⚡ | e2e/helpers.ts | 439 | // Step 3: Appearance — pick Light theme and continue | COMMENT |
| LOW⚡ | e2e/helpers.ts | 444 | // Step 4: Finish onboarding | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1005 | // Step 1: re-run backend validation on importable drafts so we catch | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1027 | // Step 2: filter again after backend validation — only import rows the | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1043 | // Step 3: create pending assets, then import the validated activities. | COMMENT |
| LOW | …features/ai-assistant/hooks/use-chat-import-session.ts | 1122 | // Step 4: success path — save template + persist tool result. | COMMENT |
| LOW | apps/tauri/src/listeners.rs | 261 | // Step 0: Resolve account scope. Specific requests are processed as-is; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/ai/Cargo.toml | 33 | # LLM orchestration (rig-core crate exports as "rig") | COMMENT |
| MEDIUM | crates/ai/evals/cases/safety.toml | 5 | # wrong thing" complaint mode in industry agentic apps in 2024-2025. | COMMENT |
| MEDIUM | crates/ai/evals/cases/recording.toml | 76 | # hallucinate tickers (Facebook → FB instead of META) so we want the raw text. | COMMENT |
| MEDIUM | crates/ai/src/prompt_template.rs | 4 | //! and advice guardrails with versioning support. | COMMENT |
| MEDIUM | crates/ai/src/prompt_template.rs | 149 | // Advice guardrails | COMMENT |
| MEDIUM | crates/ai/src/stream_hook.rs | 1 | //! Stream-level guard rails for the agentic loop. | COMMENT |
| MEDIUM | crates/ai/src/live_evals/mod.rs | 6 | //! - `crate::eval` (singular): assertion helpers (event ordering, guardrails) | COMMENT |
| MEDIUM | crates/ai/src/eval/harness.rs | 78 | /// Assert tool outputs respect guardrails. | COMMENT |
| MEDIUM | docs/architecture/market-data-quotes.md | 63 | ├── registry/ # Provider orchestration | CODE |
| MEDIUM | packages/addon-dev-tools/cli.js | 52 | // Initialize scaffold service | COMMENT |
| MEDIUM | packages/addon-dev-tools/cli.js | 116 | // Create addon using scaffold service | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/market-data/src/provider/metal_price_api/mod.rs | 72 | /// let provider = MetalPriceApiProvider::new("your_api_key".to_string()); | COMMENT |
| HIGH | crates/market-data/src/provider/marketdata_app/mod.rs | 79 | /// let provider = MarketDataAppProvider::new("your-api-key".to_string()); | COMMENT |
| HIGH | …d/src/pages/settings/market-data/provider-templates.ts | 70 | headers: '{"Authorization": "apikey YOUR_API_KEY"}', | CODE |
| HIGH | …d/src/pages/settings/market-data/provider-templates.ts | 106 | headers: '{"Authorization": "apikey YOUR_API_KEY"}', | CODE |
| HIGH | …d/src/pages/settings/market-data/provider-templates.ts | 120 | headers: '{"Authorization": "apikey YOUR_API_KEY"}', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/core/src/assets/alternative_assets_model.rs | 45 | /// Example for Property: { "sub_type": "residence", "address": "123 Main St" } | COMMENT |
| LOW | crates/ai/src/ai_providers.json | 19 | "placeholder": "http://localhost:11434", | CODE |
| LOW | crates/ai/src/ai_providers.json | 71 | "placeholder": "Enter your Groq API key", | CODE |
| LOW | crates/ai/src/ai_providers.json | 79 | "placeholder": "Leave empty to use default", | CODE |
| LOW | crates/ai/src/ai_providers.json | 117 | "placeholder": "Enter your Google AI API key", | CODE |
| LOW | crates/ai/src/ai_providers.json | 125 | "placeholder": "Leave empty to use default", | CODE |
| LOW | crates/ai/src/ai_providers.json | 171 | "placeholder": "Enter your Anthropic API key", | CODE |
| LOW | crates/ai/src/ai_providers.json | 179 | "placeholder": "Leave empty to use default", | CODE |
| LOW | crates/ai/src/ai_providers.json | 217 | "placeholder": "Enter your OpenAI API key", | CODE |
| LOW | crates/ai/src/ai_providers.json | 225 | "placeholder": "Leave empty to use default", | CODE |
| LOW | crates/ai/src/ai_providers.json | 263 | "placeholder": "Enter your OpenRouter API key", | CODE |
| LOW | crates/ai/src/ai_providers.json | 271 | "placeholder": "Leave empty to use default", | CODE |
| LOW | …s/frontend/src/components/currency-selector-mobile.tsx | 10 | "value" | "onChange" | "displayMode" | "placeholder" | "onSelect" | CODE |
| LOW | apps/frontend/src/i18n/locales/zh/asset.json | 551 | "placeholder": { | CODE |
| LOW | apps/frontend/src/i18n/locales/de/asset.json | 551 | "placeholder": { | CODE |
| LOW | apps/frontend/src/i18n/locales/fr/asset.json | 551 | "placeholder": { | CODE |
| LOW | apps/frontend/src/i18n/locales/es/asset.json | 551 | "placeholder": { | CODE |
| LOW | apps/frontend/src/i18n/locales/en/asset.json | 551 | "placeholder": { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/storage-sqlite/src/db/mod.rs | 573 | // --- Internal helpers for robust, cross-platform file operations --- | COMMENT |
| MEDIUM | apps/frontend/src/lib/utils.ts | 184 | // First attempt with the robust parser | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/ci-check.sh | 3 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/release.yml | 74 | cache: "pnpm" # Set this to npm, yarn or pnpm. | CODE |