Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
67 lines
9.7 KiB
Python
67 lines
9.7 KiB
Python
from pathlib import Path
|
|
import json,hashlib,shutil,subprocess,ast,sys
|
|
r=Path('/home/jakub/devel/escapistsrereintroduced');b=r/'.build/heartbeat-0406-baseline';build=r/'.build/playtest-2026-10-02-ground-depot-guide';e=r/'docs/evidence/playtest-refresh-2026-10-02-ground-depot-guide'
|
|
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
|
sys.path.insert(0,str(r/'tools'));from source_manifest import addon_manifest
|
|
review=json.loads((build/'handoff.json').read_text());assert review['authored_files']==403 and review['pak_payload_files']==346 and len(review['runtime_files'])==3
|
|
assert review['normal_mission_ready'] and review['local_participant_verified'] and review['repository_regression_programs']==277 and not review['release_qualified']
|
|
assert addon_manifest(r)==json.loads((r/'.build/playtest-frozen-0406/frozen-source.json').read_text())
|
|
old=json.loads((b/'unstaged.json').read_text());original=json.loads(Path('/tmp/erri-heartbeat-20260930-1542-reference.json').read_text());prior=json.loads((r/'docs/evidence/playtest-refresh-2026-10-01-convoy-stock/candidate-sha256.json').read_text())
|
|
for root,files in [(r,old),(Path('/home/jakub/devel/escapists'),original),(r/'.build/playtest-2026-10-01-convoy-stock',prior)]:assert all(sha(root/p)==h for p,h in files.items())
|
|
for name in ['current-status.md','playtest-build.md']:
|
|
assert (r/'docs'/name).read_bytes()==(b/(name+'.working')).read_bytes()==(b/(name+'.index')).read_bytes()
|
|
assert subprocess.check_output(['git','show',':docs/'+name],cwd=r)==(b/(name+'.index')).read_bytes()
|
|
e.mkdir()
|
|
for src,dest in [(r/'.build/heartbeat-0406-package/review.json','packaging-review.json'),(r/'.build/heartbeat-0406-package/handoff-plan.json','handoff-plan.json'),(b/'suite-result.json','suite-result.json')]:shutil.copy2(src,e/dest)
|
|
summary={'artifact':str(build.relative_to(r)),'authored_files':403,'pak_payload_files':346,'runtime_files':3,'regression_programs':277,'full_suite_matches_final_source':True,'new_gameplay_fix':'Retained former local controllers stop their own objective-hint callbacks; current-controller timer and retry/reacquisition preserved. Actual-method red-before/green-after independently reproduced.','native_normal_route':{'assertions':63,'rounds':1,'script_failures':0,'retained_installed_resource_errors':13},'packed_ordinary_startup':{'normal_mission_ready':True,'local_prisoner_verified':True,'script_failures':0,'retained_installed_resource_errors':17,'strict_failed_verdict_retained':True},'native_packaging':'Exact403 authored/346 payload identities, native exit zero; strict completion/shutdown/resource failures retained. New development candidate only.','readonly_audits':'No demonstrated new admission/reconnect defect in inspected controller/account/cancellation/disconnect callbacks. Packaging refusal remains justified: helper teardown required owned cleanup and native errors independently fail qualification.','preserved':{'inherited_unstaged_paths':len(old),'original_reference_files':len(original),'prior_convoy_candidate_files':len(prior)},'remaining':'Human full escape, real multiplayer/JIP/reconnect/twelve players, native controller replacement, physical depot/infantry/mine/mounted/maintenance interactions, comparative FPS and clean release.','committed':False,'published':False}
|
|
(e/'review.json').write_text(json.dumps(summary,indent=2)+'\n')
|
|
(build/'README.md').write_text('''# Development playtest — 2 October 2026
|
|
|
|
Open `source/addons/core/addon.gproj` for editable Workbench work, or use the three files in `packages/core/` in a separate test profile. Choose **Co10 Escape Reintroduced — Everon**, `{C1E20667DCE324ED}Missions/ERR_Everon.conf`. Mission, AI, Intel, Map and Chat are combined in one addon.
|
|
|
|
Install RHS: Status Quo, WCS Armaments, WCS BMP-1, Parachute Framework and their supporting packs separately. `source/EXTERNAL-ADDONS.json` records the audited closure. Original Escapists is not required; third-party assets are not bundled.
|
|
|
|
This snapshot includes finite camp-to-truck ammunition loading, zero-stock replenishment for originally designated engineers, the HQ planning count optimization and the protected-fatal lifecycle test correction. It also fixes old local controllers continuing to display objective hints after ownership changes. Earlier mine warnings, convoy cargo/status, maintenance, pursuit and companion behavior remain included. Optional terrain integration remains experimental; validation targets Everon.
|
|
|
|
**403 authored files, 346 exact PAK payloads and three runtime files** match editable source and `handoff.json`. All **277 registered regression programs pass** on this source. A fresh native normal route completes **63 assertions through extraction/results**, with zero script/runtime failures and thirteen retained installed-resource errors. Ordinary startup of the exact packaged bytes verifies the normal mission and local prisoner, with zero script/runtime failures and seventeen retained installed-resource errors.
|
|
|
|
This is an **unqualified development candidate**. Exact package contents and native child exit zero do not clear the recorded resource/shutdown/completion failures. Full human escape, real multiplayer/JIP/reconnect/twelve players, native controller replacement, physical depot delivery, infantry/mine/mounted resupply, maintenance consumption, comparative FPS and clean release remain unfinished. The normal-route check does not exercise autonomous physical logistics.
|
|
|
|
All native checks stayed hidden and muted, with confirmed cleanup and unchanged inputs. Original missions and previous candidates are preserved. Nothing was published.
|
|
|
|
See the [player route](../../docs/player-route.md), [setup guide](../../docs/playtest-build.md), [current status](../../docs/current-status.md), [artifact evidence](../../docs/evidence/package-2026-10-02-ground-depot-guide/handoff.json) and [packed startup evidence](../../docs/evidence/packed-2026-10-02-ground-depot-guide/archive-review.json).
|
|
''')
|
|
p=r/'docs/playtest-build.md';s=p.read_text();start=s.index('The latest retained, hash-verified handoff is');end=s.index('## Identities and required dependencies');s=s[:start]+'''The latest retained, hash-verified handoff is
|
|
[2 October — ground depot and guide](../.build/playtest-2026-10-02-ground-depot-guide/README.md),
|
|
at `.build/playtest-2026-10-02-ground-depot-guide`. It contains matching editable
|
|
source and one packaged addon: **403 authored files and 346 exact PAK payloads**.
|
|
It includes finite camp-to-truck loading, designated-engineer zero-stock replacement,
|
|
the HQ count optimization and the stale-controller objective-hint correction.
|
|
|
|
This is an **unqualified development candidate**. Its exact source passes all 277
|
|
registered regression programs and 63 scripted normal-route assertions. Ordinary
|
|
startup of the exact package verifies the mission and local prisoner. The 13/17
|
|
installed-resource errors and strict failed packaging/startup verdicts remain.
|
|
Human play, real multiplayer, native controller replacement, physical logistics,
|
|
comparative FPS and clean release still require qualification. Optional terrain
|
|
integration remains experimental.
|
|
|
|
See [current status](current-status.md). Later edits are not automatically present;
|
|
the previous convoy-stock and all earlier candidates remain unchanged.
|
|
|
|
'''+s[end:];p.write_text(s)
|
|
p=r/'docs/current-status.md';s=p.read_text();heading='# Current development status\n\n';assert s.startswith(heading)
|
|
intro='''**2 October 2026 — updated development playtest and objective-hint ownership fix:** the [separate ground-depot/guide handoff](../.build/playtest-2026-10-02-ground-depot-guide/README.md) now includes recent finite camp loading, zero-stock engineer resupply, HQ count optimization and a correction preventing a retained old controller from displaying hints after local ownership changes. It contains **403 authored files, 346 exact PAK payloads and three runtime files**, with matching editable source. [Artifact hashes and strict limits](evidence/package-2026-10-02-ground-depot-guide/handoff.json).
|
|
|
|
All **277 registered regression programs pass**; the guide regression independently fails on the old code and passes with the fix. The [fresh source-matched normal escape](evidence/native-2026-10-02-ground-depot-guide/report.json) passes **63 assertions and one round**, with zero script/runtime failures and thirteen retained installed-resource errors. [Ordinary startup of the exact package](evidence/packed-2026-10-02-ground-depot-guide/archive-review.json) verifies the normal mission and local prisoner, with zero script/runtime failures and seventeen retained installed-resource errors. Strict packaging/startup failures remain; this is **not a qualified release**.
|
|
|
|
A bounded admission/reconnect source audit found no demonstrated additional bug. [Guide fix and exact validation scope](evidence/guide-controller-2026-10-02/review.json). Native controller replacement, human play, real multiplayer, physical logistics, comparative FPS and clean release remain unfinished. All native sessions stayed hidden/muted and cleaned up; original missions, 61 inherited unstaged paths and the prior 409-file candidate are preserved. Nothing was committed or published. [Preservation and build review](evidence/playtest-refresh-2026-10-02-ground-depot-guide/review.json).
|
|
|
|
''';p.write_text(heading+intro+s[len(heading):])
|
|
(e/'candidate-sha256.json').write_text(json.dumps({str(p.relative_to(build)):sha(p) for p in sorted(build.rglob('*')) if p.is_file()},indent=2)+'\n')
|
|
shutil.copy2(__file__,e/'finalize.py')
|
|
subprocess.run(['git','add','--','docs/current-status.md','docs/playtest-build.md','docs/evidence/package-2026-10-02-ground-depot-guide','docs/evidence/packed-2026-10-02-ground-depot-guide',str(e.relative_to(r))],cwd=r,check=True)
|
|
subprocess.run(['git','diff','--check'],cwd=r,check=True)
|
|
assert all(sha(r/p)==h for p,h in old.items())
|
|
print(json.dumps(summary,indent=2))
|