Mortgage category not auto-detected as debt (snowball DEBT_LIKE_CLAUSES gap)
Imported payments don't update debt balance (balance_delta always NULL)
Recurring bill generation from cycle rules
Recurring bill generation from cycle rules
Fixed in 1f1c505. getCycleRange now called per-bill so quarterly/annual bills check their full window, not just the calendar month. Null-guard added after buildTrackerRow() prevents…
Client snowball projection duplicates server simulation (drift risk)
Fixed in c353dd9. Deleted computeLiveProjection() client duplicate. Server now accepts ?extra=N for unsaved amount preview. Drift is no longer possible.
Client snowball projection duplicates server simulation (drift risk)
PATCH /api/snowball/order silently swallows invalid rows
PATCH /api/snowball/order silently swallows invalid rows
Fixed in 44320a7. Pre-validates all rows before touching the DB, rejects bad entries with a 400, adds deleted_at IS NULL filter, returns updated count.
isRamseyMode() called twice per snowball projection request
Fixed in e41f413. getDebtBills now accepts an explicit ramseyMode param, eliminating the redundant DB call.
isRamseyMode() called twice per snowball projection request