"""create agent registry r1 schema

Revision ID: e298f58dfdac
Revises:
Create Date: 2026-07-22 12:51:08.228669
"""

from collections.abc import Sequence

import sqlalchemy as sa
import sqlmodel
from alembic import op

revision: str = "e298f58dfdac"
down_revision: str | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table(
        "audit_record",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("resource_id", sa.Uuid(), nullable=True),
        sa.Column("actor_type", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("actor_id", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False),
        sa.Column("caller_service", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=True),
        sa.Column("action", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("decision", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("error_code", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column("trace_id", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("environment", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.Column("safe_metadata", sa.JSON(), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_index(
        op.f("ix_audit_record_created_at"), "audit_record", ["created_at"], unique=False
    )
    op.create_index(
        op.f("ix_audit_record_resource_id"), "audit_record", ["resource_id"], unique=False
    )
    op.create_index(op.f("ix_audit_record_trace_id"), "audit_record", ["trace_id"], unique=False)
    op.create_index(
        "ix_audit_resource_created", "audit_record", ["resource_id", "created_at"], unique=False
    )
    op.create_table(
        "outbox_record",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("resource_id", sa.Uuid(), nullable=False),
        sa.Column("event_type", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("event_schema", sqlmodel.sql.sqltypes.AutoString(length=512), nullable=False),
        sa.Column("aggregate_revision", sa.BigInteger(), nullable=False),
        sa.Column("payload", sa.JSON(), nullable=False),
        sa.Column("available_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("claimed_by", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=True),
        sa.Column("claim_expires_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("publish_attempts", sa.Integer(), nullable=False),
        sa.Column("last_error_code", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column("published_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint(
            "resource_id", "aggregate_revision", name="uq_outbox_aggregate_revision"
        ),
    )
    op.create_index(
        "ix_outbox_publish_queue",
        "outbox_record",
        ["published_at", "available_at", "created_at"],
        unique=False,
    )
    op.create_index(
        op.f("ix_outbox_record_resource_id"), "outbox_record", ["resource_id"], unique=False
    )
    op.create_table(
        "projection_event",
        sa.Column("event_id", sa.Uuid(), nullable=False),
        sa.Column("resource_id", sa.Uuid(), nullable=False),
        sa.Column("aggregate_revision", sa.BigInteger(), nullable=False),
        sa.Column("applied_at", sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint("event_id"),
    )
    op.create_index(
        op.f("ix_projection_event_resource_id"), "projection_event", ["resource_id"], unique=False
    )
    op.create_table(
        "registry_resource",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("workspace_id", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("logical_name", sqlmodel.sql.sqltypes.AutoString(length=63), nullable=False),
        sa.Column("kind", sa.String(length=32), nullable=False),
        sa.Column("owner", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("lifecycle_status", sa.String(length=32), nullable=False),
        sa.Column("selected_version_id", sa.Uuid(), nullable=True),
        sa.Column("source_revision", sa.BigInteger(), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("workspace_id", "logical_name", name="uq_resource_workspace_name"),
    )
    op.create_index(
        op.f("ix_registry_resource_lifecycle_status"),
        "registry_resource",
        ["lifecycle_status"],
        unique=False,
    )
    op.create_index(
        op.f("ix_registry_resource_owner"), "registry_resource", ["owner"], unique=False
    )
    op.create_index(
        op.f("ix_registry_resource_selected_version_id"),
        "registry_resource",
        ["selected_version_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_registry_resource_updated_at"), "registry_resource", ["updated_at"], unique=False
    )
    op.create_index(
        op.f("ix_registry_resource_workspace_id"),
        "registry_resource",
        ["workspace_id"],
        unique=False,
    )
    op.create_index(
        "ix_resource_catalog_filters",
        "registry_resource",
        ["workspace_id", "lifecycle_status", "owner"],
        unique=False,
    )
    op.create_table(
        "reindex_job",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("source_revision", sa.BigInteger(), nullable=False),
        sa.Column("index_generation", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column(
            "embedding_model_id", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False
        ),
        sa.Column(
            "scoring_profile_id", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False
        ),
        sa.Column("status", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("lease_owner", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=True),
        sa.Column("source_count", sa.Integer(), nullable=False),
        sa.Column("projected_count", sa.Integer(), nullable=False),
        sa.Column("error_count", sa.Integer(), nullable=False),
        sa.Column("rollback_until", sa.DateTime(timezone=True), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_index(op.f("ix_reindex_job_status"), "reindex_job", ["status"], unique=False)
    op.create_table(
        "resource_version",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("resource_id", sa.Uuid(), nullable=False),
        sa.Column("version", sqlmodel.sql.sqltypes.AutoString(length=63), nullable=False),
        sa.Column("protocol", sa.String(length=16), nullable=False),
        sa.Column("implementation_type", sa.String(length=32), nullable=False),
        sa.Column("protocol_version", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.Column("lifecycle_status", sa.String(length=32), nullable=False),
        sa.Column("phase", sa.String(length=48), nullable=False),
        sa.Column("display_name", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=True),
        sa.Column("description", sa.Text(), nullable=True),
        sa.Column("capabilities", sa.JSON(), nullable=False),
        sa.Column(
            "descriptor_fingerprint", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False
        ),
        sa.Column("source_revision", sa.BigInteger(), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(["resource_id"], ["registry_resource.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("resource_id", "version", name="uq_resource_version"),
    )
    op.create_index(
        op.f("ix_resource_version_implementation_type"),
        "resource_version",
        ["implementation_type"],
        unique=False,
    )
    op.create_index(
        op.f("ix_resource_version_lifecycle_status"),
        "resource_version",
        ["lifecycle_status"],
        unique=False,
    )
    op.create_index(op.f("ix_resource_version_phase"), "resource_version", ["phase"], unique=False)
    op.create_index(
        op.f("ix_resource_version_protocol"), "resource_version", ["protocol"], unique=False
    )
    op.create_index(
        op.f("ix_resource_version_resource_id"), "resource_version", ["resource_id"], unique=False
    )
    op.create_index(
        "ix_version_catalog_filters",
        "resource_version",
        ["protocol", "implementation_type", "lifecycle_status"],
        unique=False,
    )
    op.create_foreign_key(
        "fk_registry_resource_selected_version",
        "registry_resource",
        "resource_version",
        ["selected_version_id"],
        ["id"],
        ondelete="SET NULL",
    )
    op.create_check_constraint(
        "ck_registry_resource_kind",
        "registry_resource",
        "kind IN ('a2a_agent', 'mcp_server')",
    )
    op.create_check_constraint(
        "ck_registry_resource_lifecycle",
        "registry_resource",
        "lifecycle_status IN ('active', 'degraded', 'rejected', 'removed')",
    )
    op.create_check_constraint(
        "ck_resource_version_protocol",
        "resource_version",
        "protocol IN ('a2a', 'mcp')",
    )
    op.create_check_constraint(
        "ck_resource_version_implementation_type",
        "resource_version",
        "implementation_type IN ('sdk', 'low-code')",
    )
    op.create_check_constraint(
        "ck_resource_version_lifecycle",
        "resource_version",
        "lifecycle_status IN ('active', 'degraded', 'rejected', 'removed')",
    )
    op.create_table(
        "a2a_profile",
        sa.Column("version_id", sa.Uuid(), nullable=False),
        sa.Column("input_modes", sa.JSON(), nullable=False),
        sa.Column("output_modes", sa.JSON(), nullable=False),
        sa.Column("interfaces", sa.JSON(), nullable=False),
        sa.ForeignKeyConstraint(["version_id"], ["resource_version.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("version_id"),
    )
    op.create_table(
        "a2a_skill",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("version_id", sa.Uuid(), nullable=False),
        sa.Column("skill_id", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False),
        sa.Column("name", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False),
        sa.Column("description", sa.Text(), nullable=True),
        sa.Column("tags", sa.JSON(), nullable=False),
        sa.Column("examples", sa.JSON(), nullable=False),
        sa.ForeignKeyConstraint(["version_id"], ["resource_version.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("version_id", "skill_id", name="uq_a2a_skill_version_id"),
    )
    op.create_index(op.f("ix_a2a_skill_version_id"), "a2a_skill", ["version_id"], unique=False)
    op.create_table(
        "invocation_route_projection_state",
        sa.Column("resource_version_id", sa.Uuid(), nullable=False),
        sa.Column("service_uid", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("canonical_url", sqlmodel.sql.sqltypes.AutoString(length=2048), nullable=True),
        sa.Column("protocol_binding", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=True),
        sa.Column("route_revision", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column(
            "validation_outcome", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False
        ),
        sa.Column("validated_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(
            ["resource_version_id"], ["resource_version.id"], ondelete="CASCADE"
        ),
        sa.PrimaryKeyConstraint("resource_version_id"),
    )
    op.create_table(
        "mcp_server_profile",
        sa.Column("version_id", sa.Uuid(), nullable=False),
        sa.Column("server_name", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False),
        sa.Column("server_version", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column(
            "negotiated_protocol_version",
            sqlmodel.sql.sqltypes.AutoString(length=32),
            nullable=False,
        ),
        sa.Column("tools_list_changed", sa.Boolean(), nullable=False),
        sa.Column("tool_count", sa.Integer(), nullable=False),
        sa.Column("snapshot_hash", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.ForeignKeyConstraint(["version_id"], ["resource_version.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("version_id"),
    )
    op.create_table(
        "permission_sync_state",
        sa.Column("resource_id", sa.Uuid(), nullable=False),
        sa.Column(
            "desired_fingerprint", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False
        ),
        sa.Column("zed_token", sqlmodel.sql.sqltypes.AutoString(length=2048), nullable=True),
        sa.Column("outcome", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("error_code", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column("retry_count", sa.Integer(), nullable=False),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(["resource_id"], ["registry_resource.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("resource_id"),
    )
    op.create_table(
        "protocol_snapshot",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("resource_version_id", sa.Uuid(), nullable=False),
        sa.Column("protocol", sa.String(length=16), nullable=False),
        sa.Column("contract_version", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.Column("snapshot_hash", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.Column("validated_snapshot", sa.JSON(), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(
            ["resource_version_id"], ["resource_version.id"], ondelete="CASCADE"
        ),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint(
            "resource_version_id", "snapshot_hash", name="uq_protocol_snapshot_hash"
        ),
    )
    op.create_index(
        op.f("ix_protocol_snapshot_resource_version_id"),
        "protocol_snapshot",
        ["resource_version_id"],
        unique=False,
    )
    op.create_table(
        "reindex_partition_offset",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("job_id", sa.Uuid(), nullable=False),
        sa.Column("topic", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False),
        sa.Column("partition", sa.Integer(), nullable=False),
        sa.Column("start_offset", sa.BigInteger(), nullable=False),
        sa.Column("current_offset", sa.BigInteger(), nullable=False),
        sa.Column("target_offset", sa.BigInteger(), nullable=False),
        sa.ForeignKeyConstraint(["job_id"], ["reindex_job.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("job_id", "topic", "partition", name="uq_reindex_job_partition"),
    )
    op.create_index(
        op.f("ix_reindex_partition_offset_job_id"),
        "reindex_partition_offset",
        ["job_id"],
        unique=False,
    )
    op.create_table(
        "search_projection_state",
        sa.Column("resource_version_id", sa.Uuid(), nullable=False),
        sa.Column("source_revision", sa.BigInteger(), nullable=False),
        sa.Column("index_generation", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column(
            "embedding_model_id", sqlmodel.sql.sqltypes.AutoString(length=256), nullable=False
        ),
        sa.Column(
            "scoring_profile_id", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False
        ),
        sa.Column("status", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("projected_at", sa.DateTime(timezone=True), nullable=True),
        sa.ForeignKeyConstraint(
            ["resource_version_id"], ["resource_version.id"], ondelete="CASCADE"
        ),
        sa.PrimaryKeyConstraint("resource_version_id"),
    )
    op.create_table(
        "workload_observation",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("resource_version_id", sa.Uuid(), nullable=True),
        sa.Column("cluster_id", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("namespace", sqlmodel.sql.sqltypes.AutoString(length=253), nullable=False),
        sa.Column("service_name", sqlmodel.sql.sqltypes.AutoString(length=253), nullable=False),
        sa.Column("service_uid", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("workspace_id", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("binding_revision", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False),
        sa.Column(
            "service_resource_version", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False
        ),
        sa.Column(
            "endpoint_fingerprint", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False
        ),
        sa.Column("usable_endpoint_count", sa.Integer(), nullable=False),
        sa.Column("phase", sa.String(length=48), nullable=False),
        sa.Column("lifecycle_status", sa.String(length=32), nullable=False),
        sa.Column(
            "registration_fingerprint", sqlmodel.sql.sqltypes.AutoString(length=64), nullable=False
        ),
        sa.Column("last_seen_generation", sa.BigInteger(), nullable=False),
        sa.Column("last_seen_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("coverage_at", sa.DateTime(timezone=True), nullable=False),
        sa.Column("removed_reason", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(
            ["resource_version_id"], ["resource_version.id"], ondelete="SET NULL"
        ),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint(
            "cluster_id", "namespace", "service_uid", name="uq_observation_identity"
        ),
    )
    op.create_index(
        "ix_observation_scope",
        "workload_observation",
        ["cluster_id", "namespace", "last_seen_at"],
        unique=False,
    )
    op.create_index(
        op.f("ix_workload_observation_lifecycle_status"),
        "workload_observation",
        ["lifecycle_status"],
        unique=False,
    )
    op.create_index(
        op.f("ix_workload_observation_phase"), "workload_observation", ["phase"], unique=False
    )
    op.create_index(
        op.f("ix_workload_observation_resource_version_id"),
        "workload_observation",
        ["resource_version_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_workload_observation_workspace_id"),
        "workload_observation",
        ["workspace_id"],
        unique=False,
    )
    op.create_table(
        "registration_attempt",
        sa.Column("id", sa.Uuid(), nullable=False),
        sa.Column("observation_id", sa.Uuid(), nullable=False),
        sa.Column("phase", sa.String(length=48), nullable=False),
        sa.Column("outcome", sqlmodel.sql.sqltypes.AutoString(length=32), nullable=False),
        sa.Column("error_code", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=True),
        sa.Column("retryable", sa.Boolean(), nullable=False),
        sa.Column("redacted_detail", sqlmodel.sql.sqltypes.AutoString(length=512), nullable=True),
        sa.Column("idempotency_key", sqlmodel.sql.sqltypes.AutoString(length=128), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(
            ["observation_id"], ["workload_observation.id"], ondelete="CASCADE"
        ),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("idempotency_key", name="uq_attempt_idempotency_key"),
    )
    op.create_index(
        "ix_attempt_observation_created",
        "registration_attempt",
        ["observation_id", "created_at"],
        unique=False,
    )
    op.create_index(
        op.f("ix_registration_attempt_observation_id"),
        "registration_attempt",
        ["observation_id"],
        unique=False,
    )
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_index(op.f("ix_registration_attempt_observation_id"), table_name="registration_attempt")
    op.drop_index("ix_attempt_observation_created", table_name="registration_attempt")
    op.drop_table("registration_attempt")
    op.drop_index(op.f("ix_workload_observation_workspace_id"), table_name="workload_observation")
    op.drop_index(
        op.f("ix_workload_observation_resource_version_id"), table_name="workload_observation"
    )
    op.drop_index(op.f("ix_workload_observation_phase"), table_name="workload_observation")
    op.drop_index(
        op.f("ix_workload_observation_lifecycle_status"), table_name="workload_observation"
    )
    op.drop_index("ix_observation_scope", table_name="workload_observation")
    op.drop_table("workload_observation")
    op.drop_table("search_projection_state")
    op.drop_index(op.f("ix_reindex_partition_offset_job_id"), table_name="reindex_partition_offset")
    op.drop_table("reindex_partition_offset")
    op.drop_index(op.f("ix_protocol_snapshot_resource_version_id"), table_name="protocol_snapshot")
    op.drop_table("protocol_snapshot")
    op.drop_table("permission_sync_state")
    op.drop_table("mcp_server_profile")
    op.drop_table("invocation_route_projection_state")
    op.drop_index(op.f("ix_a2a_skill_version_id"), table_name="a2a_skill")
    op.drop_table("a2a_skill")
    op.drop_table("a2a_profile")
    op.drop_constraint(
        "fk_registry_resource_selected_version",
        "registry_resource",
        type_="foreignkey",
    )
    op.drop_index("ix_version_catalog_filters", table_name="resource_version")
    op.drop_index(op.f("ix_resource_version_resource_id"), table_name="resource_version")
    op.drop_index(op.f("ix_resource_version_protocol"), table_name="resource_version")
    op.drop_index(op.f("ix_resource_version_phase"), table_name="resource_version")
    op.drop_index(op.f("ix_resource_version_lifecycle_status"), table_name="resource_version")
    op.drop_index(op.f("ix_resource_version_implementation_type"), table_name="resource_version")
    op.drop_table("resource_version")
    op.drop_index(op.f("ix_reindex_job_status"), table_name="reindex_job")
    op.drop_table("reindex_job")
    op.drop_index("ix_resource_catalog_filters", table_name="registry_resource")
    op.drop_index(op.f("ix_registry_resource_workspace_id"), table_name="registry_resource")
    op.drop_index(op.f("ix_registry_resource_updated_at"), table_name="registry_resource")
    op.drop_index(op.f("ix_registry_resource_selected_version_id"), table_name="registry_resource")
    op.drop_index(op.f("ix_registry_resource_owner"), table_name="registry_resource")
    op.drop_index(op.f("ix_registry_resource_lifecycle_status"), table_name="registry_resource")
    op.drop_table("registry_resource")
    op.drop_index(op.f("ix_projection_event_resource_id"), table_name="projection_event")
    op.drop_table("projection_event")
    op.drop_index(op.f("ix_outbox_record_resource_id"), table_name="outbox_record")
    op.drop_index("ix_outbox_publish_queue", table_name="outbox_record")
    op.drop_table("outbox_record")
    op.drop_index("ix_audit_resource_created", table_name="audit_record")
    op.drop_index(op.f("ix_audit_record_trace_id"), table_name="audit_record")
    op.drop_index(op.f("ix_audit_record_resource_id"), table_name="audit_record")
    op.drop_index(op.f("ix_audit_record_created_at"), table_name="audit_record")
    op.drop_table("audit_record")
    # ### end Alembic commands ###
