"""moment_mappings — an install's own corrections to which actions reach which moment (milestone 458 step 2) Revision ID: 0116 Revises: 0115 Create Date: 2026-10-05 The moments and their default actions are code; this table holds what an install adds ("make ship" is a deliver here) and the defaults it switches off. User-owned configuration, so it cascades with the user. No CHECK on `effect`, which the service validates (rule 36). """ import sqlalchemy as sa from alembic import op revision = "0116" down_revision = "0115" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "moment_mappings", sa.Column("id", sa.BigInteger(), primary_key=True), sa.Column( "created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("now()"), ), sa.Column( "user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ), sa.Column("tool", sa.Text(), nullable=False), sa.Column("match", sa.Text(), nullable=False, server_default=""), sa.Column("moment", sa.Text(), nullable=False), sa.Column("effect", sa.Text(), nullable=False, server_default="add"), sa.Column("reason", sa.Text(), nullable=False, server_default=""), sa.Column("actor", sa.Text(), nullable=False, server_default="model"), sa.UniqueConstraint( "user_id", "tool", "match", "moment", name="uq_moment_mapping", ), ) def downgrade() -> None: op.drop_table("moment_mappings")