Skip to content

Conversation

Copy link

Copilot AI commented Oct 23, 2025

Problem

Users reported "Current Market Price Unknown" errors when using the Twelve Data API integration. While the API key was configured correctly and autocomplete worked (confirming API connectivity), stock prices and exchange rates were not being fetched. The issue occurred when the Twelve Data API returned error responses instead of successful data.

Root Cause

The Provider::TwelveData class had a critical parsing bug in three methods where it attempted to call .map on potentially nil values:

# Before (buggy)
data = JSON.parse(response.body).dig("values")
data.map do |resp|
  # processing...
end

When the Twelve Data API returns error responses (rate limits, invalid symbols, no data available), the response JSON doesn't contain the expected "values" or "data" keys. This causes .dig() to return nil, and calling .map on nil raises:

NoMethodError: undefined method `map' for nil:NilClass

Common Error Responses from Twelve Data API

Rate Limit (429):

{
  "code": 429,
  "message": "You have exceeded the allowed requests per minute...",
  "status": "error"
}

Invalid Symbol (400):

{
  "code": 400,
  "message": "Invalid symbol",
  "status": "error"
}

Solution

Added nil checks before calling .map() in three methods:

  1. fetch_exchange_rates - for currency conversion rates
  2. fetch_security_prices - for stock prices
  3. search_securities - for security symbol lookups
# After (fixed)
parsed = JSON.parse(response.body)
data = parsed.dig("values")

if data.nil?
  error_message = parsed.dig("message") || "No data returned"
  error_code = parsed.dig("code") || "unknown"
  raise InvalidExchangeRateError, "API error (code: #{error_code}): #{error_message}"
end

data.map do |resp|
  # processing...
end

The raised errors are caught by the existing with_provider_response wrapper and converted to failed Provider::Response objects with proper error context.

Test Coverage

Added two comprehensive tests to test/models/account/market_data_importer_test.rb:

  1. Error handling for security prices - Verifies that invalid symbol errors are handled gracefully without crashing
  2. Error handling for exchange rates - Verifies that rate limit errors are handled gracefully without crashing

Both tests confirm that:

  • No exceptions bubble up to crash the import process
  • No invalid data is stored in the database
  • The system continues operating normally

Impact

Before Fix

  • ❌ Application crashed with NoMethodError
  • ❌ Users saw unhelpful "Current Market Price Unknown" messages
  • ❌ Import processes failed with no clear indication of the problem
  • ❌ No visibility into the actual API error

After Fix

  • ✅ API errors are gracefully handled
  • ✅ Error messages from Twelve Data are preserved and logged
  • ✅ Import processes continue without crashing
  • ✅ Better error visibility for debugging via Rails logs and Sentry
  • ✅ Backward compatible - no impact on successful API responses

Files Changed

  • app/models/provider/twelve_data.rb - Added nil checks before .map calls
  • test/models/account/market_data_importer_test.rb - Added error handling tests

Validation

Created comprehensive validation covering 8 scenarios:

  • ✓ Valid responses parse correctly
  • ✓ Rate limit errors (429) handled gracefully
  • ✓ Invalid symbol errors (400) handled gracefully
  • ✓ No data errors (404) handled gracefully
  • ✓ Empty and malformed responses handled gracefully

All validation tests passed successfully.

Fixes #[issue_number]

Original prompt

This section details on the original issue you should resolve

<issue_title>bug: Twelve Data API parsing errors cause "Current Market Price Unknown" errors</issue_title>
<issue_description>## Before you start (required)

General checklist

  • I have removed personal / sensitive data from screenshots and logs
  • I have searched existing issues and discussions to ensure this is not a duplicate issue

How are you using Sure?

  • I was a paying Maybe customer (hosted version)
  • I use it on PikaPod, Umbrel or similar (VPS included)
  • I am a self-hosted user (local only)

Self hoster checklist

Paying, hosted users should delete this entire section.

If you are a self-hosted user, please complete all of the information below. Issues with incomplete information will be marked as Needs Info to help our small team prioritize bug fixes.

  • Self hosted app commit SHA (find in user menu): [16a1569]
    • I have confirmed that my app's commit is the latest version of Sure
  • Where are you hosting?
    • Render
    • Docker Compose
    • Umbrel
    • PikaPod
    • Other (please specify)

Bug description

I added a Twelve Data API key but the current stock prices remain unknown. When I enter the Ticker I can autocomplete, and I see that the Twelve Data API is working as some info is fetched.

To Reproduce

Fresh install with docker-compose

Steps to reproduce the behavior:

Adding new Holdings manually or importing investments via csv.

Expected behavior

What is the intended behavior that you would expect?
seeing the current value of the stock

Screenshots and/or recordings

Image

We highly recommend providing additional context with screenshots and/or screen recordings. This will significantly improve the chances of the bug being addressed and fixed quickly.
</issue_description>

<agent_instructions>Implement the market_data_importer_test.rb tests necessary to catch the conditions mentioned in the last comment first, then prepare a fix for the parsing of the data as per the tests specifications.</agent_instructions>

Comments on the Issue (you are @copilot in this section)

@jjmata That's so great that you've collected much more testing data, @user12257 ... would you be able to add it as a [breaking test to this file](https://github.com/we-promise/sure/blob/main/test/models/account/market_data_importer_test.rb)?

I wonder if we ask @dosubot to generate a table that summarizes all the testing cases you've described above it would do that for us? 🤔 </comment_new>

Fixes #191


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Summary by CodeRabbit

  • Bug Fixes

    • Enhanced error handling for market data retrieval operations with more specific error detection.
    • Improved validation of API responses before processing data.
    • Added graceful error recovery to prevent import disruptions when external API calls fail.
  • Tests

    • Added tests verifying proper error handling during market data retrieval failures.

Copilot AI changed the title [WIP] Fix Twelve Data API parsing errors Fix Twelve Data API parsing errors causing "Current Market Price Unknown" Oct 23, 2025
Copilot AI requested a review from jjmata October 23, 2025 10:16
Copilot finished work on behalf of jjmata October 23, 2025 10:16
@coderabbitai
Copy link

coderabbitai bot commented Oct 24, 2025

Walkthrough

Added robust error handling and validation to the TwelveData provider for exchange rates, securities search, and security prices. Three new error classes detect missing API data and raise specific exceptions. Corresponding tests verify graceful error handling without crashing the importer.

Changes

Cohort / File(s) Summary
Error Handling & Validation
app/models/provider/twelve_data.rb
Added API response parsing, nil-value detection, and validation before data iteration across three methods: fetch_exchange_rates, search_securities, and fetch_security_prices. Raises specific errors with code and message details on missing data.
Error Class Definitions
app/models/provider/twelve_data.rb
Introduced two new public error classes: InvalidExchangeRateError and InvalidSecurityPriceError to provide specific error context for API failures.
Error Handling Tests
test/models/account/market_data_importer_test.rb
Added two tests verifying graceful error handling: one for security price fetch errors (no exception raised, no Price records created), another for exchange rate fetch errors (no exception raised, no ExchangeRate records created).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰✨ When APIs stumble and data goes missing,
This rabbit hops forth with fixes worth kissing,
With errors now caught and validation in place,
No more "Unknown Prices" upon the screen's face!
Thump-thump goes my paw—error handling's the way! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The pull request title "Fix Twelve Data API parsing errors causing 'Current Market Price Unknown'" directly and clearly describes the main objective of the changeset. The title accurately reflects the core fix: adding robust error handling with nil checks in three methods (fetch_exchange_rates, fetch_security_prices, search_securities) and new error classes to prevent NoMethodError crashes when the Twelve Data API returns error responses. The title is concise, specific, and would allow a teammate scanning the history to immediately understand that this PR addresses the "Current Market Price Unknown" bug caused by API parsing failures.
Linked Issues Check ✅ Passed The pull request fully satisfies the coding-related objectives from linked issue #191. The changes directly address the root cause by adding nil checks and validation steps before calling .map on API responses [Issue #191], preventing the NoMethodError crashes when the API returns error responses without expected data keys. The PR introduces specific error classes (InvalidExchangeRateError, InvalidSecurityPriceError) [Issue #191] that allow the existing error handling wrapper to gracefully convert API failures into failed Provider::Response objects. Two new tests verify that API errors are handled gracefully without exceptions or invalid data persistence [Issue #191]. The implementation maintains backward compatibility and avoids data leakage, addressing all stated requirements [Issue #191].
Out of Scope Changes Check ✅ Passed All changes in this pull request are directly scoped to fixing the Twelve Data API parsing errors issue from #191. The modifications to app/models/provider/twelve_data.rb focus exclusively on adding nil checks and error handling for the three affected methods, along with the two new error classes required by the fix. The test additions in test/models/account/market_data_importer_test.rb are specifically designed to verify that API error scenarios are handled gracefully. No unrelated code refactoring, dependency updates, or fixes to other issues are present in the changeset.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch copilot/fix-twelve-data-api-errors

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jjmata jjmata marked this pull request as ready for review October 24, 2025 11:11
@jjmata
Copy link
Collaborator

jjmata commented Oct 24, 2025

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Oct 24, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
app/models/provider/twelve_data.rb (1)

99-106: Consider using a specific error class for consistency.

Lines 65-72 raise InvalidExchangeRateError and lines 172-175 raise InvalidSecurityPriceError, but this segment raises the generic Error. For consistency and clearer error handling, consider defining and using a specific error class like InvalidSecuritySearchError.

Apply this diff to add a specific error class:

   Error = Class.new(Provider::Error)
   InvalidExchangeRateError = Class.new(Error)
   InvalidSecurityPriceError = Class.new(Error)
+  InvalidSecuritySearchError = Class.new(Error)

Then update line 104:

-        raise Error, "API error (code: #{error_code}): #{error_message}"
+        raise InvalidSecuritySearchError, "API error (code: #{error_code}): #{error_message}"
test/models/account/market_data_importer_test.rb (1)

108-197: Consider adding test coverage for search_securities error handling.

While the existing tests cover fetch_security_prices and fetch_exchange_rates, there's no test for the search_securities error handling path (lines 99-106 in the provider). Adding a test would ensure complete coverage of all error paths introduced in this PR.

Example test structure:

test "handles provider error response gracefully for security search" do
  @provider.expects(:search_securities)
           .with(symbol: "INVALID")
           .returns(provider_error_response(
             Provider::TwelveData::Error.new("Invalid symbol", details: { code: 400, message: "Invalid symbol" })
           ))

  # Should not raise an error
  assert_nothing_raised do
    result = @provider.search_securities("INVALID")
    assert result.error?
  end
end
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 11d4862 and 84ab34a.

📒 Files selected for processing (2)
  • app/models/provider/twelve_data.rb (3 hunks)
  • test/models/account/market_data_importer_test.rb (1 hunks)
🔇 Additional comments (5)
app/models/provider/twelve_data.rb (3)

6-7: LGTM! Clean error hierarchy.

The specific error classes provide clear semantics and enable targeted error handling if needed.


65-72: LGTM! Robust error handling.

The nil check before calling .map prevents the NoMethodError that was causing the "Current Market Price Unknown" issue. The error message preserves API context for debugging.


170-177: LGTM! Consistent error handling.

The nil check and specific error class follow the same robust pattern as fetch_exchange_rates.

test/models/account/market_data_importer_test.rb (2)

108-157: LGTM! Comprehensive error handling test.

The test properly verifies that provider errors for security prices are handled gracefully without raising exceptions or persisting invalid data. The test isolation with stubs is appropriate.


159-197: LGTM! Solid test for exchange rate error handling.

The test correctly verifies graceful error handling and ensures no invalid exchange rates are persisted.

Copy link
Collaborator

@jjmata jjmata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, definite improvement given better parsing and more tests.

@jjmata jjmata merged commit d51ba51 into main Oct 24, 2025
7 checks passed
@jjmata jjmata deleted the copilot/fix-twelve-data-api-errors branch October 24, 2025 11:33
ByteBard11 pushed a commit to ByteBard11/sure that referenced this pull request Oct 25, 2025
…own" (we-promise#224)

* Add tests and fix for Twelve Data API parsing errors
* Fix search_securities to handle nil data key

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: jjmata <[email protected]>
Co-authored-by: Juan José Mata <[email protected]>
TimesAgainst pushed a commit to Nova-Haven/sure-mod that referenced this pull request Oct 28, 2025
commit 9fefe57
Author: João Felipe <[email protected]>
Date:   Wed Oct 29 02:15:14 2025 +0400

    Feature/yahoo finance (we-promise#123)

    * Implement Yahoo Finance

    * Added tests

    * Updated hosting controller to check for managed app_mode instead of env_override

    * Suggestions from CodeRabbit and Fixes on tests

    * Remove Css changes

    * Fix yahoo finance impl and i18n

    * Updated view to use healthy method

    * remove usage

    * Updated env example

    * keep usage on class just to keep same format

    * Ci test

    * Remove some useless validations

    * Remove logs

    * Linter fixes

    * Broke this in my conflict merge

    * Wrong indentation level

    ---------

    Signed-off-by: Juan José Mata <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit 3910116
Author: Albert Solà <[email protected]>
Date:   Tue Oct 28 20:23:20 2025 +0000

    Update pages/dashboard locales (we-promise#255)

commit 4fb0a38
Author: soky srm <[email protected]>
Date:   Tue Oct 28 19:32:27 2025 +0100

    Providers factory (we-promise#250)

    * Implement providers factory

    * Multiple providers sync support

    - Proper Multi-Provider Syncing: When you click sync on an account with multiple providers (e.g., both Plaid and SimpleFin), all provider items are synced
    - Better API: The existing account.providers method already returns all providers, and account.provider returns the first one for backward compatibility
    - Correct Holdings Deletion Logic: Holdings can only be deleted if ALL providers allow it, preventing accidental deletions that would be recreated on next sync
    TODO: validate this is the way we want to go? We would need to check holdings belong to which account, and then check provider allows deletion. More complex
    - Database Constraints: The existing validations ensure an account can have at most one provider of each type (one PlaidAccount, one SimplefinAccount, etc.)

    * Add generic provider_import_adapter

    * Finish unified import strategy

    * Update app/models/plaid_account.rb

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
    Signed-off-by: soky srm <[email protected]>

    * Update app/models/provider/factory.rb

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
    Signed-off-by: soky srm <[email protected]>

    * Fix account linked by plaid_id instead of external_id

    * Parse numerics to BigDecimal

    Parse numerics to BigDecimal before computing amount; guard nils.

    Avoid String * String and float drift; also normalize date.

    * Fix incorrect usage of assert_raises.

    * Fix linter

    * Fix processor test.

    * Update current_balance_manager.rb

    * Test fixes

    * Fix plaid linked account test

    * Add support for holding per account_provider

    * Fix proper account access

    Also fix account deletion for simpefin too

    * FIX match tests for consistency

    * Some more factory updates

    * Fix account schema for multipe providers

      Can do:
      - Account #1 → PlaidAccount + SimplefinAccount (multiple different providers)
      - Account #2 → PlaidAccount only
      - Account #3 → SimplefinAccount only

      Cannot do:
      - Account #1 → PlaidAccount + PlaidAccount (duplicate provider type)
      - PlaidAccount we-promise#123 → Account #1 + Account #2 (provider linked to multiple accounts)

    * Fix account setup

    - An account CAN have multiple providers (the schema shows account_providers with unique index on [account_id, provider_type])
      - Each provider should maintain its own separate entries
      - We should NOT update one provider's entry when another provider syncs

    * Fix linter and guard migration

    * FIX linter issues.

    * Fixes

    - Remove duplicated index
    - Pass account_provider_id
    - Guard holdings call to avoid NoMethodError

    * Update schema and provider import fix

    * Plaid doesn't allow holdings deletion

    * Use ClimateControl for proper env setup

    * No need for this in .git

    ---------

    Signed-off-by: soky srm <[email protected]>
    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
    Co-authored-by: Juan José Mata <[email protected]>

commit 72e7d77
Author: Juan José Mata <[email protected]>
Date:   Mon Oct 27 21:52:37 2025 +0100

    Add onboarding state selector for self-hosted signup (we-promise#251)

    * Add onboarding modes to self-hosted signup

    * Style form consistently

    * Configure ONBOARDING_STATE via ENV

commit dcb6748
Author: ampersandru <[email protected]>
Date:   Mon Oct 27 04:18:45 2025 -0700

    Added a clickable drop down arrow that reveals list of instructions for Brand Fetch Client ID (we-promise#246)

    * Added a clickable drop down arrow that reveals list of instructions for Brand Fetch Client ID

    Signed-off-by: ampersandru <[email protected]>

    * Updated html code based on recommendations

    Signed-off-by: ampersandru <[email protected]>

    * Update _brand_fetch_settings.html.erb

    Signed-off-by: ampersandru <[email protected]>

    * Small edit for consistency with Twelve Data settings flow

    * HTML linting

    * Missed an extra closing tag.

    ---------

    Signed-off-by: ampersandru <[email protected]>
    Signed-off-by: Juan José Mata <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit cca14c9
Author: ampersandru <[email protected]>
Date:   Mon Oct 27 03:45:01 2025 -0700

    Added a clickable drop down arrow that reveals list of instructions for Twelve Data Secret Key (we-promise#247)

    * Added a clickable drop down arrow that reveals list of instructions for Twelve Data Secret Key

    Signed-off-by: ampersandru <[email protected]>

    * Fixed html spacing

    Signed-off-by: ampersandru <[email protected]>

    * Make display even more compact

    * Remove <u> and use CSS classes instead

    ---------

    Signed-off-by: ampersandru <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit 0fc70e9
Author: Juan José Mata <[email protected]>
Date:   Sun Oct 26 23:16:25 2025 +0100

    Add runServices for db and redis in devcontainer

    Signed-off-by: Juan José Mata <[email protected]>

commit d3d91f4
Author: Juan José Mata <[email protected]>
Date:   Sun Oct 26 20:53:18 2025 +0100

    Add PikaPods

    One-click installs

    Signed-off-by: Juan José Mata <[email protected]>

commit 53eb90f
Author: ampersandru <[email protected]>
Date:   Sun Oct 26 09:58:18 2025 -0700

    Added instructions on where and how to obtain API key for Twelve Data (we-promise#235)

    * Added instructions on where and how to obtain API key for Twelve Data

    Signed-off-by: ampersandru <[email protected]>

    * added rel="noopener noreferrer" to links

    Signed-off-by: ampersandru <[email protected]>

    ---------

    Signed-off-by: ampersandru <[email protected]>

commit a35a4ac
Author: Juan José Mata <[email protected]>
Date:   Sun Oct 26 17:51:31 2025 +0100

    Update version to 0.6.5-alpha.3

    Prepare for alpha.3

    Signed-off-by: Juan José Mata <[email protected]>

commit f42e6e3
Author: Albert Solà <[email protected]>
Date:   Sun Oct 26 16:50:31 2025 +0000

    Added translations for ca - Catalan (we-promise#238)

    * Add CA locales for models

    * Add CA locales for views

    * Use translations in activity feed

    * Additional CA locales

    * Fix typo

    ---------

    Co-authored-by: Juan José Mata <[email protected]>

commit db19c95
Author: ampersandru <[email protected]>
Date:   Sun Oct 26 09:47:29 2025 -0700

    Add instructions on how to obtain Brand Logo Client ID API (we-promise#234)

    * Add instructions on how to obtain Brand Logo Client ID API

    Signed-off-by: ampersandru <[email protected]>

    * updated html based on recommendations

    Signed-off-by: ampersandru <[email protected]>

    * added rel="noopener noreferrer" to links

    Signed-off-by: ampersandru <[email protected]>

    ---------

    Signed-off-by: ampersandru <[email protected]>

commit 0b393a0
Author: OrangeDrangon <[email protected]>
Date:   Sun Oct 26 11:58:26 2025 -0400

    add custom s3 support storage config option (we-promise#239)

    Options are documented here including an example
    on how to set a custom endpoint:

    https://guides.rubyonrails.org/active_storage_overview.html#s3-service-amazon-s3-and-s3-compatible-apis

commit fea228d
Author: luckyPipewrench <[email protected]>
Date:   Sun Oct 26 10:50:45 2025 -0400

    Simplefin sync improvements (we-promise#240)

    * Fix syncing issues with new connections and accounts..

    - Keep SimpleFin institution metadata strictly per account (`simplefin_accounts.org_data`).
    - Relax `simplefin_items` institution constraints to allow creating items before org data exists.
    - Remove code that copied the first account’s `org` onto `simplefin_items`.

    * Improve Simplefin Sync
    •
    SimpleFin: family “Sync” includes SimpleFin items; importer does unbounded discovery (with pending=1 fallback) before windowed fetch, for both regular and first syncs.
    •
    Stop populating item‑level institution fields; keep institution metadata per account.
    •
    Relax NOT NULL on item institution fields.
    •
    Post‑sync dashboard broadcasts are now guarded (UI cannot fail the job).
    •
    Show a friendly “daily refresh limit” banner on the SimpleFin card when the latest sync is rate‑limited.
    •
    Add bin/rails sure:simplefin:debug[ITEM_ID] to print latest sync, snapshot account count, simplefin_accounts count, and unlinked list.

    * Fixed double‑quoted strings, spacing around array brackets and commas

    * chore: ignore local .junie files

    * - Broadcast error logs now include full backtraces
    - SimpleFin discovery logic deduplicated fixed
    - app/models/simplefin_item/importer.rb
    --Added a concise docstring for perform_account_discovery describing purpose, steps, and side‑effects.
    --Added a docstring for fetch_accounts_data describing params and return value.

commit f9f6274
Author: Juan José Mata <[email protected]>
Date:   Sat Oct 25 22:57:49 2025 +0200

    Make logo work in dark mode

    Signed-off-by: Juan José Mata <[email protected]>

commit 1ee20ab
Author: Copilot <[email protected]>
Date:   Sat Oct 25 22:23:28 2025 +0200

    Eliminate code duplication in OIDC identity creation (we-promise#230)

    * Eliminate duplication by using create_from_omniauth method

    - Updated OidcIdentity.create_from_omniauth to set last_authenticated_at
    - Refactored OidcAccountsController to use create_from_omniauth instead of direct create! calls
    - Updated test to verify last_authenticated_at is set by create_from_omniauth

    Co-authored-by: jjmata <[email protected]>

    * Extract auth hash building into private helper method

    - Added build_auth_hash helper method to eliminate OpenStruct creation duplication
    - Both create_link and create_user actions now use the same helper

    Co-authored-by: jjmata <[email protected]>

    * Linter fix

    * Fix button style on OIDC link step

    * Fix dark mode styles

    ---------

    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: jjmata <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit b24b102
Author: luckyPipewrench <[email protected]>
Date:   Fri Oct 24 14:41:33 2025 -0400

    Fix rounding issue (we-promise#226)

    Remove rounding from transactions.

commit 03cac95
Author: soky srm <[email protected]>
Date:   Fri Oct 24 19:39:42 2025 +0200

    Category improvements (we-promise#232)

    * Category improvements

    - Updated default categories to a more inclusive set
    - Updated default icon set for categories
    - Updated default categories colors to better separate then.

    * FIX tests

    * Better color pallettes for a few

commit 962ddd1
Author: Juan José Mata <[email protected]>
Date:   Fri Oct 24 19:25:36 2025 +0200

    Refresh README with new logo and LLM conversation in screenshot

    Signed-off-by: Juan José Mata <[email protected]>

commit b001d1c
Author: Marc <[email protected]>
Date:   Fri Oct 24 19:02:54 2025 +0200

    I have created a one click deploy button for railway users 🧙‍♂️ (we-promise#228)

    * Add Railway deployment button to README

    Signed-off-by: Marc <[email protected]>

commit 4ba8f32
Author: Juan José Mata <[email protected]>
Date:   Fri Oct 24 18:11:31 2025 +0200

    Fix production OIDC regression

    Signed-off-by: Juan José Mata <[email protected]>

commit 768e85c
Author: Juan José Mata <[email protected]>
Date:   Fri Oct 24 16:07:45 2025 +0200

    Add OpenID Connect login support (we-promise#77)

    * Add OpenID Connect login support
    * Add docs for OIDC config with Google Auth
    * Use Google styles for log in
    - Add support for linking existing account
    - Force users to sign-in with passoword first, when linking existing accounts
    - Add support to create new user when using OIDC
    - Add identities to user to prevent account take-ver
    - Make tests mocking instead of being integration tests
    - Manage session handling correctly
    - use OmniAuth.config.mock_auth instead of passing auth data via request env
    * Conditionally render Oauth button

    - Set a config item `configuration.x.auth.oidc_enabled`
    - Hide button if disabled

    ---------

    Signed-off-by: Juan José Mata <[email protected]>
    Signed-off-by: soky srm <[email protected]>
    Co-authored-by: sokie <[email protected]>

commit d51ba51
Author: Copilot <[email protected]>
Date:   Fri Oct 24 13:33:06 2025 +0200

    Fix Twelve Data API parsing errors causing "Current Market Price Unknown" (we-promise#224)

    * Add tests and fix for Twelve Data API parsing errors
    * Fix search_securities to handle nil data key

    ---------

    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: jjmata <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit a8f318c
Author: Copilot <[email protected]>
Date:   Fri Oct 24 12:04:19 2025 +0200

    Fix "Messages is invalid" error for Ollama/custom LLM providers and add comprehensive AI documentation (we-promise#225)

    * Add comprehensive AI/LLM configuration documentation
    * Fix Chat.start! to use default model when model is nil or empty
    * Ensure all controllers use Chat.default_model for consistency
    * Move AI doc inside `hosting/`
    * Probably too much error handling

    ---------

    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: jjmata <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>

commit 4f44630
Author: Juan José Mata <[email protected]>
Date:   Fri Oct 24 00:16:29 2025 +0200

    Bump version to 0.6.5-alpha.1

    Signed-off-by: Juan José Mata <[email protected]>

commit bb364fa
Author: soky srm <[email protected]>
Date:   Fri Oct 24 00:08:59 2025 +0200

    LLM cost estimation (we-promise#223)

    * Password reset back button also after confirmation

    Signed-off-by: Juan José Mata <[email protected]>

    * Implement a filter for category (we-promise#215)

    - Also implement an is empty/is null condition.

    * Implement an LLM cost estimation page

    Track costs across all the cost categories: auto categorization, auto merchant detection and chat.
    Show warning with estimated cost when running a rule that contains AI.

    * Update pricing

    * Add google pricing

    and fix inferred model everywhere.

    * Update app/models/llm_usage.rb

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
    Signed-off-by: soky srm <[email protected]>

    * FIX address review

    * Linter

    * Address review

    - Lowered log level
    - extracted the duplicated record_usage method into a shared concern

    * Update app/controllers/settings/llm_usages_controller.rb

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
    Signed-off-by: soky srm <[email protected]>

    * Moved attr_reader out of private

    ---------

    Signed-off-by: Juan José Mata <[email protected]>
    Signed-off-by: soky srm <[email protected]>
    Co-authored-by: Juan José Mata <[email protected]>
    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Nov 2, 2025
alessiocappa pushed a commit to alessiocappa/sure that referenced this pull request Nov 16, 2025
…own" (we-promise#224)

* Add tests and fix for Twelve Data API parsing errors
* Fix search_securities to handle nil data key

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: jjmata <[email protected]>
Co-authored-by: Juan José Mata <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: Twelve Data API parsing errors cause "Current Market Price Unknown" errors

2 participants