v0.1.15
v0.1.15 — 2026-06-03
Fixed
-
Bank of America statements with multi-page sections were
silently dropping transactions. When a section had enough
rows that it spilled onto a second page, the continuation page's
header read "Other subtractions — continued" instead of the
usual "Other subtractions". Pre-fix, the parser only matched
the exact header, so every row printed under the continuation
header was silently skipped — manifesting as a reconciliation
off-by exactly equal to the dropped rows' total. Across one
user's 21-statement archive, 20 statements parsed cleanly but
one (eStmt_2023-08-17.pdf) was off by $163.93 — the sum of
3 rows on its page 4 continuation. v0.1.15 accepts both header
variants for all five BoA sections (Deposits, ATM, Other
subtractions, Checks, Service fees), so any future statement
whose section spans pages parses fully. A new unit test pins
the regex so this can't regress. -
Transactions: account filter no longer resets to "All
accounts" after saving an entity or category. Reproduction
the user reported: filter to one account by clicking its card
(e.g. BofA ··5981 → 164 rows), open the Entity dialog on a
row, click "Save rule & tag N rows" or "Apply to this row
only" — the filter would silently drop back to All accounts,
the strip would expand from two cards to four, and the row
count would jump back to the all-accounts total. Root cause
was a stale-closure race in how the totals strip's card-click
scheduled the refetch (asetTimeout(run, 0)that captured
the previous render's view of the filter when the user
opened the dialog mid-flight). v0.1.15 drops the setTimeout
pattern entirely; the refetch is now driven by a React effect
that always closes over the latest selection. Belt-and-
suspenders: the selection is also persisted to sessionStorage
so it survives tab navigation within the same app session.
All explicit-clear paths still work — "Reset filters" button,
Account dropdown's "All" option, clicking the active card to
toggle off, or clicking the "All accounts" card. Resets on
app restart by design.
Notes for existing users
- Upgrade in place. No database changes, no settings to
migrate. Re-import any BoA statement that previously
reconciled off — the parser will now extract the full set of
rows. (You can spot affected statements quickly: open
Inbox → any committed BoA statement → look for a non-zero
"Off by" badge.)