State schema versioning в 2026 становится обязательным, как только у вас появляются durable agent runs, pause/resume и long-running approvals. В этот момент state больше не является временным внутренним объектом. Он становится persisted contract между разными моментами времени: до и после deploy, до и после approval, до и после incident recovery.
Именно поэтому старое правило "просто поменяем структуру dict и задеплоим" для агентных систем больше не работает.
Когда state живёт дольше одного process lifetime, он уже не просто внутренняя структура.
Он связывает:
Поэтому любое изменение state schema нужно рассматривать как API change внутри собственной системы.
Самый коварный случай. Решение человека может прийти позже, когда код уже изменился.
Вложенные execution paths часто сериализуют больше metadata, чем кажется.
Нельзя потерять понимание, какие side effects уже были зафиксированы.
Переименование статусов или шагов легко ломает resume logic.
Именно второй класс требует явной migration logic.
Для агентных систем полезны два подхода:
При чтении старого snapshot-а код преобразует его в новый shape.
Плюсы:
Все snapshots заранее обновляются до новой версии.
Плюсы:
На практике read-time adapter часто удобнее для paused runs и long-lived approvals.
Идеальный минимум:
schema_version;workflow_version;created_at;last_updated_at.Это помогает понять:
Код пытается угадать версию по наличию полей.
Long-lived pending tasks резюмируются на новом коде без защит.
Поле называется так же, но означает уже другое.
Старый код не умеет читать state, записанный новой версией.
Review or resume workers не знают, с какими версиями state они вообще работают.
Минимальный versioning dashboard обычно включает:
Если старые версии не видны, технический долг по state быстро становится невидимой operational миной.