# Adobe Podcast音频交接校验：SHA-256清单核对WAV，定位被替换的中间区块

1. 固定导出后交接范围
先列已取得的逐人源轨与节目编辑版，给每份文件独立file_id和role，另填项目/导出/批准记录。官方支持逐人原始录音下载，但本课不重做远程录制、上传进度或服务端恢复；没有真实导出时直接用sender目录的作者正弦样例练习。

2. 发件端冻结可信清单
运行python3 freeze-manifest.py sender track-list.json manifest.json。作者脚本实际读取文件字节SHA-256及WAV采样率、位深、声道和帧数，并按一秒PCM生成区块摘要。先人工批准原件，再只读保存这份清单；不要在接收端用收到的文件重建“正确”清单。

3. 按角色打包并保留清单来源
交付文件路径与track-list.json一一对应，把节目版明确标为program_fixture，源轨样例标为source_fixture。真实项目可替换为participant_original与program。清单来源另行确认；SHA不证明录制者身份，也不能发现批准原件在下载前就已缺内容。

4. 接收端复核整文件摘要
先运行python3 verify-handoff.py manifest.json recipient-good，三份文件均匹配才退出0。再对recipient-missing运行，缺guest-source.wav会实际退出1；不得以“文件夹能打开”代替数量与路径核对。该命令为作者本地验收，不调用Adobe接口。

5. 定位同长文件的中间变更
运行python3 verify-handoff.py manifest.json recipient-gap。坏例保留48000Hz、16bit、192000帧与4秒总长，仅将嘉宾PCM的第48000至96000帧置零，真实报告定位[1,2)秒摘要变化。时长一致仍不能证明字节完整；区块不一致不是模型检测到的语义缺段。

6. 排除节目版冒充源轨
对recipient-role-error运行同一检查：guest-source.wav实际被program-mix.wav替换，报告整文件不匹配并识别其摘要等于已知节目版。角色判断来自可信清单及字节对应，不是从波形自动推断谁在说话。保留错误文件供定位，回发件端取正确原件。

7. 复验并交接异常单
修正复制或重新取得原批准文件后重跑，保存原始stdout、退出码、文件身份与异常区间。随包四次实测为正常0、中间替换1、角色替换1、缺文件1。真实项目仍应回听内容；无可信原件时不能靠补静音或改清单把失败变为通过。

身份：本地作者交接契约，目标Adobe操作未执行。

文件入口：index.html；命令与真实退出码见handoff-validation.json。manifest.json必须来自可信发件端，不能用坏接收副本反向重建。
