from research import *
import re
s=begin(1410,'Validate final reader navigation','Do all file links resolve to included release artifacts?',{},['deliverables/490d_Start_Here_C1431.md','deliverables/490d_Reading_Guide_C1431.md','deliverables/490d_Chronological_Families_Explanation_C1431.md'])
paths=['deliverables/490d_Start_Here_C1431.md','deliverables/490d_Reading_Guide_C1431.md','deliverables/490d_Chronological_Families_Explanation_C1431.md'];rows=[]
prefix='sandbox:/workspace/scratch/1b40da62dcbd/c1132_c1431/'
for p in paths:
for link in re.findall(r'\]\((sandbox:[^)]+)\)',(ROOT/p).read_text()):
assert link.startswith(prefix);rel=link[len(prefix):];rows.append({'from':p,'target':rel,'exists':(ROOT/rel).exists()})
a=artifact('model/final_navigation_validation.json',json.dumps({'links':rows,'portable_note':'The reader bundle also supplies all files with local filenames; sandbox links serve this conversation.'},indent=2)+'\n')
finish(s,{'navigation':a,'links_checked':len(rows)},'All fourteen conversation file links resolve to included release artifacts. The same files will be grouped in the portable reader bundle.','Bind the source editions that govern the final claims.',{'fourteen':len(rows)==14,'all_exist':all(x['exists'] for x in rows)})
Evidence
s1410.py
Edition and provenance
s1410.py
SHA-256 7c3aef0e684a60f74ca5db65d86caad8348fc42f3ec838dd67ea4a8586d68f4a
C480–C1634/Research_Cycles/C1132_C1431_Recovered/evidence/s1410.py