from research import *
import zipfile
s=begin(1423,'Bind the portable reader bundle','Does the package contain the intended final files and local navigation?',{},['deliverables/490d_Release_Inventory_C1431.json','evidence/package_readers.py'])
p=ROOT/'deliverables/490d_Chronological_Families_Reader_Package_C1431.zip'
with zipfile.ZipFile(p) as z:names=z.namelist();readme=z.read('README.md').decode()
r={'path':str(p.relative_to(ROOT)),'sha256':hashlib.sha256(p.read_bytes()).hexdigest(),'bytes':p.stat().st_size,'entries':len(names),'readme':'README.md','source_package_map':'SOURCE_TO_PACKAGE.json'}
a=artifact('model/reader_package_binding.json',json.dumps(r,indent=2)+'\n')
finish(s,{'reader_package':r,'binding':a},'The portable reader bundle contains all26 release artifacts plus its README, dual-hash map and manifest. It leads with the14-page main reader and7-page companion.','Verify the bundle manifest and local-link projection.',{'twenty_nine':len(names)==29,'safe_names':all(Path(n).name==n for n in names),'readme_scope':'separate full evidence archive' in readme})
Evidence
s1423.py
Edition and provenance
s1423.py
SHA-256 28b145f0e9e72dc11eeebd62a6f87c6c65de512c884a7c414f3ba312df2806c6
C480–C1634/Research_Cycles/C1132_C1431_Recovered/evidence/s1423.py