Skip to content

fix: 连胜计数器被每日任务刷新时不再误判为已签到 - #69

Open
wayner6 wants to merge 1 commit into
chiihero:V4-chinafrom
wayner6:pr/checkin-false-skip
Open

wayner6 wants to merge 1 commit into
chiihero:V4-chinafrom
wayner6:pr/checkin-false-skip

Conversation

@wayner6

@wayner6 wayner6 commented Nov 5, 2026

Copy link
Copy Markdown

问题

升级到 v4.3.3 后,每日签到每天都会被跳过、拿不到积分,日志显示"今日已签到",但实际上当天并没有签过。

实际日志(中国区,2026-11-04,当天第一次运行):

12:43:13 [DAILY-SET] 开始解决"每日任务"项目 | remaining=3
12:44:12 [URL-REWARD] UrlReward 完成 | offerId=Gamification_DailySet_ZHCN_20261104_Child3 | pointsGained=10 | currentBalance=11664
12:46:18 [DAILY-CHECK-IN] 今日已签到,跳过重复请求 | updatedAt=2026-11-04T04:44:12.6540000+00:00 | currentBalance=11664

updatedAt 正好是第 3 个每日任务完成的时间(04:44:12Z,即北京时间 12:44:12),余额也只涨了每日任务的 30 分。对比 v4.3.2.4,同一个账号 10-21 到 11-03 每天签到都能拿到 5~50 分。

原因

8ae6df5 在 resolveCheckInState 里把 Gamification_Streak_Counter_Promotion.last_updated == 今天 也当作"已签到"。但连胜计数器在完成每日任务等活动时也会刷新,而 Main 里每日任务排在签到前面执行,所以每天签到前它都已经是今天的时间,签到就被误判跳过了。

我这个账号的签到推广本身和测试 fixture 里的 recordedLegacy 一样,是 hidden、时间戳停在旧日期的状态(App: 未知)。所以签到前能被判定成"已签"的唯一依据就是连胜计数器,问题因此每天必现。

改动

  • CheckInState.ts:resolveCheckInState 新增 trustStreak 参数,默认 false。签到前只按签到推广自身的 last_updated 判断;判断不出来就返回 unknown,照常发签到请求。
  • DailyCheckIn.ts:签到请求后积分没有增加时,做"到账确认"仍然传 trustStreak = true。这样同一天重复运行会走到"已确认今日签到,本次无新增积分",不会报错。
  • BrowserFunc.getAppEarnablePoints 用的是默认值,所以 App 可赚积分里的签到项也不会再因为连胜计数器被提前算成 0。

代价是同一天第二次运行时会多发一次签到请求,返回 0 分。这在 v4.3.2.4 时也是如此,没有副作用。

测试

  • 原来基于"连胜计数器 = 已签到"语义的 4 条用例,改用签到推广自身的今日时间戳构造"已签到"
  • 新增 streak updated today by other activities is not a check-in / streak alone is not a check-in
  • 新增 streak refreshed by the daily set still submits the check-in and credits it:复现上面的场景,确认会发请求并计分
  • 新增 a repeated check-in with zero gain is confirmed by the streak record:确认重复签到不会误报失败
  • checkInState.test.cjs + checkInFlow.test.cjs 共 47 条全部通过;tsc 与 eslint 通过
  • 实跑(2026-11-05,同一账号,先完成每日任务再签到):开始每日签到 | state=unknown → 每日签到完成 | type=103 | pointsGained=5

另外说明:scripts/api 下 logParser / workerGaps 有 8 条用例在 V4-china 上本来就是失败的,和这个 PR 无关,我没有改。

🤖 Generated with Claude Code

Gamification_Streak_Counter_Promotion 的 last_updated 会在完成每日任务等
活动时刷新到今天,而每日任务先于签到执行,导致 v4.3.3 起签到每天被误跳过。

- resolveCheckInState 新增 trustStreak 参数(默认 false),签到前只依据
  签到推广自身的 last_updated 判断是否已签
- 签到请求后零增量的到账确认仍以连胜计数器为佐证
- 更新对应测试,并新增"每日任务刷新连胜后仍签到"与"重复签到零增量被确认"用例

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant