import fs from 'node:fs';
import path from 'node:path';
import {manifest,videos,selectNarrationRelease} from '../../unreal_tran_web/src/features/virtual-training-scripts/narration-release.js';
const dir=path.resolve('reports/bridge-narration-junhao-20260921');
const progress=JSON.parse(fs.readFileSync(path.join(dir,'generation.json'),'utf8'));
const quality=JSON.parse(fs.readFileSync(path.join(dir,'quality.json'),'utf8'));
const old=selectNarrationRelease('previous');
const esc=s=>String(s??'').replaceAll('&','&').replaceAll('<','<').replaceAll('>','>').replaceAll('"','"');
const link=url=>'../../../unreal_tran_web/public'+url;
const cards=manifest.scripts.flatMap(p=>p.steps.map(c=>{
const v=videos.scripts.find(s=>s.id===p.id).steps.find(s=>s.stepCode===c.stepCode);
const before=old.videos.scripts.find(s=>s.id===p.id).steps.find(s=>s.stepCode===c.stepCode);
const q=quality.find(s=>s.key===`${p.code}-step-${String(c.number).padStart(2,'0')}`);
return `${p.code} · 第${c.number}步
${esc(c.expectedTitle)}
${esc(c.text)}
Junhao 语音 · 旧版视频对比 · ${v.duration.toFixed(2)}秒
查看机器转写辅助记录
${esc(q.asrText)}
专业词语可能识别错误;此记录不能代替试听或口型验收。音轨比对偏移 ${q.audioLagMs}ms。 `;
})).join('');
const duration=progress.clips.reduce((n,c)=>n+c.videoDuration,0);
fs.writeFileSync(path.join(dir,'index.html'),`
005~008 · Junhao 新讲解005~008 · 新版步骤讲解
教员1 v2 · MOSS · Junhao · 1.0倍速 · 3:439段视频,共${duration.toFixed(2)}秒。对应39份新语音,复核提示音同样使用Junhao。旧版80个媒体文件全部保留。
本地任务已切换新版静态引用。音轨、编码和时长检查通过;发音、自然度和视觉口型仍需人工试听确认。
文件位置与回退方法 · 四套模型逐步验收
${cards}`);
const notes=`# Junhao 讲解资源交付(2026-09-21)
- 默认配置来源:数字车间所绑定的“${progress.profile.agent}”,配置版本${progress.profile.agentDataVersion};默认音色MOSS · Junhao,语速1.0,教员1 v2。
- 39段操作步骤视频(480×640、25fps、H.264/AAC),39份配套WAV;两个平衡阀复核步骤共享1份Junhao提示音。
- 当前静态目录:\`unreal_tran_web/public/legacy/virtual-training/narration-revisions/junhao-v2-20260921/\`。
- 文件以任务号和步骤命名,例如\`TASK-VIRTUAL-005-step-01.mp4\`和同名WAV。
- 新版引用:\`src/features/virtual-training-scripts/narration-release.js\`。新的两个清单文件记录准确标题、说明、讲解词、时长、SHA-256。
- 原清单和80个旧媒体文件保持原字节;\`previous-media.json\`记录旧文件摘要。4段初版重做前的音视频也保留在本报告目录。
## 回退
在前端环境配置中设置\`VITE_BRIDGE_NARRATION_RELEASE=previous\`,开发环境重启Vite;部署环境重新构建前端。切回新版设为\`junhao-v2-20260921\`。两代音视频都在项目中,无需重新生成或改数据库。
## 实施范围
只切换005~008四个静态脚本的操作步骤讲解。背景/讲解导入页与普通训练编排任务不改,005独立新模型编排验证入口116保留原资产。任务模型、步骤、评分和成绩记录不改。没有发布测试环境,也没有提交或推送Git。
## 验证
- 39段全部通过解码、分辨率、帧率、音轨、时长及源音频比对;音轨偏移${Math.min(...quality.map(q=>q.audioLagMs))}~${Math.max(...quality.map(q=>q.audioLagMs))}ms,不是视觉口型误差测量。
- CPU ASR辅助转写记录见\`quality.json\`。专业名词/序号会误识别,${quality.filter(q=>q.needsTranscriptReview).length}段标为人工复核;不能把机器转写相似度当作最终发音评分。
- 四任务本地浏览器播放/切换语音/视频错误回退/加载门控见\`playback.json\`;局域网结果见\`lan-playback.json\`。
- 19项模型与讲解合同测试、正式路由检查、生产构建通过。
- 模型验收见相邻报告,39步95项配置动作通过;原正式005另验证5步6项通过。内容上仍有23步简化、5步待确认和2步关键内容缺失。
技术检查不代替自然度与视觉口型的人工验收,请使用本目录index.html逐段试听对比。
`;
fs.writeFileSync(path.join(dir,'交付说明.md'),notes);
console.log('Review page and rollback documentation ready.');