"""Keep declared fixture writes outside the native puck projection's live divide.
The immutable gameplay hook and all post-setup physics/criteria stay unchanged.
This is a headless fixture protocol; no cartridge bytes or outcomes are changed.
"""
def coherent_fixture_source(source):
 return source+'''
_immutable_fixture_tick=test_tick
_fixture_setup_deferred=[]
_fixture_setup_applied=[]
def test_tick(f):
 if 100<=f<=108:
  import struct
  n=core.retro_serialize_size();buf=C.create_string_buffer(n)
  assert core.retro_serialize(buf,n) and buf.raw.startswith(b'GENPLUS-GX 1.7.6'),'unverified fixture PC ABI'
  pc=struct.unpack_from('<I',buf.raw,144468)[0]
  if 0x10370<=pc<0x10390 and rw(0xb774)!=0:
   _fixture_setup_deferred.append(dict(frame=f,pc=hex(pc),vy=rw(0xb774)))
   (Path(outdir)/'setup-readiness.json').write_text(json.dumps(dict(deferred=_fixture_setup_deferred,applied=_fixture_setup_applied),indent=2))
   return
  _fixture_setup_applied.append(f)
  (Path(outdir)/'setup-readiness.json').write_text(json.dumps(dict(deferred=_fixture_setup_deferred,applied=_fixture_setup_applied),indent=2))
 if f==109:assert len(_fixture_setup_applied)>=3 and _fixture_setup_applied[-1]>=107,('insufficient coherent fixture setup',_fixture_setup_deferred,_fixture_setup_applied)
 _immutable_fixture_tick(f)
'''
