Files
ArtPlayer/refactor/changes/2026-09-14-SITE-SMOKE-01-documentation-smoke.md
T

4.6 KiB
Raw Blame History

SITE-SMOKE-01 文档示例生成与就绪检查

起点 d74ecc43ccee99dcd2e3090356a6fb761825e6af。从 SITE-02 拆出示例生成和运行器, 保留原父任务负责编辑器声明生成。保留 yarn build:test、脚本路径、测试页面及 docs/test/test.js URL;没有修改生产包 API、公开声明、播放器 DOM、事件或入口。

实现与缺陷

  • scripts/docs-smoke/parser.ts 用现有 MarkdownIt tokens 替换共享正则游标。 原生成器在异常围栏中反复 continue 且不推进,测试对固定旧提交使用 VM 超时 复现;新解析有限结束,并在语法检查阶段带文件/行号失败。未闭合、空示例和 marker 后不是 JavaScript 围栏也明确报错。只支持现有 Run Code 标记约定。
  • generator.ts 负责确定性枚举、语法编译、页面脚本依赖和 esbuild 打包;生成前 验证全部输入。保留 11 个中文文件的 233 段旧代码(仅统一 CRLF 为 LF),新增 examples.json 清单。重复生成一致,无时间戳;--check 只读拒绝漂移。
  • runtime.ts 管理每例独立 iframe、顺序依赖、返回 Promise、当前实例 ready、 error/unhandledrejection 和清理。移除固定 100ms 无条件成功;4500ms 是失败 deadline,ready 后仅多一个事件循环任务用于接收未处理拒绝。销毁失败仍移除 frame、恢复 storage,并将原错误和清理错误一起报告。拒绝并发案例。
  • 原 JS CLI 是兼容入口,由严格 checkJs 覆盖;自有实现拆成 TS。维护地图和边界见 scripts/docs-smoke/README.md,文档站、测试与 CI 说明同次更新。

工具链与 CI

根开发依赖新增精确 @types/node 24.10.0、@types/markdown-it 14.1.2,分别为 Node 工具和已有 MarkdownIt 14.1.0 提供严格类型;没有播放器运行依赖变化。只维护 根 yarn.lock,Node 24.21.0 原生类型擦除执行工具,Yarn Classic 1.22.22 frozen 安装成功。新增 typecheck:docs-tools/check:docs-smoke 加入 ci:check,build:test 加入 ci:build;没有把本地配置视为远端 CI 通过。

安装后发现共享 tsc bin 指向 typescript-runtime-compat 5.1.6,而主编译器是 5.9.3。旧别名检查 Node 24 类型因 esnext.disposable/Symbol.dispose 等退出 2; 新工具与根 React 检查改用显式 node node_modules/typescript/bin/tsc,保留旧 编译器用于历史消费测试。严格检查不使用 skipLibCheck 掩盖错误。工具配置的 ES2021 lib 用于 Node parser 的 replaceAll;浏览器产物 target 仍为 ES2020。

验证与限制

  • 5 项生成器回归通过:固定旧代码比较、旧卡死复现、围栏反例、确定性与真实 Mocha 注册、CLI 只读/失败不覆盖既有结果。完整 baseline 522 通过、0 跳过。
  • 三浏览器各 11 项,共 33 通过、0 跳过/重试通过:真实核心/受控媒体就绪、 超过旧 100ms 后仍等待、连续挂载清理、三段未改原示例、并发拒绝、同步/返回/ 未处理/ready 回调/销毁错误、脚本失败、永不 ready、跨案例定时器与全局隔离。
  • 初次扩展测试有 31 通过/2 失败,均为 Windows WebKit 报告 640x360 而非媒体 320x180。原报告保留。按既有 DPIP-MEDIA-01 记录精确两组尺寸,其他浏览器只 接受 320x180;不扩大超时、不重试取绿,也未关闭原生尺寸问题或真实 Safari 门槛。
  • 主编译器的工具/React 检查、CI 50 项测试、根 lint(0 error/1 既有生成声明 warning)、严格工具链(22 workspace/38 固定工具/1470 依赖选择器)通过。 完整生产与消费者类型检查结果及输入/输出/日志指纹见验证 JSON。

iframe 是同源归属隔离,不是安全沙箱。需独占测试 origin;storage 恢复会覆盖 其他同源并发写入,不为跨 tab 合并机制。案例交给其它窗口的资源不由本运行器 接管。就绪不等于播放/seek/点击/延迟回调功能验收;完整 233 例、外部 SDK、 所有语言/插件文档与真实设备仍由 EX-03、SITE-04 和包验收覆盖。本次没有手动 连接 Chrome/iab、远端 CI、推送或发布。没有声称全部示例已通过浏览器执行。

状态与回退

SITE-SMOKE-01 单独完成提交;SITE-02 的声明生成器尚未完成。生成器生成资产, 不得手改 test.js;解析/语法失败保证写入前退出,磁盘多文件写入不承诺事务性。 回退本任务提交并执行 frozen 安装可恢复旧生成器和依赖;旧无限循环与 100ms 假通过会随之恢复,因此优先修复具体回归。后续改动运行 README 对应命令并 更新当前 site-inventory,历史验证 JSON 保持原证据。