Repository navigation
fix: resolve issue #96 - #97
Conversation
helsome
left a comment
There was a problem hiding this comment.
修复方向与 #96 的两个真实重复路径一致:执行前先占用 occurrence、内存 guard 阻止重叠 tick、持久 claim 让 host 重建后仍可去重;失败 occurrence 明确选择“当天不自动重试”,也避免了偶然的一分钟 retry storm。新增测试覆盖了重启恢复、执行跨 tick、失败不重试和跨 repository instance 的持久 claim,focused tests + typecheck 报告足够验证这个修复。
代码本身批准。当前分支基于较早的 4eca2d1,而 main 已前进到新的提交;这是持久化/调度路径,我不建议直接用旧基线合并。请只 rebase 最新 main,并重跑现有两组 focused tests + typecheck/basic CI 即可,不需要扩大 scope。action_required 是首次贡献者 Actions 授权,不作为质量失败。
helsome
left a comment
There was a problem hiding this comment.
新增持久 claim 存在丢失更新风险。rules-repository.ts 的 claimScheduledOccurrence 与 record 分别对同一文件 read→write,未共享 RMW 串行保护。受控序列:record(A) 读取旧快照后暂停,claim(B) 先写入 B 并返回 true,record(A) 再以旧快照覆盖,B claim 消失;B 执行期间崩溃后重启便可重复执行。JsonFileStore 仅串行最终 rename 不能防止这个覆盖。请让 claim/record 共用 RMW 队列或锁,并补并发与仓库重建后的去重回归。依据源码及受控读写序列模拟,未声称运行了仓库集成测试。
|
Hi @helsome , I've pushed two commits to address the review feedback:
Could you please take another look when you have a chance? Thanks for the review! |
改动说明
修复计划自动化规则在同一计划日期可能重复执行的问题。
ruleId + scheduled occurrence,应用重启后仍可识别已处理任务。claimScheduledOccurrence与record共用按文件串行的读改写队列,防止跨 repository/store 实例的旧快照覆盖持久 claim;失败写入不阻塞后续操作。关联 Issue
Closes #96
测试报告(正式审核前必填)
环境
实际执行命令与结果
实际使用
C:\Users\jackpot\.bun\bin\bun.exe。工作区测试在沙箱外运行,以允许现有测试访问C:\tmp\pi;设置仅作用于测试进程的GIT_CONFIG_COUNT=1、GIT_CONFIG_KEY_0=safe.directory、GIT_CONFIG_VALUE_0=<当前 checkout 的绝对路径>,避免沙箱用户创建仓库导致测试中的git rev-parse HEAD触发 ownership 检查。未修改全局 Git 配置。已知失败 / Baseline(如有)
无。
UI 截图(仅可见 UI 变化时必填)
Before(适用时)
不适用(无可见 UI 变化)。
After(适用时)
不适用(无可见 UI 变化)。
Scope / 后续
本 PR 仅处理计划自动化的同日去重、重启恢复与并发执行保护;不修改自动化规则配置、手动执行行为或 UI。