mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-11 20:44:32 -05:00
[Bug]: Can't merge transfers with new merge functionality #2131
Open
opened 2026-02-28 20:04:15 -06:00 by GiteaMirror
·
6 comments
No Branch/Tag Specified
master
matiss/oxlint-no-floating-promises-require-array-sort-compare
matiss/fix-6804
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
add-claude-github-actions-1772738270730
react-query-rules
react-query-useSchedules
matiss/separate-lint-format
dependabot/npm_and_yarn/ajv-6.14.0
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#2131
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @alecbakholdin on GitHub (May 16, 2025).
Verified issue does not already exist?
What happened?
Bug described here by another user @cesjn
I have been an Actual user for several months now and was really excited for the new Merge feature that came out in the latest release. In theory it should address this problem, but the current implementation seems to fall short. I have a similar situation where a transfer is made between two accounts but the transaction is duplicated in the receiving account. So I end up with the following three transactions:
Account A, $20 Payment, categorized as Transfer, matched to SimpleLink Import and marked as cleared
Account B, $20 Credit, categorized as Transfer, unmatched and not cleared (appears to result from a rule that Actual automatically created for me)
Account B, $20 Credit, Not Categorized, matched to import and marked as cleared
Before the merge function was introduced I would change the category of transaction https://github.com/actualbudget/actual/pull/1 to something else, delete transaction https://github.com/actualbudget/actual/pull/2 and then use the "make transfer" function to link https://github.com/actualbudget/actual/pull/1 and https://github.com/actualbudget/actual/pull/3 together, thus categorizing them both as a transfer (Actual then wants me to make a rule for this, which I try to always decline in order to avoid the same situation the next month when these transactions occur again).
With the merge function I had the expectation that I should simply be able to "Merge" transactions https://github.com/actualbudget/actual/pull/2 and https://github.com/actualbudget/actual/pull/3 and we should be good to go. Unfortunately, when I do so, the resulting transaction is NOT categorized as a transfer, but https://github.com/actualbudget/actual/pull/1 stays as a transfer. This results in me being unable to link https://github.com/actualbudget/actual/pull/1 and the https://github.com/actualbudget/actual/pull/2/3 merge.
So, I would propose that there is a Bug here, specifically in the new merge feature. I.e. that if you merge a "transfer" transaction with another transaction, that the resulting merged transaction should maintain the "transfer" category. The alternative would be to unlink the transaction linked to the transfer transaction (set it back to uncategorized) so that you can re-link the resulting transaction, but that seems far more complicated.
How can we reproduce the issue?
create a transfer, create a transaction. Attempt to merge the two transactions. It fails.
Where are you hosting Actual?
None
What browsers are you seeing the problem on?
No response
Operating System
None
@alecbakholdin commented on GitHub (May 16, 2025):
Created as a result of discussion in #4899
@karanj commented on GitHub (Sep 22, 2025):
Encountered this today, was very confused as to why it would always seem to pick the non-transfer as the merged entry.
If merge is broken when transfers are included in the merge set, is there a way to disable or caution the user trying to perform the action until a fix is developed?
@oddmaniv commented on GitHub (Feb 17, 2026):
Really struggling with this issue - has there been any progress / alternative methods?
@nicepopo86-lang commented on GitHub (Feb 17, 2026):
I’d like to work on this bounty issue. I’ll reproduce the transfer-merge bug, implement a focused fix, and open a PR with regression steps.
@nicepopo86-lang commented on GitHub (Feb 17, 2026):
I opened a draft PR with a focused fix and regression test for this merge path:\n\n- PR: https://github.com/actualbudget/actual/pull/7000\n\nIt preserves/relinks when a merge keeps the imported transaction, so transfer pairing stays valid instead of pointing to a deleted transaction id.
@lmee commented on GitHub (Feb 17, 2026):
I reviewed "Can't merge transfers with new merge functionality" and read all comments before proposing a patch path.
Problem I see: - [x] I have searched and found no existing issue.
Root-cause hypothesis: inconsistent filter/query state between two rendering paths.
First patch plan: reproduce the issue against acceptance criteria, isolate the root cause in the relevant module, and submit a focused fix with regression tests.
If this aligns with maintainer expectations, I will post repro evidence first and then open the scoped patch.