0.7.0
Run "Repair daily note totals" once after upgrading.
Fixed: daily-note totals could be wrong
The running total written onto the #log/spending root line counted numbers appearing inside a transaction's own merchant or note child lines — so Shell Coorparoo 1234 added 1234 to the total, and 7-Eleven added 11.
Dashboards, budgets and every chart were always correct (they only parse tagged entry lines); the wrong number was the one written into the note. Totals now heal whenever a note is opened, and the new Repair daily note totals command fixes an entire backlog in one pass.
Runway replaces the bill reserve
The bill reserve was an envelope you funded and drew down. Runway is simpler: a read-only figure answering "how much do I need available to be safe for the next month?", computed by walking your actual bill schedule.
Keep $395.27 available for the next 1 month
Recurring bills only, between today and 2026-08-29 · 11 bills due
Pick a period (1 week to 6 months) and whether usual spending counts, both in Settings → Runway. It shows the total, per-week and per-day breakdowns, and every bill making it up. No contributions, no balance, no bookkeeping.
A $900 annual renewal is worth nothing to the figure while it is eleven months away, and worth all $900 the moment it enters the window — because that is the month you need the money.
Existing #log/income/billreserve bullets are left alone and still count as transfers rather than income.
Bills that stop on their own
Give a recurring bill an End Date or Payments Left and it retires itself — for fixed-term contracts and instalment plans. It moves to Archived labelled ended 2027-03-01 or all payments made rather than paused, and Restart clears the terms.
Push a week moves just the next due date, leaving the cadence alone.
Foreign currency in quick add
58 USD : 83.64 obsidian sync #subscriptions/yearly/obsidian-sync
Records what you were charged and what it cost, with no stored rate. The code can go either side of the number and the separator is optional. The preview shows the implied rate so you can check you typed it right. Give only the foreign amount and it says so rather than guessing.
Quick add also warns when the same amount and merchant is already logged that day, and there is now an Add button in the sidebar.
Also fixed
- The dashboard donut ignored your Default grouping setting and always used full category paths. It also drew three concentric bands whenever any one category had a subcategory, so categories without one had their wedge repeated three times in the same colour. Now two bands, and the outer ring only appears over categories that actually split.
- Settings migrations are gated on a stored
schemaVersioninstead of re-running on every load; orphaned keys from old schemas are pruned.
Clearer interface
- One filled action per row. Log now is primary when a bill is actually due; everything else is a quiet outline. A row with six controls no longer reads as six equal choices.
- Amounts read like a receipt — separated from the name and set larger.
- 27 commands became 20. Eight
Insert … blockcommands became one picker that describes each block. - Six settings sections instead of nine, with folder paths, note filenames and the merchant map behind Advanced — plus a live status line reporting what the plugin can actually read from your vault, so a wrong folder says so instead of yielding an empty dashboard.
- User-facing copy settles on trip over "holiday". Tags, frontmatter and block names are unchanged, so nothing in your vault needs editing.
Under the hood
finance-core.js is now the single source of truth, and scripts/mirror-core.js generates main.js's core IIFE from it. npm test fails if the two diverge — the hand-maintained copy had quietly drifted in four places by 0.6.0, including a default that differed between the tested and the shipped code.
Runway and forecast arithmetic works in integer cents. ~250 lines of dead code removed. Tests: 110, up from 81, including a new tests/integrity.test.js covering write→read round trips and total-healing invariants — which is what caught the totals bug.