from pathlib import Path
import json,hashlib
HERE=Path(__file__).resolve().parent
BASE=HERE.parents[2]
specs={
'File60':('project_sources/36-File_60.Levitical_Covenant_Spine_161_299_Key_of_23_Reconciliation-10-.md',[(374,630,'§§2–3.2'),(1029,1234,'§§5–6.2'),(1280,1347,'§§6.5–6.6')]),
'File61':('project_sources/31-File_61.Jacob_Moses_Cumulative_Regular_Root_System-6-.md',[(912,1049,'§6'),(1109,1220,'§§7.3A–7.6'),(1234,1302,'§§8.1–8.4')]),
'File62':('project_sources/18-File_62.Half_Clutch_Birth_Law_Interface-1-.md',[(413,487,'§§1.1–1.4'),(506,585,'§2'),(955,1015,'§7')]),
}
out={'purpose':'Immutable literal source packet for preparatory constraint analysis','sources':{},'excerpts':[],'tables':[]}
for key,(relative,ranges) in specs.items():
p=BASE/relative;b=p.read_bytes();ls=b.decode().splitlines();out['sources'][key]={'path':str(p),'sha256':hashlib.sha256(b).hexdigest(),'bytes':len(b)}
for lo,hi,title in ranges:
out['excerpts'].append({'source':key,'section':title,'first_line':lo,'last_line':hi,'text':'\n'.join(ls[lo-1:hi])})
i=lo-1
while i<hi:
if ls[i].startswith('|'):
a=i;rows=[]
while i<hi and ls[i].startswith('|'):rows.append({'line':i+1,'literal':ls[i]});i+=1
out['tables'].append({'source':key,'section':title,'first_line':a+1,'last_line':i,'rows':rows})
else:i+=1
source_params=[
('Q',1866,'File60 §2.2','author-bound Covenant coordinate'),('T',1406,'File60 §3.2','retained whole-year terminal'),('qI',1,'File60 §2.2','Covenant to Ishmael birth offset'),('qX',15,'File60 §2.2','Covenant to Isaac birth offset'),('xJ',60,'File60 §2.4','Isaac to Jacob birth'),('jCall',77,'File60 §2.3','Jacob call age'),('callL',10,'File60 §2.7','Jacob call to Levi birth'),('callZ',14,'File60 §2.7','Jacob call to Joseph birth; source household duration, not a fitted clutch'),('L_I',137,'File60 §3.1','Ishmael lifespan'),('L_L',137,'File60 §3.1','Levi lifespan reused in regular and cumulative paths'),('L_J',147,'File60 §2.3','Jacob lifespan reused in regular and cumulative paths'),('L_Z',110,'File60 §6.6','Joseph lifespan'),('L_A',175,'File60 §2.6; File61 §7.5','Abraham lifespan'),('Moses_birth',1526,'File61 §7.5','fixed Moses source birth'),('full_state_shift',215,'File60 §0.4; File61 §8.2','declared MT Minimum to full430 comparison'),('L_Isaac',180,'File61 §7.5','Isaac lifespan'),('L_Kohath',133,'File61 §7.5','Kohath lifespan'),('L_Amram',137,'File61 §7.5','Amram lifespan, separately labelled from equal-valued Levi'),('phase','7/2','File61 §7.6; File62 §1.3','exact Aaron/Tishri phase, not whole-year3')]
out['source_local_parameters']=[{'name':n,'value':v,'source':s,'role':r} for n,v,s,r in source_params]
out['primitive_exclusions']=['Ishmael-to-Levi161','Levi-to-terminal161','Covenant-to-Levi299','Covenant-to-Joseph276','transformed common1566','generated cumulative boundaries','clutch14 as an independent parameter','half-clutch7 as an independent parameter']
out['caveat']='The packet is source-local, not a claim of ultimate historical independence or a globally shortest description. qI/qX inherit authorial Covenant placement; biological lifespans and household timing remain supplied premises.'
(HERE/'source_packet.json').write_text(json.dumps(out,indent=2,ensure_ascii=False)+'\n')
print(json.dumps({'sources':len(out['sources']),'excerpts':len(out['excerpts']),'tables':len(out['tables']),'parameters':len(source_params)}))
Evidence
freeze sources.py
Linked sources and evidence
Edition and provenance
freeze_sources.py
SHA-256 5f03358b0dafa04ebfa4bc6d8ec878c60d6e664276f828842d5e3a3f29f15eb7
C480–C1634/Research_Cycles/C0932_C1131/prep/covenant_constraints/freeze_sources.py