"""Add musehub_symlog_entries table Stores symbol-journal entries shared from a Muse CLI client via the wire protocol (muse#53 item 4). Entries are immutable history, so the natural key is a content hash of every field (entry_id) rather than a mutable (repo_id, symbol_addr) pointer — re-pushing the same entry is a true no-op. Unlike musehub_reflog_entries (per-branch), this table is per-symbol. Revision ID: 0081 Revises: 0080 """ from __future__ import annotations from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = '0081' down_revision: Union[str, None] = '0080' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table('musehub_symlog_entries', sa.Column('entry_id', sa.String(length=128), nullable=False), sa.Column('repo_id', sa.String(length=128), nullable=False), sa.Column('symbol_addr', sa.String(length=1000), nullable=False), sa.Column('old_content_id', sa.String(length=128), nullable=False), sa.Column('new_content_id', sa.String(length=128), nullable=False), sa.Column('commit_id', sa.String(length=128), nullable=False), sa.Column('author', sa.String(length=255), nullable=False), sa.Column('operation', sa.Text(), nullable=False), sa.Column('timestamp', sa.DateTime(timezone=True), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('entry_id'), ) op.create_index(op.f('ix_musehub_symlog_entries_repo_id'), 'musehub_symlog_entries', ['repo_id'], unique=False) op.create_index('ix_musehub_symlog_entries_repo_symbol', 'musehub_symlog_entries', ['repo_id', 'symbol_addr'], unique=False) def downgrade() -> None: op.drop_index('ix_musehub_symlog_entries_repo_symbol', table_name='musehub_symlog_entries') op.drop_index(op.f('ix_musehub_symlog_entries_repo_id'), table_name='musehub_symlog_entries') op.drop_table('musehub_symlog_entries')