"""add thread_state for per-thread state machine Revision ID: 3f1d9a5b7c42 Revises: cd0a88ef9080 Create Date: 2026-04-24 10:00:00.000000 Таблица состояния треда (одна строка на тред): текущая ветка, шаг внутри ветки и собранные слоты (JSON). Нужна для state machine в Спринте 5. """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa revision: str = '3f1d9a5b7c42' down_revision: Union[str, None] = 'cd0a88ef9080' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table( 'thread_state', sa.Column('thread_id', sa.Integer(), nullable=False), sa.Column('current_intent_code', sa.String(length=50), nullable=True), sa.Column('current_step', sa.Integer(), nullable=False, server_default='0'), sa.Column('slots_json', sa.Text(), nullable=False, server_default='{}'), sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint( ['thread_id'], ['threads.id'], name='fk_thread_state_thread_id', ondelete='CASCADE', ), sa.PrimaryKeyConstraint('thread_id'), ) def downgrade() -> None: op.drop_table('thread_state')