Skip to content

重试策略在仓里有三份形状、两种拼法:#4661 收敛了共享同一导出名的两份,flow.errorHandling 是匿名内联块,检查照不到它 #4964

Description

@xuyushun441-sys

发现于 #4001 批 11 的载荷普查(为 Flow.errorHandling 的 alias 表找经验依据时撞到),不在该批范围内,未修 —— 批 11 只是把 backoffMs 加进了拒绝信息的 alias 表,没有动任何一边的键。

事实

同一个「指数退避重试」概念,仓里有三份声明:

形状 基础延迟的拼法 其余键
shared/retry-policy.zod.ts RetryPolicySchemajob.retryPolicy + try_catch 节点的 retry backoffMs maxRetries backoffMultiplier maxRetryDelayMs jitter
automation/flow.zod.ts Flow.errorHandling(内联匿名块) retryDelayMs maxRetries backoffMultiplier maxRetryDelayMs jitter + strategy
integration/connector.zod.ts RetryConfigSchema initialDelayMs maxAttempts maxDelayMs backoffMultiplier

前两份的键集除了那一个词以外完全相同。而 #4661 的整件事就是消除这一个词的分歧:它把 retryDelayMsretiredKey() 立了墓碑,处方写着

the retry policy now has one spelling for its base delay across job.retryPolicy and a try_catch node's retry

—— 注意这句话自己就把范围划在两处。第三处(flow 级 errorHandling)没有被收编,今天仍然只认 retryDelayMs

为什么它逃掉了

#4661 出自 #4535 C8「dual-source」簇,判据是两个入口发布了同一个导出名./automation./system 各有一个 RetryPolicy,即 #4411 陷阱)。Flow.errorHandlingFlowSchema 里的一个内联匿名 z.object,没有导出名,所以按构造就不在 dual-source 检查的视野里。

这是本战役第三类发现(「仪器谎报覆盖度」)的一个新变体:仪器没坏,它精确回答了自己被问的那个问题(「同名导出有几份」),而那个问题不是「同一概念有几份形状」。收敛做完之后,留下的那份分歧读起来像是被审视过并保留的。

对作者的实际代价(批 11 前是静默的)

一个作者先读了较新的 shared/retry-policy.zod.ts(那里 retryDelayMs 有墓碑、明确告诉他改用 backoffMs),然后在 flow 上写 errorHandling: { strategy: 'retry', maxRetries: 3, backoffMs: 5000 }

  • 批 11 之前backoffMs 被静默剥离,retryDelayMs 落到默认 1000ms —— 退避是他写的 1/5,无任何提示;
  • 批 11 之后:拒绝,并点名 `backoffMs` → `retryDelayMs`

即:照着仓里较新的文件学,会在另一个文件里拿到相反的答案,而这正是 AI 作者最容易复现的路径(它读到哪个文件是随机的)。

待裁定的是方向,不是要不要做

两条路都自洽,代价不同,请维护者定:

倾向 A,两条判据同向:长远上它是 #4661 未做完的后半段(该 PR 自己的论证「both drive delay = base * multiplier^(n-1),两个 executor 实现的是同一个公式」对第三份同样成立);防 AI 犯错上,别名表只在拒绝时帮忙,而收编让这个错根本无法被写出来——声明即强制,好过消费端宽容。但这是 breaking + 窗口敏感,由维护者定。

顺带:connector.RetryConfigmaxAttempts 不能并进去当同义词 —— 它含首次尝试,maxRetries 不含,直接改名会静默少跑一次。批 11 已经把这条差一位写进 guidance 而没有给 rename,任何收编都要保留这个区分。

相关

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions