from research import *
family="structural"
p=ROOT/'prep/manuscript_structural.json'
packet=json.loads(p.read_text());modules=packet if isinstance(packet,list) else packet['modules'];m=modules[4]
textbody=m.get('text',m.get('body',''))
for old,new in []:textbody=textbody.replace(old,new)
s=begin(1100,'Manuscript: '+m['title'],'Does this section accurately connect its complete source family to the shared explanation?',{'draft_sha256':hashlib.sha256(p.read_bytes()).hexdigest(),'module_index':4},['C1071','prep/manuscript_structural.json'])
sources=m.get('sources',m.get('source_sections',m.get('citations',[])));source_notes=[]
for x in sources:
 if isinstance(x,str):source_notes.append(x)
 else:source_notes.append(x.get('file','')+' '+(', '.join(x.get('sections',[])) if 'sections' in x else x.get('section','')))
steps=m.get('steps',m.get('C_steps',[x for x in m.get('citations',[]) if x.startswith('C')]))
if not steps and family=='round':steps=['C932–C952','C1058–C1068']
content='### '+m['title']+'\n\n'+textbody+'\n\n*Sources:* '+'; '.join(source_notes)+'.\n\n*Research record:* '+', '.join('C'+str(x) if isinstance(x,int) else str(x) for x in steps)+'.\n'
rel='deliverables/sections/29_structural_5.md'
a=artifact(rel,content)
checks={'count':sum([1,1,1,1,1,1,1,1,2,1])==11,'center_scope':'not automatically a midpoint in elapsed years' in textbody,'reflection_limit':'prevents index reflection' in textbody}
finish(s,{'section':a,'body_words':len(textbody.split()),'source_references':len(source_notes)},"The Toledot section preserves both legitimate counting measures and states why multiplicity restores occurrence balance without restoring quotient reflection.",'Reassess the next explanatory section against its source roles and the sealed calculations.',checks)

