R06 ENGINE RELEASE AUDIT

Final Z80 binary: f495550364366cacfc2745b1d3dbc0104ca1ed7a6cd466c2dac835282de008fd
Final engine.c: 13bcd7015e69e91aecd55d855f0d14d451e1f0355bc0324ad284ac8a2966b475
Original 6502: ef172340c457224eaa1cb425b417dfc2b72916312b3ff681c3d8d49a12c65898

PASS: all 140 playable caves in all five difficulties (700 combinations).
Each case independently generates the cave, runs up to 64 deterministic input
ticks, then completes a death sequence and tests eight ticks after restarting.
There are 48,321 gameplay ticks compared to the original 6502 and another
48,321 executed by the final compiled Z80, with no state copying between ticks.
228 traces reached death naturally; 472 use the normal suicide key after the
bounded trace. These are coverage traces, not solutions to all 140 levels.
700 native trace hashes also match the corresponding original/C trace hashes.

100 next-cave/difficulty transitions cover all 20 cave indexes and five levels.
200 explicitly synthetic terminal fixtures cover 100 successful exits and
100 timeouts, including bonus caves and difficulty rollover. The controlled
exit state tests score bonus/life awards, including the original cave-P quirk.
Last-life game over and new-game reset pass. Native pause/resume and disabled
pause on a bonus cave pass; original blocking pause UI is outside that fixture.

REAL BUG FOUND AND FIXED
The all-cave native gate found ArnoDash01/M/difficulty1 diverging at tick8.
For amoeba interval0, sccz80 evaluated ++unsigned_char as256 when255 wrapped
to0, so the comparison incorrectly suppressed amoeba growth. The minimal fix
separates increment from comparison, forcing the stored byte to be reloaded.
The pre-fix failure is retained under pre_fix/. A two-CPU-core isolated probe
reproduces the failure and the correction. See amoeba_overflow_regression.json
and ../reproduce_amoeba_overflow.py. Other increment/decrement comparisons were
audited: push, timeout, diamond and death counters do not wrap in their tested
conditions. No broad refactor was made.

EQUIVALENCE AND EXACT BUILD PROVENANCE
The completed 6502/C report uses pre-fix source0d0dc0a5. Compiling the corrected
source with the same GCC command produces the exact same shared-object bytes:
d80a2c130ba6630423c7d1deacd46a80ce9a478bbebc3f38250831ed3db2ef35.
The split has no effect on correct C semantics. The final Z80 all-cave and
terminal tests use f4955503, not the failed61533f43 binary. The extra redundant
6502 rerun was stopped after600+ cases at the parent's request; its partial log
does not replace the completed 700-case report.

HEADLESS TEST LIMITS
Original drawing/status formatting are stubbed. The drawing stub preserves
carry as the real draw_grid does. The completed initial dissolve is represented
by clearing its hide bits and selecting tick255. Original amoeba_can_grow is
scratch cleared at gameplay_loop entry, so it is checked after each tick rather
than before the first. Slime resets seed1 before use; persistent seed2 is checked.
The CPU fixture does not test bank loading, renderer, audio ISR or real-time
pacing. Those have independent native Fuse integration reports. Full campaigns,
all possible input paths and physical hardware have not been tested.

REPRODUCE (from project root; requires GCC, py65 and SkoolKit)
gcc -std=c89 -Wall -Wextra -Werror -O2 -fPIC -shared -Dstatic= tests/release_r06/reference/engine.c -o tests/release_r06/engine_test.so
python tests/test_engine_release.py --ticks 64 --workers 4
python tests/test_engine_native_release.py
python tests/test_engine_events_release.py
python tests/reproduce_amoeba_overflow.py

The reference/ directory freezes final engine source and full game binary/map.
The binary is loaded at25088 by the CPU fixture. No per-case64K dumps are stored.
The report engine_all_caves.json contains deterministic key sequences and map
trace hashes, so the bounded gameplay can be reproduced exactly.
