"""Local file/JSON verification only; never execute a model or rule engine."""
import ast
import csv
import hashlib
import json
from pathlib import Path

root=Path(__file__).resolve().parent.parent
package=root/'Contextra_Fight_ApproachLink_Comparison_20261030'
manifest=json.loads((package/'manifest.json').read_text())
assert set(manifest)=={str(p.relative_to(package)) for p in package.rglob('*') if p.is_file() and p.name!='manifest.json'}
size=0
for name,digest in manifest.items():
    p=package/name;h=hashlib.sha256()
    with p.open('rb') as f:
        for block in iter(lambda:f.read(1024*1024),b''):h.update(block)
    assert h.hexdigest()==digest,name
    size+=p.stat().st_size
report=json.loads((package/'data/comparison.json').read_text())
assert len(report['tables'])==32 and sum(r['displayed'] for r in report['tables'])==18045
assert report['totals']['positive31']==dict(baseline=226,R4=214,R5=210,candidate=198)
assert report['totals']['positiveL02']==dict(baseline=58,R4=56,R5=56,candidate=54)
assert report['totals']['feedbackCxx']==dict(baseline=10,R4=2,R5=0,candidate=7)
assert report['totals']['feedbackL02']==dict(baseline=14,R4=7,R5=3,candidate=10)
assert len(report['new_current'])==1 and not report['new_negative_current']
maps=list(csv.DictReader((package/'data/L02_observation_map.csv').open()))
assert len(maps)==7261 and all(int(x['l01_frame'])-int(x['l02_frame'])==2542 for x in maps)
assert all(abs(float(x['l01_pts'])-float(x['l02_pts'])-105.352669)<1e-8 for x in maps)
assert not list(root.rglob('*.mp4'))
files=list((root/'helpers').glob('*.py'))
for p in files:ast.parse(p.read_text())
value=dict(status='PASS',files=len(manifest)+1,bytes=size+(package/'manifest.json').stat().st_size,
    sha256_verified=True,comparison_denominators_verified=True,L02_mapping=7261,helper_ast=len(files),videos=0,
    manifest_sha256=hashlib.sha256((package/'manifest.json').read_bytes()).hexdigest())
(root/'reports/transfer_validation.json').write_text(json.dumps(value,indent=2))
print(json.dumps(value),flush=True)
