"""add users.diagnostics_level + diagnostics_until — a user's consented diagnostics level (E22 S5) Revision ID: 0087_users_diagnostics_level Revises: 0086_log_events Create Date: 2026-09-17 Both NULL = the base level (Alap). A raised level is ALWAYS paired with its expiry, computed by the server at consent time (`app/diagnostics.py`), so no client can ask for a level that never ends. Columns rather than `users.preferences`: that JSON is written wholesale by the client, and a consent with a lifetime must not be something a client can write. """ import sqlalchemy as sa from alembic import op revision: str = "0087_users_diagnostics_level" down_revision: str | None = "0086_log_events" branch_labels: str | None = None depends_on: str | None = None def upgrade() -> None: op.add_column("users", sa.Column("diagnostics_level", sa.String(8), nullable=True)) op.add_column( "users", sa.Column("diagnostics_until", sa.DateTime(timezone=True), nullable=True) ) def downgrade() -> None: op.drop_column("users", "diagnostics_until") op.drop_column("users", "diagnostics_level")