Newer
Older
gnexus-tasks / backend / alembic / versions / a9b8c7d6e5f4_project_summary.py
r"""projects.summary (суммаризация заметки для контекста LLM, ТЗ 3.11).

Заодно нормализация ai_proposal: движок раньше сериализовал JSON с
ensure_ascii=True — кириллица лежала \u-эскейпами (агенты через MCP видели
«u0432...» вместо букв). Раунд-трип через jsonb вычищает эскейпы.

Revision ID: a9b8c7d6e5f4
Revises: f1a2b3c4d5e6
Create Date: 2026-09-22
"""

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op

revision: str = "a9b8c7d6e5f4"
down_revision: str | Sequence[str] | None = "f1a2b3c4d5e6"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    op.add_column("projects", sa.Column("summary", sa.Text(), nullable=True))
    op.execute(
        "UPDATE tasks SET ai_proposal = (ai_proposal::text::jsonb)::json"
        " WHERE ai_proposal IS NOT NULL"
    )


def downgrade() -> None:
    op.drop_column("projects", "summary")