The bug that taught the most
Auth worked end to end. Users logged in, sessions refreshed, roles resolved. And every single database query returned nothing, silently, with no error worth reading.
Postgres has two independent access layers. GRANT decides
whether a role may touch a table at all; RLS decides which rows it sees
— and RLS only runs after GRANT lets you in. Without
the grants, the policies never even execute. It became its own migration,
and its own entry in the decision log.