from research import *
s=begin(1388,'Prepare the final reconstruction ledger','Are all six family routes readable and complete?',{},['deliverables/Reconstruction_Ledger_C1321.json'])
d=json.loads((ROOT/'deliverables/Reconstruction_Ledger_C1321.json').read_text())
d['title']='Complete-family reconstruction ledger'
d['reader_notes']=['Each entry retains its source premises, operation route, complete result, additional conditions and information loss.','Source bindings refer to the original completed models; editorial descriptions below do not alter those models.']
g=d['entries'][0]['reconstruction']
g.update({'family':'Ordinary MT/SP/LXX genealogies','source_object':'58 native source rows with begetting and lifespan measures, retaining ordinary/inclusive qualifications','retained_premises':'Ordered selected rows, terminal, boundary bindings, native Cainan and named change supports','operation_route':'Ordinary row repartition and life adjustment → selected birth or lifespan measurement → ordered accumulation','complete_result':'38 matched MT/LXX changes; five amplitudes, or four after e+n=u; matched heads1250/430, native heads1380/890','conserved_or_changed':'A century can preserve lifespan or remainder according to its row operation; the full field retains location.','additional_conditions':'e+n=u is fitted; fivefold calibration C=1.3u,T=.6u is separate.','information_loss':'Head totals alone lose the placement of internal changes.','status':'Conditional full-family reconstruction and clarification'})
a=artifact('deliverables/490d_Reconstruction_Ledger_C1431.json',json.dumps(d,indent=2,ensure_ascii=False)+'\n')
finish(s,{'ledger':a},'The final ledger presents all six source-to-result routes in a common readable format, preserving original model bindings and the complete-family scope.','Bundle the four requested grammar components.',{'six':len(d['entries'])==6,'contracts':all(set(e['reconstruction'])==set(json.loads((ROOT/'model/reconstruction_entry_contract.json').read_text())['required']) for e in d['entries'])})
