"""conversations.curator_summary — feeds curator output back to the chat model Revision ID: 0049 Revises: 0048 Create Date: 2026-05-22 Phase 3 of the conversation+curator architecture (Fable #172). The curator's final summary line (≤ 240 chars) is persisted here so the NEXT chat turn can include it in the system prompt. This is the feedback loop that closes the architecture — without it, the chat model has no awareness of what the curator extracted, and conversations risk circling back to topics already captured. NULL means "no curator pass has produced a summary yet." The chat pipeline reads this column when building the journal system prompt; missing column = no injection, no failure. """ from alembic import op import sqlalchemy as sa revision = "0049" down_revision = "0048" branch_labels = None depends_on = None def upgrade() -> None: op.add_column( "conversations", sa.Column("curator_summary", sa.Text, nullable=True), ) def downgrade() -> None: op.drop_column("conversations", "curator_summary")