Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261015/p04-s2b-root-audit-r02.py
T

36 lines
7.1 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-s2b-native-r02';raw=o/'raw'
def read(p):return json.loads(p.read_text())
def pin(p):
v=p.read_bytes();return {'path':str(p),'bytes':len(v),'sha256':hashlib.sha256(v).hexdigest()}
x=read(o/'execution.json');w=read(raw/'writer.json');r=read(raw/'reader.json');assert x['passed'] and not x['guard_errors'] and not x['cleanup_errors'] and w['failures']==r['failures']==0 and w['pid']!=r['pid'] and w['profile']!=r['profile'];assert set(w['slots'])==set(r['slots']) and len(w['slots'])==6
packages=[]
for label in sorted(w['slots']):
a=pathlib.Path(w['slots'][label]);b=pathlib.Path(r['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'];files=[]
for p in sorted(a.iterdir()):
sa=pin(p);sb=pin(b/p.name);assert (sa['bytes'],sa['sha256'])==(sb['bytes'],sb['sha256']);files.append({'original':sa,'reader_copy':sb})
d=read(raw/f'reader-{label}-restored.json');assert d['expected']['snapshot']==d['actual']['snapshot'];assert d['actual']['actual_coordinator_is_null'] and not d['actual']['raw_getter_called'] and not d['actual']['operations_enabled'] and d['actual']['saved_coordinator']=={}
packages.append({'label':label,'members':files,'Reader_restore_all_JSON_fields_equal':True,'native_typed_assertion':'var_to_bytes full Runtime exact equality PASS','raw':pin(raw/f'reader-{label}-restored.var')})
night=[read(raw/f'writer-night_absent-{n}.json') for n in ['1079','1080','1081']];base=night[0];assert night[-1]['service']['state']=='WAITING_FOR_STAFF' and night[-1]['minute']==1081
for d in night:
assert d['night_staff_count']==0 and d['reservation_ids']==base['reservation_ids'] and d['reservation_ids'] and d['reservations']==base['reservations'] and d['wallet']==base['wallet'] and d['player_cash']==base['player_cash'] and d['ledger']==base['ledger'];assert d['service']['state']!='COMPLETED';assert all(q['state']=='ACTIVE' and q['requester_id']==d['inputs']['request_id'] for q in d['reservations'])
duty=[]
for label,expected in [('1078-1079',(1,0)),('1080',(0,1)),('1081',(0,1))]:
d=read(raw/f'writer-overtime-{label}-duty.json');assert (d['worked_delta'],d['overtime_delta'])==expected and d['duty_recorded_once'];assert d['after']['task']['interrupt_level']==0 and d['after']['cargo_quantity']==8
duty.append({'label':label,'worked_delta':d['worked_delta'],'overtime_delta':d['overtime_delta'],'same_staff_id':d['after']['worker']['staff_id'],'task_id':d['after']['task']['task_id'],'shift_id':d['after']['shift']['shift_instance_id'],'is_overtime':d['after']['worker']['is_overtime'],'cargo_quantity':8,'raw':pin(raw/f'writer-overtime-{label}-duty.var')})
guards=[]
for mode in ['writer','reader']:
for n in ['1079','1080','1081']:
d=read(raw/f'{mode}-overtime-{n}-guard.json');assert d['result']=={'ok':False,'reason':'MINUTE_ALREADY_APPLIED'} and d['before']==d['after'];guards.append({'mode':mode,'minute':d['minute'],'result':d['result'],'native_all_typed_state_unchanged':True,'raw':pin(raw/f'{mode}-overtime-{n}-guard.var')})
phases=[]
for branch in ['night_absent','overtime']:
for minute in ['1080','1081']:
for phase in ['before-facility','after-facility','after-staff']:
a=pin(raw/f'writer-{branch}-{minute}-{phase}.var');b=pin(raw/f'reader-{branch}-{minute}-{phase}.var');assert a['sha256']==b['sha256'] and a['bytes']==b['bytes'];phases.append({'case':branch,'minute':int(minute),'phase':phase,'writer':a,'reader':b})
unloads={}
for mode in ['writer','reader']:
d=read(raw/f'{mode}-overtime-unload.json');assert d['completed']['request']['state']=='COMPLETED' and d['completed']['task']['state']=='COMPLETED' and d['completed']['destination_quantity']==8 and d['completed']['cargo_quantity']==0 and d['off_duty']['worker']['state']=='OFF_DUTY' and not d['off_duty']['worker']['is_overtime'];unloads[mode]=d
for key in ['completed','off_duty']:assert unloads['writer'][key]['snapshot']==unloads['reader'][key]['snapshot']
out={'plan_id':'P04-01','submitted':'29a641c540430cfc7ea24498b242c9afa30686c1','passed':True,'scope':'S2b actual1081 night staff absent and noninterruptible loaded porter overtime with duty once, formal6slots/separatePID replay through unloading/offduty. Not whole P04/normalGUI/Windows or full labor acceptance.','native_root':str(o),'source_files':len(read(o/'source_before.json')),'actual_owned_pids':x['actual_captured_PIDs'],'all_owned_ended':all(v['engine_ended'] for v in x['cleanup']),'guard_errors':x['guard_errors'],'cleanup_errors':x['cleanup_errors'],'night_absent':{'points':[{'minute':d['minute'],'state':d['service']['state'],'elapsed_minutes':d['service']['elapsed_minutes'],'duration_minutes':d['service']['duration_minutes'],'night_staff_count':d['night_staff_count'],'wallet':d['wallet'],'player_cash':d['player_cash'],'service_id':d['service']['service_id'],'reservation_ids':d['reservation_ids'],'reservations':d['reservations']} for d in night],'ledger_unchanged':True,'premise':'Original physically placed kitchen FLEX cook; DAY servers physically commute. Not natural hire/unlock acceptance.'},'actual_duty_deltas':duty,'actual_same_minute_guards':guards,'formal_packages':packages,'formal_original_and_copy_member_count':48,'twelve_phase_var_pairs_identical':phases,'typed_boundary_clock_replay':'Actual Reader loads1079 and advances ordinary clock to1080/1081; full Runtime var_to_bytes comparisons PASS for both cases. Phase raw byte pairs match12/12.','unload_replay':{'completed_minute':unloads['writer']['completed']['minute'],'off_duty_minute':unloads['writer']['off_duty']['minute'],'completed_and_offduty_native_full_typed_equality':True,'cargo_destination_quantity':8,'cargo_remaining':0,'writer':pin(raw/'writer-overtime-unload.var'),'reader':pin(raw/'reader-overtime-unload.var')},'optional_operations':'Both inherited fixtures keep production Operations disabled and actual coordinator nil. Raw absence and saved coordinator{} recorded; getter explicitly not called/not applicable. No fabricated day summary and no financial acceptance claim from this fixture. Full Runtime still captured/compared unchanged.','original_unit_completion_credit':0,'remaining':['S3 remaining service power/closure/exit/patience/destruction boundaries and applicability','whole dynamic raw collector','A real candidate HEAD/tree/FS and fixtures','required whole validation','independent whole review','ordinary integration/final'],'pins':[pin(o/'execution.json'),pin(o/'runner-input.json'),pin(raw/'writer.json'),pin(raw/'reader.json')]}
p=E/'ROOT_S2B_NATIVE_R02_RESULT.json';p.write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');(E/'p04-s2b-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_slots':6,'phase_var_pairs':12,'pids':x['actual_captured_PIDs'],'original_unit_credit':0},ensure_ascii=False))