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 @ai-mountain 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 @fury0928 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 @fury0928 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 @fury0928 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 @taillred 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 @Lobster-0429 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
- feat (Transfer fees) : Add Bank Charges for Transfers by @DataEnginr in https://github.com/we-promise/sure/pull/2183
- Fix reverse balance opening boundary adjustments by @BeastOrange in https://github.com/we-promise/sure/pull/2502
- fix(trend): keep percent sign consistent with direction for negative/zero base by @glorydavid03023 in https://github.com/we-promise/sure/pull/2580
- Fix two crashes in
rake demo_data:defaultby @Holdner in https://github.com/we-promise/sure/pull/2586- fix: only mark overlapping statement periods as duplicate by @MaxenceChx in https://github.com/we-promise/sure/pull/2569
- Fix OIDC group role mapping claims by @BeastOrange in https://github.com/we-promise/sure/pull/2503
- Stop backfill_encryption double-encoding json/jsonb columns by @elvum in https://github.com/we-promise/sure/pull/2615
- Don't persist zero balances when a provider balance fetch fails by @elvum in https://github.com/we-promise/sure/pull/2617
- Russian language support added by @cuppabot in https://github.com/we-promise/sure/pull/2005
- fix(pwa): harden service worker render to explicitly use js format by @sentry[bot] in https://github.com/we-promise/sure/pull/2629
- fix(reports): hide tax-advantaged transactions in breakdown by @BeastOrange in https://github.com/we-promise/sure/pull/2549
- fix(invitations): allow re-inviting after an unaccepted invite expires by @minion1227 in https://github.com/we-promise/sure/pull/2543
- perf(test): use MIN_COST bcrypt digests in user fixtures (~230ms saved per sign_in) by @jjmata in https://github.com/we-promise/sure/pull/2551
- feat(provider): add native Questrade brokerage provider integration by @jestinjoshi in https://github.com/we-promise/sure/pull/2534
- perf: make provider retry backoff sleeps stubbable (SimpleFIN suite 23.5s → ~1s) by @jjmata in https://github.com/we-promise/sure/pull/2552
- chore(deps): bump css_parser from 1.22.0 to 3.0.0 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2662
- Fix income trades (interest/dividend) wiping security holdings to $0 by @StalkerSea in https://github.com/we-promise/sure/pull/2673
- Share family accounts with invited members on every sign-up path by @luckyPipewrench in https://github.com/we-promise/sure/pull/2650
- feat(insights): proactive financial intelligence feed by @jjmata in https://github.com/we-promise/sure/pull/2550
- fix(impersonation): guard Sidekiq jobs link by @sure-admin in https://github.com/we-promise/sure/pull/2678
- chore(deps): bump jwt from 2.10.2 to 2.10.3 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2677
- feat(provider): add Frankfurter as an exchange-rate provider by @jestinjoshi in https://github.com/we-promise/sure/pull/2640
- fix(imports): add horizontal scroll to CSV sample data preview by @jestinjoshi in https://github.com/we-promise/sure/pull/2642
- chore: example env variables from #894 by @dineiar in https://github.com/we-promise/sure/pull/2675
- feat(bank-sync): Wise integration by @xBlaz3kx in https://github.com/we-promise/sure/pull/2433
- fix(sync): guard finalization against externally-staled syncs by @gariasf in https://github.com/we-promise/sure/pull/2680
- Update LLM token cost estimates and cost-info locales by @jjmata in https://github.com/we-promise/sure/pull/2690
- Fix(mobile): Convert chat timestamps to local timezone on deserialization by @felixmuinde in https://github.com/we-promise/sure/pull/2701
- fix(coinbase): qualify HoldingsProcessor constant reference by @pro3958 in https://github.com/we-promise/sure/pull/2702
- fix(provider): resolve Tiingo security currency from countryCode by @jestinjoshi in https://github.com/we-promise/sure/pull/2692
- fix(sync): resolve N+1 query in child finalization by @sentry[bot] in https://github.com/we-promise/sure/pull/2693
- Fix keyboard navigation in DS::Select dropdowns by @rubenRP in https://github.com/we-promise/sure/pull/2689
- Complete missing French translations and fix locale quality issues by @Holdner in https://github.com/we-promise/sure/pull/2697
- Fix enable banking not respecting pending transactions setting by @OtterBoops in https://github.com/we-promise/sure/pull/2686
- feat(sync): family-facing cancellation for syncs, imports, and exports by @gariasf in https://github.com/we-promise/sure/pull/2685
- feat(sidekiq): mount Web UI in production behind super-admin sessions by @gariasf in https://github.com/we-promise/sure/pull/2683
- perf(exchange_rate): batch-fetch rates to fix N+1 query by @sentry[bot] in https://github.com/we-promise/sure/pull/2676
- docs: clarify local LLM context window tuning by @sure-admin in https://github.com/we-promise/sure/pull/2661
- feat: Move import merchant button in sub menu by @alessiocappa in https://github.com/we-promise/sure/pull/2637
- Show full dates in the categorize wizard by @elvum in https://github.com/we-promise/sure/pull/2633
- Add per-account toggle to disable automatic transaction categorization by @mike-lloyd03 in https://github.com/we-promise/sure/pull/2636
- Add Italian translations for various views and functionalities by @fabietto01 in https://github.com/we-promise/sure/pull/2625
- fix(import): strip non-breaking-space thousands separators in sanitize_number by @ultrahighsuper in https://github.com/we-promise/sure/pull/2538
- fix(i18n): use existing localized labels in web UI by @chkfail in https://github.com/we-promise/sure/pull/2501
- Fix automated version bumps and advance prerelease version by @jjmata in https://github.com/we-promise/sure/pull/2704
- fix(enable-banking): handle unavailable and overdraft balances by @carloslindo in https://github.com/we-promise/sure/pull/2578
- fix(lunchflow): prune orphaned accounts deleted upstream (#1861) by @Lobster-0429 in https://github.com/we-promise/sure/pull/1886
- Add send_email_notification rule action by @kianrafiee in https://github.com/we-promise/sure/pull/2527
- Use badge variant for category selects in transfer + bulk-edit views by @elvum in https://github.com/we-promise/sure/pull/2645
- Fix statement Turbo frame navigation and split view/edit actions (#2614) by @shrestha-bishal in https://github.com/we-promise/sure/pull/2695
- Fix: BudgetCategoriesController#show NoMethodError for missing budget by @sentry[bot] in https://github.com/we-promise/sure/pull/2709
- fix(wise): redirect after token submission instead of rendering inline by @xBlaz3kx in https://github.com/we-promise/sure/pull/2730
- feat(i18n): complete Turkish (tr) locale coverage and Türkiye formatting by @erkdgn in https://github.com/we-promise/sure/pull/2737
- feat(settings): super-admin background jobs console by @gariasf in https://github.com/we-promise/sure/pull/2682
- fix(i18n): resolve close button label in goals dialog across all locales by @erkdgn in https://github.com/we-promise/sure/pull/2741
- fix(settings): require admin for advanced settings controllers by @andrewb-nz in https://github.com/we-promise/sure/pull/2403
- feat(sync): add toggle to parse Enable Banking CC balance as available credit by @mxafi in https://github.com/we-promise/sure/pull/2512
- fix: use REDIS_URL in ApiRateLimiter for hosted API requests by @RealDiligent in https://github.com/we-promise/sure/pull/2639
- Fix N+1 queries on categories index by batching lookups and removing … by @bittensorrider in https://github.com/we-promise/sure/pull/2163
- fix(snaptrade): don't double count cash-equivalent (money market) positions by @rickdgray in https://github.com/we-promise/sure/pull/2696
- Add searchable merge merchants by @guicattani in https://github.com/we-promise/sure/pull/2624
- fix: block unsafe OAuth redirect URIs in dynamic registration by @RealDiligent in https://github.com/we-promise/sure/pull/2638
- Fix automated version bumps and advance prerelease version by @jjmata in https://github.com/we-promise/sure/pull/2748
- chore(deps): bump loofah from 2.25.1 to 2.25.2 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2749
- Improve Yahoo Finance reliability and Colombian listing support by @camilo-agudelo in https://github.com/we-promise/sure/pull/2738
- chore(deps): bump rails-html-sanitizer from 1.7.0 to 1.7.1 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2750
- chore(deps): bump websocket-driver from 0.8.1 to 0.8.2 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2751
- feat(snaptrade): replace device-flow OAuth with authorization-code + PKCE flow by @maxjb-xyz in https://github.com/we-promise/sure/pull/2747
- Add missing Polish translations to reach 100% coverage by @toczke in https://github.com/we-promise/sure/pull/2780
- Fix preview cleanup over-firing on PR close by @sure-admin in https://github.com/we-promise/sure/pull/2784
- Perf/accounts controller index optimization by @bittensorrider in https://github.com/we-promise/sure/pull/1926
- fix(api): scope holdings API to accessible accounts by @pro3958 in https://github.com/we-promise/sure/pull/2706
- Add RentCast & Realie integration for automatic property data and valuations by @kianrafiee in https://github.com/we-promise/sure/pull/2727
- Add support for trading212 integration in investments sync by @jdcdp in https://github.com/we-promise/sure/pull/2513
- Feature/dashboard Add "Money In / Out" dashboard widget with monthly bar chart by @Holdner in https://github.com/we-promise/sure/pull/2594
- feat(jobs): reap imports and exports stuck by lost background jobs by @gariasf in https://github.com/we-promise/sure/pull/2681
- feat(reports): add net worth chart with breakdown tooltip by @kianrafiee in https://github.com/we-promise/sure/pull/2716
- Bump version to next iteration after v0.7.3-alpha.5 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/2791
- fix(snaptrade): sign bare TRANSFER activities by provider direction (#2756) by @erkdgn in https://github.com/we-promise/sure/pull/2792
- fix(dashboard): add hover state to section header controls by @gariasf in https://github.com/we-promise/sure/pull/2798
- fix(akahu): pull full history on initial Akahu sync by @pro3958 in https://github.com/we-promise/sure/pull/2779
- feat(accounts): add Gains / ROI chart view for investment accounts by @aguyonp in https://github.com/we-promise/sure/pull/2660
- fix(merchants): preserve user-selected merchant colors on save (#2760) by @erkdgn in https://github.com/we-promise/sure/pull/2802
- update transactions_controller by @bittensorrider in https://github.com/we-promise/sure/pull/1953
- fix(indexa_capital): correct cash activity amount-sign convention (#2793) by @erkdgn in https://github.com/we-promise/sure/pull/2801
- fix: prevent AddAmountToTransfers migration from aborting the upgrade on legacy transfer data by @RealDiligent in https://github.com/we-promise/sure/pull/2795
- fix: omit SimpleFin pending param when pending transactions are disabled by @RealDiligent in https://github.com/we-promise/sure/pull/2796
- fix(ai): prevent Anthropic chat crash on no-argument tool calls by @kai392 in https://github.com/we-promise/sure/pull/2755
- feat(insights): gate the insights feed behind preview features by @jjmata in https://github.com/we-promise/sure/pull/2788
- fix(settings): allow clearing an encrypted provider API key by @minion1227 in https://github.com/we-promise/sure/pull/2544
- feat(redbark): add australian bank sync (redbark) by @oscargws in https://github.com/we-promise/sure/pull/2794
- feat: Introduce macOS app v0.1.0 by @maxjb-xyz in https://github.com/we-promise/sure/pull/2762
- chore(deps-dev): bump vite from 5.4.21 to 6.4.3 in /desktop by @dependabot[bot] in https://github.com/we-promise/sure/pull/2810
- docs: add redbark hosting guide by @oscargws in https://github.com/we-promise/sure/pull/2817
- chore(deps): bump oauth2 from 2.0.18 to 2.0.22 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2846
- Update Rails for Active Storage security advisory by @sure-admin in https://github.com/we-promise/sure/pull/2849
- feat: show counterpart account in transfer transaction list row by @shrestha-bishal in https://github.com/we-promise/sure/pull/2643
- Don’t re-create pending SimpleFIN transactions when pending sync is disabled by @PrplHaz4 in https://github.com/we-promise/sure/pull/2835
- Fix transactions posting a day early when booked around midnight. by @OtterBoops in https://github.com/we-promise/sure/pull/2744
- fix(ds): keep DS::Menu/Popover panels anchored across Turbo morphs by @gariasf in https://github.com/we-promise/sure/pull/2812
- fix(accounts): make the sync toolbar and toast agree, fix toast overlap by @gariasf in https://github.com/we-promise/sure/pull/2813
- Fix(exchange_rate): Handle RecordInvalid in find_or_fetch_rate race condition by @sentry[bot] in https://github.com/we-promise/sure/pull/2734
- perf(accounts): preload transfer, category, and split-parent associations on show by @JSONbored in https://github.com/we-promise/sure/pull/2441
- design-system(mobile): polish Dashboard with Sure tokens by @JSONbored in https://github.com/we-promise/sure/pull/2457
- fix(tags): return 404 for missing or cross-family tag deletion by @pro3958 in https://github.com/we-promise/sure/pull/2703
- fix(layout): persist sidebar collapse preference across reloads by @pro3958 in https://github.com/we-promise/sure/pull/2764
- fix(accounts): skip digest on sidebar fragment cache by @pro3958 in https://github.com/we-promise/sure/pull/2776
- Wire @kraken_items into the accounts index by @pro3958 in https://github.com/we-promise/sure/pull/2770
- Fix SnapTrade account setup and reconnection by @maxjb-xyz in https://github.com/we-promise/sure/pull/2858
- Stabilize net worth breakdown series tests by @sure-admin in https://github.com/we-promise/sure/pull/2863
- fix(oidc): honor http issuer scheme during OIDC discovery by @thewillwilson in https://github.com/we-promise/sure/pull/2853
- chore(deps): bump msgpack from 1.8.0 to 1.8.2 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2866
- Bump version after v0.7.3 release by @sure-admin in https://github.com/we-promise/sure/pull/2879
- Fix uncategorized budget spending UI state by @sure-admin in https://github.com/we-promise/sure/pull/2877
- fix(insights): keep rolling period labels on month boundaries by @bittensorrider in https://github.com/we-promise/sure/pull/2880
- fix: tolerate Trade Republic Enable Banking pagination/PDNG errors (#392) by @gfr-free in https://github.com/we-promise/sure/pull/2828
- fix(insights): correct the budget card's figure, badge noise and toast a11y by @gariasf in https://github.com/we-promise/sure/pull/2799
- fix(enable-banking): preserve manual card limit when provider reports zero by @carloslindo in https://github.com/we-promise/sure/pull/2841
- fix(exports): include merchants.csv in family data export by @kai392 in https://github.com/we-promise/sure/pull/2758
- fix(insights): respect recurring_transactions_disabled in subscription_audit by @gariasf in https://github.com/we-promise/sure/pull/2831
- feat(plan): unify Budgets and Goals under a single Plan tab by @gariasf in https://github.com/we-promise/sure/pull/2687
- feat(mcp): Add MCP transaction update tool by @Mart1M in https://github.com/we-promise/sure/pull/2719
- fix: update Claude MCP connector instructions by @sure-admin in https://github.com/we-promise/sure/pull/2915
- feat(transactions): surface recently-used categories in the category picker by @gariasf in https://github.com/we-promise/sure/pull/2829
- fix(mcp): assign OAuth clients read_write scope by @atlas-maxjb in https://github.com/we-promise/sure/pull/2884
- fix(design-system): resolve DS Drift Patrol findings (#2836) by @thewillwilson in https://github.com/we-promise/sure/pull/2867
- Fix chained assistant tool calls by @mauriciopolvora in https://github.com/we-promise/sure/pull/2767
- fix(list-filter): match accented text regardless of typed diacritics by @gariasf in https://github.com/we-promise/sure/pull/2814
- Preload transfer counterparty associations on transactions index by @bittensorrider in https://github.com/we-promise/sure/pull/2819
- Tooling for the wealth + tax agent harness by @jjmata in https://github.com/we-promise/sure/pull/2848
- fix(binance): correct base_url for futures api endpoint, start_time param by @UnamedRus in https://github.com/we-promise/sure/pull/2839
- fix(messages): handle chat not found during message creation by @sentry[bot] in https://github.com/we-promise/sure/pull/2896
- Bump version to next iteration after v0.7.4-alpha.2 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/2916
- Add tags support for transfer transactions by @bittensorrider in https://github.com/we-promise/sure/pull/2921
- Add “Is not equal to” operator for transaction amount rules by @bittensorrider in https://github.com/we-promise/sure/pull/2922
- fix(ui): satisfy DS Drift Patrol Rule 4 in redbark disclosure by @bittensorrider in https://github.com/we-promise/sure/pull/2919
- fix(ci): avoid bumping prerelease versions on PR branches by @sure-admin in https://github.com/we-promise/sure/pull/2886
- fix(pages): set breadcrumbs for changelog and feedback pages by @KenTandrian in https://github.com/we-promise/sure/pull/2889
- fix(settings): give API key copy buttons success feedback by @WolfBrandon in https://github.com/we-promise/sure/pull/2948
- fix(goals): keep the projection chart's saved line inside the plot by @gariasf in https://github.com/we-promise/sure/pull/2971
- fix(insights): blur amounts in insight prose under privacy mode by @gariasf in https://github.com/we-promise/sure/pull/2865
- fix(splits): let category selector size to its content instead of clipping names by @WolfBrandon in https://github.com/we-promise/sure/pull/2962
- chore(deps): bump json from 2.21.1 to 2.21.2 by @dependabot[bot] in https://github.com/we-promise/sure/pull/2990
- Fix Wise API token setup instructions by @bderenzi in https://github.com/we-promise/sure/pull/2988
- fix(accounts): resolve N+1 query for Trade entryables by @sentry[bot] in https://github.com/we-promise/sure/pull/2973
- fix: add Schwab to SimpleFIN total-basis cost_basis allowlist by @Falloutman in https://github.com/we-promise/sure/pull/2986
- fix(pwa): give the installed app icon a safe area by @gariasf in https://github.com/we-promise/sure/pull/2966
- fix(insights): drop the dismiss toast and fix both empty states by @gariasf in https://github.com/we-promise/sure/pull/2965
- fix(goals): recover goals left invalid by account deletion by @gariasf in https://github.com/we-promise/sure/pull/2964
- Fix wise imports only 90 days history on initial setup by @packetsnscripts in https://github.com/we-promise/sure/pull/2998
- feat(icons): add search field for icon selection by @vdusart in https://github.com/we-promise/sure/pull/2862
- feat(mcp): Add MCP budget update tool by @WolfBrandon in https://github.com/we-promise/sure/pull/2908
- feat(i18n): complete the German locale by @dakora-solutions in https://github.com/we-promise/sure/pull/2847
- fix(i18n): add missing German locale keys by @sure-admin in https://github.com/we-promise/sure/pull/3004
- feat(i18n): complete and correct the Traditional Chinese (zh-TW) locale by @drink970082 in https://github.com/we-promise/sure/pull/2994
- Enable Banking: progressive date_from fallback on WRONG_TRANSACTIONS_PERIOD by @pedrosantospt in https://github.com/we-promise/sure/pull/2992
- Bump version to next iteration after v0.7.4-alpha.3 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3006
- feat(yahoo_finance): add Indonesia Stock Exchange (XIDX) support by @faldyif in https://github.com/we-promise/sure/pull/3000
- feat(auth): sign in with a passkey, without a password by @gariasf in https://github.com/we-promise/sure/pull/2911
- test(i18n): stop gating CI on German coverage by @sure-admin in https://github.com/we-promise/sure/pull/3012
- fix(wise): add missing sync button to Wise account group header by @xBlaz3kx in https://github.com/we-promise/sure/pull/3009
- feat(mcp): add pagination to get_tags and get_categories tools by @xBlaz3kx in https://github.com/we-promise/sure/pull/2492
- fix(pagination): stop the pager wrapping on narrow screens by @gariasf in https://github.com/we-promise/sure/pull/2967
- fix(dashboard): fit money-flow month labels and put its figures on scale by @gariasf in https://github.com/we-promise/sure/pull/2969
- fix(goals): stop the days-left phrase splitting across lines by @gariasf in https://github.com/we-promise/sure/pull/2970
- Add Ukrainian (uk) locale support by @d-degtyar in https://github.com/we-promise/sure/pull/2993
- Bump version to next iteration after v0.7.4-alpha.4 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3017
- fix: gracefully handle invalid family timezone instead of crashing by @gfr-free in https://github.com/we-promise/sure/pull/2821
- fix(ai): drop empty data-driven enums from assistant function schemas by @winters27 in https://github.com/we-promise/sure/pull/3016
- chore: drop dead transactions-section preferences by @gariasf in https://github.com/we-promise/sure/pull/3021
- Fix SSO JIT new family creator role by @sure-admin in https://github.com/we-promise/sure/pull/3024
- fix(chat): make the assistant response timeout configurable by @andrewb-nz in https://github.com/we-promise/sure/pull/2910
- Log async rule run failures to debug log by @sure-admin in https://github.com/we-promise/sure/pull/3045
- Add comprehensive debug logging to AI cache reset job by @jjmata in https://github.com/we-promise/sure/pull/3046
- fix(generators): stop provider:family emitting a broken migration and invalid enum by @markhaines in https://github.com/we-promise/sure/pull/3047
- Bump version to next iteration after v0.7.4-alpha.5 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3048
- fix(ds): resolve remaining DS Drift findings (#1951) by @bittensorrider in https://github.com/we-promise/sure/pull/2979
- fix(ds): resolve remaining DS Drift Patrol findings (#2157) by @bittensorrider in https://github.com/we-promise/sure/pull/2977
- fix(ui): resolve DS Drift Patrol findings (#2745) by @bittensorrider in https://github.com/we-promise/sure/pull/2975
- chore(deps-dev): bump postcss from 8.5.21 to 8.5.26 in /desktop by @dependabot[bot] in https://github.com/we-promise/sure/pull/2947
- fix(i18n): drop redundant Questrade t() default: strings by @bittensorrider in https://github.com/we-promise/sure/pull/2976
- Add expandable dialog for debug log table by @jjmata in https://github.com/we-promise/sure/pull/3051
- fix(goals): allow deleting a goal without archiving it first by @gariasf in https://github.com/we-promise/sure/pull/2963
- Make report income/expense categories clickable by @bittensorrider in https://github.com/we-promise/sure/pull/2923
- fix(recurring): include amount in manual recurring duplicate check by @gfr-free in https://github.com/we-promise/sure/pull/2972
- fix(dashboard): shorten money-flow drill-down URLs when possible by @gfr-free in https://github.com/we-promise/sure/pull/3018
- Use moniker interpolation for user family labels by @sure-admin in https://github.com/we-promise/sure/pull/3060
- i18n: complete Spanish (es) translations by @webprojectxeventos-sudo in https://github.com/we-promise/sure/pull/2669
- Fix SnapTrade holdings by using the /positions/all endpoint by @globalreset in https://github.com/we-promise/sure/pull/3043
- Remove Cloudflare Containers preview deployment infrastructure by @jjmata in https://github.com/we-promise/sure/pull/3074
- Bump version to next iteration after v0.7.4-alpha.6 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3075
- feat(budgets): add per-user personal budgets with strict isolation by @jubbakka in https://github.com/we-promise/sure/pull/2891
- fix(demo): Scope budget auto-fill to family entries to prevent FK violations by @sentry[bot] in https://github.com/we-promise/sure/pull/3078
- fix(accounts): remember transaction page size across account navigation by @gfr-free in https://github.com/we-promise/sure/pull/3084
- Fix onboarding country and currency defaults by @atlas-maxjb in https://github.com/we-promise/sure/pull/3070
- docs: refresh Sure MCP and external AI setup by @sure-admin in https://github.com/we-promise/sure/pull/2608
- fix: memory leak in sidekiq by @ahnv in https://github.com/we-promise/sure/pull/1940
- fix(providers): capture API error response body in PDF processor span output by @itsLeonB in https://github.com/we-promise/sure/pull/2937
- feat(ai): analytical tool-set upgrade for the builtin assistant by @winters27 in https://github.com/we-promise/sure/pull/3064
- fix: disable Mark as Recurring button when a manual recurring transaction already exists by @gfr-free in https://github.com/we-promise/sure/pull/3103
- fix(ui): keep the account chart view selector in sync on reload by @vdusart in https://github.com/we-promise/sure/pull/3121
- fix(enable_banking): recognize N26's PERIOD_INVALID error shape as retryable by @gfr-free in https://github.com/we-promise/sure/pull/3112
- Reconcile PDF statement imports against transactions that already exist by @jjmata in https://github.com/we-promise/sure/pull/3105
- fix: support DD/MM/YY date format for CSV imports by @gfr-free in https://github.com/we-promise/sure/pull/3110
- fix(process-pdf-job): discard on RuntimeError and guard failed status by @ahnv in https://github.com/we-promise/sure/pull/2453
- fix: allow saving a budget without any category allocation by @gfr-free in https://github.com/we-promise/sure/pull/3101
- fix(charts): round series values to the currency's display precision by @vdusart in https://github.com/we-promise/sure/pull/3091
- i18n: remove dead transfers.form exchange-rate keys from ru/zh-CN locales by @gfr-free in https://github.com/we-promise/sure/pull/3109
- fix: respect SURE_IMPORT_MAX_NDJSON_SIZE_MB in Sure import GUI upload by @gfr-free in https://github.com/we-promise/sure/pull/3111
- Add inline category creation to transaction form by @rottenit in https://github.com/we-promise/sure/pull/3088
- chore(security): update Pipelock integration to 3.4.0 by @luckyPipewrench in https://github.com/we-promise/sure/pull/3122
- Bump version to next iteration after v0.7.4-alpha.7 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3123
- fix(import): tolerate null Rule names and orphaned rejected transfers by @pro3958 in https://github.com/we-promise/sure/pull/2775
- fix(transfers): isolate concurrent transfer match in a savepoint by @pro3958 in https://github.com/we-promise/sure/pull/2769
- fix: keep excluded entries visible in account activity by @pro3958 in https://github.com/we-promise/sure/pull/2772
- fix(lunchflow): refresh stored transaction on pending to posted by @pro3958 in https://github.com/we-promise/sure/pull/2778
- fix(transactions): re-render form when creating with no account by @pro3958 in https://github.com/we-promise/sure/pull/2777
- fix(simplefin): stop repair_stale_linkages from hijacking a live linkage on a same-name twin by @gfr-free in https://github.com/we-promise/sure/pull/3116
- fix(ds): resolve remaining DS Drift findings (#1971) by @bittensorrider in https://github.com/we-promise/sure/pull/2978
- feat(self-hosting): surface Sidekiq-unhealthy nudge + admin system health page by @Khaostica in https://github.com/we-promise/sure/pull/1906
- feat(rules): add a Transaction tag condition filter by @ultrahighsuper in https://github.com/we-promise/sure/pull/2558
- perf: memoize Family#balance_sheet + sync status lookups (sidebar renders every page) by @jjmata in https://github.com/we-promise/sure/pull/2553
- feat(up): map Up category slugs to Sure categories on import by @threatsurfer in https://github.com/we-promise/sure/pull/2487
- ci: skip Chrome install in unit test job by @sure-admin in https://github.com/we-promise/sure/pull/3125
- fix(i18n): remove duplicate locale keys and guard with a regression test by @rsnetworkinginc in https://github.com/we-promise/sure/pull/2789
- Track self-custody wallets natively: Bitcoin, EVM and Solana by @buzzromain in https://github.com/we-promise/sure/pull/3081
- feat: add safe admin user removal by @luckyPipewrench in https://github.com/we-promise/sure/pull/3131
- Improve async AI rule error reporting by @sure-admin in https://github.com/we-promise/sure/pull/2271
- fix(onchain-wallets): show linked wallets on the accounts page, and drop the tracking row on unlink by @buzzromain in https://github.com/we-promise/sure/pull/3136
- fix(enable-banking): use real merchant instead of POS terminal line for name by @gfr-free in https://github.com/we-promise/sure/pull/2968
- Add Sure client overview docs by @sure-admin in https://github.com/we-promise/sure/pull/2832
- Bump version to next iteration after v0.7.4-alpha.8 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3144
- fix(securities): give prefixed crypto tickers their logo back by @buzzromain in https://github.com/we-promise/sure/pull/3151
- Fix Mintlify docs workflow by @jjmata in https://github.com/we-promise/sure/pull/3156
- docs(api): sync openapi.yaml with merchants import and transfer fee fields by @WolfBrandon in https://github.com/we-promise/sure/pull/2961
- chore(goals): drop copy-pasted duplicates and an unused lock-key helper by @buzzromain in https://github.com/we-promise/sure/pull/3159
- Add live AI checks to system health by @jjmata in https://github.com/we-promise/sure/pull/3155
- fix(lunchflow): mark sync unhealthy when importer reports fetch failures (#1796) by @jeffrey701 in https://github.com/we-promise/sure/pull/1873
- Exclude pending transactions from balances by @atlas-maxjb in https://github.com/we-promise/sure/pull/2897
- perf: memoize Family#balance_sheet/investment_statement, cache transactions-index side queries by @gfr-free in https://github.com/we-promise/sure/pull/3058
- Fix budget cache invalidation after transaction deletion by @sure-admin in https://github.com/we-promise/sure/pull/2808
- Add experimental Swift-native Sure Insights app by @jjmata in https://github.com/we-promise/sure/pull/3134
- feat(snaptrade): add device-flow OAuth alongside the browser redirect by @jjmata in https://github.com/we-promise/sure/pull/3126
- feat(mcp): support Streamable HTTP transport (protocol 2025-06-18) by @secretsound in https://github.com/we-promise/sure/pull/2631
- Rename native Swift app to Sure Insights by @jjmata in https://github.com/we-promise/sure/pull/3172
- Allow API transaction create to opt into sync protection (user_modified) by @colinedwardwood in https://github.com/we-promise/sure/pull/3162
- Bump version to next iteration after v0.7.4-alpha.9 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3173
- fix(i18n): add missing Italian translations by @alessiocappa in https://github.com/we-promise/sure/pull/3170
- Fix AI health check for OpenAI-compatible endpoints by @sure-admin in https://github.com/we-promise/sure/pull/3184
- feat(budgets): carry a category's unspent budget into the next month by @buzzromain in https://github.com/we-promise/sure/pull/3143
- feat(budgets): move money between envelopes in one gesture by @buzzromain in https://github.com/we-promise/sure/pull/3164
- fix(trades): let the header call a trade what the importer recorded by @buzzromain in https://github.com/we-promise/sure/pull/3150
- fix(goals): stop two goals from each claiming the same account in full by @buzzromain in https://github.com/we-promise/sure/pull/3160
- fix(rules): validate Rule::Condition type registry + normalize legacy values by @Khaostica in https://github.com/we-promise/sure/pull/1908
- feat(goals): a reached goal lets go of the money it was holding by @buzzromain in https://github.com/we-promise/sure/pull/3165
- fix(lunchflow): keep balances current during rate limits by @tatoalo in https://github.com/we-promise/sure/pull/3129
- Warn before provider setup without encryption keys by @sure-admin in https://github.com/we-promise/sure/pull/3007
- Feature/category hierarchy and account search by @DataEnginr in https://github.com/we-promise/sure/pull/2845
- fix(desktop): support a server hosted under a sub-path by @nSimonFR-ai in https://github.com/we-promise/sure/pull/3127
- feat(goals): reserves you maintain, not goals you finish by @buzzromain in https://github.com/we-promise/sure/pull/3167
- fix(onchain): let the account take its wallet row with it by @buzzromain in https://github.com/we-promise/sure/pull/3182
- feat(goals): tell the user when a reserve has dropped below its level by @buzzromain in https://github.com/we-promise/sure/pull/3175
- Bump version to next iteration after v0.7.4-alpha.10 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3185
- feat(goals): let a goal be spent without looking like it fell behind by @buzzromain in https://github.com/we-promise/sure/pull/3176
- fix(onchain-wallets): call transfers transfers, and drop the address swap by @buzzromain in https://github.com/we-promise/sure/pull/3153
- feat(goals): show what each account still has room to earmark by @buzzromain in https://github.com/we-promise/sure/pull/3166
- feat(goals): surface money that left a goal's accounts unexplained by @buzzromain in https://github.com/we-promise/sure/pull/3177
- feat(budgets): show what is actually free, beside the plan by @buzzromain in https://github.com/we-promise/sure/pull/3179
- feat(goals): a reserve measured in months of spending, not a fixed sum by @buzzromain in https://github.com/we-promise/sure/pull/3180
- docs: add Hostim.dev as a one-click hosting option by @pavel1337 in https://github.com/we-promise/sure/pull/2567
- feat: create merchant inline from transaction detail by @gfr-free in https://github.com/we-promise/sure/pull/3106
- Fix SimpleFIN balances-only liability signs by @marty0x in https://github.com/we-promise/sure/pull/3187
- Verify PDF support with a synthetic health probe by @jjmata in https://github.com/we-promise/sure/pull/3191
- Regenerate schema for Rails 8.1 by @jjmata in https://github.com/we-promise/sure/pull/3194
- Bump version to next iteration after v0.7.4-alpha.11 release by @github-actions[bot] in https://github.com/we-promise/sure/pull/3196
- Plaid: add accounts to an existing connection by @timkatz in https://github.com/we-promise/sure/pull/3199
- Fix flaky sign_out teardown in test suites by @winters27 in https://github.com/we-promise/sure/pull/3208
- Fix(lunchflow): Missing template on validation failure in create action by @sentry[bot] in https://github.com/we-promise/sure/pull/2724
- fix(transactions): Resolve N+1 query in bulk update controller by @sentry[bot] in https://github.com/we-promise/sure/pull/3072
- bugfix: Fix category merge form submission by @DataEnginr in https://github.com/we-promise/sure/pull/3225
- fix(goals): stop a whole-account spend counting the same money twice by @buzzromain in https://github.com/we-promise/sure/pull/3219
- Fix user-triggered Plaid transaction refresh by @timkatz in https://github.com/we-promise/sure/pull/3206
- fix(account): resolve N+1 query in cleanup_transfers by @sentry[bot] in https://github.com/we-promise/sure/pull/3066
- fix(sparklines): prevent crash when trend is nil for empty series by @sentry[bot] in https://github.com/we-promise/sure/pull/3171
- fix(security): prevent Security::Price uniqueness validation error by @sentry[bot] in https://github.com/we-promise/sure/pull/3120
- fix(goals): define RELEASED_STATES once by @buzzromain in https://github.com/we-promise/sure/pull/3232
- fix(goals): make the figure beside the ring agree with the ring by @buzzromain in https://github.com/we-promise/sure/pull/3213
- fix(goals): let a months-of-expenses reserve be created at all by @buzzromain in https://github.com/we-promise/sure/pull/3229
- fix(reports): a transfer out is not a sale by @buzzromain in https://github.com/we-promise/sure/pull/3192
- Remove native Swift app by @sure-admin in https://github.com/we-promise/sure/pull/3235
- feat(goals): call a reserve's amount what the rest of the app calls it by @buzzromain in https://github.com/we-promise/sure/pull/3230
- feat(goals): offer recording a spend where the user is standing by @buzzromain in https://github.com/we-promise/sure/pull/3215
- fix(goals): stop the first goal being told about earmarks it has none of by @buzzromain in https://github.com/we-promise/sure/pull/3216
- fix(holdings): a transfer must not set a cost basis by @buzzromain in https://github.com/we-promise/sure/pull/3154
- fix(binance): let go of an asset the wallet no longer holds by @buzzromain in https://github.com/we-promise/sure/pull/3234
- fix(holdings): an outbound transfer must not clear a cost basis by @buzzromain in https://github.com/we-promise/sure/pull/3237
- Fix/french locale typos by @jubbakka in https://github.com/we-promise/sure/pull/3228
- feat: Super Admins can Delete Users and Modify Families/Groups by @mr-u0b0dy in https://github.com/we-promise/sure/pull/2868
- Add canonical roadmap content by @atlas-maxjb in https://github.com/we-promise/sure/pull/2931
- fix(i18n): localize SureImport missing-reference messages by @Rowdy in https://github.com/we-promise/sure/pull/3266
- fix(i18n): localize SnapTrade device authorization by @Rowdy in https://github.com/we-promise/sure/pull/3283
- fix(i18n): localize trade activity labels by @Rowdy in https://github.com/we-promise/sure/pull/3282
- Add support for linking E*TRADE and other investment-only institutions by @terafin in https://github.com/we-promise/sure/pull/3271
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
- @ai-mountain 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
- @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
- @taillred 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
- @Lobster-0429 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 con