from pathlib import Path
import json,hashlib,zipfile
root=Path(__file__).resolve().parents[1]
files=[]
for dirname in ['evidence','model','agents','assets','deliverables']:
for p in (root/dirname).rglob('*'):
if p.is_file() and p.suffix not in ['.zip','.pyc'] and '__pycache__' not in p.parts:
files.append(p)
for p in (root/'prep').glob('*'):
if p.is_file() and p.suffix in ['.py','.md']:
files.append(p)
for name in ['README.md','journal.json','research.py','runner.py','verify_cycle.py','verification.json','Strategy_Review_After_C1532.md','Strategy_Review_After_C1582.md']:
p=root/name
if p.exists():files.append(p)
manifest={str(p.relative_to(root)):{'bytes':p.stat().st_size,'sha256':hashlib.sha256(p.read_bytes()).hexdigest()} for p in sorted(set(files))}
m=root/'MANIFEST.json';m.write_text(json.dumps(manifest,indent=2,ensure_ascii=False)+'\n')
out=root/'deliverables/490d_C1483_C1582_Research_Evidence_20260929.zip'
with zipfile.ZipFile(out,'w',zipfile.ZIP_DEFLATED) as z:
for p in sorted(set(files))+[m]:z.write(p,Path(root.name)/p.relative_to(root))
with zipfile.ZipFile(out) as z:
assert z.testzip() is None
for name,binding in manifest.items():
payload=z.read(root.name+'/'+name)
assert len(payload)==binding['bytes']
assert hashlib.sha256(payload).hexdigest()==binding['sha256']
result={'file':out.name,'payloads':len(manifest),'bytes':out.stat().st_size,'sha256':hashlib.sha256(out.read_bytes()).hexdigest(),'manifest_check':'PASS'}
(root/'prep/package_result.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result))
Evidence
package.py
Edition and provenance
package.py
SHA-256 071bc20421dcfc72cdadf12ef8e52c6d72679a61da3463e578b8e44048add9cc
C480–C1634/Research_Cycles/C1483_C1582/c1483_c1582/prep/package.py