Obrigado por executar essas consultas, @Don - você confirmou a causa raiz
Seus resultados mostram exatamente o que suspeitávamos
Você tem um esquema backup com uma cópia de user_options
Essa tabela ainda tem o padrão antigo (column_default = false)
A linha backup apareceu antes de public nos resultados da consulta
Quando a migração removeu o padrão de public.user_options, ela não tocou em backup.user_options. Então, mark_readonly consultou information_schema.columns sem filtrar por esquema, obteve a linha backup primeiro (que ainda tinha o padrão) e falhou
A correção é simplesmente adicionar table_schema = 'public' à consulta para que ela verifique apenas o esquema em que as migrações realmente operam.