Repository navigation
Conversation
…由 30 秒轮询触发一次,本轮账号在窗口内各自取一个确定性偏移依次执行;对上游呈现的是散在窗口里的逐个请求,而不是每天同一分钟的一串。偏移用 sha256(条目 id | 日期 | 时刻 | N | 账号 id) 派生,同一天重试落在同一时刻,面板「下次执行」与真实行为一致 2. 新增:「启动补签」全局开关(缺省开 = 保持改造前行为)—— 关掉后启动只起调度循环,今天未执行的条目等到各自窗口起点再由调度触发,避免早上开机把当天的随机窗口提前签掉 3. 优化:随机窗口的铺开走后台任务而非在 tick 里 await —— 窗口最长 4 小时,占住 tick 会延后其他条目,占住全局执行锁会拒掉所有手动签到;后台任务只在每个账号执行的几秒里抢锁,账号之间的等待全程在锁外,按墙上时钟分段重算(休眠 / 改时钟都能自愈) 4. 优化:`run_checkin` 抽出 `run_account` 与 `summarize_results`,定时铺开与批量路径共用同一段记账(落 checkinAt、签到记录台账、汇总口径),不存在两套行为;`run_checkin` 签名不变,手动路径零改动 5. 修复:随机窗口铺开的时间起点由「这一轮的日期」推出而不是「此刻的日期」—— 23:5x 的窗口跨过零点时,用现在的时间会算出次日同一分钟,所有账号要白睡约 24 小时 6. 修复(自审):铺开任务的目标解析与计划前移到 spawn 之前 —— 解析失败时能回退 `lastFiredDate` 并让下个 tick 重试,此前是一次偶发失败就让这条条目整天静默;账号集合也在 spawn 时定格,后台跑 4 小时期间账号增删不再让计划中途变形 7. 修复(自审):`spreads` 的 key 改由 `SpreadGuard` 的 Drop 清理 —— 正常结束 / 提前 return / 后台任务被 abort 三种出口都覆盖;此前只在正常路径手写清理,一次异常就让这条条目当天永久不再重试 8. 修复(自审):`acquire_running` 加 10 分钟上限 —— 另一轮签到若卡死在上游,无限等待会让铺开任务永久挂住、key 永不释放;到点如实跳过剩余账号 9. 修复(自审):本轮被提前截断(停机 / 等锁超时)时不落 `lastFiredDate` —— 剩下的账号今天还一次没签,落账会把它们整天静默掉;已签过的重试幂等 10. 修复(自审):`jitterMinutes` 的写入校验拒绝 `1e3` / 十六进制 / 前后空格等 `Number()` 会放过的写法;`submit` 加 `canSave` 守卫,回车与程序化点击也挡得住 11. 新增:19 个纯函数单测(窗口边界夹取、偏移确定性/范围/分散、触发判定、字段往返)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
这个 PR 做了什么
给定时签到加「随机前后 N 分钟」,让每天的签到不再固定在同一分钟打上游;并加一个全局开关控制开机是否立即补签。
jitterMinutes(0–120,缺省 0 = 行为不变)。窗口 =[时刻-N, 时刻+N],夹到当天00:00–23:59。窗口起点由现有 30 秒轮询触发一次。sha256(条目 id | 日期 | 时刻 | N | 账号 id)确定性派生 —— 同一天重试落在同一时刻,面板「下次执行」与真实行为一致,不需要额外的随机数状态。autoCheckin.startupCatchUp,缺省true(= 改造前行为)。关掉后启动只起调度循环,今天未执行的条目等到各自窗口起点再签,避免早上开机把当天的随机窗口提前签掉。为什么这么设计
nextRunAt与真实执行时刻能对上,同一天重试也不会换时间。run_checkin抽出run_account/summarize_results:定时铺开与批量路径共用同一段记账(落checkinAt、签到记录台账、汇总口径),不存在两套行为;run_checkin签名不变,手动路径零改动。手动签到(批量 / 单账号 / 条目「立即执行」)不铺开。自审时修掉的问题
lastFiredDate让下个 tick 重试,账号集合也在 spawn 时定格。spreads的 key 改由SpreadGuard的 Drop 清理,正常结束 / 提前 return / 后台任务被 abort 三种出口都覆盖。acquire_running加 10 分钟上限:另一轮签到若卡死在上游,无限等待会让铺开任务永久挂住、key 永不释放。lastFiredDate:剩下的账号今天还一次没签,落账会把它们整天静默掉。jitterMinutes的写入校验拒绝1e3/ 十六进制 / 前后空格等Number()会放过的写法;前端submit加canSave守卫。验证
cargo test -p agent2api-server:688 passed / 0 failed(含 19 个新增纯函数单测:窗口边界夹取、偏移确定性 / 范围 / 分散、触发判定、字段往返)cargo check --all-targets通过node desktop-tauri/i18n/scan.mjs --check:所有语言的所有域无缺失键jitterMinutes时保留旧值、20 个账号在 180 分钟窗口内分散执行;截图确认「随机前后」数字输入与「启动补签」开关渲染正常兼容性
jitterMinutes缺省 0,存量配置行为完全不变(窗口就是时刻本身)。scan.mjs→build.mjs→ui-islands build重新生成并入库。🤖 本条回复由 AI Agent 生成