v2 素材修复记录
===============

确认的问题
----------
用户截图中的腹部“破图”来自原始精灵图的 alpha 透明度，
不是桌面背景、窗口缩放或 BGRA 转换造成的。

第 4 行（从 0 开始计数）的欢呼／抓起动画存在：
1. 第 1、2、3 帧上腹部、牙齿的部分像素误设为半透明，
   深色或有纹理的桌面会透出来。
2. 五个活动帧脚下残留浅白色地面，在非白色桌面上呈现白色底座。

原始图与转换校验
----------------
文件：source/assets/naifrog-sheet.webp
尺寸：1536 × 2080；每格 192 × 208；8 列、10 行。
原始 SHA-256：
1894f14033d706849411bc41880f053c965a8260718502ce82e855111662f710

原始 WebP 按原字节保存，没有覆盖或重新编码。
原版 BGRA 与原图逐像素预乘转换一致，缺陷存在于原始 alpha。
检查了全部活动帧，没有发现明显的格子边缘裁切。
其余九行动画没有同等程度的内部透明破洞，未作批量修改。

修复范围
--------
• 只修改第 4 行五个活动帧的特定 alpha 值。
• 恢复 730 个上腹部／牙齿内部不透明像素。
• 清除 3,566 个脚下浅白色地面残留像素。
• 不改任何 RGB 颜色，不补画角色，不重绘、锐化或更换外观。
• 保留真实腿间空隙、脚部颜色和外轮廓边缘透明度。
• 其他九行动画和第 4 行未使用三格保持逐像素一致。

每帧变更（帧号从 0 开始）：
  帧号    清除地面像素    恢复内部 alpha 像素
    0          585                    0
    1          669                  175
    2          716                  327
    3          712                  228
    4          884                    0
  合计        3566                  730

输出与复现
----------
source/scripts/repair_assets.py      有边界的确定性修复算法
source/scripts/prepare_assets.py     离线派生资源生成入口
source/assets/sprite-fixed.png       修复后的无损 RGBA 精灵图
source/assets/sprite.bgra            主程序使用的预乘 BGRA
source/assets/repair-report.json     机器可读变更计数
source/tests/test_asset_repairs.py   素材回归测试

在 source 目录且 Python 3 / Pillow 可用时运行：
  python scripts\prepare_assets.py
  python tests\test_asset_repairs.py

重建首先校验原始 SHA-256；若上游图改变，必须重新审查修复掩膜，
避免把当前规则盲目套用到另一套角色图上。

验证
----
已实际完成 5 项无窗口素材回归测试：
1. 原始 WebP SHA-256 不变。
2. RGB 与非目标区域不变。
3. 已知腹部透明缺陷消除，地面残留透明，真实腿间空隙保留。
4. 预生成 PNG／BGRA 与修复算法逐字节匹配。
5. 全部活动帧的格子边缘无明显裁切。

已查看深色、白色、棋盘格背景的修复前后对比，
以及五个修复帧在 156 像素高度下的效果。
这些离线像素检查不等同于真实 Windows 桌面 GUI 交互测试。

动画素材说明
------------
原配置 grab（抓起）与 cheer（欢呼）共用第 4 行，
没有独立“挣扎”原画；新版结合原动画与程序摆动表现拖起挣扎。
睡觉行最后两帧为醒来姿态；持续睡眠使用原有困倦帧，
不会在每次循环都表现成醒来。
