from research import *
p=ROOT/'prep/operator_extension_proposals.json';d=json.loads(p.read_text());rows=d['literal_source_row_packet']
s=begin(1177,'Freeze the complete labelled genealogy for the next extension','Can the pre- and post-Flood rows be tested together without losing count and source tags?',{'proposal_packet_sha256':hashlib.sha256(p.read_bytes()).hexdigest()},['File18 §§2–4','prep/operator_extension_proposals.json'])
a=artifact('model/complete_source_row_packet.json',json.dumps(rows,indent=2)+'\n')
sp={r['name']:r for r in rows['SP']};lx={r['name']:r for r in rows['LXX']}
finish(s,{'complete_source_rows':a,'counts':{t:len(v) for t,v in rows.items()},'next_domain':'ordinary rows plus separately tagged SP inclusive counts; no inferred physical remainder for those counts'},'The58-row native packet preserves ordinary biographies, SP inclusive exceptions, nominal versus completed Lamech intervals and nativeCainan. It enables a full pre/post-Flood operator comparison under explicit types.','Check how the source-supported century operation changes its conserved quantity across the Flood.',{'58rows':sum(map(len,rows.values()))==58,'sourceLXX753':lx['Lamech']['L_ledger']==753,'calculated571':lx['Lamech']['r_calculated']==571,'SPtagged':all(sp[n]['L_counting'] for n in ['Jared','Methuselah','Lamech'])})
