"""tasks.context_base_idx 列(channel 长会话软重置,DESIGN §8.7).

Revision ID: 0019
Revises: 0018
Create Date: 2026-06-29

给 tasks 加 context_base_idx(NOT NULL DEFAULT 0):喂给模型的上下文窗口起点。
Session.load 只把 idx >= context_base_idx 的消息装进 LLM 上下文;idx < base 的历史
仍全量留在 messages 表(web `/messages` 直查不受影响,用户照旧翻完整历史)。

channel 入站对话据此做「软重置」:超过 gap 阈值未说话 → base 推到「最后一条 user 消息
idx」(保留上一轮原文做续聊锚点);手动「新话题」→ base 推到总消息数(彻底从零)。
存量行 / web 普通任务 base 恒 0 = 喂全量,行为不变。additive,无数据迁移。
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op


revision: str = "0019"
down_revision: Union[str, None] = "0018"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.add_column(
        "tasks",
        sa.Column(
            "context_base_idx",
            sa.Integer(),
            nullable=False,
            server_default="0",
        ),
    )


def downgrade() -> None:
    op.drop_column("tasks", "context_base_idx")
