Gracias por ejecutar esas consultas @Don: has confirmado la causa raíz
Tus resultados muestran exactamente lo que sospechábamos
Tienes un esquema backup con una copia de user_options
Esa tabla todavía tiene el valor predeterminado antiguo (column_default = false)
La fila de backup apareció antes que public en los resultados de la consulta
Cuando la migración eliminó el valor predeterminado de public.user_options, no tocó backup.user_options. Luego, mark_readonly consultó information_schema.columns sin filtrar por esquema, obtuvo primero la fila de backup (que aún tenía el valor predeterminado) y falló
La solución es simplemente agregar table_schema = 'public' a la consulta para que solo compruebe el esquema en el que realmente operan las migraciones.