"""Current release acceptance; no test count is a production maturity score.""" from pathlib import Path import argparse,csv,json,subprocess,sys,re,hashlib,ast ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) import numpy as np def load(name):return json.loads((ROOT/name).read_text()) def run(output,require_replay=False): gates=[] def gate(name,passed,detail):gates.append({'name':name,'passed':bool(passed),'details':detail}) required=['README.md','MANUSCRIPT.md','AUREOLE_R_v3.0.0_Certified_Innovation_Rendering.pdf','STATUS.json','CLAIMS.json','AI_AGENT_INDEX.json', 'THEOREM_INDEX.md','docs/INNOVATION_THEORY.md','docs/CERTIFICATE_API.md','models/visibility_prior.npz', 'results_v3/innovation_raw.csv','results_v3/queries_raw.csv','RUN_INNOVATION.bat','PUBLISH_HF.bat','CITATION.cff','LICENSE'] missing=[p for p in required if not (ROOT/p).is_file()] gate('required_files',not missing,{'missing':missing}) total=0 for start,count,name in [('tests',44,'current'),('legacy/code',14,'foundational')]: p=subprocess.run([sys.executable,'-m','unittest','discover','-s',start,'-p','test_*.py','-v'],cwd=ROOT,capture_output=True,text=True) match=re.search(r'Ran (\d+) tests?',p.stderr);actual=int(match.group(1)) if match else 0;total+=actual if output.startswith('results_v3/'):(ROOT/f'results_v3/{name}_tests.log').write_text(p.stdout+p.stderr) gate(name+'_tests',p.returncode==0 and actual==count,{'passed_count':actual,'expected':count}) r=load('results_v3/innovation_report.json');q=load('results_v3/queries_report.json');status=load('STATUS.json') old=set(load('results/training.json')['training_scene_ids'])|set(load('results/training.json')['validation_scene_ids'])|set(load('results/training.json')['test_scene_ids'])|set(load('results/followup_report.json')['protocol']['scene_ids']) a=set(r['protocol']['scene_ids']);b=set(q['protocol']['scene_ids']) gate('held_out_splits',not(a&b or a&old or b&old),{'new_motion_scenes':len(a),'new_query_scenes':len(b)}) raw=list(csv.DictReader((ROOT/'results_v3/innovation_raw.csv').open())) errs=[] for s in r['summary']: vals=[float(x['expected_mse']) for x in raw if x['phase']==s['phase'] and x['method']==s['method']] errs.append(abs(np.mean(vals)-s['expected_mse'])) rays=sum(int(x['rays']) for x in raw) gate('motion_raw_consistency',len(raw)==r['records'] and rays==r['online_segment_queries'] and max(errs)<1e-12, {'records':len(raw),'queries':rays,'max_summary_difference':float(max(errs))}) supported=[x for x in raw if x['method']!='unsafe_eliminate'] false=sum(int(x['false_certificates']) for x in supported);width=max(float(x['enclosure_violation']) for x in supported) gate('supported_certificate_audit',false==0 and width<1e-12,{'false_acceptances':false,'max_interval_violation':width}) unsafe=sum(int(x['false_certificates']) for x in raw if x['method']=='unsafe_eliminate') gate('unsafe_negative_control_retained',unsafe>0,{'false_acceptances_in_deliberately_unsafe_ablation':unsafe}) qr=list(csv.DictReader((ROOT/'results_v3/queries_raw.csv').open())) fresh=sum(int(x['fresh_queries']) for x in qr);base=sum(int(x['shared_fresh_baseline_queries']) for x in qr) gate('query_family_accounting',fresh==q['residual_queries'] and base==q['shared_fresh_baseline_queries'] and q['total_queries_including_initialization']==fresh+q['initialization_queries'], {'initialization':q['initialization_queries'],'residual_queries':fresh,'shared_baseline':base}) gate('independent_readout_audit',q['false_certificates']==0 and q['max_linear_rgb_error']<1e-12, {'false_certificates':q['false_certificates'],'max_linear_error':q['max_linear_rgb_error']}) hashes=[] for file,report in [('experiments_innovation.json',r),('experiments_queries.json',q)]: hashes.append(hashlib.sha256((ROOT/file).read_bytes()).hexdigest()==report['protocol_sha256']) gate('frozen_protocol_hashes',all(hashes),{'both_match':all(hashes)}) v2=load('results/followup_report.json');retained=load('results/rendering_report.json') gate('prior_evidence_retained',v2['record_count']==5280 and retained['record_count']==7392, {'v2_frame_method_records':v2['record_count']+retained['record_count']}) errors=[] if require_replay: rr=load('innovation_reproduced/innovation_report.json');qq=load('queries_reproduced/queries_report.json') for original,again in zip(r['summary'],rr['summary'],strict=True): for key in ('expected_mse','observed_mse','rays','certified_fraction_before','false_certificates','max_enclosure_violation'): errors.append(abs(original[key]-again[key])) for key in ('initialization_queries','residual_queries','false_certificates','max_linear_rgb_error'): errors.append(abs(q[key]-qq[key])) gate('full_v3_replay',max(errors)<1e-12,{'metrics':len(errors),'max_difference':float(max(errors)),'timings_excluded':True}) else: recorded=ROOT/'results_v3/replay_validation.json' gate('recorded_v3_replay',recorded.exists() and load('results_v3/replay_validation.json')['passed'],{'live_replay':False}) demo=load('results_v3/demo/demo.json') gate('finite_completion_demo',demo['final_max_error']<1e-12 and demo['physical_queries']==demo['full_domain_terms'] and demo['zero_query_final_frames']>0,demo|{'records':'see demo JSON'}) sources=list((ROOT/'aureole').glob('*.py'))+list((ROOT/'scripts').glob('*.py')) for p in sources:ast.parse(p.read_text()) gate('source_syntax',True,{'files':len(sources)}) gate('honest_scope',status['verified']['gpu_benchmarks']==0 and status['verified']['full_sr_rr_fg_experiments']==0 and status['overall_maturity_estimate_percent']<100, {'maturity_is_subjective':True,'no_gpu_or_full_pipeline_claim':True,'executable_tests':total}) report={'version':'3.0.0','passed':all(x['passed'] for x in gates),'gates_passed':sum(x['passed'] for x in gates),'gates_total':len(gates),'tests':total,'gates':gates, 'scope':'Acceptance of the finite CPU reference; not full scientific maturity or production certification.'} path=ROOT/output;path.parent.mkdir(parents=True,exist_ok=True);path.write_text(json.dumps(report,indent=2)+'\n') if require_replay and output.startswith('results_v3/'): (ROOT/'results_v3/replay_validation.json').write_text(json.dumps({'passed':max(errors)<1e-12,'metrics':len(errors),'max_nontiming_difference':float(max(errors))},indent=2)+'\n') print(json.dumps({'passed':report['passed'],'gates_passed':report['gates_passed'],'gates_total':report['gates_total'],'tests':total,'failures':[x for x in gates if not x['passed']]},indent=2)) return 0 if report['passed'] else 1 if __name__=='__main__': p=argparse.ArgumentParser();p.add_argument('--output',default='validation_reproduced.json');p.add_argument('--require-replay',action='store_true');args=p.parse_args();raise SystemExit(run(args.output,args.require_replay))