"""source.backfill_runs_remaining: sticky deep-scan mode Revision ID: 0031 Revises: 0030 Create Date: 2026-06-01 Tick vs backfill mode for subscription downloads. When `backfill_runs_remaining > 0`, the next N download runs use `skip: True` + 30-min timeout (walk full history). When 0, runs use `skip: "exit:20"` + 14.5-min timeout (catch-up mode, exits early once 20 contiguous archived items are seen). Operator-flagged 2026-06-01 (Knuxy run #38887): a creator with ~550 archived posts saturates the 870s catch-up timeout even when there is no new content, because gallery-dl's default `skip: True` keeps walking. Tick mode short-circuits that; backfill mode is the explicit opt-in for deep history scans. Default 0 (all existing subscriptions start in tick mode). """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "0031" down_revision: Union[str, None] = "0030" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.add_column( "source", sa.Column( "backfill_runs_remaining", sa.Integer, nullable=False, server_default="0", ), ) def downgrade() -> None: op.drop_column("source", "backfill_runs_remaining")