WP15:Router、页面就绪与调度桥接
状态:完成(2026-10-17)。阶段:M1。主责:Runtime。 上层工作项:R02(宿主接入)、G01(稳定页);详见模块计划。本包是该工作项的实施拆分,不是另一份配置契约。
前置与输入
前置完成:WP05、WP11、WP13、WP14。 字段与行为以统一契约为准;所有依赖编号见执行清单。
修改范围与交付
- 修改范围:Router 会话绑定、现有叶子目录、页面 DOM/必要资源就绪、过渡信号及错误恢复;一次性 auto_start 接入。
- 交付物:真实页面就绪并结束过渡后才开始停留计时的运行链路。
- 提交边界:不复制第二套目录或直接绕过 navigateRuntimePage;不实现媒体结束和观众窗口调度。
完成标准
- [x] 实现及评审覆盖上述修改范围,未超出提交边界。
- [x] 行为验收:加载不吃停留时间;手动跳页、浏览器导航和卸载作废旧任务;资源失败暂停且可见。
- [x] 验证范围:组合式/宿主 integration,延迟加载、旧事件、路由失败与捕获禁推进测试。
- [x] 关联验收:A09、A10、A12、A13、A16;见联调与验收计划。真实浏览器证据在 WP21。
- [x] 记录代码版本、实际测试命令/结果、未运行项及原因,产物保存到任务专属临时目录。
- [x] 回填本卡状态与证据;阶段能力是否开放由对应阶段出口包决定,单包完成不等于整阶段交付。
建议提交标题:WP15:Router、页面就绪与调度桥接。通常按一个可评审 PR 实施;若实际改动仍过大,先按输入/输出再拆子包,保留父编号和依赖。
测试环境与命令选择遵循 dev-start-test,不因执行本卡重复启动服务或重置开发数据。
实施记录
- 交付:usePlaybackHost.ts 与 PlaybackHostBridge.vue,在普通放映布局中接入调度;观众窗口本包不挂载调度桥,演讲模式保持手动。
- 目录:复用
getRouteInfosSortedByPageNumber()与现有navigateRuntimePage,RouteInfo新增叶子页生效advance;隐藏页和分组不进入序列。playbackConfig暴露项目autoStart/loop。 - 就绪时序:路由路径变化先
notifyPageChange;等待RuntimePageStage的settled(路径匹配、新事件)后,定位.runtime-page-print-source,再用限定根节点的视觉资源探针(图片/背景/图表/字体,15s 上限、不等待整页动画)确认就绪,最后上报reportReady。 - generation:每次尝试记录控制器 path/generation;旧页 settled、旧探测结果、卸载后的 Promise 都不会上报。资源失败、节点缺失、路由错误进入
error并在宿主显示可见告警,不创建推进计时。 - 自动开始:在
onMounted占用RuntimeSession.autoStartAttempted,每个 Router 会话只尝试一次;仅当执行策略允许自动推进且auto_start=true时启动。卡片/缩略图/捕获上下文不创建控制器或计时句柄。 - 验证:新增 9 个宿主集成测试(自动开始一次、延迟就绪、旧 settled、资源失败、节点缺失、导航错误、重新挂载、捕获禁推进、目录构建);专项 48 passed;Runtime 完整门禁 136 files / 1036 passed / 3 skipped,构建通过。证据保存在
.tmp/wp15/。 - 未运行项:可见性暂停与控制条(WP16)、Renderer/导出(WP17/WP18)、真实浏览器 A09/A10/A12/A13(WP21)、观众窗口唯一调度与媒体(M2)。