from research import *
s=begin(587,'Generate all twelve Enoch cells','Can one count-and-carrier rule recover the complete source family?',{'N':[77,63,50],'g':[70,72],'rail':110,'terminal_AD':65,'Enoch_index':7},['File69 §§1–3; Appendix B.1–B.4'])
t=json.loads((ROOT/'prep/file68_69_source_tables.json').read_text())['file69_complete_Enoch_cells'];out=[]
for r in t:
 N,g,u=r['N'],r['g'],r['u'];x=(N-7)*u-64;v=[x+110,x,x+110-g,x-g]
 assert v==[r['source_BC'][k] for k in r['role_order']];out.append({'N':N,'g':g,'u':u,'cell':v})
finish(s,{'cells':out,'coordinate_matches':48,'rule':'x=(N−7)u−64; cell=(x+110,x,x+110−g,x−g)'},'One indexed carrier expression reconstructs48 printed coordinates across twelve cells. Accumulation uses u, while local birth-to-ascension uses g; retaining both is the key compression.','Test whether a single ordinary affine map could replace the indexed carrier rule.',{'coverage':len(out)==12,'local_spans':all(r['cell'][0]-r['cell'][2]==r['g'] and r['cell'][1]-r['cell'][3]==r['g'] for r in out)})
