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