P72（角色行走四向 8 帧：6 走 + 2 待机）证据分析 — 真实 Desktop xvfb 1280x720 正午
钩子：LV_AUTOPLAY_SAMPLE=1 LV_AUTOPLAY_RECORD=1 LV_P72_LOG=1 LV_AUTOPLAY_START_HOUR=12 LV_LEGACY_MAP=1
路径：world.Tick → rhythmFor → animationFrame((tick/4)%6) → characterSourceRectangle(*8 格) → drawCharacter

recorded frames: 41
distinct walk frames observed: ['FrameFive', 'FrameFour', 'FrameOne', 'FrameSix', 'FrameThree', 'FrameTwo']
walk frame exemplars: FrameFive=p72-walk-0492.png(npc0), FrameFour=p72-walk-0264.png(npc0), FrameOne=p72-walk-0276.png(npc0), FrameSix=p72-walk-0132.png(npc0), FrameThree=p72-walk-0120.png(npc0), FrameTwo=p72-walk-0132.png(npc1)
npcs with observed displacement: 30
npc0 distinct frames: ['FrameFive', 'FrameFour', 'FrameOne', 'FrameSix', 'FrameThree']

p72-walk-0276.png: size=1280x720 mean=87.2 std=34.8 dark_block=0 white_block=20
p72-walk-0132.png: size=1280x720 mean=118.5 std=54.2 dark_block=0 white_block=52
p72-walk-0120.png: size=1280x720 mean=87.1 std=34.5 dark_block=0 white_block=32
p72-walk-0264.png: size=1280x720 mean=87.1 std=34.9 dark_block=0 white_block=32
p72-walk-0492.png: size=1280x720 mean=87.3 std=34.9 dark_block=0 white_block=26

diff p72-walk-0276.png vs p72-walk-0132.png: differing_pixels=905924
diff p72-walk-0276.png vs p72-walk-0120.png: differing_pixels=313725
diff p72-walk-0276.png vs p72-walk-0264.png: differing_pixels=242017
diff p72-walk-0276.png vs p72-walk-0492.png: differing_pixels=294080
diff p72-walk-0132.png vs p72-walk-0120.png: differing_pixels=906006
diff p72-walk-0132.png vs p72-walk-0264.png: differing_pixels=905936
diff p72-walk-0132.png vs p72-walk-0492.png: differing_pixels=905931
diff p72-walk-0120.png vs p72-walk-0264.png: differing_pixels=306092
diff p72-walk-0120.png vs p72-walk-0492.png: differing_pixels=241732
diff p72-walk-0264.png vs p72-walk-0492.png: differing_pixels=276242

verdict=PASS
  all 6 walk frames exercised; npc0 moved through >=4 frames;
  exemplar frames render 1280x720, no white/black blocks, and differ pairwise.
