[1.3.2-beta.13] - 2026-10-25
Bug Fixes
- Trim unused SQL parameters left by the globalization pass by @John710
Postgres rejects bound-but-unreferenced parameters with 42P18 — the
globalization commit removed user scoping from queries but left the
trailing userId in the args arrays (transactions tag map and tag checks,
budgets category/tag checks, recurring category check, debts
autocategory, categories parent checks/list/delete/merge, tags
list/create/delete, import categories). Found by tracing the CI 500s
via the container-log dump; parameter usage audited against every
touched query. - Drop per-user indexes IF EXISTS (naming differs across pg-migrate versions) by @John710- Dedupe transaction_tags via ctid (no id column) by @John710
transaction_tags has a composite PK (transaction_id, tag_id) — the
duplicate cleanup referenced a non-existent id column and migration 29
rolled back on start (caught by CI). - Family sharing feedback + global categories and tags by @John710
- accounts: ShareModal was never rendered (silent template replace
failure) — the share button did nothing - budgets: refetch after save (the raw create response lacks the joined
category name, cards showed nameless chips) - universal button hover/active feedback (main.css) + primary Shared
badge: an entity that is already shared shows 'Shared' instead of
'Share' (is_shared now returned for debts and recurring too) - rate limits raised for real family usage: GET 240/min, mutations
90/min (auth stays 10/min) - migration 29: categories and tags are now GLOBAL — same-name
duplicates across users are merged (oldest wins), user scoping dropped,
unique constraints become (name, type) / (name); all backend queries
unscoped (transactions, budgets, debts, recurring, import, demodata,
debt category autogeneration)
- accounts: ShareModal was never rendered (silent template replace
Full Changelog: v1.3.2-beta.9...v1.3.2-beta.13