发现(goal-loop 静默面审计,GOAL-FP-01-17 后续)
进程崩溃后重启时,GoalLoop 的启动扫描可能对崩溃前已评估过的边界再次评估,导致:
turns_used 被多计一次(轮数通胀)
- 多发一次续派(continuation)
根因
evaluatedRevisions(src/goal/loop.ts:225 附近)是进程本地 Map,随进程死亡丢失。重启后:
- D-4 门(boot 快照 revision 比较)与新的
evaluatedRevisions 门对「崩溃前已判定的边界»都放行
- 扫描触发的评估重跑 judge →
updateAfterJudge 的 matchesExpected 因 revision 已 bump 而通过 → turns_used +1 且再次续派
触发窗口:崩溃发生在「continue 提交之后、续派的首条 assistant 消息之前」。预存在问题(非 GOAL-FP-01-17 引入的回归)。
修复方向(待设计,勿直接实施)
在 durable goal 行记录「最后已判定的 assistant 消息 id / 边界」,扫描时跳过 last-assistant 不晚于该边界的会话;或等价地持久化 evaluated 边界。
影响
预算统计失真 + 重复续派;不造成功能卡死,故本次止血发布不含此修复。
发现(goal-loop 静默面审计,GOAL-FP-01-17 后续)
进程崩溃后重启时,GoalLoop 的启动扫描可能对崩溃前已评估过的边界再次评估,导致:
turns_used被多计一次(轮数通胀)根因
evaluatedRevisions(src/goal/loop.ts:225附近)是进程本地 Map,随进程死亡丢失。重启后:evaluatedRevisions门对「崩溃前已判定的边界»都放行updateAfterJudge的matchesExpected因 revision 已 bump 而通过 →turns_used+1 且再次续派触发窗口:崩溃发生在「continue 提交之后、续派的首条 assistant 消息之前」。预存在问题(非 GOAL-FP-01-17 引入的回归)。
修复方向(待设计,勿直接实施)
在 durable goal 行记录「最后已判定的 assistant 消息 id / 边界」,扫描时跳过 last-assistant 不晚于该边界的会话;或等价地持久化 evaluated 边界。
影响
预算统计失真 + 重复续派;不造成功能卡死,故本次止血发布不含此修复。