Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
30 lines
3.4 KiB
Python
30 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Adapt archived reviewed helpers into scratch only; never launch or write target."""
|
|
from pathlib import Path
|
|
import ast,hashlib,json,shlex
|
|
HERE=Path(__file__).resolve().parent
|
|
ROOT=Path('/home/jakub/devel/escapistsrereintroduced')
|
|
SOURCE=ROOT/'docs/evidence/source-refresh-2026-10-02-gameplay-fixes/package-helpers'
|
|
def sha(p):return hashlib.sha256(p.read_bytes()).hexdigest()
|
|
def adapt(s):
|
|
for old,new in [('gameplay-fixes','transfer-fixes'),('/tmp/erri-playtest-1631','/tmp/erri-playtest-1844'),('/tmp/erri-package-prep-1631','/tmp/erri-package-prep-1844')]:s=s.replace(old,new)
|
|
assert not any(x in s for x in ['gameplay-fixes','1631','1349','hq-memory'])
|
|
return s
|
|
for name in ['assemble.py','verify.py','preflight.py']:
|
|
s=adapt((SOURCE/name).read_text());ast.parse(s);(HERE/name).write_text(s)
|
|
c=json.loads(adapt((SOURCE/'config.json').read_text()));(HERE/'config.json').write_text(json.dumps(c,indent=2)+'\n')
|
|
f=Path(c['frozen_root']);base=['--compat',c['compat'],'--external-addons',c['external_addons']]
|
|
commands=[
|
|
{'purpose':'FILES ONLY: create fresh source ZIP from frozen root; skip if already created and exact independently verified; never overwrite','argv':['python3',str(f/'tools/source_bundle.py'),'--mode','development','--output',c['source_zip']]},
|
|
{'purpose':'READ ONLY: require complete fresh frozen suite and same-source normal evidence','argv':['python3',str(HERE/'preflight.py')]},
|
|
{'purpose':'READ ONLY: inspect host-visible game/prefix state under approved escalation before native; leave any existing game untouched','argv':['python3',str(f/'tools/headless_game.py'),'--compat',c['compat'],'--inspect-processes']},
|
|
{'purpose':'NATIVE ONLY AFTER PARENT APPROVAL/IDLE: bounded hidden muted pack; retain strict exit/report','argv':['python3',str(f/'tools/native_package.py'),'--project','core','--session',c['package_session'],*base,'--timeout','300'],'stdout_stderr_log':c['package_log']},
|
|
{'purpose':'FILES: verify exact authored/PAK/ZIP/normal/suite bindings before creating fresh handoff','argv':['python3',str(HERE/'assemble.py')]},
|
|
{'purpose':'READ ONLY: inspect host-visible game/prefix state again','argv':['python3',str(f/'tools/headless_game.py'),'--compat',c['compat'],'--inspect-processes']},
|
|
{'purpose':'NATIVE ONLY AFTER PARENT APPROVAL/IDLE: ordinary packed startup; no smoke, input or flight','argv':['python3',str(f/'tools/headless_game.py'),'--project','chat','--packed-addons',c['build']+'/packages','--packed-session',c['packed_session'],*base,'--timeout','180','--failure-grace','120'],'stdout_stderr_log':c['packed_log']},
|
|
{'purpose':'FILES: independently recompute raw packed evidence; retain expected installed-error strict failure','argv':['python3',str(HERE/'verify.py')]}]
|
|
(HERE/'commands.json').write_text(json.dumps(commands,indent=2)+'\n')
|
|
(HERE/'commands.txt').write_text('\n\n'.join('# '+x['purpose']+'\n'+shlex.join(x['argv'])+(' > '+shlex.quote(x['stdout_stderr_log'])+' 2>&1' if 'stdout_stderr_log' in x else '') for x in commands)+'\n')
|
|
(HERE/'template-provenance.json').write_text(json.dumps({'templates':{str(SOURCE/n):sha(SOURCE/n) for n in ['assemble.py','verify.py','preflight.py','config.json']},'generated':{n:sha(HERE/n) for n in ['assemble.py','verify.py','preflight.py','commands.json','commands.txt','config.json','emit.py']},'native_executed':False,'target_writes':False,'input_qualification_pending':True},indent=2)+'\n')
|
|
print('Scratch helpers emitted; no target edits/native/checks executed.')
|