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
rotateSessionId uses raw BEGIN/COMMIT/ROLLBACK instead of db.transaction()