"""Docker swarm service placement column Adds docker_swarm_services.placement_json — the task→node placement of a service's running replicas, captured from the agent's swarm payload (a manager sees every task, so this records cross-node placement the local container rows can't). Additive column; no DROP+recreate. Revision ID: docker_005_swarm_placement Revises: docker_004_events_swarm Create Date: 2026-06-19 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa revision: str = "docker_005_swarm_placement" down_revision: Union[str, None] = "docker_004_events_swarm" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.add_column("docker_swarm_services", sa.Column("placement_json", sa.Text, nullable=False, server_default="[]")) def downgrade() -> None: op.drop_column("docker_swarm_services", "placement_json")