whisper-money/app
Víctor Falcón fa4b420cd9 fix(budgets): re-derive budget membership when labels are attached without a model event
Catch-all budget membership depends on labels since #781, but three paths
attach labels through pivot writes or mass updates, which fire no model
event. AssignTransactionToBudget never ran for them, so the transaction
stayed in whatever budget it was in — typically the catch-all, even once a
budget tracked its new label.

Dispatch a dedicated ReassignTransactionsToBudgets job from those paths
instead of re-broadcasting TransactionUpdated, which would also re-run the
automation rules that dispatched it. The bulk apply queues one job for the
whole batch rather than one per transaction.

Extract the three action branches of applyRuleActionsToTransactions so the
added dispatch keeps the method under the complexity threshold.
2026-08-12 12:09:11 +02:00
..
Actions feat(subscriptions): end the trial experiment and make the trial length per plan (#762) 2026-08-12 10:59:55 +02:00
Ai/Agents feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
Console/Commands feat(reports): email a monthly CSV of active user emails to the owners (#783) 2026-08-12 11:29:28 +02:00
Contracts feat(connections): manage which accounts a bank connection syncs (#558) 2026-06-18 16:22:49 +02:00
Enums feat(transactions): add a monthly trend view to the analysis drawer (#736) 2026-07-26 17:03:52 +02:00
Events Add Budgeting Feature to Track and Manage Spending (#36) 2026-01-21 15:25:50 +01:00
Exceptions/Banking fix(banking): stop unclassified bank responses from silently killing a connection (#742) 2026-08-09 17:26:34 +02:00
Features feat(subscriptions): end the trial experiment and make the trial length per plan (#762) 2026-08-12 10:59:55 +02:00
Http refactor(open-banking): bring the authorization callback back under the complexity threshold (#784) 2026-08-12 09:47:22 +00:00
Jobs fix(budgets): re-derive budget membership when labels are attached without a model event 2026-08-12 12:09:11 +02:00
Listeners feat: reuse the upgrade modal at more upsell points and attribute revenue (#699) 2026-07-18 12:53:20 +00:00
Mail feat(reports): email a monthly CSV of active user emails to the owners (#783) 2026-08-12 11:29:28 +02:00
Mcp fix(budgets): re-derive budget membership when labels are attached without a model event 2026-08-12 12:09:11 +02:00
Models feat(mcp): budget tools — read, create, edit and delete (#779) 2026-08-11 14:28:53 +00:00
Notifications refactor: remove HIDE_AUTH_BUTTONS launch gate and waitlist apparatus (#717) 2026-07-22 08:51:48 +02:00
Policies refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
Providers fix(auth): make build deterministic when REGISTRATION_ENABLED=false (#720) 2026-07-22 07:04:20 +00:00
Rules feat: parent/child category tree (#474) 2026-06-03 19:30:12 +02:00
Services fix(budgets): re-derive budget membership when labels are attached without a model event 2026-08-12 12:09:11 +02:00
Support ci: add duplication and complexity quality checks (#765) 2026-08-11 13:29:37 +02:00