"""Add musehub_commit_graph — precomputed reachability for O(frontier) DAG walks. Issue #63 Phase 2: commit graph enables _walk_commit_delta to query in bulk per BFS frontier instead of one DB call per commit. """ from __future__ import annotations import sqlalchemy as sa from alembic import op revision = "0060" down_revision = "0059" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "musehub_commit_graph", sa.Column("repo_id", sa.String(128), nullable=False), sa.Column("commit_id", sa.String(128), nullable=False), sa.Column( "parent_ids", sa.ARRAY(sa.Text), nullable=False, server_default="{}", ), sa.Column("generation", sa.BigInteger, nullable=False, server_default="0"), sa.Column("snapshot_id", sa.String(128), nullable=True), sa.Column( "created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("now()"), ), sa.ForeignKeyConstraint( ["repo_id"], ["musehub_repos.repo_id"], ondelete="CASCADE", ), sa.PrimaryKeyConstraint("repo_id", "commit_id"), ) op.create_index( "ix_musehub_commit_graph_repo_generation", "musehub_commit_graph", ["repo_id", "generation"], ) def downgrade() -> None: op.drop_index("ix_musehub_commit_graph_repo_generation", table_name="musehub_commit_graph") op.drop_table("musehub_commit_graph")