"""M4 runtime compatibility and runtime plane. Revision ID: 20260825_0006 Revises: 20260825_0005 """ import sqlalchemy as sa from alembic import op revision = "20260825_0006" down_revision = "20260825_0005" branch_labels = None depends_on = None def _timestamps() -> list[sa.Column]: return [ sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now()), ] def upgrade() -> None: op.create_table( "runtime_environments", sa.Column("name", sa.String(255), nullable=False), sa.Column("adapter", sa.String(64), nullable=False), sa.Column("runtime_version", sa.String(128), nullable=False), sa.Column("image_repository", sa.String(255), nullable=False), sa.Column("image_digest", sa.String(71), nullable=False), sa.Column("python_version", sa.String(64), nullable=False), sa.Column("cuda_runtime_version", sa.String(64)), sa.Column("package_versions", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("supported_model_types", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("supported_formats", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("supported_modalities", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("network_policy", sa.String(64), nullable=False), sa.Column("fingerprint", sa.String(64), nullable=False), sa.Column("immutable_at", sa.DateTime(timezone=True), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column("id", sa.Uuid(), primary_key=True), sa.UniqueConstraint("fingerprint", name="uq_runtime_environment_fingerprint"), ) op.create_index("ix_runtime_environments_adapter", "runtime_environments", ["adapter"]) for column in ( sa.Column("runtime_environment_id", sa.Uuid()), sa.Column("artifact_set_id", sa.Uuid()), sa.Column("version", sa.Integer(), nullable=False, server_default="1"), sa.Column("dtype", sa.String(32)), sa.Column("modality", sa.String(32)), sa.Column("device_policy", sa.String(32), nullable=False, server_default="cuda_required"), sa.Column("health_contract", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("profile_config", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), ): op.add_column("runtime_profiles", column) op.create_foreign_key( "fk_runtime_profiles_environment", "runtime_profiles", "runtime_environments", ["runtime_environment_id"], ["id"], ondelete="RESTRICT", ) op.create_foreign_key( "fk_runtime_profiles_artifact_set", "runtime_profiles", "artifact_sets", ["artifact_set_id"], ["id"], ondelete="RESTRICT", ) op.create_index("ix_runtime_profiles_runtime_environment_id", "runtime_profiles", ["runtime_environment_id"]) op.create_index("ix_runtime_profiles_artifact_set_id", "runtime_profiles", ["artifact_set_id"]) op.create_table( "runtime_compatibility_assessments", sa.Column("artifact_set_id", sa.Uuid(), nullable=False), sa.Column("runtime_profile_id", sa.Uuid(), nullable=False), sa.Column("compute_node_id", sa.Uuid(), nullable=False), sa.Column("adapter", sa.String(64), nullable=False), sa.Column("runtime_version", sa.String(128), nullable=False), sa.Column("status", sa.String(32), nullable=False), sa.Column("static_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("evidence", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("blockers", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("warnings", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("required_approvals", sa.JSON(), nullable=False, server_default=sa.text("'[]'")), sa.Column("hardware_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("artifact_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("environment_fingerprint", sa.String(64), nullable=False), sa.Column("stale", sa.Boolean(), nullable=False, server_default=sa.false()), sa.Column("stale_reason", sa.Text()), sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column("id", sa.Uuid(), primary_key=True), sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"), ) for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "status", "environment_fingerprint"): op.create_index(f"ix_runtime_compatibility_assessments_{column}", "runtime_compatibility_assessments", [column]) op.create_table( "execution_approvals", sa.Column("artifact_set_id", sa.Uuid(), nullable=False), sa.Column("scope", sa.String(32), nullable=False), sa.Column("status", sa.String(32), nullable=False), sa.Column("evidence_fingerprint", sa.String(64), nullable=False), sa.Column("reason", sa.Text(), nullable=False), sa.Column("approved_by", sa.String(255), nullable=False), sa.Column("approved_at", sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column("expires_at", sa.DateTime(timezone=True)), sa.Column("revoked_at", sa.DateTime(timezone=True)), sa.Column("id", sa.Uuid(), primary_key=True), sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"), ) op.create_index("ix_execution_approvals_artifact_set_id", "execution_approvals", ["artifact_set_id"]) op.create_index("ix_execution_approvals_status", "execution_approvals", ["status"]) op.create_table( "runtime_probes", sa.Column("artifact_set_id", sa.Uuid(), nullable=False), sa.Column("runtime_profile_id", sa.Uuid(), nullable=False), sa.Column("compute_node_id", sa.Uuid(), nullable=False), sa.Column("compatibility_assessment_id", sa.Uuid(), nullable=False), sa.Column("execution_approval_id", sa.Uuid(), nullable=False), sa.Column("status", sa.String(32), nullable=False, server_default="queued"), sa.Column("phase", sa.String(64)), sa.Column("probe_input", sa.Text(), nullable=False), sa.Column("idempotency_key", sa.String(64), nullable=False), sa.Column("attempt_count", sa.Integer(), nullable=False, server_default="0"), sa.Column("lease_token_hash", sa.String(64)), sa.Column("lease_expires_at", sa.DateTime(timezone=True)), sa.Column("cancel_requested", sa.Boolean(), nullable=False, server_default=sa.false()), sa.Column("load_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("health_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("inference_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("unload_result", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("measured_resources", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("runtime_facts", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("environment_fingerprint", sa.String(64), nullable=False), sa.Column("failure_code", sa.String(64)), sa.Column("failure_message", sa.Text()), sa.Column("started_at", sa.DateTime(timezone=True)), sa.Column("finished_at", sa.DateTime(timezone=True)), sa.Column("id", sa.Uuid(), primary_key=True), *_timestamps(), sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["compatibility_assessment_id"], ["runtime_compatibility_assessments.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["execution_approval_id"], ["execution_approvals.id"], ondelete="RESTRICT"), sa.UniqueConstraint("idempotency_key", name="uq_runtime_probe_idempotency"), ) for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "compatibility_assessment_id", "execution_approval_id", "status"): op.create_index(f"ix_runtime_probes_{column}", "runtime_probes", [column]) op.create_table( "runtime_probe_metrics", sa.Column("runtime_probe_id", sa.Uuid(), nullable=False), sa.Column("phase", sa.String(64), nullable=False), sa.Column("measurement_type", sa.String(64), nullable=False), sa.Column("source", sa.String(64), nullable=False), sa.Column("values", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("observed_at", sa.DateTime(timezone=True), nullable=False), sa.Column("id", sa.Uuid(), primary_key=True), sa.ForeignKeyConstraint(["runtime_probe_id"], ["runtime_probes.id"], ondelete="RESTRICT"), ) op.create_index("ix_runtime_probe_metrics_runtime_probe_id", "runtime_probe_metrics", ["runtime_probe_id"]) op.create_table( "deployment_candidates", sa.Column("artifact_set_id", sa.Uuid(), nullable=False), sa.Column("runtime_profile_id", sa.Uuid(), nullable=False), sa.Column("compute_node_id", sa.Uuid(), nullable=False), sa.Column("compatibility_assessment_id", sa.Uuid(), nullable=False), sa.Column("runtime_probe_id", sa.Uuid(), nullable=False), sa.Column("channel", sa.String(32), nullable=False, server_default="lab"), sa.Column("status", sa.String(32), nullable=False, server_default="lab_ready"), sa.Column("production", sa.Boolean(), nullable=False, server_default=sa.false()), sa.Column("health_contract", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("measured_resources", sa.JSON(), nullable=False, server_default=sa.text("'{}'")), sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column("id", sa.Uuid(), primary_key=True), sa.ForeignKeyConstraint(["artifact_set_id"], ["artifact_sets.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["runtime_profile_id"], ["runtime_profiles.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["compute_node_id"], ["compute_nodes.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["compatibility_assessment_id"], ["runtime_compatibility_assessments.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["runtime_probe_id"], ["runtime_probes.id"], ondelete="RESTRICT"), sa.UniqueConstraint("runtime_probe_id", name="uq_deployment_candidate_probe"), ) for column in ("artifact_set_id", "runtime_profile_id", "compute_node_id", "runtime_probe_id", "status"): op.create_index(f"ix_deployment_candidates_{column}", "deployment_candidates", [column]) def downgrade() -> None: for table in ( "deployment_candidates", "runtime_probe_metrics", "runtime_probes", "execution_approvals", "runtime_compatibility_assessments", ): op.drop_table(table) op.drop_index("ix_runtime_profiles_artifact_set_id", table_name="runtime_profiles") op.drop_index("ix_runtime_profiles_runtime_environment_id", table_name="runtime_profiles") op.drop_constraint("fk_runtime_profiles_artifact_set", "runtime_profiles", type_="foreignkey") op.drop_constraint("fk_runtime_profiles_environment", "runtime_profiles", type_="foreignkey") for column in ( "profile_config", "health_contract", "device_policy", "modality", "dtype", "version", "artifact_set_id", "runtime_environment_id", ): op.drop_column("runtime_profiles", column) op.drop_table("runtime_environments")