Skip to content

time-relative sweep 非幂等:每次扫描对同一记录重复铸行(5s interval 下 70 秒 15 条重复提醒),需要落库幂等键 #10220

Description

@os-zhuang

现象(P1:time-relative 扫描非幂等——每次扫描对同一记录重复铸行)

2026-08-20 rig 实测(objectstack 4389fe932#8362 的重绑修复已验证 OK):contract_expiry_remindertimeRelative:{object:'contract', dateField:'due_date', offsetDays:[3]} → create_record 建提醒)在把 start 节点 schedule 改为 5 秒 interval 后:

  • 第一次扫描:精确命中 T+3 的那份合同,创建 1 条提醒 ✅(匹配语义、模板插值、lookup 全对)
  • 之后每次扫描再铸一条一模一样的:~70 秒内同一份合同累计 15 条重复提醒

扫描本身没有任何"本窗口已处理过该记录"的记忆。5s interval 是放大镜,不是前提——日频 cron 下同样会重复:

  1. kernel 被驱逐重建后当天再次扫描(云环境驱逐是常态:freshness probe ~10s,每次 AI auto-publish 都 bump);
  2. flow 声明了更密的 schedule(spec 允许 start 节点自带 schedule/interval);
  3. 未来若做"错过窗口的 catch-up sweep"(cloud#1288 的方向),没有幂等键就根本不敢做。

对用户可见的后果:提醒列表被同一合同刷屏;若 flow 动作是发通知/邮件则是重复打扰。2026-08-13 的运行同样观察到(16→20 行),当时随 #8362 口头提及、未单独立案。

修复要求

  1. 给 time-relative sweep 引入幂等键:(flowName, recordId, dateField 值所在窗口日, offset) 唯一——已为该键执行过就跳过。落点可以是 sys_automation_run 查询或专用去重表;
  2. 幂等记录要能在 kernel 重建后存活(进程内 Set 不够,必须落库);
  3. 回归测试:同一窗口内连续两次 sweep,断言目标动作只执行一次;kernel 重建后同窗口再 sweep,仍不重复。

关联:#8362(重绑修复,已验证);cloud#1288(云端定时任务架构——catch-up sweep 依赖本 issue)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions