WP12:M0 配置与动画联调门槛
状态:完成(2026-10-17)。阶段:M0。主责:跨模块验证 / 发布。 上层工作项:M0 出口、A01–A08;详见模块计划。本包是该工作项的实施拆分,不是另一份配置契约。
前置与输入
前置完成:WP06、WP08、WP10、WP11。 字段与行为以统一契约为准;所有依赖编号见执行清单。
修改范围与交付
- 修改范围:冻结同版 Backend/Editor/Runtime,执行 A01–A08,复核 API、Gateway、模板与真实预览/构建证据。
- 交付物:M0 验收报告和配置/动画贯通的可发布版本组合。
- 提交边界:只关闭 M0;不得据此宣布单窗口定时、媒体或双屏自动放映完成。
完成标准
- [x] 实现及评审覆盖上述修改范围,未超出提交边界。
- [x] 行为验收:所有上游工作包完成;旧项目保留原行为;M0 能力声明不包含可用的自动放映。
- [x] 验证范围:按技能选择跨模块门禁,实际预览/构建与双库迁移;发布前执行主全量及适用专项。
- [x] 关联验收:A01–A08;见联调与验收计划。
- [x] 记录代码版本、实际测试命令/结果、未运行项及原因,产物保存到任务专属临时目录。
- [x] 回填本卡状态与证据;阶段能力是否开放由对应阶段出口包决定,单包完成不等于整阶段交付。
建议提交标题:WP12:M0 配置与动画联调门槛。通常按一个可评审 PR 实施;若实际改动仍过大,先按输入/输出再拆子包,保留父编号和依赖。
测试环境与命令选择遵循 dev-start-test,不因执行本卡重复启动服务或重置开发数据。
实施记录
- 版本组合:同一工作树内 Backend、Editor、Runtime、Renderer 同时运行;开发库迁移至
20261017_0100。环境为 Windows x64、Node 24、Python 3.13、Chromium(Playwright 1.60)。 - 联调中发现并修复三处 M0 门禁问题:Editor 手写路由类型缺少
transition/advance/effective_slideshow,以及 Checkboxupdate:modelValue的indeterminate联合类型;tests/integration/test_preview_manifest.py的路由期望补充默认meta.transition/meta.advance。 - 自动化门禁:
- Backend 全量
pnpm run test:backend→ 1534 passed、14 skipped(首轮发现并修复test_preview_manifest.py的默认meta.transition/meta.advance期望后重跑全绿);放映专项 57 passed。 - Editor
pnpm run test:editor:gate→ vue-tsc、vitest、build 全部通过。 - Runtime
pnpm run test:runtime:gate→ 129 files / 981 passed / 3 skipped,build 通过。 pnpm run test:contracts:generated→ paths=259、schemas=351、351 types 完全一致;pnpm run test:contracts→ 104 passed;pnpm run test:repository→ 61 passed;pnpm run test:contracts:gateway→ 真实 Nginx 契约通过。pnpm run test:render-contracts→ 22 passed;pnpm run test:renderer→ 27 passed;pnpm run test:python-workspace→ 17 passed。- E2E
pnpm exec playwright test --config tests/config/playwright.config.ts(auth/smoke/visual-edit/ai/runtime-heavy)→ 18 passed,含真实 PPTX、远程 Renderer PNG、三维模型像素与项目构建。 - PostgreSQL 专项
test:backend:pg-claim在本地 Docker PostgreSQL 16.14 专属临时库执行 → 10 passed、1 skipped(版本无thinking_enabled);SQLite 与 PG 旧库升级均验证回填。
- Backend 全量
- A01:开发库旧项目(2026-05/06 创建)升级后为
fade 400ms / manual 5000ms / 不循环 / 不自动开始,旧路由两组覆盖保持null;新项目省略slideshow使用默认值;schema 1/2 模板导入补默认值。 - A02:项目默认、两组路由原始覆盖、只读生效值与预览 artifact 的
transitionDefaults/playback/叶子meta.transition/meta.advance一致;构建产物内联配置与预览使用同一解析器。 - A03:13 类项目级非法写入(字符串/浮点数字、布尔替代、缺组、额外字段、
media_end、越界、none非 0ms、部分组、显式 null)与 5 类路由级非法写入全部 422,旧项目/旧树未发生部分落库。 - A04:旧客户端同路径整树保存保留匹配覆盖;旧客户端重命名按新节点继承;新版客户端重命名/移动到分组时显式携带覆盖,设置保留;同一页面重复引用的两个路由覆盖互不影响。
- A05:External 创建/PATCH/configuration/route-tree、同键同载荷幂等、同键不同载荷冲突、省略与 null 不同指纹、匿名 401、跨工作空间读写 403,均符合契约。
- A06:预览 artifact 创建后 PATCH 项目,旧 artifact 仍为原配置;构建任务创建后 PATCH 项目,产物仍为任务创建时快照(job 10 / release 10,产物 15,239,278 bytes,sha256
3194932e…591f2);schema 3 导出→导入→再导出等价,schema 1/2 补默认,schema 3 缺slideshow预检失败且导入 400;模板包预览 artifact 使用包内配置。 - A07:真实 Chromium 预览中 fade 500ms 实测 533ms、push 700ms 实测 712ms、
none无 running 阶段;反向 push 方向-1;快速连跳最大 2 层、结束后仅 1 层无离场残留;prefers-reduced-motion: reduce立即稳定且无 running。 - A08:应用工作空间样式与另存为样式均不修改项目
slideshow;复制页面到目标项目不携带路由覆盖,目标项目保持默认值。 - M0 边界:
auto_start=true、advance=timer 7000ms的预览在真实浏览器等待 8.5s 仍停留封面,未意外启动自动放映;capabilities 仅声明manual,三个 auto_play 能力均为 false。 - 未运行项:Firefox/WebKit 与 PDF 产物(M1/M2 范围)、CLI/MCP 命令(WP19/WP20)、
test:render-e2e专项入口未单独运行(E2E smoke 已覆盖真实 PPTX/PNG/三维截图与项目构建)。证据保存在.tmp/wp12/,未提交可再生成产物。