The most visible addition in v0.7.2 is the new Goals feature. Sure can now track progress towards financial goals using real balances and pledges, and the release kept improving that foundation with better creation defaults, cleaner funding-account selection, more responsive cards, and follow-up fixes around how manual saves are matched. This is the clearest “new capability” in the cycle, and it gives people a much stronger way to plan toward savings targets inside the product.
The second headline is the amount of mobile polish and product depth that landed in this release, thanks @JSONbored! The mobile app now supports transaction metadata editing, richer account detail context, safer diagnostics, better offline replay behavior, and a broad pass on visual consistency through Sure-native tokens, spacing, typography, and shared primitives. The result is not just a prettier app, but a more complete and more confident mobile experience. Coming soon to an App Store near you!
The third major feature is Anthropic as a native LLM Provider. Self-hosted installs can now configure Anthropic directly, with chat parity, batch operations, native PDF handling, provider-aware batch/PDF flows, a settings UI, and pgvector-backed RAG defaults for Anthropic-based setups. This is a meaningful expansion of Sure’s AI surface area, especially for people who want more control over which model provider they use.
There were also a lot of other meaningful improvements across the cycle. Banking and imports kept getting stronger with MFA and decoupled-bank handling for Enable Banking, SureImport session batches, merchant CSV import, Akahu integration, and broader trades API coverage. Dashboard and reporting workflows improved with a unified widget period picker, better report performance, and deeper navigation into filtered transactions. There were also steady self-hosting and infrastructure improvements across preview deploys, Helm, Rails 8.1, Ruby 3.4.9, API scoping, and general reliability work.
One useful way to frame the size of the release is the raw volume. As of June 30, 2026, the v0.7.2 release train is sitting at 233 merged PRs since v0.7.1, based on the current prerelease boundary.
| Month | Issues opened | Release activity | Image downloads |
|---|---|---|---|
| 2025-11 | 27 | v0.6.5 — 101 PRs (1 hotfix / 7 PRs) | 6,514 |
| 2025-12 | 22 | v0.6.6 — 55 PRs (1 hotfix / 2 PRs) | 7,794 |
| 2026-01 | 56 | v0.6.7 — 162 PRs | 43,250 |
| 2026-02 | 48 | v0.6.8 — 113 PRs | 68,962 |
| 2026-03 | 73 | v0.6.9 — 92 PRs | 132,863 |
| 2026-04 | 73 | v0.7.0 — 129 PRs (3 hotfixes / 8 PRs) | 126,319 |
| 2026-05 | 105 | v0.7.1 — 206 PRs (1 hotfix / 3 PRs) | 120,568 |
| 2026-06 | 137 | v0.7.2 — 233 PRs | ? |
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
<code>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
- 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 https://github.com/we-promise/sure/pull/1730
- feat(ds): semantic color — neutralize decorative green/red on reports by @gariasf in https://github.com/we-promise/sure/pull/2144
- fix(ds): cross-viewport lock — consistent auth mode-switch by @gariasf in https://github.com/we-promise/sure/pull/2149
- fix(ds): chart flat-state — hairline trendline, not a bisecting rule by @gariasf in https://github.com/we-promise/sure/pull/2150
- feat(mobile): add transaction metadata editing by @JSONbored in https://github.com/we-promise/sure/pull/2131
- feat(dashboard): unify per-widget period selectors into one picker by @gariasf in https://github.com/we-promise/sure/pull/2162
- ci(preview): render Cloudflare config from trusted template by @JSONbored in https://github.com/we-promise/sure/pull/2207
- Fix SSO provider settings updates (preserve client_secret, persist default_role) by @jjmata in https://github.com/we-promise/sure/pull/2210
- fix(goals): UI polish — submit validation, container-responsive cards, picker & filter fixes by @gariasf in https://github.com/we-promise/sure/pull/2160
- fix(ds): canonical transaction-row — stop category pills truncating by @gariasf in https://github.com/we-promise/sure/pull/2147
- feat(merchants): add raw data import (csv) for merchants by @xBlaz3kx in https://github.com/we-promise/sure/pull/1992
- chore(ci): finish Node 24 GitHub Actions migration by @sure-admin in https://github.com/we-promise/sure/pull/2221
- fix(mobile): redact sensitive diagnostic logs by @JSONbored in https://github.com/we-promise/sure/pull/2199
- feat(ds): DS::SegmentedControl — fix invisible dark selected pill by @gariasf in https://github.com/we-promise/sure/pull/2145
- fix(ds): one height rail for icon and text buttons by @gariasf in https://github.com/we-promise/sure/pull/2202
- fix(sync-toast): morph refresh, defer behind modals, DS conformance by @gariasf in https://github.com/we-promise/sure/pull/2105
- perf(transactions): preload new form options by @JSONbored in https://github.com/we-promise/sure/pull/2189
- perf(reports): collapse investment flow aggregates by @JSONbored in https://github.com/we-promise/sure/pull/2190
- fix: Savings Goal Marked Reached While Still Short by @jonathanchang31 in https://github.com/we-promise/sure/pull/2180
- feat(ai): default Anthropic installs to pgvector RAG (4/5) by @gariasf in https://github.com/we-promise/sure/pull/1986
- fix(ds): dark-parity for bespoke green status badges by @gariasf in https://github.com/we-promise/sure/pull/2142
- feat(ds): DS::EmptyState primitive by @gariasf in https://github.com/we-promise/sure/pull/2146
- test(goals): pledge-delta integration coverage (follow-up to #2178) by @gariasf in https://github.com/we-promise/sure/pull/2206
- feat(mobile): add privacy-safe Sentry instrumentation by @JSONbored in https://github.com/we-promise/sure/pull/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 https://github.com/we-promise/sure/pull/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