Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
43 lines
6.2 KiB
Python
43 lines
6.2 KiB
Python
from pathlib import Path
|
||
import hashlib,json,shutil,subprocess,sys
|
||
r=Path('/home/jakub/devel/escapistsrereintroduced');b=Path('/tmp/erri-gameplay-root-2328');e=r/'docs/evidence/intel-reroll-current-2026-10-02';ne=r/'docs/evidence/native-2026-10-02-intel-reroll-current'
|
||
load=lambda p:json.loads(p.read_text())
|
||
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||
def write(p,v):p.write_text(json.dumps(v,indent=2)+'\n')
|
||
base=load(b/'baseline.json');assert all((r/n).is_file() and sha(r/n)==h for n,h in base['files'].items())
|
||
sys.path.insert(0,str(r/'tools'));from source_manifest import addon_manifest
|
||
source=addon_manifest(r);runner=load(ne/'runner.json.txt');report=load(ne/'report.json')
|
||
assert source==base['source']==load(ne/'source-sha256.json')==load(ne/'launch-source-sha256.json')
|
||
assert report['assertions_passed']==116 and report['smoke_completions']==1 and not report['script_or_runtime_failures'] and len(report['engine_errors'])==13
|
||
assert runner['cleanup_confirmed'] and runner['source_unchanged_after_run'] and runner['external_addons_unchanged_after_run'] and sha(ne/'console.log.txt')==runner['console_sha256']
|
||
log=(ne/'console.log.txt').read_text()
|
||
for chance in [100,0]:assert f'Intel reroll complete at {chance} percent: 126/126 AI processed, 0 failed, 0 skipped.' in log
|
||
assert log.count("ERR SMOKE PASS: reroll preserves player's exact collected clue documents")==4
|
||
assert log.count('ERR SMOKE PASS: reroll preserves already identified radio')==2
|
||
oldinputs=load(r/'docs/evidence/hunter-capture-2026-10-02/suite-inputs.json')
|
||
changed_inputs=[n for n,h in oldinputs.items() if sha(r/n)!=h]
|
||
assert changed_inputs==['docs/current-status.md'],changed_inputs
|
||
index=hashlib.sha256(subprocess.check_output(['git','diff','--cached','--binary'],cwd=r)).hexdigest();assert index==base['index_diff_sha256']
|
||
original=load(Path('/tmp/erri-heartbeat-20260930-1542-reference.json'));assert all(sha(Path('/home/jakub/devel/escapists')/n)==h for n,h in original.items())
|
||
candidate=r/'.build/playtest-2026-10-02-convoy-survivors';seal=load(r/'docs/evidence/playtest-refresh-2026-10-02-convoy-survivors/candidate-sha256.json');assert {str(p.relative_to(candidate)):sha(p) for p in candidate.rglob('*') if p.is_file()}==seal
|
||
independent=Path('/tmp/erri-reroll-review-2328/native-review.json');assert independent.is_file()
|
||
e.mkdir(exist_ok=False)
|
||
for n in ['baseline.json','intel-native.log','finish.py']:shutil.copyfile(b/n,e/n)
|
||
for folder,name in [('/tmp/erri-reroll-review-2328','intel-review'),('/tmp/erri-maintenance-review-2328','maintenance-review'),('/tmp/erri-extraction-review-2328','extraction-review')]:shutil.copytree(folder,e/name,ignore=shutil.ignore_patterns('__pycache__','*.pyc'))
|
||
write(e/'source-after.json',source)
|
||
result={'kind':'Current-source native admin and intel-reroll escape check','authored_files':len(source),'assertions':116,'completions':1,'script_failures':0,'engine_errors':13,'batch_cohort':126,'batch_probabilities':[100,0],'batch_failed':0,'batch_skipped':0,'shared_deadline_seconds':90,'earlier_failed_cohort':129,'identical_workload_comparison_claimed':False,'source_unchanged':True,'full_suite_rerun':False,'previous_passing_regression_programs':292,'prior_suite_input_differences':changed_inputs,'cleanup_external_unchanged':True,'strict_failure_retained':True,'original_reference_files_unchanged':len(original),'inherited_files_preserved_before_documentation':len(base['files']),'latest_candidate_files_unchanged':len(seal),'index_diff_sha256':index,'production_changes':False,'package_changes':False,'release_qualified':False,'limits':'Scripted local legacy-site/admin integration. No remote multiplayer, ordinary user input, generated-site balance, repair/refuel consumption or FPS claim; earlier129-actor failure is retained.'}
|
||
write(e/'review.json',result)
|
||
status=r/'docs/current-status.md';first,tail=status.read_text().split('\n',1)
|
||
section='''**2 October 2026 — combined admin and intel reroll fixture completes on current source:** the hidden/muted native run passes **116 assertions and one escape round**, with **zero script/runtime failures and thirteen retained engine errors**. It exercises the administration menu and owner RPCs, then processes **126 original AI at 100% and again at 0%**, both with zero failed or skipped entries inside the unchanged shared ninety-second gate. The checked guards gain/remove their native folders while the player’s exact collected clues and identified radio remain intact. Interrupted radio defence, extraction and results then complete.
|
||
|
||
No production source changed. The prior **292-program regression pass** covers identical authored source, tests and tools; this was not a new full-suite run. The earlier 129-actor timeout remains preserved, and this 126-actor result is not an identical-workload comparison. Scripted local legacy-site/admin checks do not establish ordinary input, remote multiplayer, generated-route balance or FPS. Strict engine failures remain; cleanup and unchanged external inputs are confirmed. Three bounded gameplay reviews found no new demonstrated defect. Original missions and the existing package remain unchanged. [Evidence and scope](evidence/intel-reroll-current-2026-10-02/review.json).
|
||
'''
|
||
status.write_text(first+'\n\n'+section+'\n'+tail.lstrip('\n'))
|
||
old='Validate ordinary task/map usability, simultaneous real clients, discovery replication and the complete manual objective route; the failed administrative reroll stress remains unqualified.'
|
||
new='A current native admin fixture completes two rerolls for 126 actors and the scripted escape; the earlier 129-actor timeout remains retained. Validate ordinary task/map usability, simultaneous real clients, discovery replication and the complete manual objective route.'
|
||
for name in ['docs/original-feature-coverage.json','docs/original-feature-coverage.md']:
|
||
p=r/name;s=p.read_text();assert s.count(old)==1;p.write_text(s.replace(old,new,1))
|
||
coverage=load(r/'docs/original-feature-coverage.json');write(e/'documentation.json',{n:{'before':base['files'][n],'after':sha(r/n)} for n in ['docs/current-status.md','docs/original-feature-coverage.json','docs/original-feature-coverage.md']})
|
||
write(e/'evidence-sha256.json',{str(p.relative_to(e)):sha(p) for p in sorted(e.rglob('*')) if p.is_file()})
|
||
print(json.dumps(result,indent=2))
|