import hashlib def run(load,read,check): steps=[] for n in range(470,479): c=load(f'C{n}_CERTIFICATE.json');d=load(f'C{n}_DATA.json');r=load(f'C{n}_RESULTS.json');decision=load(f'C{n}_NEXT_STEP.json') for key,name in [('data',f'C{n}_DATA.json'),('results',f'C{n}_RESULTS.json'),('next_step_decision',f'C{n}_NEXT_STEP.json')]:check(name+'_bound',hashlib.sha256(read(name).encode()).hexdigest()==c[key+'_sha256']) check(f'C{n}_completed',c['status']=='completed' and r['status']=='passed' and decision['completed_step']==f'C{n}' and not c['canonical_or_graph_edits']) steps.append({'step':f'C{n}','title':c['title'],'main_result':c['main_result'],'calculation_checks':r['assertions_passed'],'source_checks':r['source_checks_passed'],'next_decision':decision}) sm=load('C469_SOURCE_MANIFEST.json');check('C469_source_manifest_bound',hashlib.sha256(read('C469_SOURCE_MANIFEST.json').encode()).hexdigest()==load('C469_CERTIFICATE.json')['source_manifest_sha256']) for name in ['File_18.md','File_09.md','C265_CERTIFICATE.json','C265_CHECKPOINT.md','C365_DATA.json','C287_DATA.json','SKL_SUPPLEMENTAL_OBSERVATION.md']: check(name+'_inherited_bytes',hashlib.sha256(read(name).encode()).hexdigest()==sm[name]['sha256']) a=load('PRE_C479_SEALED_AUDIT.json');check('nine_steps27_publications_audited',a['completed_steps']==list(range(470,479)) and a['published_files']==27 and a['standing_controls_unchanged']) c470=load('C470_DATA.json');c472=load('C472_DATA.json');c475=load('C475_DATA.json');c476=load('C476_DATA.json');c477=load('C477_DATA.json');c478=load('C478_DATA.json') check('all_three_E_expansions',c470['counts']['source_pairs_1150']==51 and c470['counts']['complete_expansions']==3 and c470['counts']['complete_with_2K_predecessor']==1) check('complete1250grammar',c472['counts']['coordinate_pairs']==74 and c472['counts']['label_pairs']==130 and len(c472['family_summary'])==7) check('factorization_admission',c475['counts']['profiles']==16 and c475['counts']['fully_sourced_profiles']==5 and c475['counts']['fully_sourced_active_menu_profiles']==1) check('primary_companion_boundary',c476['summary']['primary']['complete_paths']==4 and c476['summary']['companion']['sourced_inputs']==5 and c476['summary']['companion']['complete_paths']==0) check('fixed_Mirror_boundary',c477['counts']['complete_input_images']==5 and c477['counts']['inherited17K_images']==2 and c477['counts']['complete_cumulative_paths']==0) check('alternate_implementation_agrees',not c478['discrepancies']) return {'step':'C479','completed_research_steps':steps,'synthesis':{'1150_census':c470['counts'],'admitted_E_expansions':c470['admitted_expansions'],'1250_census':c472['counts'],'1250_families':c472['family_summary'],'source_translations':load('C473_DATA.json')['counts'],'factorization_profiles':c475['counts'],'held_family_summary':c476['summary'],'Mirror_counts':c477['counts'],'principal_conclusion':'The declared1150 interval inventory has three fixed-E expansions to1250, only one with a sourced2K predecessor. The1250 source grammar is dominated by three matched24-context families. Equal whole affine maps can have different source-admissible factorizations; the held primary/companion distinction and fixed-Mirror cumulative limit are explicit.'},'new_research_vs_inherited':{'current':'Complete1150/1250 interval censuses and grammar, family translations, cross-family factorization/source-admission comparison, full primary/companion context explanation and held-family Mirror trajectory boundary.','inherited':'C429 four Noah-held ladders and companion endpoint cases; C434 split-source boundary and identity; C287 i3/i5 17K corners; C461 five fixed-Mirror input images.'},'standing_clarifications':['C465 mixed-cycle12-to12 counts vertices only; full anchored label count48-to12.','C432 E excerpt locator corrected by C434 to File46 lines117–133; arithmetic already25/23.','Corrected LXX8464 and SKL observations remain supplemental.'],'audit_through_C478':a,'alternate_method_checks':98,'alternate_checks_included_in_main_total':True,'C480_executed':False,'canonical_or_graph_edits':False}