WP20:M2 音效联调与发布门槛
状态(2026-10-25):主仓与 CLI 已实现,真实 Chromium 的 cue 实听、独立构建和长稳已通过;audio_cues 现已默认开放,原 A14–A20 矩阵仍有未覆盖项。MCP 不在当前交付范围。阶段:M2 出口。主责:跨模块验证 / 发布。
前置与输入
修改范围与交付
- 对照验收 A14–A20 完成 cue 存储、切页、点击、并发、执行上下文、配置往返和长稳。
- 真实 Chromium 必测;Firefox/WebKit 记录格式和策略矩阵;独立构建产物验证无 Backend/外网依赖。
- 开放项目 audio/cue capability、Editor 入口和 Runtime Kit
useAudioCue.v1。 - 能力正式开放时更新用户文档、Runtime Kit 能力、External API、CLI 和兼容矩阵;仍明确 BGM/混音/音频导出不支持。
完成标准
- [ ] A14–A20 全部有自动化和实机证据。
- [ ] 1000 次 transition、1000 次 interaction、200 次导航后无对象/监听/声音泄漏。
- [ ] Backend、Editor、Runtime、Renderer、契约、CLI 和适用 E2E 门禁通过,或清楚记录被限制的发布面;MCP 不作为当前门槛。
- [ ] 本卡回填版本组合、命令、结果、浏览器矩阵、产物 hash 和未运行项。
后续联合验收(2026-10-24 至 25)
动画前联合验收补证:CLI 真实读改音频配置及 cue,用户实听旁白与短 cue;独立 ZIP 在 Chromium 连续 30 分 55 秒完成 1000 次 interaction cue、1000 次前进 cue、2000 次导航,0 次 play() 拒绝、0 个外部请求、退出后播放中元素为 0;PDF/PPTX 静态禁播、完整主门禁和真实 Renderer 均通过。这覆盖了原卡所列的主要 Chromium 与 cue 长稳缺口,但 Firefox/WebKit、M4A/OGG 和 A14–A20 其它未逐项验证的场景尚不能标全通过。后续联调由 feature/motion 的放映收敛 A1/B4 接续;cue 已默认开放,未测路径不列为已验收。
当时证据(2026-10-18)
- 自动化已覆盖:ABAC/引用/模板包(Backend 48 项本批目标测试)、切页精确 generation 与 200 次连续导航、1000 次 transition + 1000 次 interaction 的固定实例池、静音/冻结/卸载监听清理、Editor 音频设置保存与 capability 隐藏。
- 已运行:Runtime
pnpm run test(152 files / 1213 passed / 3 skipped)、vue-tsc -b;Editorcheck、test(158 files / 895 passed)、build;Backend 音频/External 目标测试 48 passed;pnpm run test:contracts:generated与根契约测试 110 passed。 - 当时 capability 仍只开放
audio_assets;page_narration与audio_cues保持 false,Editor 音频标签页和useAudioCue.v1未向最终用户宣称可用。2026-10-25 已调整为默认开放。 - 当时未运行:真实 Chromium/Firefox/WebKit 的 autoplay、试听、切页/点击长稳与执行上下文验收;独立构建产物无 Backend/外网依赖验证;Renderer 相关门禁;CLI 独立仓交付与真实流程;数据库迁移在真实 SQLite/PostgreSQL 的 upgrade/downgrade 演练。Chromium、独立构建、Renderer 和 CLI 的后续补证见上文;MCP 已移出当前范围。
- 当时结论:M2 不能宣布发布完成。后续 Chromium 实机与独立构建证据已补齐主要路径,2026-10-25 决定默认开放 cue;未覆盖矩阵继续记录,不据此宣称全面通过。
Review 修复(2026-10-19)
独立 review 在开放 capability 前发现 3 个 P1 播放链路问题与 2 个 P2 边界问题,均已修复并补回归测试:
- 旁白有效音量:
AudioViewer现在按master × narration × AssetAudio.volume设置原生音量;内容音频保持组件音量,任一项目音量为 0 时旁白静音。 - 兜底错误语义:主音频失败切换到
fallbackSrc时只发media-reset,兜底也失败才发error;放映宿主不会在兜底仍可发声时中止。 - BFCache 恢复:
pageshow.persisted=true先停残留短音效,再按可见性恢复,修复恢复后 cue 永久 suspend。 - 公开 key 边界:
useAudioCue.v1与注入服务只接受合法interaction.*;transition.*只能由切页单通道触发。 - Editor 资源选择器:分页“加载更多”最多按 100 条追加;未加载的已绑定资源保留占位并在加载后替换。
- 复验已运行:Runtime
pnpm run test(152 files / 1219 passed / 3 skipped)、vue-tsc -b;Editorcheck、test(158 files / 896 passed)、build。capability 仍保持关闭,实机证据缺口不变。
建议提交标题:WP20:完成 M2 页面音效联调。