Repository navigation
1.2.3
这次是真凶:记录被「还没恢复的默认值」覆盖了。
调试日志里看得很清楚:md 记录被改写成 0,而且一个「套用」都没发生过 —— 两件事合起来只有一个解释。
原因(我 1.2.0 埋的雷)
那一拍判定「该恢复了,但用户正在操作」,于是标记为「交还给你」,然后没有 return,顺手按实况记了一笔。可那一刻的实况通常不是你的位置,而是「这个视图还没恢复」的默认值 —— 于是它把正要恢复的那个记录覆盖成了 0,而「已交还」标记又让插件此后再也不尝试恢复。静默、永久地丢数据。
改法
- 「用户正在操作」那一拍改成直接跳过:不套用,也不记录。
- 判断「用户在动」改用真正的证据:本视图就绪以来实况自己动过没有(按视图记账,粘性)。原来用的是「800ms 内有没有输入」—— 既会漏(tick 间隔 1 秒比它还长),又会误伤(点一下设置页也算操作)。
- 再加一道保险:记录与实况不同、又还没成功套用过、实况也没动过时,绝不用实况覆盖记录;等恢复不再可能(总开关关掉 / 已交还 / 恢复窗口过了)才如实跟随实况。
- 顺带修了两条测试场景本身不忠实的用例(用静止的实况来模拟「用户在滚」,引擎根本看不到这种「动」)。
回归
165 → 172 项。验红:把结构退回旧版「else-if 链 + 无条件捕获」,会精确复现症状 —— 记录被写成 0、窗口过后也不再恢复;换回修复后全绿。
上一版加的调试日志与「当前状态」面板这次直接立了功:日志里「记录被改成 0」和「没有任何套用记录」这两条,是定位真凶的关键。