You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
privateasyncwriteRecoveringSummary(fn: ()=>Promise<T>): Promise<T>{try{returnawaitfn();}catch(e: any){if(e?.code==='ERR_SUMMARY_RECOMPUTE'){this.logger.warn('[SeedLoader] roll-up summary recompute failed after retries; records were written (summary values may be stale)',{failures: Array.isArray(e.failures) ? e.failures.length : undefined},);returne.writtenasT;}throwe;}}
发现于 #4729(seed-loader 的日志级别盘点)。本条不在 #4729 的判据(「计数为错、日志为 warn」)内 —— 它压根不计数 —— 所以只记录,不在那个 PR 里动。
现象
packages/metadata-protocol/src/seed-loader.ts的writeRecoveringSummary():行本身的判断是对的(framework#3147:记录确实写进去了,不能重写,否则重复)。有疑问的是后果的等级:roll-up summary 是一列已持久化的派生值,重算耗尽重试后,库里存着的汇总数与被汇总的明细不一致,而:
errored不动、allErrors不动),result.success仍是true;warn。判定问句(#4632 / AGENTS.md「Degradation log levels」)
我的读法是 是:一切看起来干净(
success: true,行数全对),而一列已落盘的汇总值是错的,并且不会自己修 —— 直到下一次触发该 summary 重算的写入才可能纠正,而 seed 之后未必还有这种写入。这正是 #4420 的形态(那次是 in-flight approvals,这次是汇总列)。反方也有分量,所以我不想擅自改:
error会让一次除汇总外全部成功的 seed 打出 error 行,可能属于 AGENTS.md 明确警告的「过度适用」(把人训练成跳过 error);summariesStale计数或一条ReferenceResolutionError),让结果对象诚实,日志维持warn。期望(需要维护者拍板)
在下面三条里选一条并落地 + 加测试:
error,文案说清后果(<object>的 roll-up summary 列现在是陈旧值,明细与汇总不一致,而 seed 报告 success)与修复动作(修掉下面的重算错误后重跑 seed / 触发一次该对象的写入以重算);warn,但计入结果对象(新增计数字段),让调用方能发现;我的倾向是 A + B:后果确实是「已落盘的数据不对」,而且计数与日志级别应当一致(#4729 的同一条论点)。但这会改变一次成功 seed 的控制台输出,属于产品口径,不该由实现方顺手决定。
未认领。