Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
30 lines
4.2 KiB
Python
30 lines
4.2 KiB
Python
from pathlib import Path
|
|
import ast,json,hashlib,shlex,sys
|
|
sys.dont_write_bytecode=True
|
|
old=Path('/tmp/erri-package-prep-0644');out=Path('/tmp/erri-package-prep-0914');root=Path('/home/jakub/devel/escapistsrereintroduced')
|
|
replacements=[('playtest-source-2026-10-03-mine-safety','playtest-source-2026-10-03-ground-supply'),('playtest-2026-10-03-mine-safety','playtest-2026-10-03-ground-supply'),('erri-package-mine-safety-0644','erri-package-ground-supply-0914'),('erri-source-mine-safety-0644.zip','erri-source-ground-supply-0914.zip'),('erri-packed-chat-mine-safety-0644','erri-packed-chat-ground-supply-0914'),('package-2026-10-03-mine-safety','package-2026-10-03-ground-supply'),('packed-2026-10-03-mine-safety','packed-2026-10-03-ground-supply'),('native-2026-10-03-engineer-movement','native-2026-10-03-resupply-compatible-stock'),('erri-gameplay-root-0644/package.log','erri-gameplay-root-0914/package.log'),('erri-gameplay-root-0558','erri-gameplay-root-0826'),('erri-playtest-review-0644','erri-playtest-review-0914'),('erri-package-prep-0644','erri-package-prep-0914')]
|
|
def adapt(s):
|
|
for a,b in replacements:s=s.replace(a,b)
|
|
return s
|
|
names=['assemble.py','preflight.py','verify.py','suite_binding.py','finalize_docs.py','config.json','commands.json']
|
|
for name in names:
|
|
s=adapt((old/name).read_text())
|
|
if name=='finalize_docs.py':
|
|
start=s.index(" inclusion='");end=s.index("\n limits=",start)
|
|
s=s[:start]+" inclusion='This snapshot adds finite engineer reuse at genuinely newer radio-delivered road posts: four consumed attempts per original force and thirty-two per mission, with every new post more than 160 m from consumed posts. Original stock, native movement envelopes, fixed deadlines and unresolved-removal quarantine remain intact. Ordinary small-arms supply now refuses trucks lacking compatible nonempty original magazines before spending a report or claiming forces. Earlier mine-flank safety, paired interception and player-recovery changes remain included.'"+s[end:]
|
|
s=s.replace('— mine-safety development handoff:', '— ground-supply development handoff:')
|
|
s=s.replace("previous='**3 October 2026 — mounted-pair development handoff:**'", "previous='**3 October 2026 — mine-safety development handoff:**'")
|
|
s=s.replace('## Previous mounted-pair handoff (historical)','## Previous mine-safety handoff (historical)')
|
|
s=s.replace('3 October mine-safety snapshot','3 October ground-supply snapshot').replace('# Mine-safety development candidate','# Ground-supply development candidate')
|
|
s=s.replace('Native mine placement, arming and detonation, physical resupply/interception and survivor retasking remain unverified','Native repeated mining and route avoidance, mine placement/arming/detonation, physical resupply/interception and survivor retasking remain unverified')
|
|
(out/name).write_text(s)
|
|
c=json.loads((out/'config.json').read_text());c['expected_authored_files']=423;c['expected_regression_programs']=300;c['expected_pak_payload_files']=364;c['expected_runtime_files']=3;(out/'config.json').write_text(json.dumps(c,indent=2)+'\n')
|
|
# Record current docs without touching the working tree; finalizer refuses later edits.
|
|
for n in ['README.md','docs/current-status.md','docs/playtest-build.md']:
|
|
p=out/'docs-baseline'/n;p.parent.mkdir(parents=True,exist_ok=True);assert not p.exists();p.write_bytes((root/n).read_bytes())
|
|
commands=json.loads((out/'commands.json').read_text());(out/'commands.txt').write_text('\n\n'.join('# '+x['purpose']+'\n'+shlex.join(x['argv'])+(' > '+shlex.quote(x['stdout_stderr_log'])+' 2>&1' if x.get('stdout_stderr_log') else '') for x in commands)+'\n')
|
|
for n in names:
|
|
if n.endswith('.py'):ast.parse((out/n).read_text(),filename=n)
|
|
(out/'template-provenance.json').write_text(json.dumps({'template_root':str(old),'templates':{n:hashlib.sha256((old/n).read_bytes()).hexdigest() for n in names},'changes':'Candidate/session/evidence/suite/review paths;423/364/3 and300 expected counts; current feature descriptions; previous mine-safety historical section. Existing ownership/cleanup/error/PAK/ZIP/source guards retained.','target_writes':False,'native_executed':False,'compiler_executed':False},indent=2)+'\n')
|
|
print('Prepared scratch helpers; AST parsed; no native/target writes.')
|