52 lines
4.0 KiB
Python
52 lines
4.0 KiB
Python
"""Seal only this newly created audit and copy small evidence into Git registry."""
|
|
import json
|
|
from pathlib import Path
|
|
import shutil
|
|
import time
|
|
from audit import save,digest,seal,immutable_check
|
|
|
|
ROOT=Path('/data/digital-drosophila');MODEL=ROOT/'models/male-cns-lif/apl-pn-scope-audit-v1';EXP=ROOT/'experiments/phase4aa-apl-pn-scope'
|
|
def main():
|
|
assert not (EXP/'manifest.json').exists() and not (MODEL/'manifest.json').exists(),'Already sealed'
|
|
static=json.loads((EXP/'audit/results.json').read_text())
|
|
local=json.loads((EXP/'localization/summary.json').read_text())
|
|
pairs=json.loads((EXP/'localization/complete-pair-set-validation.json').read_text())
|
|
gpu=json.loads((EXP/'retry-with-correct-PATH/gpu-frozen-regression/summary.json').read_text())
|
|
external=json.loads((EXP/'external-resources/synaptic-partners/download-verification.json').read_text())
|
|
assert static['frozen_integrity_pass'] and local['pass'] and pairs['pass'] and gpu['pass'] and external['pass']
|
|
post=immutable_check(ROOT,ROOT/'registry/snapshots/bootstrap-20260929',4)
|
|
save(EXP/'regression/final-old-files-integrity.json',post);assert post['pass']
|
|
result={'phase':'4AA','status':'PASS-APL-PN-ANATOMICAL-LOCALIZATION / NO-DYNAMICS-CANDIDATE',
|
|
'candidate':False,'previous_static_spatial_block_resolved_by_user_authorized_reference_data':True,
|
|
'old_static_audit_retained_without_overwrite':True,'canonical_neurons':166700,'canonical_edges':25582938,
|
|
'APL_PN_edges':268,'APL_target_PNs':259,'APL_PN_contacts':4600,'calyx_contacts':3820,
|
|
'calyx_fraction':3820/4600,'ROI_unspecified_contacts':731,'other_ROI_contacts':49,
|
|
'watched_PN_contacts':247,'watched_calyx_contacts':228,'watched_unspecified_contacts':19,
|
|
'complete_pair_checks':pairs,'frozen_trials_pass':gpu['pass'],'frozen_trials_count':len(gpu['trials']),
|
|
'old_scientific_files_verified':post['checked'],'old_file_integrity_pass':post['pass'],
|
|
'external_MD5_pass':external['pass'],'external_SHA256':external['sha256'],
|
|
'brain_dynamics_changed':False,'training':False,'receptor_or_terminal_gain_calibrated':False,
|
|
'bouton_identity_confirmed':False,'ComfyUI_stopped_or_unloaded':False,'top_level_gate_fraction':'5/10',
|
|
'failures_preserved':['initial experiment-directory permission before any output','first GPU build lookup of Ninja failed before simulation','first aria2 checksum argument invalid before download'],
|
|
'finalized_utc':time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime())}
|
|
save(EXP/'audit/final-summary.json',result)
|
|
with (MODEL/'REPORT.md').open('rb') as src,(EXP/'REPORT.md').open('xb') as dst:shutil.copyfileobj(src,dst)
|
|
model_count=seal(MODEL);experiment_count=seal(EXP)
|
|
verified=[]
|
|
for base in (MODEL,EXP):
|
|
manifest=json.loads((base/'manifest.json').read_text());bad=[r['path'] for r in manifest['files'] if digest(base/r['path'])!=r['sha256']]
|
|
assert not bad;verified.append({'path':str(base),'files':len(manifest['files']),'pass':not bad})
|
|
registry=ROOT/'registry/phase4aa-apl-pn-scope';registry.mkdir(exist_ok=False)
|
|
records=[]
|
|
for p in sorted(EXP.rglob('*')):
|
|
if not p.is_file() or p.suffix not in ('.json','.csv','.md','.sha256') or p.stat().st_size>2*1024**2:continue
|
|
dst=registry/'evidence'/p.relative_to(EXP);dst.parent.mkdir(parents=True,exist_ok=True)
|
|
with p.open('rb') as src,dst.open('xb') as out:shutil.copyfileobj(src,out)
|
|
records.append({'original_path':str(p.relative_to(ROOT)),'copy_path':str(dst.relative_to(registry)),'sha256':digest(p),'bytes':p.stat().st_size})
|
|
save(registry/'evidence-index.json',records);save(registry/'seal-verification.json',verified)
|
|
doc=ROOT/'docs/progress/phase4aa-apl-pn-scope.md';doc.parent.mkdir(parents=True,exist_ok=True)
|
|
with (MODEL/'REPORT.md').open('rb') as src,doc.open('xb') as dst:shutil.copyfileobj(src,dst)
|
|
print(json.dumps({'result':result['status'],'model_files':model_count,'experiment_files':experiment_count,'evidence_copies':len(records),'all_seals_pass':True}),flush=True)
|
|
|
|
if __name__=='__main__':main()
|