"""drop local password (T10.4, wave 10 / D15 / D16) Real deletion, not a toggle: no local password exists anymore, only Okta OIDC. `password_hash` was NOT NULL at the database level since the baseline schema, so downgrade re-adds it with server_default='' rather than leaving existing rows without a value — the same pattern used for the locale/timezone drop-precedent columns, applied in reverse. Revision ID: 1d60a608bb51 Revises: a1b8c6d4e2f9 Create Date: 2026-09-03 00:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '1d60a608bb51' down_revision = 'a1b8c6d4e2f9' branch_labels = None depends_on = None def upgrade() -> None: op.drop_column('users', 'password_hash') def downgrade() -> None: op.add_column('users', sa.Column('password_hash', sa.String(length=200), nullable=False, server_default=''))