from research import *
manifest=json.loads((ROOT/'evidence/SOURCE_MANIFEST.json').read_text())
s=begin(732,'Select the ordered cross-tradition family','Can one row-to-boundary rule explain the full MT/LXX/SP displacement fields and their rounded residuals?',{'source_manifest_sha256':hashlib.sha256((ROOT/'evidence/SOURCE_MANIFEST.json').read_bytes()).hexdigest(),'predecessor':'C731','comparison':'whole ordered boundary fields; not repeated endpoint totals'},['Research Strategy §§3,5B–G; C731 checkpoint; File18; File51a'])
criteria={'ordered_support':'Each local row difference must account for the corresponding change in boundary displacement.','rounding':'Compare round(b)+round(r) against round(L) on every admitted row.','variants':'Keep source-row edits distinct from named boundary overlays.','transfer':'Use the same declared rule across traditions, preserving exceptions rather than tuning them away.'}
a=artifact('model/RESEARCH_SELECTION.json',json.dumps(criteria,indent=2)+'\n')
finish(s,{'selection':a,'source_snapshots':len(manifest),'primary_File52c':manifest['File52c_latest.md']},'The new cycle will test ordered support and operation compatibility across entire source families. Previous aggregate sums are retained as baseline evidence; the new target is reconstruction of every intermediate boundary and residual.','Freeze the shared source-row alignment and choose the first complete displacement field.',{'primary':manifest['File52c_latest.md']=='a5ea84562101158b60d0cf296765d6eff38e7a2abda4e74ad1b353dfd13b9530','criteria':len(criteria)==4,'sources':len(manifest)>25})
