a264f74038 [AI] Keep explicitly cleared fields empty when entering new transactions (#8792)
* [AI] Keep explicitly cleared fields empty when entering new transactions

Rules re-run on every field commit while a new transaction is being
entered, and they are allowed to fill any empty field. A field the user
deliberately cleared (e.g. a category pre-assigned from the payee) was
treated as empty too, so the rule immediately re-filled it - either on
the clear itself or on a later run triggered by editing another field
such as the amount.

Track which fields the user explicitly emptied for the lifetime of the
new-transaction row (desktop register) or edit screen (mobile), and bar
rule runs from re-filling those fields until the row is added or reset.
Auto-fill for untouched fields and notes append/prepend rules keep
working as before.

Fixes the desktop half of #7390; the mobile modal was fixed in #7521.

Co-Authored-By: Claude Fable 5 <[email protected]>

* [AI] Keep cleared fields blocked during mobile payee rule runs

The payee exception in the mobile transaction edit bypassed
shouldApplyRuleChange entirely, so selecting a payee could re-fill a
field the user had explicitly cleared. Check the cleared-field set
before the payee exception, matching the desktop behavior.

Addresses CodeRabbit review feedback on #8792.

Co-Authored-By: Claude Fable 5 <[email protected]>

* [AI] Track cleared fields per transaction row

Review feedback on the cleared-fields tracking: the fields were stored
by name only, shared across the parent and all split rows, so clearing
e.g. the category on one split row stopped rules from filling the
category on its siblings too.

Track cleared fields in a Map keyed by transaction id on both the
desktop register and the mobile transaction edit screen. The rules
merge is extracted into a pure applyRulesToTransaction() helper with
unit tests covering the split scenarios, and split propagation now
skips only rows whose field the user actually cleared instead of
inferring a clear from the parent's (always empty) field value.

Co-Authored-By: Claude Fable 5 <[email protected]>

* [AI] Share split propagation between desktop and mobile rule merges

The mobile transaction edit screen kept its own copy of the
parent-to-subtransaction propagation step. Extract it into an exported
propagateRuleChangeToSubtransactions() helper and call it from both
paths so the two cannot drift apart. The mobile payee override is
unchanged.

Addresses CodeRabbit review feedback on #8792.

Co-Authored-By: Claude Fable 5.1 <[email protected]>

---------

Co-authored-by: bsmarsh333 <[email protected]>
Co-authored-by: Claude Fable 5 <[email protected]>
2026-10-04 11:45:00 +00:00
2026-10-01 22:06:53 +00:00
2026-10-02 15:58:48 +00:00
2026-07-21 18:03:26 +00:00
2022-04-28 22:44:38 -04:00
2022-04-30 12:17:49 -04:00
2026-08-02 16:00:07 +00:00
2026-10-02 15:58:48 +00:00
2025-08-12 22:10:10 +01:00
2023-08-25 20:41:20 +01:00
2026-08-02 16:00:07 +00:00
2026-09-20 20:22:32 +00:00

Actualbudget

Getting Started

Actual is a local-first personal finance tool. It is 100% free and open-source, written in NodeJS, it has a synchronization element so that all your changes can move between devices without any heavy lifting.

If you are interested in contributing, or want to know how development works, see our contributing document we would love to have you.

Want to say thanks? Click the ⭐ at the top of the page.

Installation

There are four ways to deploy Actual:

  1. One-click deployment via PikaPods (~2.00 $/month) - recommended for non-technical users
  2. Managed hosting via Fly.io (~1.50 $/month)
  3. Self-hosted by using a Docker image
  4. Local-only apps - downloadable Windows, Mac and Linux apps you can run on your device

Learn more in the installation instructions docs.

Ready to Start Budgeting?

Read about Envelope budgeting to know more about the idea behind Actual Budget.

Are you new to budgeting or want to start fresh?

Check out the community's Starting Fresh guide so you can quickly get up and running!

Are you migrating from other budgeting apps?

Check out the community's Migration guide to start jumping on the Actual Budget train!

Documentation

We have a wide range of documentation on how to use Actual, this is all available in our Community Documentation, this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.

Contributing

Actual is a community driven product. Learn more about contributing to Actual.

Code structure

The Actual app is split up into a few packages:

  • loot-core - The core application that runs on any platform
  • desktop-client - The desktop UI
  • desktop-electron - The desktop app

More information on the project structure is available in our community documentation.

Feature Requests

Current feature requests can be seen here. Vote for your favorite requests by reacting 👍 to the top comment of the request.

To add new feature requests, open a new Issue of the "Feature Request" type.

Translation

Make Actual Budget accessible to more people by helping with the Internationalization of Actual. We are using a crowd sourcing tool to manage the translations, see our Weblate Project. Weblate proudly supports open-source software projects through their Libre plan.

Translation status

Repo Activity

Alt

Sponsors

Thanks to our wonderful sponsors who make Actual Budget possible!

Deploys by Netlify Built with Depot Docker GitHub Anthropic

S
Description
A local-first personal finance app
Readme
1.3 GiB
Languages
TypeScript 94.3%
JavaScript 4.6%
CSS 0.5%
Shell 0.3%