* feat(categorize): dimension bags end-to-end + runtime template learning
The categorize path could not tag: categorize-core accepted a dimensions
bag but no route or UI ever passed one, and runtime template learning
dropped the bag entirely (only SIE import produced dimension-carrying
patterns).
- CategorizeTransactionSchema gains dimensions; the dashboard route, v1
single and v1 batch-categorize apply it to the mapping result's
business lines (explicit bag wins over a learned counterparty bag).
- categorization_templates.default_dimensions (migration 20260728091000)
records the bag of the latest tagged booking; latest-explicit-wins, an
untagged booking never erases it. Applied on the legacy single-line
template path and the mirrored-refund path; multi-line SIE patterns
keep their authoritative per-entry bags.
- QuickReviewDialog gets a LineDimensionFields picker (dimensions_enabled
gate, same as BulkBookDialog), prefilled from the counterparty
suggestion's learned bag; hidden for multi-line patterns whose per-line
bags would ignore an edit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Renumber migration above 20260728120000 (out-of-order vs prod after #1271)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>