        import webvtt
        rows=output.get('cues',[]);by_id={r.get('id'):r for r in rows};check('说话人与两条cue完整',set(by_id)=={'C1','C2'} and all(by_id.get(r['id'],{}).get('speaker')==r['speaker'] for r in original['cues']));check('第二句换行仍保留','\n' in by_id.get('C2',{}).get('text',''))
        vtt='WEBVTT\n\nSTYLE\n::cue { color: white; background-color: #352244; }\n\n'
        for r in original['cues']:
            content=by_id.get(r['id'],{}).get('text','');vtt+=r['id']+'\n'+r['start']+' --> '+r['end']+' line:85% position:50% align:middle\n<v '+r['speaker']+'>'+html.escape(content)+'</v>\n\n'
        artifact('captions.vtt').write_text(vtt);parsed=webvtt.read(str(folder/'captions.vtt'));check('原生WebVTT解析两cue',len(parsed.captions)==2 and parsed.captions[1].start=='00:00:03.000')
        clip=folder/'silent-sample.mp4';ffmpeg=shutil.which('ffmpeg')
        if ffmpeg:
            subprocess.run([ffmpeg,'-y','-hide_banner','-loglevel','error','-f','lavfi','-i','color=c=0x291343:s=640x360:r=10:d=6','-c:v','libx264','-pix_fmt','yuv420p',str(clip)],check=True,capture_output=True);artifacts.append(clip.name)
        page='''<!doctype html><html lang="zh-CN"><meta charset="utf-8"><style>body{font:20px system-ui;background:#f8f4ed;color:#352244;padding:30px}video{width:640px;max-width:100%}pre{white-space:pre-wrap}</style><h1>原生WebVTT加载示例</h1><p>需使用HTTP本地服务打开；片段由ffmpeg生成纯色6秒静音素材，视频模型调用为0。</p><video controls muted src="silent-sample.mp4"><track id="captions" kind="subtitles" src="captions.vtt" srclang="zh" label="中文" default></video><pre id="status">等待track加载</pre><script>const t=document.querySelector('track');const v=document.querySelector('video');v.textTracks[0].mode='showing';t.addEventListener('load',()=>{document.querySelector('#status').textContent=JSON.stringify({readyState:t.readyState,cues:[...t.track.cues].map(c=>({id:c.id,text:c.text,start:c.startTime,end:c.endTime}))},null,2)});</script></html>'''
        artifact('track-demo.html').write_text(page);result={'cues':[{'id':c.identifier,'start':c.start,'end':c.end,'text':c.raw_text} for c in parsed],'browserTrackLoad':'requires real browser acceptance, not claimed by Python','sampleMediaGeneratedBy':'ffmpeg lavfi; no video model' if ffmpeg else 'ffmpeg unavailable; browser demo needs supplied media'}
