        answers=output.get('answers',[]);by_id={r.get('id'):r for r in answers};golden={'Q1':'7','Q2':'3','Q3':'yes','Q4':None,'Q5':None,'Q6':None};check('六个问题完整且不重复',set(by_id)==set(golden) and len(answers)==6)
        rows=[];answered=correct=0
        for key,gold in golden.items():
            r=by_id.get(key,{});abstain=r.get('abstain') is True;text=r.get('answer');responded=not abstain and text is not None
            valid=(str(gold) in str(text)) if gold in {'7','3'} else any(s in str(text) for s in ['可以','能','是','yes','true']) if gold=='yes' else False
            answered+=responded;correct+=responded and valid;rows.append({'id':key,'answer':text,'abstain':abstain,'has_support':gold is not None,'answered_correct':bool(responded and valid)})
        result={'coverage':answered/len(golden),'answeredAccuracy':correct/answered if answered else None,'answered':answered,'answeredCorrect':correct,'total':len(golden),'allAbstainNegativeFixture':{'coverage':0,'answeredAccuracy':None},'rows':rows};check('拒答不计作答对',result['answeredCorrect']<=result['answered'] and result['allAbstainNegativeFixture']['answeredAccuracy'] is None);check('未知问题未编造答案',all(by_id.get(k,{}).get('abstain') is True and by_id.get(k,{}).get('answer') is None for k in ['Q4','Q5','Q6']));write_csv(artifact('answers.csv'),rows);dump(artifact('abstention-metrics.json'),result)
