34 lines
4.7 KiB
Python
34 lines
4.7 KiB
Python
import pathlib,json,hashlib
|
|
R=pathlib.Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部')
|
|
E=R/'docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261015'
|
|
B=pathlib.Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build')
|
|
o=B/'p04-s1-native-r02'
|
|
x=json.loads((o/'execution.json').read_text());w=json.loads((o/'raw/writer.json').read_text());q=json.loads((o/'raw/reader.json').read_text())
|
|
def pin(p):
|
|
p=pathlib.Path(p);v=p.read_bytes();return {'path':str(p),'bytes':len(v),'sha256':hashlib.sha256(v).hexdigest()}
|
|
assert x['passed'] and not x['guard_errors'] and not x['cleanup_errors']
|
|
assert w['checks']==q['checks']==6 and w['failures']==q['failures']==0 and not w['operational_errors'] and not q['operational_errors']
|
|
assert w['pid']!=q['pid'] and w['profile']!=q['profile']
|
|
assert set(w['slots'])==set(q['slots']) and len(w['slots'])==14
|
|
packages=[]
|
|
for label in sorted(w['slots']):
|
|
a=pathlib.Path(w['slots'][label]);b=pathlib.Path(q['slots'][label])
|
|
assert sorted(p.name for p in a.iterdir())==sorted(p.name for p in b.iterdir())==['journal.log','manifest.json','thumbnail.png','world.bin']
|
|
members=[]
|
|
for p in sorted(a.iterdir()):
|
|
pa=pin(p);pb=pin(b/p.name);assert (pa['bytes'],pa['sha256'])==(pb['bytes'],pb['sha256']);members.append({'original':pa,'reader_copy':pb})
|
|
wa=json.loads((o/f'raw/writer-{label}.json').read_text());ra=json.loads((o/f'raw/reader-{label}.json').read_text())
|
|
assert wa['snapshot']==ra['snapshot'] and wa['ledger']==ra['ledger'] and wa['reservations']==ra['reservations']
|
|
packages.append({'label':label,'members':members,'json_snapshot_equal':True,'typed_snapshot_equality':'actual Reader runtime var_to_bytes comparison; operational_errors empty','writer_raw':pin(o/f'raw/writer-{label}.var'),'reader_raw':pin(o/f'raw/reader-{label}.var')})
|
|
cases=[]
|
|
for label in ['landing','no-safe-landing']:
|
|
v=json.loads((o/f'raw/writer-{label}-observations.json').read_text())
|
|
assert v['safety_raw']=={'arrivals_by_actor':{'staff:medic':1,'staff:patient':1},'orphans':0,'stopped_ledger_delta':0}
|
|
assert v['held_remaining_unchanged'] and v['reserved_before_travel']['staff_cell']=='(5, 0, 1)' and v['reserved_before_travel']['task']['reservation_ids']
|
|
cases.append({'case':label,'safety':v['safety_raw'],'reserved_before_travel_minute':v['reserved_before_travel']['minute'],'remaining_minutes_before':v['remaining_minutes_before'],'remaining_minutes_after':v['remaining_minutes_after'],'reservation_history':{key:v[key]['reservations'] for key in ['boarded','stopped','held_after','final']},'original_raw':pin(o/f'raw/writer-{label}-observations.var'),'reader_raw':pin(o/f'raw/reader-{label}-observations.var')})
|
|
out={'plan_id':'P04-01','submitted':'dd20d5b96cfbd2ae70ce00b6e7587a273077f8b5','root_native_run':str(o),'passed':True,'scope':'S1 actual reserved staff rescue trip + total reserve outage + direct clinic closure; safe landing and blocked landings. Not whole P04, meal-service power_stop/recovery, normal GUI, Windows, or independent whole acceptance.','audit_correction':'First Root JSON audit expected staff_cell array; actual JSON.stringify(Vector3i) is string (5, 0, 1). Corrected audit representation only; native typed guard was Vector3i(5,0,1), passed unchanged. No engine rerun or evidence modification.','product_source_files':len(json.loads((o/'source_before.json').read_text())),'cases':cases,'phases':[{k:p.get(k) for k in ['phase','passed','actual_pid','validation_error']} for p in x['phases']],'writer_pid':w['pid'],'reader_pid':q['pid'],'profiles_distinct':True,'formal_packages':packages,'formal_original_and_reader_members':len(packages)*8,'typed_restore_points':14,'actual_owned_pids':x['actual_captured_PIDs'],'all_owned_ended':all(p['engine_ended'] for p in x['cleanup']),'guard_errors':x['guard_errors'],'cleanup_errors':x['cleanup_errors'],'whole_accepted':False,'unit_completion_credit':0,'fixed_inputs':[pin(o/'execution.json'),pin(o/'runner-input.json'),pin(B/'p04-s1-root-plan-r02.json')],'next_missing':['S2 midnight sale exactly1440 + wage/shift join + same1440 settlement replay','night staff absent and overtime evidence','S3 other missing boundaries','all raw collector','A actual HEAD/tree/FS binding + fixtures','registered mandatory whole validation','independent whole review','ordinary integration/final']}
|
|
p=E/'ROOT_S1_NATIVE_R02_RESULT.json';p.write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n')
|
|
(E/'p04-s1-root-audit-r02.py').write_bytes(pathlib.Path(__file__).read_bytes())
|
|
(B/'audit-support/p04-whole-closure-r01'/p.name).write_bytes(p.read_bytes())
|
|
print(json.dumps({'report':str(p),'passed':True,'formal_packages':14,'members_original_plus_copy':112,'pids':x['actual_captured_PIDs'],'all_owned_ended':out['all_owned_ended'],'checks_are_not_original_credit':True}))
|