        steps=output.get('steps',[]);golden={'S1':{'parts':['BASE','LEG'],'depends_on':[]},'S2':{'parts':['BOLT'],'depends_on':['S1']},'S3':{'parts':['TOP'],'depends_on':['S2']},'S4':{'parts':['LID'],'depends_on':['S3']}};by_id={r.get('id'):r for r in steps};check('四个编号不漏不增',set(by_id)==set(golden) and len(steps)==4)
        seen=set();valid_order=True
        for r in steps:
            if not set(r.get('depends_on',[]))<=seen:valid_order=False
            seen.add(r.get('id'))
        check('依赖先后真实成立',valid_order);check('零件与图示一一对应',all(set(by_id.get(s,{}).get('parts',[]))==set(r['parts']) and set(by_id.get(s,{}).get('depends_on',[]))==set(r['depends_on']) for s,r in golden.items()));write_csv(artifact('assembly-steps.csv'),[{'id':r.get('id'),'parts':'|'.join(r.get('parts',[])),'depends_on':'|'.join(r.get('depends_on',[]))} for r in steps]);result={'steps':steps,'orderValid':valid_order}
