001
properties + permissive RLS (any authed user)
002
payments + unique(property,period)
003
tenants + permissive RLS + updated_at trigger
004
Owner-scoped RLS (auth.uid()=owner_id, EXISTS for child tables, profiles policies IF EXISTS)
005
payments.period (backfill via payment_date) + reaffirm unique
006
DROP unique constraint → allow partial payments
007
properties.notes column
⚠ Migrations 001 + 003 created permissive RLS policies. Migration 004 added the correct owner-scoped ones but never DROPPed the legacy ones. If both are active in production, RLS may be effectively bypassed for SELECT. Verify with SELECT * FROM pg_policies WHERE schemaname='public'.