011 反射便 — 検証記録 (2026-10-02 UTC)

PASS: python -m unittest -v — 20 tests, pure model and mocked input/render states.
PASS: 0.25-degree full-circle sweeps; B/C direct routes blocked; each level has >=3-degree successful interval.
PASS: reflection normal sign/speed, remaining distance, thin wall, exact wall/target tie, deterministic corner, 2-bounce cap, finite input rejection, fixed-step agreement.
PASS: idle state, pause including resume+Space edge, recall without refire, undo/restart, all Japanese draw states; held-start, held aiming rates, same-edge reset/next-level safety.
PASS: UTF-8 resource reads under simulated cp932 default, Japanese and spaced path, arbitrary cwd; ASCII quoted BAT with error pause.
PASS: actual Pyxel 2.9.9 headless render PNGs; automatic silent H.264 MP4 23.966667 seconds, 719 frames at 30 fps. Source hashes in media/replay.json.
PASS: B/C success images visually inspected for readable UI, target/trace/wall distinction.

One-change experiment: baseline hides the previous trace; default shows it. Same B shot, same physics, no timing or target change between these two variants. JSON and paired actual-render PNGs are included.

NOT TESTED: actual Windows SDL GUI, human enjoyment, human aiming comfort. Mocked input tests and the geometry solver are not human playtest evidence.
PASS: native Linux GUI via cloud CUA, 2026-10-02 17:54–17:56 UTC.
Held Space 500ms on title entered gameplay without firing (attempts 0).
Space launched; P paused mid-flight. Space held during pause left envelope position and attempt count unchanged. P resumed; A direct delivery succeeded.
Held N 500ms entered B without firing. B direct shot visibly stopped at wall. Left 800ms set -48 degrees; Up 200ms fine-adjusted to -50.4 degrees; upper-bank delivery succeeded.
C: Left 267ms set -16 degrees. Separate Space presses launched then recalled (attempts remained 1); another Space launched attempt 2 and the right-bank route delivered.
Held R 500ms reset C to angle 0 and attempts 0. Escape closed game; fresh window inventory confirmed absence.
Native B/C success PNGs: media/native_B_success.png, media/native_C_success.png. These were captured by F12 in the actual interactive process.
This was agent-operated technical QA, not a human enjoyment evaluation. No native Windows or audio-output quality claim.

Independent timing correction: original GIF has 719 frames at quantized 30ms (21.57s). MP4 preserves each frame once at the model's 30Hz (23.966667s). This is a headless actual-render automatic demo, not a wall-clock screen recording. No model/app changes.

Final demo-caption correction, 2026-10-02 UTC: moved only the automatic/silent caption from y=317 to y=315. All glyph pixels now fit the 328-pixel framebuffer. Model and normal interactive UI/input are unchanged. The automatic demo GIF, MP4 and runtime PNGs were regenerated with the new app hash; event streams are identical, and screenshot pixel differences are confined to the caption. Native input evidence predates this demo-only change. Core tests and main/demo text bounds were rechecked after the correction.
