from research import *
s=begin(1032,'Source-local Covenant regeneration','Can the node set be regenerated without assuming its161/299/276 outputs?',{},['File60 §§2–3','File61 §§6–8','File62 §§1–2'])
from covenant_model import *
src=json.loads((ROOT/'prep/covenant_constraints/source_packet.json').read_text());v={x['name']:F(x['value']) for x in src['source_local_parameters']};r=regular(v)
a=artifact('model/covenant_source_inputs.json',json.dumps(clean(v),indent=2)+'\n');b=artifact('evidence/covenant_model.py',(ROOT/'evidence/covenant_model.py').read_text());c=artifact('model/covenant_regular_nodes.json',json.dumps(clean(r),indent=2)+'\n')
finish(s,{'inputs':a,'regenerator':b,'regular_nodes':c,'derived_gaps':[r['Ishmael_birth']-r['Levi_birth'],r['Levi_death']-r['terminal'],v['Q']-r['Levi_death'],v['Q']-r['Joseph_death']]},'Source-local birth offsets, household timing and lifespans regenerate all twelve regular nodes. The two161 spans and299/276 radii are outputs, not generating inputs.','Determine what the full node set identifies about its source-local parameters.',{'twelve_nodes':len(r)==12,'generated_gaps':[r['Ishmael_birth']-r['Levi_birth'],r['Levi_death']-r['terminal'],v['Q']-r['Levi_death'],v['Q']-r['Joseph_death']]==[161,161,299,276],'no_generated_input':not any(k in v for k in ['S161','clutch','radius299'])})
