from research import *
s=begin(1321,'Compile the complete family reconstruction ledger','Do all six entries share a usable contract and bound evidence?',{},['C1314–C1320'])
names=['genealogy','SP_rectangle','Moses','inverse_Keys','Covenant','counts_NT']; entries=[]
for name in names:
 p='model/reconstruction_'+name+'.json'; r=json.loads((ROOT/p).read_text()); assert set(r)==set(json.loads((ROOT/'model/reconstruction_entry_contract.json').read_text())['required'])
 entries.append({'id':name,'path':p,'sha256':hashlib.sha256((ROOT/p).read_bytes()).hexdigest(),'reconstruction':r})
a=artifact('deliverables/Reconstruction_Ledger_C1321.json',json.dumps({'purpose':'Complete bounded families, with source premises and information loss retained','entries':entries},indent=2)+'\n')
finish(s,{'ledger':a,'families':len(entries)},'All six families now have the same source-to-result structure. This is sufficient to build a connected explanation without presenting a new universal source theory.','Identify the exact shared interfaces between ledger entries.',{'six':len(entries)==6,'all_evidence':all((ROOT/p).exists() for e in entries for p in e['reconstruction']['evidence'])})
