"""Per-project sandbox DB/Redis opt-in column. The sandboxed-DB provisioner (orchestrator-side sibling containers) only participates for a project when ``sandbox_services`` is set — e.g. ``["postgres", "redis"]``. Additive and nullable, so existing projects keep today's behavior (no sandbox, the legacy ``_append_gate_env`` prod-creds injection stays byte-for-byte unchanged for them). Revision ID: 057_project_sandbox_services Revises: 056_member_perf_daily Create Date: 2026-07-03 """ from __future__ import annotations import sqlalchemy as sa from alembic import op revision = "057_project_sandbox_services" down_revision = "056_member_perf_daily" branch_labels: dict[str, str] | None = None depends_on: dict[str, str] | None = None def upgrade() -> None: op.add_column( "projects", sa.Column("sandbox_services", sa.ARRAY(sa.String()), nullable=True), ) def downgrade() -> None: op.drop_column("projects", "sandbox_services")