Mobile Debug Builds
This release includes debug builds of the mobile applications. Download from the Assets area below.
- Android APK: Debug build for testing on Android devices
- iOS Build: Unsigned iOS build (requires code signing for installation)
Note: These are debug builds intended for testing purposes. For production use, please build from source with proper signing credentials.
What's Changed
- Fix PWA: back/X buttons untappable in wizard layout (budget edit) by @lolimmlost in #1076
- Fix: Yahoo Finance provider Cookie/Crumb Auth by @happytechca in #1082
- refactor: Improve enable banking panel rendering context by @sentry[bot] in #1073
- fix: maintain activity tab during pagination from holdings tab by @tedawf in #1096
- feat(helm): add Pipelock ConfigMap, scanning config, and consolidate compose by @luckyPipewrench in #1064
- Add external AI assistant with Pipelock security proxy by @luckyPipewrench in #1069
- feat: Enable Skylight ActiveJob probe for background worker visibility by @happytechca in #1108
- Add Pipelock operational templates, docs, and config hardening by @luckyPipewrench in #1102
- Backfill category for pre-#924 investment contribution transfers by @luckyPipewrench in #1111
- Add safe-area padding for PWA on import page by @alessiocappa in #1113
- Add budget rollover: copy from previous month by @lolimmlost in #1100
- fix: Parse transfer date parameter by @sentry[bot] in #1110
- Fix uncategorized budget category showing incorrect spending by @lolimmlost in #1117
- Complete Spanish (es) translations across all locale files by @andreugordillovazquez in #1112
- Replace whole-file pipelock exclude with inline suppression by @luckyPipewrench in #1116
- Expand AI docs: external assistant, MCP, architecture, troubleshooting by @luckyPipewrench in #1115
- Add dynamic assistant icon: OpenClaw lobster SVG for external assistant by @jjmata in #1122
- Remove fixed height on budget chart by @alessiocappa in #1124
- feat: Enhance holding detail drawer with live price sync and enriched overview by @happytechca in #1086
- Fix holdings table on mobile by @alessiocappa in #1114
- New select component by @alessiocappa in #1071
- Fix [1018]: Add Date field when entering Account Balance by @michelroegl-brunner in #1068
- Fix nil-key collision in budget category hash lookups by @lolimmlost in #1136
- Group users by family in
/admin/usersby @jjmata in #1139 - Feat: add missing German locals by @michelroegl-brunner in #1065
- Enhance logging in
search_family_files.rbfor vector store debugging by @jjmata in #1033 - fix(helm): use expected health endpoint by @imnotjames in #1142
- Guard error.message with rescue in LLM failed-usage recording by @jjmata with @Copilot in #1144
- Enable Google SSO account creation in Flutter app by @jjmata in #1164
- Check for pending invitations before creating new Family during SSO log in/sign up by @jjmata in #1171
- Enforce one pending invitation per email across all families by @jjmata in #1173
- Add default family selection for invite-only onboarding mode by @jjmata in #1174
- Make categories global by @sokie in #1160
- Fix: Remove blank amount from transaction entry parameters by @sentry[bot] in #1178
- Move account logo determination in dedicated method by @alessiocappa in #1190
- Add "Transaction account" as rule condition filter by @alessiocappa in #1186
- Require admin role for API family reset endpoint by @jjmata in #1189
- Fix Plaid link script loading and first-sync account linking by @chasestech in #1165
- Administer invitations in
/admin/usersby @jjmata in #1185 - Add post-trial inactive
Familycleanup with data archival by @jjmata in #1199 - Feat: Add QIF (Quicken Interchange Format) import functionality by @happytechca in #1074
- feat: add pending transaction manual merging tool by @AdamWHY2K in #1088
- feat(transaction): add support for file attachments using Active Storage by @itsLeonB in #713
- Document admin-only reset auth in OpenAPI docs by @jjmata in #1198
- feat: Add duplicate button when a transaction is selected by @RenzoMXD in #1123
- Feat: Add default user account and consolidate account actions in menu by @happytechca in #1130
- feat(balance): Incremental ForwardCalculator — only recalculate from changed date forward by @happytechca in #1151
- Documentation for review AI Assistant features, MCP and API additions by @onel in #1168
- Remove unused
DeveloperMessagemodel by @jjmata in #1207 - EnableBanking: Use
transaction_datewhen other options fail by @jabbink in #1215 - Respect manually selected account type in SimpleFIN liability logic by @milorw in #1214
- Add scheduled
DemoFamilyRefreshJobto rebuild demo data daily by @jjmata in #1217 - feat: scope Mercury account uniqueness to mercury_item by @claytonlin1110 in #1032
- chore(deps): bump json from 2.18.1 to 2.19.2 by @dependabot[bot] in #1225
- chore(deps): bump bcrypt from 3.1.20 to 3.1.22 by @dependabot[bot] in #1227
- FIX schema drift and snaptrade and mercury issues by @sokie in #1232
- feat(vector-store): Implement pgvector adapter for self-hosted RAG by @eureka0928 in #1211
- Initial split transaction support by @sokie in #1230
- Fix NameError: rename migration file to match class name by @jjmata in #1234
- Restore legacy Plaid migration constant alias by @jjmata in #1235
- Fix
pgvectormigration to only run when explicitly configured by @jjmata in #1239 - Fix rule condition merchant dropdown to show all merchants by @eureka0928 in #1240
- Fix select is hidden inside dialog by @yxuko in #1196
- Bump pipelock image from 0.3.2 to 1.5.0 by @luckyPipewrench in #1238
- Add privacy mode to blur financial data across the app by @ChakibMoMi in #1055
- Refactor report and dashboard table layouts to semantic HTML by @eureka0928 in #1222
- Split UI by @sokie in #1245
- Add GET /api/v1/summary endpoint and display net worth on mobile home by @dwvwdv in #1145
- Move debug logs and logout actions to settings screen by @dwvwdv in #1146
- Add "logo" variant in account dropdown on transfer form by @alessiocappa in #1241
- Fix home page double AppBar inconsistency with settings/more pages by @dwvwdv in #1250
- Provider merchants enhancement by @sokie in #1254
- Fix decimal separator handling in money input fields by @jjmata in #1176
- fix: Resolve infinite sync loop on SnapTrade setup accounts page by @falcononrails in #1256
- Full
.ndjsonimport / reorganize UI with Financial Tools / Raw Data tabs by @jjmata in #1208 - Adapt holdings to number inputs by @sokie in #1258
- Add rswag API docs routes for development mode by @jjmata in #1259
- Fix SimpleFIN holdings confusing market value with cost basis (#1182) by @jjmata in #1261
- chore(deps): bump activestorage from 7.2.2.2 to 7.2.3.1 by @dependabot[bot] in #1263
- Updated list of Canadian registered accounts by @CYBRXT in #1265
- chore(helm): bump pipelock to v2.0.0 with trusted domains and redirect profiles by @luckyPipewrench in #1266
- Fix missing privacy blur on split transaction amounts in drawer by @jjmata with @Copilot in #1275
- Fix dashboard mobile: require press-and-hold to reorder sections by @lolimmlost in #1210
- Lock connection_pool gem by @sokie in #1284
- Add appearance setting for 2 column layout by @sokie in #1285
- Add Kosovo to country list by @vegimcarkaxhija in #1066
- Fix selected account and Transaction/Transfer Tabs changes by @yxuko in #1220
- Perf: Index Balance::SyncCache lookups by date to eliminate O(N×D) scans by @happytechca in #1081
- Family sharing by @sokie in #1272
- Added option to skip TLS verification for mailer by @fkrauthan in #1291
- Default production SSO provider source to YAML to avoid boot-time schema errors by @jjmata with @Copilot in #1278
- Sort Accounts dropdown alphabetically on uploads by @r-jeffries in #1290
- Providers sharing by @sokie in #1273
- Recurring scoping implementation by @sokie in #1300
- Show inflow/outflow totals for transfer filter by @lolimmlost in #1134
- Mobile: Add theme selection (light/dark/system) to settings by @felixmuinde in #1213
- feat(mobile): Add animated TypingIndicator for AI chat responses by @felixmuinde in #1269
- Added ca_file option to use the SSL_CA_FILE specified file if present by @fkrauthan in #1302
- Fix/issue 954 enable banking duplicate transactions by @0xRozier in #988
- Add transaction fee support to trades by @happytechca in #1248
- Record dividends and interest as Trades in investment accounts by @happytechca in #1311
- Split transactions and privacy quick fixes by @sokie in #1315
- Fix NoMethodError on nil entryable in account activity feed by @happytechca in #1316
- Missing translation fallback for account subtypes by @jjmata in #1325
- Fix NoMethodError on nil accountable for logo color by @sentry[bot] in #1334
- Add CoinStats exchange portfolio sync and normalize linked investment charts by @falcononrails in #1308
- fix: add hex color validation to Category model and form (to resolve #1247) by @boul2gom in #1341
- Update Docker Compose file for AI optional features by @jjmata in #1349
- Fix unable to add trades with manual ticker by @Browndw4 in #1343
- Restore monotonic Android versionCode for mobile releases by @jjmata with @Copilot in #1348
- fix: instantiate RuleImport before generating rows by @tomerh2001 in #1354
- Fix: target="_blank" to contact button by @yunwei-zh in #1359
- Fix RuleImport parsing for valid JSON values by @tomerh2001 in #1358
- fix(ui): move repeat icon to the center on recurring transactions page by @KenTandrian in #1365
- fix: enhance text contrast for prose headings, and blockquote paragraphs in dark mode on the Guide page by @briian365 in #1369
- Fix opacity for excluded transactions and implement keyboard navigation by @mike-lloyd03 in #1332
- fix: resolve flaky chats system test race condition by @happytechca in #1375
- fix: prevent NoMethodError in foreign_account? when account family is nil by @sentry[bot] in #1376
- QIF imports: Add date format auto-detection and manual override by @happytechca in #1368
- collect transaction stats after sync in EnableBanking provider by @smurfpandey in #1388
- Enable selenium service in devcontainer for system tests by @paramburu in #1340
- Update ruby-lsp-rails 0.4.6 → 0.4.8 and ruby-lsp 0.24.1 → 0.26.9 by @jjmata in #1389
- added collect_health_stats to enablebanking syncer by @smurfpandey in #1390
- Add Quick Categorize Wizard by @mikaelhm in #1386
- Fixed crypto and loan add menus by @CYBRXT in #1306
- Update and add Portuguese translations for various features by @gamboajorge49 in #1344
- Polish localization: complete translations, pluralization fixes, and reusable locale audit tooling by @UberDudePL in #1356
- fix: allow high precision for security prices in trade forms (to solve #1323) by @boul2gom in #1342
- Quick Categorize Wizard — follow-up fixes by @mikaelhm in #1393
- fix(mobile): Allow users to copy text from chatbot responses by @felixmuinde in #1394
- Add Binance support, heavily inspired by the Coinbase one by @boul2gom in #1317
- refactor(accounts): Improve destroy_later atomicity and add controller error handling by @sentry[bot] in #1395
- Refactor: Use Encryptable concern in CoinbaseItem by @boul2gom in #1339
- Make parent budgets auto-aggregate from subcategory edits by @jjmata with @Copilot in #1312
- Add throttling and cross-rate for twelve data by @sokie in #1396
- feat(select): improve merchant dropdown behavior and placement controls by @IamTaoChen in #1364
- Fix balance sheet dashboard section on iPhone by @Browndw4 in #1318
- feat: Allow creating budgets up to 2 years ahead by @grrtt49 in #925
- docs: add Yahoo Finance IPv6 troubleshooting note by @sure-admin in #1404
- Exposing transaction FX rate by @paramburu in #1099
- Fix Binance USD converter custom rate keyword by @jjmata in #1414
- feat(mobile): render assistant messages as markdown by @felixmuinde in #1405
- Expand financial providers by @sokie in #1407
- fix(binance): fix hmac signature by using same parameter order in request and sign by @boul2gom in #1425
- Add binance security provider for crypto by @sokie in #1424
- Move back to brandfetch by @sokie in #1427
- Fix DemoFamilyRefreshJob demo email config lookup by @jjmata in #1426
- Fix potential timing attack in Sidekiq Web UI auth by @the-spectator in #1429
- fix(accounts): add duplicate action to activity view by @tedawf in #1418
- feat(enable-banking): enhance transaction import, metadata handling, and UI by @boul2gom in #1406
- Fix trade drawer header width regression by @jjmata in #1415
- Feature: tabbing between income and expenses persists entered data by @BurningDog in #1422
- add transfer-icon at transactions by @IamTaoChen in #1431
- Investments currency fix by @sokie in #1436
- Fix overlapping in transaction name by @alessiocappa in #1435
- ui(sidebars): add subtle vertical separators and improve sidebar collapse behavior by @boul2gom in #1416
- Add GitHub Actions workflow to discover and run LLM evaluations by @jjmata in #1439
- fix(enable-banking): refactor error handling and add missing GIN index by @boul2gom in #1432
- Add DeFi via Coinstats by @romainrbr in #1417
- FIX networth chart dashboard by @sokie in #1449
- Add default currency to price and fee fields by @smurfpandey in #1444
- Add improvements from security providers to FX providers also by @sokie in #1445
- Fix transactions page crash when no accounts exist by @alexkreidler in #1453
- Ipv6 support by @sokie in #1437
- Fix module specifier path for parse_locale_float import by @sure-admin in #1456
- feat: add currency management for families with enabled currencies by @tedawf in #1419
- Add category support to transactions by @dwvwdv in #1251
- Budget page refactor: split into(All - Over Budget - On Track) by @IamTaoChen in #1195
- Fix transaction search account scope bypass by @jjmata in #1460
- feat: Add table-divider class and use it in investments summary section by @alessiocappa in #1463
- fix: adjust style in new budget tab and sections by @alessiocappa in #1464
- fix: values visible in privacy mode by @yunwei-zh in #1473
- Add previous messages to LLM response context / fix OpenAI regressions by @jjmata in #1384
- feat(mobile): Add biometric lock for app resume by @felixmuinde in #1474
- fix: preserve Generic investment subtypes in account creation form by @xinmotlanthua in #1465
- feat: Import pending transactions from Enable Banking only if option is enabled by @alessiocappa in #1476
- fix(Enable Banking): Restore legacy fallback for credit card balance calculation by @alessiocappa in #1477
- EnableBanking: use remittance for CARD-* names and merchants by @danez in #1478
- feat(helm): CNPG resource limits/requests by @dariogmori in #1487
- feat(settings): improve currency preferences UI by @tedawf in #1483
- Fix loan account subtype not persisting on create by @sure-admin in #1491
- chore(pipelock): bump chart default to v2.2.0, add CI scan badge by @luckyPipewrench in #1494
- SimpleFIN: setup UX + same-provider relink + card-replacement detection by @luckyPipewrench in #1493
- Complete French translations for views, models, and settings by @andronedev in #1501
- Feature: AI sidebar hidden by default for members and guests if AI is disabled by @BurningDog in #1510
- Add Sophtron Provider by @rockywang2025 in #596
- Close privacy mode gaps on accounts, budget editing, and account activity by @jjmata with @Copilot in #1495
- security: sanitize exception messages in v1 API responses (FIX-11) by @dgilperez in #1521
- Prevent long category labels from overflowing or crowding adjacent controls by @jjmata with @Copilot in #1498
- fix: Table divider display issue on Safari by @alessiocappa in #1522
- Add Google Cloud Storage Support for Active Storage by @itsLeonB in #1523
- Feature: improve transfer matcher UI copy by @BurningDog in #1526
- fix(storage): properly fallback to GCS_KEYFILE when GCS_KEYFILE_JSON is blank by @itsLeonB in #1531
- fix: Budget tabs issues on mobile by @alessiocappa in #1534
- Feature: remember value of chart period selector by @BurningDog in #1528
- Hide nested budget categories in the Budget spent donut by @jjmata with @Copilot in #1544
- feat(mobile): lock chat input while bot is responding + 20s timeout by @felixmuinde in #1538
- feat(ci): improve LLM eval visibility in GitHub Actions by @sure-admin in #1546
- Upgrade Android Gradle Plugin to 8.9.1 and Gradle to 8.12 by @felixmuinde in #1547
- Add automated Google Play Console upload for mobile releases by @jjmata in #1548
- fix(localization): update API usage instructions to include product name placeholder by @briian365 in #1555
- Fix budget donut chart hiding center content on segment hover by @xingxing21 in #1551
- fix(transfers): Set accounts when rendering new form after conversion or argument errors by @sentry[bot] in #1561
- fix(android): remove dead buildscript block and kotlin_version reference by @xingxing21 in #1567
- Fix IndexaCapital sync, account setup, and balance/type bugs by @GermanDZ in #1562
- fix: skip DemoFamilyRefreshJob in self-hosted mode by @wps260 in #1578
- Move versioning from Rails initializer to
.sure-versionfile by @jjmata in #1587 - Fix SimpleFIN inverting Loan account balances by @GermanDZ in #1574
- fix: run TestFlight upload on v* tags by @sure-admin in #1582
- fix: currency being ignored for properties by @thiagodsti in #1556
- fix: change postal_code column from integer to string by @thewillwilson in #1585
- Improve error handling with user-friendly messages and classification by @jjmata in #1591
- fix: Enable and persist notes and tags on split child transactions (#1535) by @xingxing21 in #1552
- Added ability to bulk-edit transaction names for multiple selected transactions by @DataEnginr in #1553
- Fix invite code being consumed on failed registration in invite-only mode by @francmart514 in #1576
- Performance improvements in balance sync cache by @wps260 in #1581
- fix(mobile): stop app icon source overwrite by @sure-admin in #1594
- fix(imports): preserve account status from backups by @JSONbored in #1603
- fix(budgets): stop auto-matched transfers leaking into category cards by @gariasf in #1588
- fix(imports): preserve Sure opening balance history by @JSONbored in #1595
- fix: use ProviderLoader for AuthConfig.sso_providers when DB providers enabled by @thewillwilson in #1614
- refactor(design-system): single-source design tokens via DTCG JSON by @gariasf in #1604
- feat(api): expose complete account export state by @JSONbored in #1597
- fix(design-system): give cyan-900 a darker value than cyan-800 by @gariasf in #1619
- feat(tokens): add $version field + document versioning policy by @gariasf in #1620
- feat(design-system): live tokens reference page in Lookbook by @gariasf in #1618
- feat(api): expose valuation history index by @JSONbored in #1596
- feat(api): expose rule export endpoints by @JSONbored in #1602
- feat(api): add recurring transaction endpoints by @JSONbored in #1600
- fix(design-system): make inline
visible in prose dark mode by @gariasf in #1625- chore(design-system): replace dead Bootstrap classes with Sure tokens by @gariasf in #1621
- feat(api): accept Sure NDJSON imports by @JSONbored in #1601
- feat(api): expose import status details by @JSONbored in #1599
- Optimize and Fix provider price fetches for sold securities and batch queries by @wps260 in #1580
- refactor(i18n): standardize product name placeholder in import mappings by @sentry[bot] in #1631
- fix(recurring): make account-scoping migration resilient to legacy duplicates by @sure-admin in #1623
- ci: use include on matrix for runs-on by @Alxandr in #1649
- feat(api): expose reset status polling by @JSONbored in #1598
- fix: send first-time SnapTrade users to connect flow by @sure-admin in #1613
- fix(mercury): support named multiple API connections by @JSONbored in #1627
- feat(api): expose family exports by @JSONbored in #1632
- fix(chat): eager pending AssistantMessage to fix Turbo subscribe race (#1657) by @tajchert in #1658
- feat(auth): add WebAuthn MFA credentials by @JSONbored in #1628
- feat(api): expose family settings by @JSONbored in #1645
- feat(api): expose rule run history by @JSONbored in #1646
- refactor(design-system): migrate fg-* utilities to text-* and remove namespace by @gariasf in #1626
- feat(exports): preserve recurring transactions by @JSONbored in #1638
- Add assurance vie to investment subtypes by @HugoleDino in #1665
- feat(api): support idempotent valuation writes by @JSONbored in #1637
- fix(design-system): replace undefined utility classes and broken /N modifiers by @gariasf in #1660
- chore(design-system): swap raw gray classes for semantic tokens in settings/ by @gariasf in #1652
- chore(design-system): swap raw gray classes for semantic tokens in holdings/ by @gariasf in #1654
- chore(design-system): swap raw gray classes for semantic tokens across remaining views by @gariasf in #1655
- feat(erb-lint): add DeprecatedClasses cop for raw gray utility classes by @gariasf in #1656
- feat(exports): include holding snapshots by @JSONbored in #1643
- fix(auth): surface exact OIDC issuer mismatches by @sure-admin in #1666
- feat(investments): add India investment subtypes and exchange support by @ahnv in #1659
- feat(api): expose securities and price history by @JSONbored in #1642
- feat(api): expose import row diagnostics by @JSONbored in #1644
- fix(auth): hash MFA backup codes by @JSONbored in #1629
- Fix OpenAI Responses API stream error handling by @GermanDZ in #1669
- Performance improvements in holding calculation pipeline by @wps260 in #1579
- Fix SSO icon rendering for mixed-case provider icons by @sure-admin in #1674
- feat(accounts): Highlight matching activity search text in entry names by @bugbug11111 in #1671
- Revert "feat(accounts): Highlight matching activity search text in entry names" by @jjmata in #1682
- feat(api): expose balance history by @JSONbored in #1641
- feat(entries): Add amount validation and robustify monetizable concern by @sentry[bot] in #1680
- fix(transactions): Ignore blank date in entry params by @sentry[bot] in #1688
- feat(api): expose budget state by @JSONbored in #1640
- Update link text for new account to use translation by @royto in #1690
- feat(api): expose sync status by @JSONbored in #1635
- feat: add Hungarian (hu) localization by @brandonvers in #1677
- feat(api): allow creating categories via API by @GermanDZ in #1676
- feat(api): expose provider connection health by @JSONbored in #1636
- perf(accounts): kill sidebar/sparkline N+1s and cache the sidebar by @GermanDZ in #1683
- Fix avg_cost to return per-share cost basis by @EdeAbreu23 in #1692
- [codex] Complete Sophtron account mapping by @jjmata in #1698
- feat(exports): preserve transfer decisions by @JSONbored in #1639
- Reject revoked OAuth tokens in API v1 authentication by @jjmata in #1711
- fix(transactions): update dialog content class for new transaction view by @thomasbaker9010251 in #1693
- feat(enable-banking): safe pending transaction merge with sync re-import prevention by @CrossDrain in #1709
- feat(splits): add exclusion support for splits and improve rendering by @CrossDrain in #1661
- [codex] Add Sophtron manual sync fixes by @jjmata in #1714
- docs(agents): add Design System Hygiene checklist for UI PRs by @gariasf in #1732
- refactor(design-system): extend DS::Alert and migrate 9 inline alert blocks by @gariasf in #1731
- i18n(es): fill high-value locale gaps by @sure-admin in #1733
- Bank Sync cleanup by @jjmata in #1710
- Mobile: custom proxy headers + small login UX fixes by @tajchert in #1748
- feat(api): add transaction idempotency keys by @JSONbored in #1729
- fix(design-system): DS::Alert alignment, accessibility, and hierarchy polish by @gariasf in #1734
- feat(exports): add attachment manifest by @JSONbored in #1728
- feat(api): add import preflight validation by @JSONbored in #1755
- test(recurring): prove export roundtrip semantics by @JSONbored in #1727
- fix(api): include disabled-account transaction history by @JSONbored in #1723
- fix(enable-banking): import transactions missing transaction_id and entry_reference by @CrossDrain in #1767
- feat(providers): add Kraken exchange sync by @JSONbored in #1759
- feat(recurring): allow marking transfers as recurring by @gariasf in #1589
- fix(imports): import raw balance records by @JSONbored in #1724
- fix: correct SnapTrade cash activity signs by @sure-admin in #1634
- Scope SnapTrade orphan cleanup to current family by @jjmata in #1769
- Constrain Lunchflow base URL to trusted endpoint by @jjmata in #1768
- fix(binance): support CRYPTO: prefix and USD stablecoins by @plind-junior in #1771
- feat(mobile): add suggested questions to empty chat screen by @felixmuinde in #1773
- fix(ds/dialog): use existing i18n namespace for close button label by @plind-junior in #1776
- feat: opening_balance_date and opening_balance(i18n) by @IamTaoChen in #1377
- feat(exports): add rule operand references by @JSONbored in #1726
- fix(sso): preserve user-edited name across OIDC logins by @plind-junior in #1777
- feat(mobile): add mass delete for chats by @felixmuinde in #1779
- Add Interactive Brokers Provider by @gian-reto in #1722
- ci: split unit and system test jobs by @sure-admin in #1787
- fix(enable-banking): fix pending→posted auto-claim producing badge, duplicate, and wrong date by @CrossDrain in #1783
- fix(enable-banking): gracefully skip PDNG fetch for ASPSPs that don't support it by @CrossDrain in #1789
- feat(sync): add Brex provider connections by @JSONbored in #1752
- fix(simplefin): treat Vanguard/Fidelity cost_basis as total when needed by @plind-junior in #1772
- Mobile releases workflow fix by @jjmata in #1790
- fix(exports): align CSV roundtrip contracts by @JSONbored in #1725
- feat(statements): add account statement vault by @JSONbored in #1753
- fix(mobile): respect system navigation bar inset on chat screen by @felixmuinde in #1784
- feat(balance): Preserve historical balances as waypoints for linked accounts by @CrossDrain in #1663
- Add period navigation arrows to Reports view by @joaocbatista in #1756
- fix(enable-banking): preserve claimed pending date on subsequent syncs by @CrossDrain in #1797
- fix(a11y): add skip-link and aria-current="page" to application layout by @oxtensor in #1781
- fix(rules): count blocked rule transactions by @steadyfall in #1782
- chore: GitHub workflow to auto-deploy PRs to Cloudflare by @jjmata in #880
- fix(preview): use worker list metadata for cleanup by @sure-admin in #1799
- feat(i18n): extract hardcoded English strings to locale files by @brandonvers in #1806
- chore(ci): upgrade GitHub Actions to Node 24-compatible versions by @sure-admin in #1810
- Retry Enable Banking sync with provider-corrected date range by @sure-admin in #1801
- Add
super_admindebug event log by @sure-admin in #1816- Add Actual Budget CSV import flow by @sure-admin in #1830
- fix(pwa): serve manifest for html accept headers by @sure-admin in #1828
- feat: beta features toggle + Beta pill primitive by @gariasf in #1829
- feat(i18n): add Hungarian translations for strings extracted in #1806 by @brandonvers in #1817
- fix(ibkr): correct historical cash/non-cash split for linked accounts by @CrossDrain in #1813
- feat(i18n): complete Catalan translations + extract residual hardcoded strings by @gariasf in #1836
- i18n(en): hardcode 'One error' in sso_providers errors_title singular form by @gariasf in #1854
- refactor: rename beta features gate to preview features by @gariasf in #1837
- fix(design-system): bump --color-success for WCAG 1.4.11 contrast by @gariasf in #1838
- fix(design-system): DS::Toggle focus ring, role=switch, and semantic tokens by @gariasf in #1843
- fix(design-system): DS::FilledIcon decorative-vs-meaningful API by @gariasf in #1842
- fix(design-system): DS::Disclosure focus ring + motion-safe chevron rotation by @gariasf in #1841
- fix(design-system): DS::Button a11y audit — focus ring, touch target, type default, icon-only label by @gariasf in #1840
- feat(theme): broadcast theme:change event so SVG/canvas consumers can repaint by @gariasf in #1839
- refactor(design-system): migrate 38 hand-rolled provider buttons to DS::Button / DS::Link (#1715 §5 part B) by @gariasf in #1860
- fix(design-system): DS::Link a11y — distinguishable default, icon-only label, external-link hardening by @gariasf in #1844
- fix(design-system): DS::Tooltip a11y — focusable trigger, keyboard parity, Esc dismiss by @gariasf in #1845
- fix(design-system): DS::Dialog a11y — role, aria-modal, aria-labelledby, heading_level by @gariasf in #1846
- fix(design-system): DS::Tabs a11y — WAI-ARIA tab pattern + keyboard nav by @gariasf in #1847
- fix(design-system): DS::Select a11y — fix aria-expanded, listbox keyboard nav, label binding by @gariasf in #1848
- refactor(design-system): migrate single-color tokens to @theme + lint @utility /N footgun by @gariasf in #1849
- refactor(design-system): migrate orphan btn-- buttons to DS::Button / DS::Link (#1715 §5 part A) by @gariasf in #1859
- feat(design-system): split DS::Menu into strict action-list + new DS::Popover by @gariasf in #1850
- fix(entry): Guard entryable_attributes for non-transaction entries in bulk_update! by @sentry[bot] in #1877
- fix(imports): prevent MissingTemplate for JSON requests in index by @sentry[bot] in #1875
- optimize net_category_totals() by using memoized cache by @bittensorrider in #1881
- fix(helm): skip Redis/DB auto-wiring when extraEnv override is set by @luckyPipewrench in #1868
- feat(dashboard): zoom into cashflow sankey categories by @tajchert in #1807
- fix(destroy): prevent UnknownAttributeError in DestroyJob rescue by @sentry[bot] in #1852
- feat(imports): verify Sure NDJSON import readback by @JSONbored in #1869
- feat(design-system): add DS::SearchInput primitive (closes #1715 §3) by @gariasf in #1853
- feat(design-system): DS::Disclosure :card variant + migrate 14 provider items (#1715 §6) by @gariasf in #1855
- feat(design-system): migrate 3 provider panels to DS::Disclosure :card (#1715 §6) by @gariasf in #1856
- feat(design-system): DS::Disclosure :card_inset variant + migrate ibkr_panel + settings/_section (#1715 §6) by @gariasf in #1857
- feat(design-system): DS::Disclosure :inline variant + migrate indexa_capital + snaptrade panels (#1715 §6) by @gariasf in #1858
- feat(design-system): extend DS::Pill with badge mode + semantic tones (#1751 PR A) by @gariasf in #1902
- fix(settings/debugs): replace 2 raw palette tokens (DS drift) by @gariasf in #1903
- fix(views): guard against nil entry.date in partials by @sentry[bot] in #1878
- fix(settings/debugs): migrate in-cell
Details
to DS::Disclosure :inline by @gariasf in #1916- refactor(transactions): migrate 5 transaction badges to DS::Pill (#1751 PR B) by @gariasf in #1917
- refactor(providers): migrate provider badges to DS::Pill (#1751 PR C) by @gariasf in #1918
- docs(ds-toggle): warn against external hidden_field_tag with same name by @gariasf in #1925
- refactor(misc): migrate misc badges to DS::Pill (#1751 PR D) by @gariasf in #1919
- fix(design-system): DS::Disclosure :default summary_content layout by @gariasf in #1929
- fix(design-system): DS::Menu :icon_sm variant for dense action lists by @gariasf in #1930
- fix(design-system): restore dark-mode contrast on Toggle + destructive borders by @gariasf in #1932
- refactor(views): migrate 6 residual inline alerts to DS::Alert by @gariasf in #1933
- fix(admin/users): parent space-y-6 for sibling section spacing by @gariasf in #1934
- Use date comparisons for interval thresholds by @hendriksen-mark in #1923
- refactor(transactions): migrate transfer_match badges to DS::Pill by @gariasf in #1939
- Prevent Brand Fetch client ID autofill by @jakearmstrong59 in #1914
- fix : account destroyed cascade transfer destruction then … by @arumaio in #1795
- fix(enable_banking): match bank list search against BIC, not just name by @dripsmvcp in #1874
- chore(helm): bump pipelock to 2.5.0 and surface 2.5 config by @luckyPipewrench in #1913
- perf: use jemalloc as the default allocator by @ahnv in #1910
- Add automatic
not-gittensorPR labeling by @sure-admin in #1957- fix(locale): Handle blank locale submission gracefully by @sentry[bot] in #1876
- fix(i18n): standardize product name interpolation in import mapping descriptions by @sentry[bot] in #1956
- fix(messages): handle blank content submission gracefully by @sentry[bot] in #1938
- fix(trades): prevent MissingTemplate for Turbo Stream requests on update/create failure by @sentry[bot] in #1893
- fix(views): clear Rule 2 + Rule 5 findings from weekly DS drift (#1951) by @gariasf in #1955
- fix: invert non-gittensor label condition by @sure-admin in #1960
- fix(settings): preserve OpenAI form input on validation failure by @dripsmvcp in #1862
- fix(preview): only redeploy on preview-cf label changes by @sure-admin in #1980
- fix: Avoid overlay in provider section on mobile by @alessiocappa in #1990
- fix(i18n): use %{product_name} in api_keys usage_instructions (#1505) by @Rene0422 in #2000
- feat: Add pagination in merchants page by @alessiocappa in #1965
- feat(ibkr): compute net_market_flows from IBKR equity equity delta and trade flows by @CrossDrain in #1970
- fix(account): show activity label for accounts supporting trades by @xBlaz3kx in #1993
- fix(settings): add nil-safe operator to Current.family.can_manage_subscription? by @sentry[bot] in #2006
- fix(family-sharing): prevent silent data loss when rehoming or removing users by @dripsmvcp in #1896
- fix(holdings): carry provider cost_basis forward to calculated rows past snapshot date by @CrossDrain in #1818
- fix: Keep with auto for category badge by @alessiocappa in #1963
- fix(enable_banking): clear stuck pending flag when ASPSP reuses same transaction_id by @CrossDrain in #1982
- feat(binance): add full account sync and transaction processing by @briian365 in #1822
- fix(jobs): delegate recurring-transaction sync gate to Sync.for_family by @galuis116 in #1975
- fix(views): DS drift — sankey tooltip tokens by @glorydavid03023 in #1996
- feat(reports): add Period Return card to Investment Performance by @CrossDrain in #1962
- fix(enable_banking): migrate select_bank dialog to DS::Pill and DS::Link by @glorydavid03023 in #1997
- fix(plaid): surface configuration/product-access errors from the Link flow (#1792) by @Rene0422 in #1991
- fix(balance): derive waypoint start from day's flows to prevent double-counting and phantom bumps by @CrossDrain in #2031
- fix(currencies): add DOGE entry to config/currencies.yml (#2008) by @Rene0422 in #2030
- feat(settings): add reviewed category merge flow by @JSONbored in #1754
- refactor(imports): back PDF imports with statements by @JSONbored in #1786
- fix(transactions): migrate transaction filter searches to DS::SearchInput by @glorydavid03023 in #1998
- feat(assistant): add get_budget function for budget tracking by @wolstad in #1966
- ci(preview): isolate preview deployment tooling by @JSONbored in #2025
- chore(i18n): complete Chinese locale coverage by @ashanzzz in #2010
- fix(ai-chat): disable submit on empty input instead of surfacing 'Content missing' (#1697) by @jeffrey701 in #1872
- feat(i18n): add Vietnamese (vi) locale by @tanoggy in #2043
- ci(preview): split PR image builds from trusted deploys by @JSONbored in #2057
- fix(charts): auto-fit donut center text to inner ring (#2002) by @Rene0422 in #2017
- fix(merchants): preserve manual merchant edits across provider sync by @dripsmvcp in #1981
- fix(snaptrade): import non-primary-currency cash as cash holdings by @dripsmvcp in #1979
- chore(ci): pin GitHub Actions to commit SHAs (#1811) by @jeffrey701 in #1870
- Add HTTP timeout config to Provider::Github Octokit client by @bittensorrider in #2061
- Perf/dashboard endpoint optimization by @bittensorrider in #1897
- fix(reset): scope family financial data resets by @JSONbored in #1835
- fix(dashboard): make Outflows widget responsive to its container, not the viewport by @gariasf in #2059
- ci(preview): stabilize Cloudflare preview deployments by @JSONbored in #2062
- fix: Replace platform-wide broadcast_refresh with sync toast by @ahnv in #1964
- feat(ai): add Anthropic provider with chat parity (1/5) by @gariasf in #1983
- fix(family): include HSA depository accounts in tax-advantaged exclusion by @galuis116 in #2004
- Fix Start month on Last 6 Months report off by 1 by @joaocbatista in #2070
- fix(transactions): include enable_banking in pending/confirmed status filter by @JPette1783 in #1885
- ci(preview): stabilize image push and readiness diagnostics by @JSONbored in #2084
- fix(tests): avoid account statement coverage rollover collision by @sure-admin in #2102
- fix: Do not show pagination if no merchants are available by @alessiocappa in #2115
- feat(transactions): add inline tag creation and search in txn form by @tedawf in #1719
- fix(categories): avoid index N+1 queries by @JSONbored in #2089
- feat(ai): Anthropic batch ops + LLM cost ledger (2/5) by @gariasf in #1984
- feat: Move "Merge" action for merchants/categories in sub menu by @alessiocappa in #2114
- perf(transfers): narrow auto-transfer candidate search by @JSONbored in #2080
- feat(goals): balance-derived + pledges by @gariasf in #1798
- fix(migrations): scope admin-backfill to a MigrationUser model (#1716) by @jeffrey701 in #1871
- perf(sparklines): avoid full account loads for linked charts by @JSONbored in #2128
- feat(provider): Akahu integration by @failing in #1921
- fix: replace hand-rolled badges with DS::Pill in admin users view by @Kelvinchen03 in #1988
- refactor(charts): extract shared chart-tooltip className to one source by @gariasf in #2106
- fix(ds-pill): default show_dot per mode (badges clean, markers keep dot) by @gariasf in #2107
- chore(ds-pill): migrate budget-category status badges to DS::Pill (#1751) by @gariasf in #2111
- fix(recurring): match transfer pairs so Cleaner stops mis-retiring transfers by @gariasf in #2110
- feat(ds): extract DS::ProgressRing primitive; migrate goal card (#1899) by @gariasf in #2112
- fix(ds): unify SSO sign-in buttons on DS::Button; drop bespoke Google CSS by @gariasf in #2152
- fix IncomeStatement performance issue by @bittensorrider in #1947
- ci(preview): fix Cloudflare registry image deployment by @JSONbored in #2124
- chore(rubocop): ignore generated schema spacing by @JSONbored in #2125
- feat(imports): validate Sure NDJSON before publish by @JSONbored in #1833
- feat(ai): Anthropic native PDF processing (3/5) by @gariasf in #1985
- fix(helm): normalize appVersion to strip leading v (#2050) by @jeffrey701 in #2156
- feat(i18n): complete Spanish (es) locale coverage for provider & transaction views by @glorydavid03023 in #2159
- feat(i18n): complete German (de) locale coverage for provider & transaction views by @glorydavid03023 in #2158
- fix(ds): dark-mode token parity — contrast & state fixes by @gariasf in #2139
- fix(accounts): honor stored return_to after subtype account creation by @gariasf in #2109
- Pass
APP_BUNDLE_IDinto iOS archive by @jjmata in #2169- feat(imports): add SureImport session batches by @JSONbored in #1785
- fix(goals): scope funding-account picker to the current user's accessible accounts by @gariasf in #2172
- feat(ds): elevate dropdown overlays and stabilize selection check gutter by @gariasf in #2161
- fix(goals): default goal currency so it survives a failed create by @gariasf in #2171
- feat(enable_banking): support MFA/decoupled banks and harden session … by @trahloff in #2174
- fix(mobile): parse locale-aware transaction amounts by @JSONbored in #2130
- fix(ds): .table-scroll — wide tables scroll instead of clipping by @gariasf in #2148
- fix(balance-sheet): preserve disabled-account net worth history by @JSONbored in #1730
- feat(ds): semantic color — neutralize decorative green/red on reports by @gariasf in #2144
- fix(ds): cross-viewport lock — consistent auth mode-switch by @gariasf in #2149
- fix(ds): chart flat-state — hairline trendline, not a bisecting rule by @gariasf in #2150
- feat(mobile): add transaction metadata editing by @JSONbored in #2131
- feat(dashboard): unify per-widget period selectors into one picker by @gariasf in #2162
- ci(preview): render Cloudflare config from trusted template by @JSONbored in #2207
- Fix SSO provider settings updates (preserve client_secret, persist default_role) by @jjmata in #2210
- fix(goals): UI polish — submit validation, container-responsive cards, picker & filter fixes by @gariasf in #2160
- fix(ds): canonical transaction-row — stop category pills truncating by @gariasf in #2147
- feat(merchants): add raw data import (csv) for merchants by @xBlaz3kx in #1992
- chore(ci): finish Node 24 GitHub Actions migration by @sure-admin in #2221
- fix(mobile): redact sensitive diagnostic logs by @JSONbored in #2199
- feat(ds): DS::SegmentedControl — fix invisible dark selected pill by @gariasf in #2145
- fix(ds): one height rail for icon and text buttons by @gariasf in #2202
- fix(sync-toast): morph refresh, defer behind modals, DS conformance by @gariasf in #2105
- perf(transactions): preload new form options by @JSONbored in #2189
- perf(reports): collapse investment flow aggregates by @JSONbored in #2190
- fix: Savings Goal Marked Reached While Still Short by @jonathanchang31 in #2180
- feat(ai): default Anthropic installs to pgvector RAG (4/5) by @gariasf in #1986
- fix(ds): dark-parity for bespoke green status badges by @gariasf in #2142
- feat(ds): DS::EmptyState primitive by @gariasf in #2146
- test(goals): pledge-delta integration coverage (follow-up to #2178) by @gariasf in #2206
- feat(mobile): add privacy-safe Sentry instrumentation by @JSONbored in #2201
- fix(preview): surface postgres startup failures and reset attempt timings by @sure-admin in https://github.com/we-promise/sure/pull/2217
- fix(charts): restyle hover tooltips with soft shadow + larger radius by @gariasf in https://github.com/we-promise/sure/pull/2029
- feat(i18n): complete Brazilian Portuguese (pt-BR) locale coverage for provider & transaction views by @glorydavid03023 in https://github.com/we-promise/sure/pull/2220
- feat(i18n): complete Dutch (nl) locale coverage for provider & transaction views by @glorydavid03023 in https://github.com/we-promise/sure/pull/2218
- feat(mobile): show account detail context by @JSONbored in https://github.com/we-promise/sure/pull/2231
- fix(mobile): make offline transaction replay idempotent by @JSONbored in https://github.com/we-promise/sure/pull/2232
- Respect CoinStats wallet rate limits by @dan-dr in https://github.com/we-promise/sure/pull/2251
- feat(ai): self-host settings UI for Anthropic provider (5/5) by @gariasf in https://github.com/we-promise/sure/pull/1987
- feat(ai): route LLM batch & PDF flows through Setting.llm_provider by @gariasf in https://github.com/we-promise/sure/pull/2265
- fix(imports): import Actual rows with blank payee by @JSONbored in https://github.com/we-promise/sure/pull/2282
- Fix prerelease version-bump job: add PR fallback for protected branches by @jjmata in https://github.com/we-promise/sure/pull/2224
- perf(sync): scope transfer matching after account sync by @JSONbored in https://github.com/we-promise/sure/pull/2230
- fix(ds): use DS::Disclosure for investment-performance expander by @gariasf in https://github.com/we-promise/sure/pull/2243
- fix(ds): replace invalid bg-surface-default token with bg-surface by @gariasf in https://github.com/we-promise/sure/pull/2244
- fix(ds): canonical destructive red → red-500 (token + button) by @gariasf in https://github.com/we-promise/sure/pull/2245
- fix(ds): migrate SSO amber warning surfaces to DS::Alert / DS::Pill by @gariasf in https://github.com/we-promise/sure/pull/2246
- fix(ds): migrate remaining amber notice boxes to DS::Alert(:warning) by @gariasf in https://github.com/we-promise/sure/pull/2247
- fix(ds): convert_to_trade price warning — fix dead dark:, use warning token by @gariasf in https://github.com/we-promise/sure/pull/2249
- fix(ds): route remaining literal yellow warning surfaces onto --color-warning by @gariasf in https://github.com/we-promise/sure/pull/2250
- fix(ds): balance-sheet weight alignment + category pill padding by @gariasf in https://github.com/we-promise/sure/pull/2275
- fix(ds): add-account menu — right-size close + clickable rows by @gariasf in https://github.com/we-promise/sure/pull/2276
- fix(ds): dark-mode hover — alpha-black-25 → surface-hover on date-nav triggers by @gariasf in https://github.com/we-promise/sure/pull/2287
- fix(ds): unify tab/chip controls on DS::SegmentedControl (#8) by @gariasf in https://github.com/we-promise/sure/pull/2284
- refactor(settings): consistency pass — header-less settings_section + guides by @gariasf in https://github.com/we-promise/sure/pull/2279
- fix(ds): sync-settings env notice → DS::Alert (was invisible: undefined warning-* classes) by @gariasf in https://github.com/we-promise/sure/pull/2278
- fix(settings): preserve content scroll position per page across navigation by @gariasf in https://github.com/we-promise/sure/pull/2277
- feat(ds): one canonical focus ring across primitives by @gariasf in https://github.com/we-promise/sure/pull/2140
- fix: EODHD lookup for EU mutual funds with EUFUND exchange code by @Kelvinchen03 in https://github.com/we-promise/sure/pull/2212
- feat(mobile): align theme foundation with Sure tokens by @JSONbored in https://github.com/we-promise/sure/pull/2237
- feat(mcp): OAuth 2.1 auth for MCP — connect Claude.ai with your Sure login by @thewillwilson in https://github.com/we-promise/sure/pull/2234
- fix(enable-banking): tolerate any 422 on PDNG fetch (#1805) by @Rene0422 in https://github.com/we-promise/sure/pull/1889
- fix(sharing): scope import account selects to accessible_by (#1803) by @dripsmvcp in https://github.com/we-promise/sure/pull/2194
- fix(mobile): regenerate stale Sure tokens on main by @sure-admin in https://github.com/we-promise/sure/pull/2296
- Fix Plaid sync failure for loan subtypes missing from Loan::SUBTYPES by @BeltaKoda in https://github.com/we-promise/sure/pull/2298
- feat(cashflow): deep-link category labels to filtered transactions by @thewillwilson in https://github.com/we-promise/sure/pull/2083
- fix(preview): bind :3000 instantly and bound diagnostics posts by @JSONbored in https://github.com/we-promise/sure/pull/2286
- Add support for dividend, deposit, withdrawal, and interest trade types to Trades API by @thebandit in https://github.com/we-promise/sure/pull/1761
- fix(ds): route mercury/ibkr provider panels onto sibling tokens by @gariasf in https://github.com/we-promise/sure/pull/2290
- refactor(settings): debugs page onto settings_section by @gariasf in https://github.com/we-promise/sure/pull/2289
- fix(ds): goals — uniform New-goal → grid spacing by @gariasf in https://github.com/we-promise/sure/pull/2288
- feat(mobile): standardize money typography and semantic amount color by @JSONbored in https://github.com/we-promise/sure/pull/2331
- chore(deps): upgrade Rails 7.2 → 8.1 by @JSONbored in https://github.com/we-promise/sure/pull/2301
- fix(ds): neutral text for goals status callout by @gariasf in https://github.com/we-promise/sure/pull/2312
- fix(dashboard): apply two-column layout at xl breakpoint, not 2xl by @gariasf in https://github.com/we-promise/sure/pull/2310
- fix(dashboard): align sankey zoom-out button with section header by @gariasf in https://github.com/we-promise/sure/pull/2313
- fix(ds): normalize legacy tooltip spacing to one recipe by @gariasf in https://github.com/we-promise/sure/pull/2311
- fix(settings): give the MCP copy button success feedback by @gariasf in https://github.com/we-promise/sure/pull/2314
- fix(chat): clear assistant bubble on destroy so the chat doesn't hang on Thinking by @gariasf in https://github.com/we-promise/sure/pull/2315
- chore(deps): bump yard from 0.9.37 to 0.9.42 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2335
- chore(deps): bump css_parser from 1.21.1 to 1.22.0 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2336
- fix(ds): shrink dialog close button to size sm by @gariasf in https://github.com/we-promise/sure/pull/2309
- chore(i18n): remove dead transfers.form.* exchange-rate keys by @augustocbx in https://github.com/we-promise/sure/pull/2293
- fix(sync): discover nightly provider items reflectively by @sure-admin in https://github.com/we-promise/sure/pull/2334
- fix(ds): canonical separators and destructive tokens in usage/rules tables by @gariasf in https://github.com/we-promise/sure/pull/2332
- fix(ds): migrate goals color picker back to DS::Disclosure (no_margin body option) by @gariasf in https://github.com/we-promise/sure/pull/2350
- chore(i18n): complete zh-CN locale coverage by @BeastOrange in https://github.com/we-promise/sure/pull/2283
- fix: preserve CoinStats balances when wallet sync data is missing by @sure-admin in https://github.com/we-promise/sure/pull/2132
- feat(dashboard): masonry packing + per-widget size controls by @gariasf in https://github.com/we-promise/sure/pull/2328
- fix(jobs): enqueue jobs after transaction commit to fix SyncJob deserialization race by @JSONbored in https://github.com/we-promise/sure/pull/2354
- fix(rules): make explicit re-apply override locked attributes by @augustocbx in https://github.com/we-promise/sure/pull/2273
- Upgrade Ruby version to 3.4.9 by @jjmata in https://github.com/we-promise/sure/pull/2360
- feat(mobile): add SureButton primitive and migrate login buttons by @JSONbored in https://github.com/we-promise/sure/pull/2358
- feat(security): warn when ActiveRecord encryption is not configured by @andrewb-nz in https://github.com/we-promise/sure/pull/2362
- feat(imports): add YNAB CSV import by @JSONbored in https://github.com/we-promise/sure/pull/2361
- feat(mobile): bundle Geist + Geist Mono so the app renders Sure typography by @JSONbored in https://github.com/we-promise/sure/pull/2342
- feat(mobile): normalize dashboard text weight to DS Medium (500) by @JSONbored in https://github.com/we-promise/sure/pull/2344
- feat(mobile): add SureIcon (Lucide) primitive and migrate dashboard icons by @JSONbored in https://github.com/we-promise/sure/pull/2346
- perf(api): avoid transfer lookups in transaction index by @JSONbored in https://github.com/we-promise/sure/pull/2127
- fix(mobile): neutral Sure tokens for FAB/badge/avatar surfaces + themed logo by @JSONbored in https://github.com/we-promise/sure/pull/2366
- feat(mobile): generate shadow scale + focus-ring/bg-inverse tokens by @JSONbored in https://github.com/we-promise/sure/pull/2349
- fix: Transaction Pagination Skipping Entries by @jonathanchang31 in https://github.com/we-promise/sure/pull/2179
- fix(accounts): persist subtype when creating an account by @vlnd0 in https://github.com/we-promise/sure/pull/2356
- Add Mobile version check for update notifications by @felixmuinde in https://github.com/we-promise/sure/pull/2367
- fix(cashflow): use Turbo.visit for donut chart deep-link navigation by @thewillwilson in https://github.com/we-promise/sure/pull/2166
- Add transaction name to get_transactions MCP tool output by @oggysecond in https://github.com/we-promise/sure/pull/2026
- fix(imports): normalize CSV upload encoding when validations are skipped by @augustocbx in https://github.com/we-promise/sure/pull/2299
- Add cascade delete to rejected_transfers foreign keys by @Kelvinchen03 in https://github.com/we-promise/sure/pull/2211
- fix(prices): resolve dashed crypto tickers (BTC-USD, TRX-USD) via BinancePublic by @vlnd0 in https://github.com/we-promise/sure/pull/2372
- fix(ds): add focus ring to dashboard widget size control by @BeastOrange in https://github.com/we-promise/sure/pull/2364
- feat(prices): add Moscow Exchange (MOEX ISS) securities + FX provider by @vlnd0 in https://github.com/we-promise/sure/pull/2394
- perf(recurring): batch recurring transaction identification by @JSONbored in https://github.com/we-promise/sure/pull/2239
- perf(dashboard): streamline investment activity totals by @JSONbored in https://github.com/we-promise/sure/pull/2257
- perf(reports): avoid residual category lazy loads by @JSONbored in https://github.com/we-promise/sure/pull/2255
- fix(trades): guard against nil security in create_trade by @sentry[bot] in https://github.com/we-promise/sure/pull/2066
- feat(prices): add T-Invest (T-Bank) securities + brand-logo provider by @vlnd0 in https://github.com/we-promise/sure/pull/2408
- fix(coinstats): stabilize bulk wallet ordering by @sure-admin in https://github.com/we-promise/sure/pull/2402
- Fix API auth context inheriting web session impersonation by @BeastOrange in https://github.com/we-promise/sure/pull/2405
- Refresh Pipelock integration for v2.8 receipts by @luckyPipewrench in https://github.com/we-promise/sure/pull/2406
- feat(up): add Up Bank (AU) provider integration by @Jookly123 in https://github.com/we-promise/sure/pull/2391
- feat(mobile): add SureCard primitive and migrate account cards by @JSONbored in https://github.com/we-promise/sure/pull/2370
- feat(mobile): add SureListGroup/SureListRow primitives and migrate the More menu by @JSONbored in https://github.com/we-promise/sure/pull/2376
- feat(mobile): add SureTextField primitive and migrate the proxy-headers editor by @JSONbored in https://github.com/we-promise/sure/pull/2378
- fix(tinkoff): resolve the tradeable listing and price bonds via BondBy by @vlnd0 in https://github.com/we-promise/sure/pull/2413
- feat(mobile): add SureChip primitive and migrate the currency filter by @JSONbored in https://github.com/we-promise/sure/pull/2380
- feat(mobile): add SureSegmentedControl primitive and migrate the transaction type selector by @JSONbored in https://github.com/we-promise/sure/pull/2382
- fix(settings): preserve scroll position in settings nav by @Holdner in https://github.com/we-promise/sure/pull/2373
- chore(deps): bump esbuild and wrangler in /workers/preview by @dependabot[bot] in https://github.com/we-promise/sure/pull/2411
- chore(deps): bump undici and wrangler in /workers/preview by @dependabot[bot] in https://github.com/we-promise/sure/pull/2410
- chore(deps): bump nokogiri from 1.19.3 to 1.19.4 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2425
- chore(deps): bump faraday from 2.14.1 to 2.14.3 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2424
- chore(deps): bump concurrent-ruby from 1.3.6 to 1.3.7 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2426
- Bump version to next iteration after v0.7.2-alpha.8 release by @jjmata in https://github.com/we-promise/sure/pull/2423
- feat(mobile): migrate all hardcoded UI strings to gen_l10n ARB (Phase 1 + 2) by @JSONbored in https://github.com/we-promise/sure/pull/2384
- design-system(mobile): SureFontWeights tokens (named weight tiers) by @JSONbored in https://github.com/we-promise/sure/pull/2419
- feat(mcp): add get/create/update tools for tags and categories by @xBlaz3kx in https://github.com/we-promise/sure/pull/2374
- Bump Puma dependency to >= 7.2.1 by @jjmata in https://github.com/we-promise/sure/pull/2428
- Enforce LF line endings for .devcontainer/.bashrc by @jestinjoshi in https://github.com/we-promise/sure/pull/2480
- Fix SimpleFIN epoch-string balance dates causing PG::DatetimeFieldOverflow by @marty0x in https://github.com/we-promise/sure/pull/2397
- fix(chat): surface and recover from undelivered assistant responses by @gariasf in https://github.com/we-promise/sure/pull/2436
- fix: use ES256 instead of EdDSA for Coinbase CDP JWT signing by @lifrank1 in https://github.com/we-promise/sure/pull/1888
- feat: resizable accounts & assistant sidebars by @gariasf in https://github.com/we-promise/sure/pull/2482
- Allow multiple active API keys per user by @thewillwilson in https://github.com/we-promise/sure/pull/2077
- fix(balances): materialize entries dated before the opening anchor by @vlnd0 in https://github.com/we-promise/sure/pull/2434
- fix(i18n): correct Catalan gender agreement on add-account button by @gariasf in https://github.com/we-promise/sure/pull/2488
- fix(sync): store EnableBanking credit card debt as balance instead of available credit by @mxafi in https://github.com/we-promise/sure/pull/2459
- Add SnapTrade OAuth device flow by @jjmata in https://github.com/we-promise/sure/pull/2494
- Fix SimpleFIN partial auth reconnect status by @luckyPipewrench in https://github.com/we-promise/sure/pull/2509
- fix(imports): support QIF dd mmm yyyy date format by @BeastOrange in https://github.com/we-promise/sure/pull/2500
- Adds a toggle to mark accounts as excluded from all financial reports while keeping them active and visible individually. by @DataEnginr in https://github.com/we-promise/sure/pull/2416
- Require omniauth-rails_csrf_protection v2.0+ for Rails 8.2 compatibility by @jjmata in https://github.com/we-promise/sure/pull/2520
- chore(deps): bump yard from 0.9.42 to 0.9.44 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2522
- Scope API v1 controllers through current_resource_owner by @BeastOrange in https://github.com/we-promise/sure/pull/2414
- fix(sync): scope after_commit to prevent nil family error on destroy by @sentry[bot] in https://github.com/we-promise/sure/pull/1976
- feat:Add SnapTrade OAuth device flow by @jjmata in https://github.com/we-promise/sure/pull/2523
- Fixes issue #2415 - Subcategories are not alphabetically ordered like Categories by @HairyHook in https://github.com/we-promise/sure/pull/2429
- fix(accounts): subtype dropped on create when assigned before accountable_type by @vlnd0 in https://github.com/we-promise/sure/pull/2432
- fix(sync): prevent NoMethodError when syncable is nil in after_commit by @sentry[bot] in https://github.com/we-promise/sure/pull/2484
- fix(settings): securities-provider checkmarks invisible in dark mode by @vlnd0 in https://github.com/we-promise/sure/pull/2430
- feat(mobile): privacy mode to mask money values by @JSONbored in https://github.com/we-promise/sure/pull/2386
- feat(goals): earmark a portion of an account toward a goal (Phase 1) by @gariasf in https://github.com/we-promise/sure/pull/2490
- fix(mobile): dispose API-key dialog controller on any dismissal by @JSONbored in https://github.com/we-promise/sure/pull/2399
- design-system(mobile): SureSpacing + SureTypography scale tokens by @JSONbored in https://github.com/we-promise/sure/pull/2438
- feat(goals): investment-backed goals (Phase 2) by @gariasf in https://github.com/we-promise/sure/pull/2491
- feat(kraken): import deposits, withdrawals, staking & fees via Ledgers API by @JSONbored in https://github.com/we-promise/sure/pull/2451
- feat(mercury): pending transactions, kind/counterpartyId metadata, and test coverage by @JSONbored in https://github.com/we-promise/sure/pull/2452
- fix(mobile): in-progress feedback for the Clear local data action by @JSONbored in https://github.com/we-promise/sure/pull/2439
- test(system): harden property edit flow against the account-menu morph race by @JSONbored in https://github.com/we-promise/sure/pull/2421
- fix(pwa): harden manifest render to explicitly use json format by @sentry[bot] in https://github.com/we-promise/sure/pull/2508
- refactor(imports): header-less settings_section by @Holdner in https://github.com/we-promise/sure/pull/2395
- feat(up): flag internal transfers and round-ups as funds_movement by @threatsurfer in https://github.com/we-promise/sure/pull/2460
- fix(goals): match manual_save pledges by contribution delta, not full balance by @galuis116 in https://github.com/we-promise/sure/pull/2178
- docs: explain self-hosted onboarding modes by @sure-admin in https://github.com/we-promise/sure/pull/2533
- feat: add preference to disable modal close on outside click by @Nekoraru22 in https://github.com/we-promise/sure/pull/2226
- i18n: fully update French (fr) translations by @Nicotinii in https://github.com/we-promise/sure/pull/1922
- Fix date-dependent flake in investment_statement_test by @jestinjoshi in https://github.com/we-promise/sure/pull/2539
New Contributors
- @lolimmlost made their first contribution in #1076
- @happytechca made their first contribution in #1082
- @andreugordillovazquez made their first contribution in #1112
- @imnotjames made their first contribution in #1142
- @chasestech made their first contribution in #1165
- @itsLeonB made their first contribution in #713
- @RenzoMXD made their first contribution in #1123
- @jabbink made their first contribution in #1215
- @milorw made their first contribution in #1214
- @yxuko made their first contribution in #1196
- @ChakibMoMi made their first contribution in #1055
- @falcononrails made their first contribution in #1256
- @CYBRXT made their first contribution in #1265
- @vegimcarkaxhija made their first contribution in #1066
- @fkrauthan made their first contribution in #1291
- @r-jeffries made their first contribution in #1290
- @felixmuinde made their first contribution in #1213
- @boul2gom made their first contribution in #1341
- @Browndw4 made their first contribution in #1343
- @tomerh2001 made their first contribution in #1354
- @yunwei-zh made their first contribution in #1359
- @KenTandrian made their first contribution in #1365
- @briian365 made their first contribution in #1369
- @mike-lloyd03 made their first contribution in #1332
- @smurfpandey made their first contribution in #1388
- @paramburu made their first contribution in #1340
- @mikaelhm made their first contribution in #1386
- @gamboajorge49 made their first contribution in #1344
- @UberDudePL made their first contribution in #1356
- @IamTaoChen made their first contribution in #1364
- @grrtt49 made their first contribution in #925
- @the-spectator made their first contribution in #1429
- @romainrbr made their first contribution in #1417
- @alexkreidler made their first contribution in #1453
- @xinmotlanthua made their first contribution in #1465
- @danez made their first contribution in #1478
- @andronedev made their first contribution in #1501
- @rockywang2025 made their first contribution in #596
- @xingxing21 made their first contribution in #1551
- @GermanDZ made their first contribution in #1562
- @wps260 made their first contribution in #1578
- @thiagodsti made their first contribution in #1556
- @thewillwilson made their first contribution in #1585
- @DataEnginr made their first contribution in #1553
- @francmart514 made their first contribution in #1576
- @JSONbored made their first contribution in #1603
- @gariasf made their first contribution in #1588
- @Alxandr made their first contribution in #1649
- @tajchert made their first contribution in #1658
- @ahnv made their first contribution in #1659
- @bugbug11111 made their first contribution in #1671
- @royto made their first contribution in #1690
- @brandonvers made their first contribution in #1677
- @EdeAbreu23 made their first contribution in #1692
- @thomasbaker9010251 made their first contribution in #1693
- @CrossDrain made their first contribution in #1709
- @plind-junior made their first contribution in #1771
- @gian-reto made their first contribution in #1722
- @joaocbatista made their first contribution in #1756
- @oxtensor made their first contribution in #1781
- @bittensorrider made their first contribution in #1881
- @jakearmstrong59 made their first contribution in #1914
- @arumaio made their first contribution in #1795
- @dripsmvcp made their first contribution in #1874
- @Rene0422 made their first contribution in #2000
- @galuis116 made their first contribution in #1975
- @glorydavid03023 made their first contribution in #1996
- @wolstad made their first contribution in #1966
- @ashanzzz made their first contribution in #2010
- @jeffrey701 made their first contribution in #1872
- @tanoggy made their first contribution in #2043
- @JPette1783 made their first contribution in #1885
- @failing made their first contribution in #1921
- @Kelvinchen03 made their first contribution in #1988
- @trahloff made their first contribution in #2174
- @jonathanchang31 made their first contribution in #2180
- @dan-dr made their first contribution in https://github.com/we-promise/sure/pull/2251
- @BeltaKoda made their first contribution in https://github.com/we-promise/sure/pull/2298
- @thebandit made their first contribution in https://github.com/we-promise/sure/pull/1761
- @augustocbx made their first contribution in https://github.com/we-promise/sure/pull/2293
- @BeastOrange made their first contribution in https://github.com/we-promise/sure/pull/2283
- @andrewb-nz made their first contribution in https://github.com/we-promise/sure/pull/2362
- @vlnd0 made their first contribution in https://github.com/we-promise/sure/pull/2356
- @oggysecond made their first contribution in https://github.com/we-promise/sure/pull/2026
- @Jookly123 made their first contribution in https://github.com/we-promise/sure/pull/2391
- @Holdner made their first contribution in https://github.com/we-promise/sure/pull/2373
- @jestinjoshi made their first contribution in https://github.com/we-promise/sure/pull/2480
- @marty0x made their first contribution in https://github.com/we-promise/sure/pull/2397
- @lifrank1 made their first contribution in https://github.com/we-promise/sure/pull/1888
- @mxafi made their first contribution in https://github.com/we-promise/sure/pull/2459
- @HairyHook made their first contribution in https://github.com/we-promise/sure/pull/2429
- @threatsurfer made their first contribution in https://github.com/we-promise/sure/pull/2460
- @Nekoraru22 made their first contribution in https://github.com/we-promise/sure/pull/2226
- @Nicotinii made their first contribution in https://github.com/we-promise/sure/pull/1922
Full Changelog: v0.6.8...v0.7.2