"""drop the dead per-tag centroid subsystem (#1189 cleanup) The v2 pivot replaced per-tag SigLIP centroids with learned heads + CCIP. Nothing read the centroids anymore — they were recomputed (on merge + a daily beat) but never consumed for suggestions or auto-apply. Remove the storage + its two now-unused settings columns. (The recompute tasks, beat, endpoint, service, and UI card are removed in the same change.) Revision ID: 0066 Revises: 0065 Create Date: 2026-06-30 """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "0066" down_revision: Union[str, None] = "0065" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.drop_table("tag_reference_embedding") op.drop_column("ml_settings", "centroid_similarity_threshold") op.drop_column("ml_settings", "min_reference_images") def downgrade() -> None: op.add_column( "ml_settings", sa.Column( "min_reference_images", sa.Integer(), nullable=False, server_default="5", ), ) op.add_column( "ml_settings", sa.Column( "centroid_similarity_threshold", sa.Float(), nullable=False, server_default="0.55", ), ) op.create_table( "tag_reference_embedding", sa.Column("tag_id", sa.Integer(), nullable=False), sa.Column("embedding", sa.LargeBinary(), nullable=False), sa.Column("reference_count", sa.Integer(), nullable=False), sa.Column("model_version", sa.String(length=128), nullable=False), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.ForeignKeyConstraint(["tag_id"], ["tag.id"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("tag_id"), )