Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
27 lines
4.4 KiB
Python
27 lines
4.4 KiB
Python
from pathlib import Path
|
|
import hashlib,json,shutil,subprocess,sys
|
|
R=Path('/home/jakub/devel/escapistsrereintroduced');B=Path('/tmp/erri-gameplay-root-0644');E=R/'docs/evidence/playtest-refresh-2026-10-03-mine-safety';C=R/'.build/playtest-2026-10-03-mine-safety'
|
|
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest();load=lambda p:json.loads(p.read_text())
|
|
def write(p,v):p.write_text(json.dumps(v,indent=2)+'\n')
|
|
base=load(B/'baseline.json');changed=[p for p,h in base['files'].items() if not (R/p).is_file() or sha(R/p)!=h]
|
|
assert set(changed)=={'README.md','docs/current-status.md','docs/playtest-build.md'},changed
|
|
assert hashlib.sha256(subprocess.check_output(['git','diff','--cached','--binary'],cwd=R)).hexdigest()==base['index_diff_sha256']
|
|
original=load(Path('/tmp/erri-heartbeat-20260930-1542-reference.json'));assert all(sha(Path('/home/jakub/devel/escapists')/p)==h for p,h in original.items())
|
|
old=R/'.build/playtest-2026-10-03-mounted-pair';oldseal=load(R/'docs/evidence/playtest-refresh-2026-10-03-mounted-pair/candidate-sha256.json');assert {str(p.relative_to(old)):sha(p) for p in old.rglob('*') if p.is_file()}==oldseal
|
|
review=load(Path('/tmp/erri-playtest-review-0644/final-review.json'));assert review['complete'] is True
|
|
assert sha(Path('/tmp/erri-playtest-review-0644/final-review.json'))=='5eb483dbb168b5c4126434a7390460dd757c9110952e56bcdee8727be7d07267'
|
|
assert load(Path('/tmp/erri-package-prep-0644/docs-proposal.json'))['target_writes'] is True
|
|
sys.path.insert(0,str(R/'tools'));from source_manifest import addon_manifest
|
|
assert addon_manifest(R)==load(B/'frozen-source.json')
|
|
h=load(C/'handoff.json');assert h['normal_mission_ready'] and h['local_participant_verified'] and h['repository_regression_programs']==299 and not h['release_qualified']
|
|
E.mkdir(exist_ok=False)
|
|
for name in ['baseline.json','frozen-source.json','freeze.py','source-bundle.log','finish-evidence.py']:shutil.copyfile(B/name,E/name)
|
|
for name in ['full-suite.log','suite-inputs.json','suite-result.json']:shutil.copyfile(Path('/tmp/erri-gameplay-root-0558')/name,E/name)
|
|
shutil.copyfile('/tmp/erri-playtest-review-0644/final-review.json',E/'independent-review.json');shutil.copyfile('/tmp/erri-playtest-review-0644/preflight.json',E/'suite-reuse-review.json')
|
|
shutil.copytree('/tmp/erri-package-prep-0644',E/'preparation',ignore=shutil.ignore_patterns('__pycache__','*.pyc'))
|
|
shutil.copytree('/tmp/erri-next-ground-0644',E/'next-ground-proposal',ignore=shutil.ignore_patterns('__pycache__','*.pyc'))
|
|
seal={str(p.relative_to(C)):sha(p) for p in sorted(C.rglob('*')) if p.is_file()};write(E/'candidate-sha256.json',seal)
|
|
write(E/'review.json',{'kind':'UNQUALIFIED DEVELOPMENT CANDIDATE','candidate':str(C),'authored_files':422,'pak_payload_files':363,'runtime_files':3,'candidate_files':len(seal),'source_zip_sha256':sha(C/'source.zip'),'regression_programs':299,'fresh_full_suite_run':False,'suite_reused_for_unchanged_source_tests_tools':True,'two_post_suite_prose_changes_independently_reviewed':True,'normal_route_reused_for_exact_source':True,'normal_assertions':63,'normal_completions':1,'normal_script_failures':0,'normal_engine_errors':13,'packed_normal_mission_and_local_prisoner':True,'packed_script_failures':0,'packed_engine_errors':17,'strict_failures_retained':True,'release_qualified':False,'published':False,'current_authored_source_matches':True,'original_reference_files_unchanged':len(original),'existing_paths_preserved_except_documentation':len(base['files'])-len(changed),'documentation_updates':changed,'index_diff_sha256':base['index_diff_sha256'],'previous_candidate_files_unchanged':len(oldseal),'independent_review_sha256':sha(E/'independent-review.json'),'scope':'Includes mine road/settlement clearance and native group movement permission; prior radio/support/player work retained. Physical mining/resupply/interception, human escape, multiplayer, manual UI, FPS and clean release remain unqualified. Intermittent zero-radius script error remains unresolved.','next_ground_proposal':'Unimplemented proposal for finite attempts at spatially separate genuinely new delivered road posts. It does not establish native mine-path safety or same-post parity.'})
|
|
write(E/'evidence-sha256.json',{str(p.relative_to(E)):sha(p) for p in sorted(E.rglob('*')) if p.is_file() and p.name!='evidence-sha256.json'})
|
|
print(json.dumps({'candidate':str(C),'files':len(seal),'source_zip_sha256':sha(C/'source.zip'),'original_preserved':len(original),'previous_candidate_preserved':len(oldseal)},indent=2))
|