"""codemap: create musehub_intel_codemap_modules and musehub_intel_codemap_meta Stores structural dependency topology derived from stored snapshot objects at push time. ``musehub_intel_codemap_modules`` holds one row per (repo_id, file_path) pair with fan_in, fan_out, and symbol count. ``musehub_intel_codemap_meta`` holds aggregate stats (total edges, cycle count, cycle paths JSON) so the dashboard and stat chips never need to recount. Revision ID: 0015 Revises: 0014 """ from alembic import op import sqlalchemy as sa revision = "0015" down_revision = "0014" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "musehub_intel_codemap_modules", sa.Column("repo_id", sa.String(128), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), primary_key=True), sa.Column("file_path", sa.String(512), primary_key=True), sa.Column("symbol_count", sa.Integer, nullable=False, server_default="0"), sa.Column("fan_in", sa.Integer, nullable=False, server_default="0"), sa.Column("fan_out", sa.Integer, nullable=False, server_default="0"), sa.Column("language", sa.String(128), nullable=False, server_default=""), sa.Column("ref", sa.String(128), nullable=False), ) op.create_index("ix_intel_codemap_modules_repo", "musehub_intel_codemap_modules", ["repo_id"]) op.create_table( "musehub_intel_codemap_meta", sa.Column("repo_id", sa.String(128), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), primary_key=True), sa.Column("total_modules", sa.Integer, nullable=False, server_default="0"), sa.Column("total_edges", sa.Integer, nullable=False, server_default="0"), sa.Column("cycle_count", sa.Integer, nullable=False, server_default="0"), sa.Column("cycles_json", sa.JSON, nullable=True), sa.Column("ref", sa.String(128), nullable=False), ) def downgrade() -> None: op.drop_index("ix_intel_codemap_modules_repo", table_name="musehub_intel_codemap_modules") op.drop_table("musehub_intel_codemap_modules") op.drop_table("musehub_intel_codemap_meta")