from research import *
s=begin(1391,'Assemble the final claim and source index','Can the final narrative be traced to exact editions and proofs?',{},['model/final_source_bibliography.json','model/main_claim_routes_v1.json','prep/final_inverse_keys_claim_index.json','prep/final_Covenant_claim_index.json','prep/final_count_family_claim_index.json','prep/claim_source_status_C1315.json'])
paths=['model/final_source_bibliography.json','model/main_claim_routes_v1.json','prep/final_inverse_keys_claim_index.json','prep/final_Covenant_claim_index.json','prep/final_count_family_claim_index.json','prep/claim_source_status_C1315.json']
items=[{'path':p,'sha256':hashlib.sha256((ROOT/p).read_bytes()).hexdigest(),'content':json.loads((ROOT/p).read_text())} for p in paths]
a=artifact('deliverables/490d_Claim_Source_Index_C1431.json',json.dumps({'title':'Source and proof routes for the connected explanation','note':'Source-bound claim indexes retain literal excerpts, locators and original action references; chapter routes connect the reader to these records.','indexes':items},indent=2,ensure_ascii=False)+'\n')
finish(s,{'claim_source_index':a},'The final index combines chapter routes, sixteen principal source editions and the detailed source/proof claims for the inherited and newly connected families.','Publish the glossary as a reader reference.',{'six_indexes':len(items)==6,'all_hashes':all(hashlib.sha256((ROOT/x['path']).read_bytes()).hexdigest()==x['sha256'] for x in items)})
