        r=Presentation(f/'source.pptx');shapes=shape_texts(r);expected=[s['id'] for s in shapes];actual=output.get('source_ids',[]);ck('嵌套文字来源全部覆盖且不重复',Counter(actual)==Counter(expected));ck('真实PPT含嵌套group',any(s.shape_type==6 and any(x.shape_type==6 for x in s.shapes) for slide in r.slides for s in slide.shapes));(f/'outline.md').write_text('# '+str(output.get('summary',''))+'\n\n'+'\n'.join('- '+s['id']+': '+s['text'] for s in shapes));result={'covered_ids':actual,'shape_count':len(shapes),'summary':output.get('summary')};art+=['outline.md'];add_native(f/'source.pptx')
