"""Phase 5: add ci_gate_config to musehub_repos, add musehub_ci_test_mappings table. Revision ID: 0012 Revises: 0011 """ from alembic import op import sqlalchemy as sa revision = "0012" down_revision = "0011" branch_labels = None depends_on = None def upgrade() -> None: # ── musehub_repos: ci_gate_config ──────────────────────────────────────── op.add_column( "musehub_repos", sa.Column("ci_gate_config", sa.JSON(), nullable=False, server_default="{}"), ) # ── musehub_ci_runs: gate_results ──────────────────────────────────────── op.add_column( "musehub_ci_runs", sa.Column("gate_results", sa.JSON(), nullable=False, server_default="{}"), ) # ── musehub_ci_test_mappings ────────────────────────────────────────────── op.create_table( "musehub_ci_test_mappings", sa.Column("mapping_id", sa.String(36), primary_key=True), sa.Column( "run_id", sa.String(36), sa.ForeignKey("musehub_ci_runs.run_id", ondelete="CASCADE"), nullable=False, unique=True, ), sa.Column( "repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False, ), sa.Column("commit_id", sa.String(255), nullable=False), sa.Column("changed_symbols", sa.JSON(), nullable=False, server_default="[]"), sa.Column("selected_tests", sa.JSON(), nullable=False, server_default="[]"), sa.Column("covered_addresses", sa.JSON(), nullable=False, server_default="[]"), sa.Column("uncovered_addresses", sa.JSON(), nullable=False, server_default="[]"), sa.Column("coverage_fraction", sa.Float(), nullable=False, server_default="0.0"), sa.Column("selected_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("total_estimated", sa.Integer(), nullable=False, server_default="0"), sa.Column( "created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("NOW()"), ), ) op.create_index( "ix_musehub_ci_test_mappings_run_id", "musehub_ci_test_mappings", ["run_id"], ) op.create_index( "ix_musehub_ci_test_mappings_repo_id", "musehub_ci_test_mappings", ["repo_id"], ) def downgrade() -> None: op.drop_index("ix_musehub_ci_test_mappings_repo_id", table_name="musehub_ci_test_mappings") op.drop_index("ix_musehub_ci_test_mappings_run_id", table_name="musehub_ci_test_mappings") op.drop_table("musehub_ci_test_mappings") op.drop_column("musehub_ci_runs", "gate_results", if_exists=True) op.drop_column("musehub_repos", "ci_gate_config", if_exists=True)