Files
Shuery 8ad177c822 docs: 优化工作台的 spec 与 6 个实施 issue(.scratch/wallpaper-optimization/)
按本仓 issue-tracker 约定落盘:spec.md 记决策与验收,issues/NN-*.md 一步一票。
01 已完成,02-06 待做。
2026-09-19 19:27:47 +08:00

1.3 KiB
Raw Permalink Blame History

03 健壮性:初始化状态机、死代码、用户级覆盖语义

Status: ready-for-agent

问题

  1. 初始化竞态(已实证):SpineController.changeConfig() 整个函数体都在 if (this.player) 里, 包括状态赋值。WE 可能在 window.load 之前就下发用户属性,此时预设被静默丢弃: 同一份代码、同一份属性,load 之后下发得到 animation(kv37,正确), DOMContentLoaded 时下发得到 idle(xilian)——背景与音乐已切到 kv37、立绘还是昔涟。 修法:状态先写、应用后置;changeX() 无条件更新状态,只在有 player 时应用,加载完成时统一应用一次。
  2. index.js 里有一段重复的 window.wallpaperRegisterListener(该 API 在本机 WE 不存在),是死代码。
  3. SpineController.adjustCanvas() 与播放器自身的 resize 重复,且用 getBoundingClientRect() 写 canvas.width 而未乘 DPR。
  4. 用户级覆盖语义:用户自定义了音源/音量后,切换预设不得把它清回预设默认值。

验收

  • 把"属性在 DOMContentLoaded 下发"这一路作为回归断言:玩家实际使用的动画必须与所选预设一致。
  • 死代码与重复 resize 移除后,对拍仍无回归。
  • 同一份预设往返切换 20 次,用户自定义音源/音量保持不变。