"""series_page pending staging: status + nullable page_number (#789 Phase 2) Pages added from a post no longer append straight into the run — they land 'pending' with a NULL page_number, staged grouped by their source post so the operator can drop junk (text-free alts, bumpers) and place the keepers into the sequence. A page only gets a series-global page_number once it's 'placed'. Revision ID: 0048 Revises: 0047 Create Date: 2026-06-11 """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "0048" down_revision: Union[str, None] = "0047" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.add_column( "series_page", sa.Column( "status", sa.String(length=16), nullable=False, server_default="placed", ), ) op.alter_column( "series_page", "page_number", existing_type=sa.Integer(), nullable=True, ) def downgrade() -> None: # Lossy: pending pages are unsorted staging rows with no order — drop them. op.execute("DELETE FROM series_page WHERE status = 'pending'") op.alter_column( "series_page", "page_number", existing_type=sa.Integer(), nullable=False, ) op.drop_column("series_page", "status")