| 12345678910111213141516171819202122232425262728293031323334 |
- """Make the current secured head fail closed before any downgrade step."""
- from alembic import op
- revision = "20260817_515"
- down_revision = "20260817_514"
- branch_labels = None
- depends_on = None
- def upgrade() -> None:
- # The guard lives on the downgrade edge so it covers every final head
- # without changing the already-applied 501--514 history.
- return None
- def downgrade() -> None:
- op.execute("""
- DO $$ BEGIN
- IF EXISTS (SELECT 1 FROM public.tenants LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_quotas LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_quota_reservations LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_lifecycle_events LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_audit_events LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_resource_manifests LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_control_memberships LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_control_claims LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_legal_holds LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_control_outbox LIMIT 1)
- OR EXISTS (SELECT 1 FROM public.tenant_control_outbox_scope_lookup LIMIT 1) THEN
- RAISE EXCEPTION 'tenant security downgrade refused while tenant data exists';
- END IF;
- END $$;
- """)
|