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[5]
textbody=m.get('text',m.get('body',''))
for old,new in []:textbody=textbody.replace(old,new)
s=begin(1101,'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':5},['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/30_structural_6.md'
a=artifact(rel,content)
checks={'primary_duration':5326+65-1==77*70,'blocks':77//7==11,'extension_excluded':'AD 65–135 extension is outside' in textbody,'no_unauthorized_merge':'does not authorize the extra grouping' in textbody}
finish(s,{'section':a,'body_words':len(textbody.split()),'source_references':len(source_notes)},"The final transfer section compares the Toledot obstruction with the entire NT490 coarsening, preserving the distinction between the primary path and its printed extension.",'Reassess the next explanatory section against its source roles and the sealed calculations.',checks)

