- Drop ParseRuleKind from parse_rules (enum survives only in rule_candidates):
a rule is now a condition (pattern + matchMode + optional txTypeGuard) plus
any set of actions (merchantCanonical/categoryId/accountId) or isIgnore
- Field-wise resolution: findClassificationRule fills merchant/category,
findAccountRule feeds the account resolver - one message may use both
- Per-rule autoApply toggle + ruleAutoApplyEnabled gate check; off -> Inbox
with full prefill
- Dedup guard in ParseRulesRepositoryImpl.create: same condition updates or
reactivates the existing row instead of inserting a duplicate
- ParsingPipeline.reapplyRulesToInbox: sweep app inbox cards on cached AI
drafts after createRule/ignoreWithRule (zero tokens)
- Schema v2 -> v3 migration (drop kind, add auto_apply) + migration_v3_test
- Rework rule_editor_screen into a single unified form; update rules list,
rule cards, source app detail, l10n strings, and tests
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>