"""Drop musehub_issue_labels — dead junction table. Issues store labels as a denormalized ARRAY(text) on musehub_issues.labels. The musehub_issue_labels join table was created in anticipation of a normalized approach that was never implemented — no service code ever inserted into it, so it has always been empty. Proposals use the junction table correctly (musehub_proposal_labels) and are unaffected by this change. Revision ID: 0026 Revises: 0025 """ from __future__ import annotations import sqlalchemy as sa from alembic import op revision = "0026" down_revision = "0025" branch_labels = None depends_on = None def upgrade() -> None: op.drop_index("ix_musehub_issue_labels_label_id", table_name="musehub_issue_labels") op.drop_table("musehub_issue_labels") def downgrade() -> None: op.create_table( "musehub_issue_labels", sa.Column("issue_id", sa.String(128), sa.ForeignKey("musehub_issues.issue_id", ondelete="CASCADE"), primary_key=True), sa.Column("label_id", sa.String(128), sa.ForeignKey("musehub_labels.id", ondelete="CASCADE"), primary_key=True), ) op.create_index("ix_musehub_issue_labels_label_id", "musehub_issue_labels", ["label_id"])