背景
当前 state_store 的 schema version 迁移已经存在,但 a2a_pending_session_claims 仍保留对旧行 updated_at 语义的运行时 fallback:
- 读取时:
expires_at 为空会回退到 updated_at + ttl
- 清理时:仍保留
expires_at IS NULL 的旧行分支
- 命名上也仍有
legacy_* 残留
这不是 A2A 协议兼容问题,而是内部状态表数据迁移没有彻底收口。
目标
采用长期最干净的方案,清理掉源码中的旧行兼容逻辑:
- 设计并落地一次明确的数据迁移/backfill,处理
expires_at IS NULL 的旧行。
- 迁移完成后,删除运行时
updated_at fallback 逻辑。
- 删除或重命名
legacy_* 相关符号,避免继续在源码中保留历史语义。
- 评估
updated_at 列是否仍有保留价值;如无必要,规划后续 schema 迁移去除。
约束与注意事项
- 旧行本身不保存“写入当时的 TTL 配置”,因此 backfill 策略需要显式定义,不能隐式假设当前 TTL 就等于历史 TTL。
- 这项工作与 A2A v1 协议迁移解耦,单独跟进,不阻塞当前协议升级 PR。
验收建议
state_store 迁移测试覆盖旧表、旧行、并发初始化场景。
- 迁移完成后,生产代码中不再出现 pending-claim 的
updated_at fallback 读取/清理分支。
legacy_* 命名从主路径移除。
背景
当前
state_store的 schema version 迁移已经存在,但a2a_pending_session_claims仍保留对旧行updated_at语义的运行时 fallback:expires_at为空会回退到updated_at + ttlexpires_at IS NULL的旧行分支legacy_*残留这不是 A2A 协议兼容问题,而是内部状态表数据迁移没有彻底收口。
目标
采用长期最干净的方案,清理掉源码中的旧行兼容逻辑:
expires_at IS NULL的旧行。updated_atfallback 逻辑。legacy_*相关符号,避免继续在源码中保留历史语义。updated_at列是否仍有保留价值;如无必要,规划后续 schema 迁移去除。约束与注意事项
验收建议
state_store迁移测试覆盖旧表、旧行、并发初始化场景。updated_atfallback 读取/清理分支。legacy_*命名从主路径移除。