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

24 lines
5.8 KiB
Python

import pathlib,json,hashlib,collections
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-s2a-native-r03';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'];branches=[]
for label in ['C1','C2','C3']:
d=read(raw/f'writer-{label}-branch.json');j=d['join'];assert d['midnight']['minute']==1440 and d['midnight']['service']['completed_at']==1440
assert len(j['sales'])==len(j['payroll_transaction_ids'])==len(j['upkeep_transaction_ids'])==1 and j['orphans']==0 and j['sale_join_complete'] and j['payroll_join_complete'];duty=[]
for v in j['payroll_join']:
assert v['duty_join_complete'] and all(s['worked_minutes']+s['overtime_minutes']>0 for s in v['shifts'])
assert v['worked_delta']==(1 if v['paid_staff']['staff_id']=='staff_bardo' else 0) and v['overtime_delta']==0
duty.append({'staff_id':v['paid_staff']['staff_id'],'payment':v['paid_staff']['payment'],'settlement_day':v['day'],'actual_recorded_duty_shifts':v['shifts'],'duty_delta':v['duty_delta'],'worked_delta':v['worked_delta'],'overtime_delta':v['overtime_delta']})
branches.append({'branch':label,'minute':1440,'sale_rows':j['sales'],'payroll_transaction_ids':j['payroll_transaction_ids'],'upkeep_transaction_ids':j['upkeep_transaction_ids'],'upkeep_rows':j['upkeep_rows'],'recorded_duty_join':duty,'settled_financial_period':{k:d['midnight']['day_summary'][k] for k in ['day','period_start_minute','period_end_minute_exclusive','closed_at']},'sale_at1440_belongs_after_period_end_exclusive':True,'raw':pin(raw/f'writer-{label}-branch.var')})
replay=read(raw/'writer-C2-recall.json');formal=read(raw/'reader-C3-branch.json');diagnostic=read(raw/'reader-C3-day-summary-comparison.json');assert replay['before']['snapshot']==replay['after']['snapshot'] and formal['expected']['snapshot']==formal['restored']['snapshot']
for v in [replay,formal['recall']]:assert v['before']['minute']==v['after']['minute']==1440 and v['command']['ok'] and v['command']['payload']['replay'] and v['command']['payload']['processed_minutes']==0 and v['command']['payload']['boundary_counts']['daily_closes']==0 and v['before']['snapshot']==v['after']['snapshot']
assert formal['expected']['canonical_day1']==formal['restored']['canonical_day1'] and formal['expected']['day_summary']==formal['restored']['day_summary']
assert diagnostic['writer']['join_complete'] and diagnostic['reader']['join_complete'];kinds=collections.Counter(v['kind'] for v in diagnostic['differences']);assert set(kinds)<=set(['key_StringName_String','key_order','StringName_String']);assert diagnostic['raw_bytes_equal'] is False
members=[]
for name,v in formal['member_hashes'].items():assert v['original_before']==v['copy']==v['original_after'];members.append({'member':name,**v})
assert len(members)==4
out={'plan_id':'P04-01','submitted':'877dee40bc19559bf726502ff2d1f3fb84bac034','passed':True,'scope':'S2a actual1440 service/payment, nonzero payroll joined to actual recorded same-day duty, distinct upkeep transaction, actual same1440 coordinator recall, formal SaveService separate-PID restore. Whole P04 still pending. No normal-GUI/Windows acceptance.','root_native':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'],'phases':[{k:p.get(k) for k in ['phase','passed','actual_pid','validation_error']} for p in x['phases']],'actual_cases':branches,'actual_replay_original':replay['command'],'actual_replay_after_formal_restore':formal['recall']['command'],'formal_members':members,'full_Runtime_typed_equality':'native actual var_to_bytes entire snapshot assertion PASS, Root all JSON fields also equal','canonical_day1_typed_equality':'native actual byte assertion PASS; all raw getter values and types joined to documented canonical conversion, no JSON-only replacement','raw_API_diagnostic':{'raw_getter_bytes_equal':diagnostic['raw_bytes_equal'],'writer_join_complete':True,'reader_join_complete':True,'difference_kinds':dict(kinds),'meaning':'Raw getter returns live StringName/source-order containers; persisted public Operations snapshot converts StringName keys/values to String and sorts keys. These differences are retained rather than claimed unchanged. All other types/values, canonical typed persistence state, ledger/payroll, actual recall invariance remain strict.','raw':pin(raw/'reader-C3-day-summary-comparison.var')},'original_unit_completion_credit':0,'remaining':['S2b real1081 night absence / overtime duty once','S3 service power/closure/exit/patience/destruction boundaries and applicability','whole dynamic collector','A actual candidate HEAD/FS + fixtures','mandatory whole validate','independent whole review','ordinary integration/final'],'pins':[pin(o/'execution.json'),pin(o/'runner-input.json'),pin(raw/'writer-C3-midnight.var'),pin(raw/'reader-C3-branch.var')]}
p=E/'ROOT_S2A_NATIVE_R03_RESULT.json';p.write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');(E/'p04-s2a-root-audit-r03.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,'pids':x['actual_captured_PIDs'],'getter_diagnostic_kinds':dict(kinds),'original_unit_credit':0},ensure_ascii=False))