Files
ArtPlayer/refactor/tasks.json
T

5117 lines
172 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemaVersion": 1,
"date": "2026-09-10",
"baselineCommit": "40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f",
"branch": "codex/compatible-modernization",
"qualityContract": "quality-contract.md",
"tasks": [
{
"id": "DOC-01",
"phase": "0 规划",
"title": "创建兼容重构分支",
"scope": [
"workspace"
],
"dependsOn": [],
"status": "done",
"risk": "L",
"deliverable": "独立本地分支和起点 SHA",
"acceptance": "分支由干净 master 创建,起点可追溯",
"evidence": [
"progress.md"
]
},
{
"id": "DOC-02",
"phase": "0 规划",
"title": "清点全部包与消费者",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-01"
],
"status": "done",
"risk": "L",
"deliverable": "package-inventory.json",
"acceptance": "22 包及 React/Vue/demo 有明确清单",
"evidence": [
"progress.md"
]
},
{
"id": "DOC-03",
"phase": "0 规划",
"title": "建立计划、契约、决策和协作记录",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-02"
],
"status": "done",
"risk": "L",
"deliverable": "refactor 文档集与任务数据",
"acceptance": "每包有独立步骤、依赖、交付物和验收条件",
"evidence": [
"progress.md"
]
},
{
"id": "DOC-04",
"phase": "0 规划",
"title": "验证文档完整性与生成表",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-03"
],
"status": "done",
"risk": "L",
"deliverable": "计划生成校验工具、AGENTS 入口",
"acceptance": "依赖无环、包覆盖、生成同步、文档链接通过",
"evidence": [
"progress.md"
]
},
{
"id": "DOC-05",
"phase": "0 规划",
"title": "建立每任务提交规则并提交文档基线",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-04"
],
"status": "done",
"risk": "L",
"deliverable": "根指令、质量要求、AI 流程、变更记录与初始文档提交",
"acceptance": "文档与计划检查通过,独立 DOC-05 commit 保存本次交付;提交后核实 SHA 和工作区",
"evidence": [
"changes/2026-09-10-DOC-05-task-commits.md"
]
},
{
"id": "DOC-06",
"phase": "0 规划",
"title": "记录自主安装依赖与添加脚本授权",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-05"
],
"status": "done",
"risk": "L",
"deliverable": "根指令、工具链规范、AI 流程、决策及变更记录",
"acceptance": "授权、依赖归属、脚本文档和兼容验证要求明确,计划校验通过并独立提交 DOC-06",
"evidence": [
"changes/2026-09-10-DOC-06-dependencies-and-scripts.md"
]
},
{
"scope": [
"workspace"
],
"status": "done",
"risk": "L",
"evidence": [
"changes/2026-09-10-DOC-07-plan-review.md"
],
"id": "DOC-07",
"phase": "0 规划",
"title": "复审并优化计划顺序和执行门槛",
"dependsOn": [
"DOC-06"
],
"deliverable": "依赖优化、执行门槛规范、测试/发布补充和审查记录",
"acceptance": "依赖与覆盖校验、专项执行顺序断言通过;任务范围完整并独立提交"
},
{
"id": "DOC-08",
"phase": "0 规划",
"title": "记录 Chrome 验证及多轮 npm 发布复盘",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-07"
],
"status": "done",
"risk": "L",
"deliverable": "浏览器分工、三轮复盘规范、发布依赖与接续文档",
"acceptance": "计划和发布依赖检查通过;独立提交 DOC-08,连接可用不冒充测试通过",
"evidence": [
"changes/2026-09-10-DOC-08-browser-and-release-reviews.md"
]
},
{
"id": "DOC-09",
"phase": "0 规划",
"title": "记录 docs HTML 与在线编辑器测试入口",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-08"
],
"status": "done",
"risk": "L",
"deliverable": "页面/加载方式、状态隔离、行为断言与既有任务映射",
"acceptance": "源码清点和计划检查通过,独立提交 DOC-09;不把页面存在当作测试通过",
"evidence": [
"changes/2026-09-10-DOC-09-docs-test-surfaces.md"
]
},
{
"id": "DOC-10",
"phase": "0 规划",
"title": "记录 GitHub CI/CD 增强范围与验收",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-09"
],
"status": "done",
"risk": "L",
"deliverable": "CI/CD 规范、四项实施任务与发布依赖",
"acceptance": "现有 workflow 核对、计划检查通过并独立提交;不冒充远端执行完成",
"evidence": [
"changes/2026-09-10-DOC-10-github-ci-cd.md"
]
},
{
"id": "DOC-11",
"phase": "0 规划",
"title": "记录全部包各自升级一个大版本",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-10"
],
"status": "done",
"risk": "L",
"deliverable": "22 包目标版本清单、决策和发布/CI/复盘规则同步",
"acceptance": "版本表与 manifest 对照、计划检查通过并独立提交;不修改旧 API 兼容要求",
"evidence": [
"changes/2026-09-10-DOC-11-major-version-policy.md"
]
},
{
"id": "DOC-12",
"phase": "0 规划",
"title": "复审开发启动、验收覆盖及发布依赖",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-11"
],
"status": "done",
"risk": "M",
"deliverable": "语义依赖修正、版本实施任务、基线/分发分类及契约映射要求、校验器保护",
"acceptance": "原范围状态保持,计划检查和故障负例通过,独立提交 DOC-12",
"evidence": [
"changes/2026-09-10-DOC-12-execution-readiness-review.md"
]
},
{
"id": "DOC-13",
"phase": "0 规划",
"title": "记录并验证内置浏览器回退规则",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-08"
],
"status": "done",
"risk": "L",
"deliverable": "根指令、复盘和夹具文档中的浏览器回退及实际环境证据",
"acceptance": "内置浏览器打开真实页面,报告基础检查结果及未覆盖项;独立提交",
"evidence": [
"changes/2026-09-10-DOC-13-browser-fallback.md"
]
},
{
"id": "BASE-01",
"phase": "1 基线",
"title": "固定核心与试点的最小发布基线",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-07"
],
"status": "done",
"risk": "H",
"deliverable": "核心及 chapter 的 npm tarball/integrity、源码 SHA、已知支持窗口;其他包标待核对",
"acceptance": "核心/试点来源可重跑;不虚构全生态已验证,各包 01 步负责补齐自身历史发布基线",
"evidence": [
"changes/2026-09-10-BASE-01-published-baseline.md",
"baselines/releases.json"
]
},
{
"id": "BASE-HARNESS-01",
"phase": "1 基线",
"title": "建立最小发布包浏览器采集夹具与服务",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-01"
],
"status": "done",
"risk": "M",
"deliverable": "固定 tarball 静态服务、本地媒体 Range、公开 API 采集页面及受控报告路径",
"acceptance": "HTTP 精确内容/范围和路由隔离测试、夹具语法通过;浏览器采集仍由 BASE-02 负责",
"evidence": [
"changes/2026-09-10-BASE-HARNESS-01-browser-fixture.md"
]
},
{
"id": "BASE-02",
"phase": "1 基线",
"title": "捕获公共 API 和属性描述符",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-01",
"BASE-HARNESS-01"
],
"status": "done",
"risk": "H",
"deliverable": "核心与试点的构造/默认值/静态和实例 API 快照,其余包由 01/02 步补齐;登记契约/版本/固定测试 ID/命令/报告与负责任务",
"acceptance": "真实发布包反射与旧用户调用可重跑,未验证项明确",
"evidence": [
"changes/2026-09-10-BASE-02-public-api.md",
"baselines/public-api.json",
"baselines/api-coverage.md"
]
},
{
"id": "BASE-03",
"phase": "1 基线",
"title": "捕获事件、异步和生命周期",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-02"
],
"status": "done",
"risk": "H",
"deliverable": "ready/restart/destroy、Promise、切源/插件事件 trace;登记契约/版本/固定测试 ID/命令/报告与负责任务",
"acceptance": "成功、失败、重入和多实例有断言,历史缺陷有标记;使用已发布包和最小可重跑探针启动,不等待后续 ENG 服务",
"evidence": [
"changes/2026-09-10-BASE-03-lifecycle.md",
"baselines/lifecycle.json",
"baselines/lifecycle-coverage.md"
]
},
{
"id": "BASE-04",
"phase": "1 基线",
"title": "捕获 DOM、CSS 和官方 demo",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-02"
],
"status": "done",
"risk": "M",
"deliverable": "核心模板/类名/变量、键盘/焦点/可访问名称基线及全 demo 路径映射;docs-browser-testing.md 中 HTML/编辑器的脚本来源与存储状态;登记契约/版本/固定测试 ID/命令/报告与负责任务",
"acceptance": "核心/试点用户样式和输入用法已记录,其他 demo 运行状态与未知项明确;使用已发布包和最小可重跑探针启动,不等待后续 ENG 服务",
"evidence": [
"changes/2026-09-10-BASE-04-dom.md",
"baselines/dom.json",
"baselines/dom-coverage.md",
"baselines/demo-inventory.json"
]
},
{
"id": "BASE-05",
"phase": "1 基线",
"title": "捕获包入口、资源和类型消费",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-01"
],
"status": "done",
"risk": "H",
"deliverable": "全包 manifest/资源路径清单;核心/试点的 UMD/AMD/ESM/CJS/legacy/i18n 和类型消费者基线;登记契约/版本/固定测试 ID/命令/报告与负责任务;区分库/npm 与站点实际分发类别,SSR import/模板/非浏览器构造错误分别捕获",
"acceptance": "核心/试点隔离消费可运行,其他包由各自契约任务验证,thumbnail tool 差异已登记",
"evidence": [
"changes/2026-09-10-BASE-05-consumers.md",
"baselines/consumer-coverage.md",
"baselines/consumers.json",
"baselines/ssr.json",
"baselines/distribution.json"
]
},
{
"id": "BASE-06",
"phase": "1 基线",
"title": "记录性能与资源基线",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-03",
"BASE-04"
],
"status": "done",
"risk": "M",
"deliverable": "固定媒体/设备测量、包体积、反复装卸资源报告",
"acceptance": "多次采样可重跑,指标和审查阈值确定,不承诺未经测量的收益;使用已发布包和最小可重跑探针启动,不等待后续 ENG 服务",
"evidence": [
"changes/2026-09-10-BASE-06-performance.md",
"baselines/performance-coverage.md",
"baselines/performance.json",
"baselines/sizes.json"
]
},
{
"id": "BASE-07",
"phase": "1 基线",
"title": "建立差异和风险台账",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-03",
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "销毁/切源/类型差异、vendored 许可和外部 SDK 清单",
"acceptance": "已确认与待复现分开,每项有负责任务及兼容处理路线;纳入 BASE-TYPE-01/02/03/04 和 BASE-DIST-01 的发布/声明/工作区证据;纳入 BASE-PERF-01 销毁后 resize/notice 延迟工作",
"evidence": [
"changes/2026-09-10-BASE-07-risk-register.md",
"risk-guide.md",
"risk-table.md",
"risks.json",
"third-party.json"
]
},
{
"scope": [
"workspace"
],
"status": "done",
"risk": "H",
"evidence": [
"environment-matrix.md",
"changes/2026-09-10-BASE-08-environment-matrix.md"
],
"id": "BASE-08",
"phase": "1 基线",
"title": "建立消费者与真实环境验证矩阵",
"dependsOn": [
"BASE-01",
"BASE-05"
],
"deliverable": "每包版本/浏览器/codec/SDK/设备/样本、证据和负责验证任务的矩阵",
"acceptance": "格式兼容与运行能力分开,未知/缺环境不算通过,明确哪些检查阻止哪些批次发布"
},
{
"id": "ENG-01",
"phase": "2 工程保障",
"title": "固定 Node、包管理器与依赖",
"scope": [
"workspace"
],
"dependsOn": [
"BASE-01"
],
"status": "done",
"risk": "M",
"deliverable": "版本 pin、唯一锁文件、安装说明",
"acceptance": "干净环境可复现,最低 Node 与构建依赖一致,未夹带全量升级",
"evidence": [
"changes/2026-09-10-ENG-01-reproducible-toolchain.md",
"baselines/toolchain-validation.json"
]
},
{
"id": "ENG-PM-01",
"phase": "2 工程保障",
"title": "按用户选择切换固定 Yarn 包管理器",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-01"
],
"status": "done",
"risk": "M",
"deliverable": "Yarn 固定版本、唯一 yarn.lock、工具检查与安装维护文档",
"acceptance": "干净冻结安装、Node 测试和全部构建通过;记录解析差异和依赖用途,独立提交",
"evidence": [
"changes/2026-09-10-ENG-PM-01-yarn-toolchain.md",
"baselines/yarn-validation.json"
]
},
{
"id": "ENG-02",
"phase": "2 工程保障",
"title": "拆分只读检查并建立 PR CI",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-01",
"ENG-PM-01"
],
"status": "done",
"risk": "M",
"deliverable": "lint/lint:fix、PR 与主线检查、独立部署任务;遵循 github-ci-cd.md,PR/重构分支触发、最小权限及 workflow 静态检查",
"acceptance": "仓库内检查可执行且不改源码、不发布;required checks 的外部设置状态列入发布台账,不阻塞本地框架建设",
"evidence": [
"changes/2026-09-10-ENG-02-readonly-ci.md",
"baselines/ci-validation.json"
]
},
{
"id": "ENG-03",
"phase": "2 工程保障",
"title": "建立公共行为与单元测试入口",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-02",
"BASE-03"
],
"status": "done",
"risk": "M",
"deliverable": "保留现有 node:test,测试目录/夹具/统一入口",
"acceptance": "已有 19 项回归保留,旧版与候选可用同一夹具运行",
"evidence": [
"changes/2026-09-10-ENG-03-unit-entry.md"
]
},
{
"id": "ENG-04",
"phase": "2 工程保障",
"title": "建立类型测试基础",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-02",
"BASE-05"
],
"status": "done",
"risk": "M",
"deliverable": "根与分包 tsconfig、显式 TS 依赖、正反例测试",
"acceptance": "核心/试点与迁移模块严格检查,未迁移第三方/包历史问题独立台账;明确最低/当前 TS 和各环境类型;复用 BASE-05 的四种消费模式,不以 skipLibCheck 掩盖 BASE-TYPE-01/03",
"evidence": [
"changes/2026-09-10-ENG-04-typechecking.md",
"typechecking.md"
]
},
{
"id": "ENG-05",
"phase": "2 工程保障",
"title": "建立真实浏览器测试服务",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-03",
"BASE-04",
"BASE-08"
],
"status": "done",
"risk": "M",
"deliverable": "Playwright projects、本地 Range/失败媒体服务;复用 docs 页面/样本的状态隔离、错误采集与候选资源映射",
"acceptance": "Chromium/Firefox/WebKit 的基础播放 smoke 和报告可执行;以媒体状态断言判定通过,区分轻量用例与真实编辑器交互",
"evidence": [
"changes/2026-09-10-ENG-05-browser-tests.md",
"baselines/browser-validation.json"
]
},
{
"id": "ENG-06",
"phase": "2 工程保障",
"title": "支持按包非交互与 JS/TS 构建",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-02",
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "build/dev 入口解析、指定包参数、原交互保留",
"acceptance": "三种产物、Less/SVG/worker 和本地 8082 demo 正常;保持 BASE-05 的 AMD 同时写入全局行为及 i18n/legacy 入口",
"evidence": [
"changes/2026-09-10-ENG-06-build-development.md",
"build-development.md",
"baselines/build-validation.json"
]
},
{
"id": "ENG-07",
"phase": "2 工程保障",
"title": "建立 tarball 消费与产物检查",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-04",
"ENG-06"
],
"status": "done",
"risk": "H",
"deliverable": "隔离 npm 消费 fixtures、API/声明/入口差分",
"acceptance": "不借 workspace 源码通过,能识别缺文件与默认导出变化",
"evidence": [
"changes/2026-09-10-ENG-07-package-consumers.md",
"baselines/package-validation.json"
]
},
{
"id": "ENG-08",
"phase": "2 工程保障",
"title": "增加覆盖率、资源与性能报告",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-03",
"ENG-05",
"BASE-06"
],
"status": "done",
"risk": "M",
"deliverable": "覆盖率基线、资源清理断言、性能报告与阈值",
"acceptance": "关键生命周期分支有门槛,报告不靠无意义断言堆数量;将 BASE-06 的同环境多组配对、计时/压缩审查阈值与资源异常分开接入候选,不把历史现象冻结成正常要求",
"evidence": [
"coverage-performance.md",
"baselines/quality-validation.json",
"changes/2026-09-11-ENG-08-quality-reports.md"
]
},
{
"phase": "2 工程保障",
"scope": [
"workspace"
],
"risk": "M",
"id": "ENG-AUDIT-01",
"title": "核对每任务完成提交的真实Git历史",
"status": "done",
"dependsOn": [
"ENG-07",
"DOC-04"
],
"deliverable": "独立完成提交、初始DOC例外、父分支合并和证据共提交审计;CI完整历史与报告",
"acceptance": "真实仓库及隔离Git反例通过,done任务不允许缺独立commit,固定DOC-01~04例外可追溯;提交后验证自身",
"evidence": [
"commit-audit.md",
"changes/2026-09-12-ENG-AUDIT-01-commits.md",
"baselines/commit-audit-validation.json"
]
},
{
"phase": "2 工程保障",
"scope": [
"workspace"
],
"risk": "M",
"id": "ENG-IMPACT-01",
"title": "建立全包依赖与共享变更影响映射",
"status": "done",
"dependsOn": [
"ENG-07",
"DOC-04"
],
"deliverable": "核心/构建/类型/锁文件到受影响包和必需生态检查的映射及CI接入",
"acceptance": "核心变化触发必需生态检查;新增包、未知共享文件或失配依赖不能静默漏检;解释受影响路径和测试命令",
"evidence": [
"impact-analysis.md",
"changes/2026-09-12-ENG-IMPACT-01-mapping.md",
"baselines/impact-validation.json"
]
},
{
"phase": "2 工程保障",
"scope": [
"workspace"
],
"risk": "M",
"id": "ENG-COVERAGE-01",
"title": "建立公开契约与版本测试证据覆盖索引",
"status": "done",
"dependsOn": [
"BASE-08",
"CORE-22",
"ENG-07"
],
"deliverable": "契约-包-支持版本-固定测试ID-命令-候选/报告-责任任务索引和文档检查",
"acceptance": "计划、已执行和缺证据状态分开,所有公开契约都有验证归属;无效路径、版本依据或报告对应不明确会被识别",
"evidence": [
"contract-coverage.md",
"contract-index.md",
"changes/2026-09-12-ENG-COVERAGE-01-index.md",
"baselines/contracts-validation.json"
]
},
{
"id": "ENG-09",
"phase": "2 工程保障",
"title": "建立全包依赖影响和文档检查",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-07",
"DOC-04",
"ENG-AUDIT-01",
"ENG-IMPACT-01",
"ENG-COVERAGE-01"
],
"status": "done",
"risk": "M",
"deliverable": "共享核心/构建影响映射、文档及每任务完成提交的 Git 审计接入;契约-支持版本-测试 ID-命令-候选/报告-任务的覆盖索引",
"acceptance": "核心变化触发必需生态检查;原有 DOC-01 至 04 基线例外明确,后续 done 任务不能缺失独立 commit;计划/已执行/缺证据分开,识别缺少验证归属的公开契约",
"evidence": [
"changes/2026-09-12-ENG-09-integration.md",
"baselines/engineering-integration.json"
]
},
{
"scope": [
"workspace"
],
"status": "done",
"risk": "M",
"evidence": [
"changes/2026-09-10-ENG-10-test-reliability.md",
"test-reliability.md"
],
"id": "ENG-10",
"phase": "2 工程保障",
"title": "建立历史失败分级和测试可靠性规则",
"dependsOn": [
"ENG-03",
"ENG-04",
"ENG-05",
"ENG-07",
"BASE-07"
],
"deliverable": "历史失败 ID/环境/旧版复现/负责修复任务、逐模块门槛、受控等待与 trace/retry 规则",
"acceptance": "不靠全局忽略或无理由 skip 隐藏问题,新增回归阻止交付,设备缺口和偶发失败单独可见;以 risks.json 为统一差异索引;关闭必须有 resolutionEvidence/rationale,已复现、源码事实、未验证分开,登记不等于豁免"
},
{
"id": "ENG-11",
"phase": "2 工程保障",
"title": "增加不改变产物的模块构建分析",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-03",
"ENG-08"
],
"status": "done",
"risk": "L",
"deliverable": "正式构建的可选模块归因报告及源码/产物指纹",
"acceptance": "相同构建开关前后三格式字节一致,报告不进入分发包;区分 Rollup 渲染字节与压缩体积,并保留真实工作区/发布来源",
"evidence": [
"build-analysis.md",
"baselines/bundle-attribution.json",
"changes/2026-09-11-ENG-11-build-analysis.md"
]
},
{
"id": "CI-01",
"phase": "2.2 GitHub CI/CD",
"title": "增强兼容矩阵、并发缓存与 CI 报告",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-10",
"ENG-08",
"ENG-09",
"ENG-10"
],
"status": "doing",
"risk": "H",
"deliverable": "OS/Node/TS/浏览器与影响范围矩阵、缓存、超时、汇总检查和 artifact 报告",
"acceptance": "固定安装、失败/取消不误报、核心影响全生态;检查只读,失败证据可追溯",
"evidence": [
"ci-setup.md",
"changes/2026-09-13-CI-01-matrix-summary.md",
"baselines/ci-matrix-validation.json",
"changes/2026-09-13-CI-01-node-consumers.md",
"baselines/node-consumer-validation.json"
]
},
{
"id": "CI-02",
"phase": "2.2 GitHub CI/CD",
"title": "分离并改进 GitHub Pages 部署",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-10",
"ENG-02",
"SITE-03"
],
"status": "todo",
"risk": "H",
"deliverable": "Pages artifact 部署配置、旧路径/域名核对、预检和迁移恢复指南",
"acceptance": "部署只取受信任已验证产物;本地实现可验收,远端 source/环境和实际部署状态单独登记",
"evidence": []
},
{
"id": "CI-03",
"phase": "2.2 GitHub CI/CD",
"title": "建立 npm 分包候选与发布工作流",
"scope": [
"workspace"
],
"dependsOn": [
"DOC-10",
"CI-01",
"REL-08",
"REL-04"
],
"status": "todo",
"risk": "H",
"deliverable": "候选准备、精确 artifact 发布配置、OIDC 评估、版本/tag/registry 预检和部分失败恢复",
"acceptance": "不自动发布;明确逐包信任前置和 dry run 限制,不能重建未验证内容或重发冲突版本;按版本清单校验各包下一 major 和预发布/正式 tag,保留旧核心支持范围",
"evidence": []
},
{
"id": "CI-04",
"phase": "2.2 GitHub CI/CD",
"title": "验收 GitHub 流水线与远端发布准入",
"scope": [
"workspace"
],
"dependsOn": [
"CI-01",
"CI-02",
"CI-03",
"SITE-06"
],
"status": "todo",
"risk": "H",
"deliverable": "静态/干净环境检查、真实 PR 正反例、候选 dry run、required checks/Pages/npm 必需配置状态及运维指南",
"acceptance": "必要 Actions 证据和远端配置核对齐全;缺失保持未完成,真实 publish/deploy 仍在授权发布步骤执行",
"evidence": []
},
{
"scope": [
"artplayer-plugin-chapter"
],
"status": "done",
"risk": "H",
"evidence": [
"changes/2026-09-10-PILOT-01-chapter.md",
"baselines/pilot-validation.json"
],
"id": "PILOT-01",
"phase": "2.1 早期试点",
"title": "在旧核心上完成小插件迁移闭环",
"dependsOn": [
"PKG-CHAPTER-04",
"ENG-07",
"ENG-05",
"ENG-10"
],
"deliverable": "chapter 的 TS、旧核心消费、真实浏览器、tarball、包内维护地图及粒度/成本反馈",
"acceptance": "不依赖 CORE 重构即可通过整个试点;最终核心仍由 chapter 05/06 重新验收"
},
{
"id": "CORE-01",
"phase": "3-4 核心迁移",
"title": "迁移纯工具并冻结导出",
"scope": [
"artplayer"
],
"dependsOn": [
"ENG-03",
"ENG-04",
"ENG-06",
"PILOT-01"
],
"status": "done",
"risk": "M",
"deliverable": "utils/time/property/format/file/error/subtitle 的分批 TS 迁移",
"acceptance": "Artplayer.utils 导出/参数/绑定保持,纯逻辑与类型测试通过",
"evidence": [
"changes/2026-09-10-CORE-01-typed-utils.md",
"baselines/core-utils-validation.json"
]
},
{
"id": "CORE-02",
"phase": "3-4 核心迁移",
"title": "迁移内部 Emitter",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-01",
"BASE-03"
],
"status": "done",
"risk": "H",
"deliverable": "带类型事件映射的原 Emitter 实现",
"acceptance": "ctx、once/off、重入/异常和链式返回保持",
"evidence": [
"changes/2026-09-11-CORE-02-typed-emitter.md",
"baselines/emitter-validation.json"
]
},
{
"id": "CORE-03",
"phase": "3-4 核心迁移",
"title": "建立内部资源作用域",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-02"
],
"status": "done",
"risk": "H",
"deliverable": "监听/订阅/定时器/RAF/请求/URL 的资源登记",
"acceptance": "实例与操作作用域分离,单项清理失败不阻断其他资源",
"evidence": [
"changes/2026-09-11-CORE-03-resource-scope.md",
"baselines/resource-scope-validation.json"
]
},
{
"id": "CORE-04",
"phase": "3-4 核心迁移",
"title": "修复初始化与销毁生命周期",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-03",
"ENG-05",
"BASE-07"
],
"status": "done",
"risk": "H",
"deliverable": "构造失败回收、重复/重入 destroy、instances 修复",
"acceptance": "事件顺序、removeHtml、多实例和销毁中异步有真实回归;处理 baselines/lifecycle-coverage.md 的 BASE-LIFE-04/05 并增加候选正向回归;协调 BASE-PERF-01 销毁后定时器与回调归属",
"evidence": [
"changes/2026-09-11-CORE-04-instance-lifecycle.md",
"baselines/instance-lifecycle-validation.json"
]
},
{
"id": "CORE-05",
"phase": "3-4 核心迁移",
"title": "区分输入配置和内部配置",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-01",
"ENG-04"
],
"status": "done",
"risk": "M",
"deliverable": "Option/ResolvedOption、默认值与校验整理",
"acceptance": "配置合并/错误时机不变,JS 输入仍运行时校验",
"evidence": [
"changes/2026-09-11-CORE-05-resolved-options.md",
"baselines/options-validation.json"
]
},
{
"id": "CORE-06",
"phase": "3-4 核心迁移",
"title": "建立内部媒体与宿主类型",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-05"
],
"status": "done",
"risk": "M",
"deliverable": "原生 video、canvas shim、UI host 类型",
"acceptance": "不更改公开 art.video 用法,不以 HTMLVideoElement 断言掩盖 shim",
"evidence": [
"changes/2026-09-11-CORE-06-media-hosts.md",
"baselines/media-hosts-validation.json"
]
},
{
"id": "CORE-07",
"phase": "3-4 核心迁移",
"title": "逐项协调公开声明差异",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-02",
"CORE-06",
"BASE-07"
],
"status": "done",
"risk": "H",
"deliverable": "plugins/toggle/cue/setting/static 的旧新类型对照",
"acceptance": "每项有兼容重载/扩展或待决结论,不能删除旧类型样例;处理 BASE-TYPE-01/04,分别保留旧合法声明消费并验证真实返回;协调 BASE-TYPE-05 的 Utils 导出、descriptor 和 timer 旧声明差异",
"evidence": [
"changes/2026-09-11-CORE-07-declarations.md",
"baselines/declarations-validation.json"
]
},
{
"id": "CORE-08",
"phase": "3-4 核心迁移",
"title": "整理插件管理器与扩展类型",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-03",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "注册流程、同步/异步结果、插件/事件扩展接口",
"acceptance": "旧插件同步可见性、重名与命名、销毁中异步插件保持明确语义;处理 baselines/lifecycle-coverage.md 的 BASE-LIFE-03 并增加候选正向回归;接续 CORE-07 / BASE-TYPE-04 的同步/异步注册返回声明冲突,内部返回类型精确,保留历史消费者",
"evidence": [
"changes/2026-09-11-CORE-08-plugin-manager.md",
"baselines/plugins-validation.json"
]
},
{
"id": "CORE-09",
"phase": "3-4 核心迁移",
"title": "整理 URL 与切源操作",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-04",
"CORE-06",
"CORE-08"
],
"status": "done",
"risk": "H",
"deliverable": "url/switch/customType 的操作身份及取消方案",
"acceptance": "并发切源、错误、同 URL、销毁和 Promise 结算有契约;处理 baselines/lifecycle-coverage.md 的 BASE-LIFE-01/02/06 并增加候选正向回归",
"evidence": [
"changes/2026-09-11-CORE-09-source-operations.md",
"baselines/source-operations-validation.json"
]
},
{
"id": "CORE-10",
"phase": "3-4 核心迁移",
"title": "迁移播放与时间/状态属性",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-09"
],
"status": "done",
"risk": "H",
"deliverable": "play/pause/toggle/seek/volume/rate/duration 等模块",
"acceptance": "旧返回值、拒绝、mutex、位置恢复、属性描述符与事件通过;接续 CORE-07 / BASE-TYPE-04 的 toggle void 与实际 Promise 分支冲突,不吞拒绝",
"evidence": [
"changes/2026-09-11-CORE-10-playback-properties.md",
"baselines/playback-properties-validation.json"
]
},
{
"id": "CORE-11",
"phase": "3-4 核心迁移",
"title": "整理媒体事件、ready 与重连",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-10"
],
"status": "done",
"risk": "H",
"deliverable": "媒体转发、重连、UI 响应职责分离",
"acceptance": "readiness 次数/顺序、过期重连、原错误参数有回归",
"evidence": [
"changes/2026-09-11-CORE-11-media-events.md",
"baselines/media-events-validation.json"
]
},
{
"id": "CORE-12",
"phase": "3-4 核心迁移",
"title": "迁移模板及公开资源入口",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-06",
"CORE-04",
"BASE-04"
],
"status": "done",
"risk": "H",
"deliverable": "template/icons/i18n/style、SSR 与 proxy 挂载",
"acceptance": "DOM/CSS/global/样式注入、i18n 子路径及 SSR import 保持;不把 SSR import/useSSR 保持扩大为服务端构造播放器;复跑 BASE-05 的 SSR import/模板、浏览器 useSSR 节点复用和非浏览器构造错误;接续 VENDOR-01/02,核对 screenfull/hint 复制版本、修改与分发通知,保留 DOM/CSS/fullscreen 行为",
"evidence": [
"changes/2026-09-11-CORE-12-template-resources.md",
"baselines/template-resources-validation.json"
]
},
{
"id": "CORE-13",
"phase": "3-4 核心迁移",
"title": "迁移组件注册与控件",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-12",
"CORE-08"
],
"status": "done",
"risk": "H",
"deliverable": "Component/control/layer/contextmenu 的资源与 TS 边界",
"acceptance": "add/update/remove、name、selector、mounted/beforeUnmount 通过;处理 BASE-DOM-02 窄容器控件裁切,保留 controls.update 的旧 undefined 返回值",
"evidence": [
"changes/2026-09-11-CORE-13-components.md",
"baselines/components-validation.json"
]
},
{
"id": "CORE-14",
"phase": "3-4 核心迁移",
"title": "拆分设置树、渲染和布局",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-13"
],
"status": "done",
"risk": "H",
"deliverable": "setting model/selection/render/layout 的分批实现",
"acceptance": "不强行统一控件返回值,嵌套选择、默认高亮、更新清理通过;结合 BASE-DOM-02 验证窄容器设置定位;接续 BASE-TYPE-07 的 find null、add/update item、remove undefined 声明冲突",
"evidence": [
"changes/2026-09-11-CORE-14-setting.md",
"baselines/setting-validation.json"
]
},
{
"id": "CORE-15",
"phase": "3-4 核心迁移",
"title": "迁移字幕获取、解析和渲染",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-11",
"CORE-13"
],
"status": "done",
"risk": "H",
"deliverable": "subtitle 请求/track/DOM/URL 生命周期与类型",
"acceptance": "过期结果、偏移、cue 数组、原生全屏及错误路径通过;接续 BASE-TYPE-07 的真实 cue 数组与旧隐式 scalar 回调声明兼容",
"evidence": [
"changes/2026-09-11-CORE-15-subtitle.md",
"baselines/subtitle-validation.json"
]
},
{
"id": "CORE-16",
"phase": "3-4 核心迁移",
"title": "迁移全屏、PiP、mini 与尺寸模式",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-11",
"CORE-12"
],
"status": "done",
"risk": "H",
"deliverable": "显示模式服务和原公开属性门面",
"acceptance": "模式互斥/恢复位置、手势权限、移动方向和退出失败通过",
"evidence": [
"changes/2026-09-11-CORE-16-display.md",
"baselines/display-validation.json"
]
},
{
"id": "CORE-17",
"phase": "3-4 核心迁移",
"title": "迁移键盘、手势、焦点和全局事件",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-13",
"CORE-16"
],
"status": "done",
"risk": "H",
"deliverable": "events/hotkey 的明确 document 与资源归属",
"acceptance": "跨 document 重绑、触摸/键盘、快捷键及销毁无重复响应;修复 BASE-PERF-01 pending resize debounce 销毁后执行,并验证正常 resize 不变",
"evidence": [
"changes/2026-09-11-CORE-17-input.md",
"baselines/input-validation.json"
]
},
{
"id": "CORE-18",
"phase": "3-4 核心迁移",
"title": "迁移内置插件和提示模块",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-14",
"CORE-16",
"CORE-17"
],
"status": "done",
"risk": "M",
"deliverable": "autoPlayback/autoOrientation/fastForward/lock/miniProgressBar 及 info/notice/loading/mask",
"acceptance": "默认启用条件、storage 格式、定时器/动画清理通过;结合 BASE-PERF-01 防止销毁后重新安排 notice timer;接续 BASE-TYPE-07 的 notice.show boolean getter 与历史读类型冲突",
"evidence": [
"changes/2026-09-11-CORE-18-builtins-prompts.md",
"baselines/builtins-prompts-validation.json"
]
},
{
"id": "CORE-19",
"phase": "3-4 核心迁移",
"title": "整理进度、质量、缩略图和截图",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-10",
"CORE-13",
"CORE-16"
],
"status": "done",
"risk": "M",
"deliverable": "相关 player/control 功能与纯计算分离",
"acceptance": "截图跨域失败、缩略图布局、quality/进度边界保持",
"evidence": [
"changes/2026-09-11-CORE-19-capture-thumbnails.md",
"baselines/capture-progress-validation.json"
]
},
{
"id": "CORE-20",
"phase": "3-4 核心迁移",
"title": "收敛核心入口与依赖方向",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-14",
"CORE-15",
"CORE-18",
"CORE-19"
],
"status": "done",
"risk": "H",
"deliverable": "Artplayer 门面、初始化依赖与最终目录",
"acceptance": "所有核心自有源码迁移,公开描述符/静态接口/事件差分通过",
"evidence": [
"changes/2026-09-11-CORE-20-entry.md",
"baselines/entry-validation.json"
]
},
{
"id": "CORE-21",
"phase": "3-4 核心迁移",
"title": "生成核心声明并校验包内容",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-20",
"ENG-07"
],
"status": "done",
"risk": "H",
"deliverable": "由 TS 生成的既有入口声明与三种发布产物",
"acceptance": "内部类型不泄漏,旧 JS/TS 消费者与 i18n 通过;逐项完成 CORE-07 留下的 BASE-TYPE-04/05/07 声明方案,旧合法消费者与实际返回分别留证;不能以虚假的交叉返回类型或改变运行时来掩盖冲突,未决项阻止核心声明出口;处理 CORE-10 / BASE-TYPE-08 的 setter-only 属性虚构 getter 声明,并复核 PlaybackControls 精确视图与旧 toggle 声明共存策略",
"evidence": [
"changes/2026-09-11-CORE-21-public-declarations.md",
"baselines/core-declarations-validation.json",
"core-public-types.md",
"typechecking.md"
]
},
{
"scope": [
"artplayer"
],
"status": "done",
"risk": "H",
"evidence": [
"changes/2026-09-11-CORE-23-keyboard-focus.md",
"baselines/keyboard-validation.json"
],
"id": "CORE-23",
"phase": "3-4 核心迁移",
"title": "检查并补齐键盘、焦点与可访问名称",
"dependsOn": [
"CORE-13",
"CORE-14",
"CORE-17",
"ENG-05",
"BASE-04"
],
"deliverable": "主要控件/设置/模式退出的键盘与焦点回归、名称和字幕可用性检查及必要兼容修正",
"acceptance": "保持旧快捷键和 DOM/CSS 钩子;真实浏览器验证,不以静态属性检查代替交互;处理 BASE-DOM-01 的主要控件 Tab 不可达,保留既有名称与快捷键"
},
{
"id": "CORE-22",
"phase": "3-4 核心迁移",
"title": "核心阶段完整验收",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-21",
"CORE-23",
"PILOT-01",
"ENG-08",
"ENG-10",
"ENG-11"
],
"status": "done",
"risk": "H",
"deliverable": "核心与旧插件的可自动化完整回归、资源/性能及明确外部验证缺口",
"acceptance": "核心自动化和公开差异处置通过;真实环境缺口链接包集成/REL 门槛,阶段完成不代表可公开发布",
"evidence": [
"changes/2026-09-11-CORE-22-core-acceptance.md",
"baselines/core-setting-navigation-partial.json",
"core-acceptance.md",
"baselines/core-acceptance-validation.json"
]
},
{
"id": "CORE-24",
"phase": "3-4 核心迁移",
"title": "修复连续切源的播放意图继承",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-22",
"PKG-AUDIO-04"
],
"status": "done",
"risk": "H",
"deliverable": "连续切源保留原播放意图,同时尊重显式暂停与最新来源,回归旧/新 audio",
"acceptance": "真实暂停状态的受控测试、重入/取消/失败/销毁、三引擎和 main/legacy 产物验证通过;不恢复过期来源的公开副作用",
"evidence": [
"baselines/audio-combinations-first.json",
"changes/2026-09-12-CORE-24-source-intent.md",
"baselines/core-source-intent-validation.json"
]
},
{
"id": "PKG-CHAPTER-01",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "M",
"deliverable": "chapters 时间区间、update、name 和进度 DOM 清单",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-10-PKG-CHAPTER-01-contract.md",
"baselines/chapter-contract.md"
]
},
{
"id": "PKG-CHAPTER-02",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"PKG-CHAPTER-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "M",
"deliverable": "区间重叠/空列表/边界 seek、hover 标题和 update 用例",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言;修正 BASE-TYPE-02 的可选参数声明并补正反例",
"evidence": [
"changes/2026-09-10-PKG-CHAPTER-02-tests.md",
"baselines/chapter-validation.json"
]
},
{
"id": "PKG-CHAPTER-03",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "以 TypeScript 拆分内部职责与资源",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"PKG-CHAPTER-02",
"ENG-07"
],
"status": "done",
"risk": "M",
"deliverable": "以严格 TS 拆分区间计算、进度 DOM、事件生命周期与样式注入;公开声明消费在 04 闭环",
"acceptance": "不依赖新核心方法或大范围设置重构;旧 API/事件和资源通过,必要适配限包内",
"evidence": [
"changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md",
"baselines/chapter-migration-validation.json"
]
},
{
"id": "PKG-CHAPTER-04",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"PKG-CHAPTER-03",
"ENG-04",
"ENG-06"
],
"status": "done",
"risk": "M",
"deliverable": "承接 03 的自有源码 TS 化,完善公开 Chapters/Option/Result 与 update 推导,关闭声明模块解析和旧消费差异",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;处理 BASE-TYPE-01/03,保持运行时和新旧 TS 模块解析消费",
"evidence": [
"changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
"baselines/chapter-types-validation.json"
]
},
{
"id": "PKG-CHAPTER-05",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"PKG-CHAPTER-04",
"CORE-22"
],
"status": "doing",
"risk": "M",
"deliverable": "chapter + quality/thumbnail、移动和全屏进度场景",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-CHAPTER-05-combinations.md",
"baselines/chapter-combinations-checkpoint.json",
"changes/2026-09-14-PKG-CHAPTER-05-timing.md",
"baselines/chapter-timing-observations.json"
]
},
{
"id": "PKG-CHAPTER-06",
"phase": "5 包迁移:artplayer-plugin-chapter",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-chapter"
],
"dependsOn": [
"PKG-CHAPTER-05",
"ENG-07"
],
"status": "todo",
"risk": "M",
"deliverable": "chapter.js 示例、产物和变更记录",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-AMBILIGHT-01",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "M",
"deliverable": "blur/opacity/frequency/duration、start/stop 与挂载样式",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-01-contract.md",
"baselines/ambilight-contract.md",
"baselines/ambilight-release.json",
"baselines/ambilight-contract-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-02",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-AMBILIGHT-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "M",
"deliverable": "跨域 canvas 失败、零尺寸、暂停、重复 start/stop 和 destroy",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-02-tests.md",
"baselines/ambilight-behavior-validation.json",
"ambilight-validation.md"
]
},
{
"id": "PKG-AMBILIGHT-03",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-AMBILIGHT-02",
"CORE-03",
"CORE-12"
],
"status": "done",
"risk": "M",
"deliverable": "取色计算与绘帧分离,统一 RAF 和 DOM 清理",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-03-lifecycle.md",
"ambilight-validation.md",
"baselines/ambilight-lifecycle-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-04",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-AMBILIGHT-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "M",
"deliverable": "canvas 上下文、参数及 start/stop 的明确类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-04-types.md",
"ambilight-validation.md",
"baselines/ambilight-types-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-PROXY-01",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "修复Canvas代理输出尺寸与取色区域",
"scope": [
"artplayer-plugin-ambilight",
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-AMBILIGHT-04",
"CORE-22"
],
"status": "done",
"risk": "M",
"deliverable": "按Canvas实际输出buffer取色,原生video保留intrinsic尺寸,明确5.1.7没有proxy配置",
"acceptance": "旧错误复现、三引擎实际代理九色区域对照及原生视频回归通过;不把本子项当作最终代理/设备验收",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
"ambilight-validation.md",
"baselines/ambilight-proxy-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-05",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-AMBILIGHT-04",
"CORE-22",
"PKG-AMBILIGHT-PROXY-01",
"PKG-CANVAS-04",
"PKG-FACTORY-01"
],
"status": "todo",
"risk": "M",
"deliverable": "原生 video、canvas proxy 的能力边界及销毁无帧循环",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
"ambilight-validation.md"
]
},
{
"id": "PKG-AMBILIGHT-06",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-AMBILIGHT-05",
"ENG-07"
],
"status": "todo",
"risk": "M",
"deliverable": "ambilight.js 示例及样式/分发验证",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-AUDIO-01",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "url/offset/sync、audio 实例暴露、update 与音量语义",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-AUDIO-01-contract.md",
"baselines/audio-track-contract.md",
"baselines/audio-track-release.json"
]
},
{
"id": "PKG-AUDIO-02",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"PKG-AUDIO-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "偏移、倍率、seek、waiting/playing、加载错误和 autoplay 拒绝",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-AUDIO-02-tests.md",
"audio-validation.md",
"baselines/audio-validation.json"
]
},
{
"id": "PKG-AUDIO-03",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"PKG-AUDIO-02",
"CORE-10"
],
"status": "done",
"risk": "H",
"deliverable": "外部 audio 的同步策略、监听与源更新生命周期",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-AUDIO-03-lifecycle.md",
"baselines/audio-lifecycle-validation.json"
]
},
{
"id": "PKG-AUDIO-04",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"PKG-AUDIO-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "Option/Result/audio、update 输入和事件类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-AUDIO-04-types.md",
"baselines/audio-types-validation.json"
]
},
{
"id": "PKG-AUDIO-05",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"PKG-AUDIO-04",
"CORE-22",
"CORE-24"
],
"status": "doing",
"risk": "H",
"deliverable": "主视频切源和缓冲恢复,多实例独立音频、旧核心",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-AUDIO-05-combinations.md",
"baselines/audio-combinations-first.json",
"baselines/audio-combinations-checkpoint.json",
"audio-validation.md"
]
},
{
"id": "PKG-AUDIO-06",
"phase": "5 包迁移:artplayer-plugin-audio-track",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-audio-track"
],
"dependsOn": [
"PKG-AUDIO-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "audio.track.js 示例与运行返回值一致的声明",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-AUTO-THUMB-01",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "url/width/number/scale、异步工厂和渐进缩略图更新",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/auto-thumbnail-release.json",
"baselines/auto-thumbnail-contract.md",
"changes/2026-09-13-PKG-AUTO-THUMB-01-contract.md",
"baselines/auto-thumbnail-contract-validation.json"
]
},
{
"id": "PKG-AUTO-THUMB-02",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "抽帧边界、短视频、失败、连续来源和销毁中的抽帧",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"baselines/auto-thumbnail-failures.md",
"baselines/auto-thumbnail-failures-validation.json",
"changes/2026-09-13-PKG-AUTO-THUMB-02-failures.md"
]
},
{
"id": "PKG-AUTO-THUMB-03",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-02",
"CORE-09",
"CORE-19",
"PKG-AUTO-THUMB-07"
],
"status": "doing",
"risk": "H",
"deliverable": "隐藏 video、seek 队列、canvas 编码与 Blob URL 清理",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-AUTO-THUMB-03-lifecycle-checkpoint.md",
"baselines/auto-thumbnail-lifecycle-checkpoint.json",
"changes/2026-09-13-PKG-AUTO-THUMB-03-hidden-renderer.md",
"baselines/auto-thumbnail-hidden-renderer.json",
"baselines/auto-thumbnail-timeline-media.json",
"changes/2026-09-13-PKG-AUTO-THUMB-03-frame-presentation.md",
"baselines/auto-thumbnail-frame-presentation.json",
"changes/2026-09-14-PKG-AUTO-THUMB-03-rendering-readiness.md",
"baselines/auto-thumbnail-rendering-readiness.json",
"changes/2026-09-14-PKG-AUTO-THUMB-03-first-seek.md",
"baselines/auto-thumbnail-first-seek.json",
"changes/2026-09-14-PKG-AUTO-THUMB-03-native-decoder.md",
"baselines/auto-thumbnail-native-decoder.json"
]
},
{
"id": "PKG-AUTO-THUMB-04",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-03",
"ENG-04",
"ENG-06",
"CORE-07",
"PKG-AUTO-THUMB-08",
"PKG-AUTO-THUMB-09",
"PKG-AUTO-THUMB-10"
],
"status": "todo",
"risk": "H",
"deliverable": "抽帧结果和真实异步插件返回类型兼容",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": []
},
{
"id": "PKG-AUTO-THUMB-05",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-04",
"CORE-22"
],
"status": "todo",
"risk": "H",
"deliverable": "旧核心/候选核心预览、多次加载无过期缩略图覆盖",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-AUTO-THUMB-06",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "auto.thumbnail.js、三种产物和内存/URL 证据",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-VTT-THUMB-01",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "M",
"deliverable": "vtt/style、异步返回、预览控件名与样式契约",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/vtt-thumbnail-release.json",
"baselines/vtt-thumbnail-contract.md",
"changes/2026-09-13-PKG-VTT-THUMB-01-contract.md"
]
},
{
"id": "PKG-VTT-THUMB-02",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"PKG-VTT-THUMB-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "M",
"deliverable": "VTT 解析、xywh、相对 URL、时间边界、请求失败和定位",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"baselines/vtt-thumbnail-failures.json",
"changes/2026-09-13-PKG-VTT-THUMB-02-failures.md"
]
},
{
"id": "PKG-VTT-THUMB-03",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"PKG-VTT-THUMB-02",
"CORE-09",
"CORE-19"
],
"status": "done",
"risk": "M",
"deliverable": "纯解析/区间查找与 DOM、请求/定时器生命周期分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-VTT-THUMB-03-resources.md",
"baselines/vtt-thumbnail-resources.json",
"changes/2026-09-13-PKG-VTT-THUMB-03-parser.md",
"baselines/vtt-thumbnail-parser.json"
]
},
{
"id": "PKG-VTT-THUMB-04",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"PKG-VTT-THUMB-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "M",
"deliverable": "cue/rect/result 和参数可选性保持兼容",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-13-PKG-VTT-THUMB-04-runtime-types.md",
"baselines/vtt-thumbnail-runtime-types.json",
"changes/2026-09-13-PKG-VTT-THUMB-04-public-types.md",
"baselines/vtt-thumbnail-public-types.json",
"changes/2026-09-13-PKG-VTT-THUMB-04-module-forms.md",
"baselines/vtt-thumbnail-module-forms.json",
"type-compatibility-policy.md",
"baselines/vtt-thumbnail-approved-types.json",
"changes/2026-09-13-PKG-VTT-THUMB-04-approved-types.md"
]
},
{
"id": "PKG-VTT-THUMB-05",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"PKG-VTT-THUMB-04",
"CORE-22"
],
"status": "doing",
"risk": "M",
"deliverable": "鼠标和移动进度、全屏、切源、chapter 组合",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-14-PKG-VTT-THUMB-05-combinations.md",
"baselines/vtt-thumbnail-combinations.json",
"baselines/vtt-thumbnail-core.json"
]
},
{
"id": "PKG-VTT-THUMB-06",
"phase": "5 包迁移:artplayer-plugin-vtt-thumbnail",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-vtt-thumbnail"
],
"dependsOn": [
"PKG-VTT-THUMB-05",
"ENG-07"
],
"status": "todo",
"risk": "M",
"deliverable": "vtt.thumbnail.js、VTT/图片资源解析和产物验证",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-HLS-01",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "quality/audio 配置、getName、update、控件名及 Hls 实例绑定",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/hls-control-contract.md",
"baselines/hls-control-release.json",
"changes/2026-09-11-PKG-HLS-01-contract.md"
]
},
{
"id": "PKG-HLS-02",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "Auto/手动实际 level、音轨、去重/过滤和拓扑变化",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"hls-validation.md",
"baselines/hls-sdk.json",
"baselines/hls-validation.json",
"changes/2026-09-11-PKG-HLS-02-tests.md"
]
},
{
"id": "PKG-HLS-03",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-02",
"CORE-11",
"CORE-14"
],
"status": "done",
"risk": "H",
"deliverable": "映射计算与 selector 更新/删除、Hls 事件订阅分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-HLS-03-modules.md",
"baselines/hls-modules-validation.json",
"hls-validation.md"
]
},
{
"id": "PKG-HLS-04",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "HLS 能力适配类型、回调上下文和旧 getName 参数",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-HLS-04-types.md",
"baselines/hls-types-validation.json",
"hls-validation.md"
]
},
{
"id": "PKG-HLS-SDK-01",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "验证真实 SDK worker 与分组轨道组合",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-04",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "固定历史及当前 SDK 归档、真实 worker/多音轨组、外部选择与重绑定浏览器证据",
"acceptance": "受支持桌面 MSE 引擎与新旧核心通过;无 worker 回退伪通过,设备缺口仍由 PKG-HLS-05 保持未完成",
"evidence": [
"changes/2026-09-12-PKG-HLS-SDK-01-integration.md",
"baselines/hls-sdk-validation.json",
"baselines/hls-sdk-diagnostics.json"
]
},
{
"id": "PKG-HLS-05",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-04",
"CORE-22",
"PKG-HLS-SDK-01"
],
"status": "todo",
"risk": "H",
"deliverable": "本地多码率 HLS、换成无轨道来源、旧核心和最终核心",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-HLS-06",
"phase": "5 包迁移:artplayer-plugin-hls-control",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-hls-control"
],
"dependsOn": [
"PKG-HLS-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "hls.control.js、依赖范围与回退记录",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-DASH-01",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "quality/audio、representation ID/Auto、getName 和 update",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-DASH-01-contract.md",
"baselines/dash-control-contract.md",
"baselines/dash-control-release.json"
]
},
{
"id": "PKG-DASH-02",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"PKG-DASH-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "保留已有 5 项稳定 ID 回归,补发布版 SDK 4.x/当前 5.x、音轨/空列表/过滤/换源与关闭引用",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-DASH-02-tests.md",
"dash-validation.md",
"baselines/dash-validation.json"
]
},
{
"id": "PKG-DASH-03",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"PKG-DASH-02",
"CORE-11",
"CORE-14"
],
"status": "done",
"risk": "H",
"deliverable": "能力适配保留 SDK 4.x 与 5.x,稳定 ID 映射、ABR 状态、UI 清理和生命周期职责分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-DASH-03-runtime.md",
"baselines/dash-runtime.json",
"dash-validation.md"
]
},
{
"id": "PKG-DASH-04",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"PKG-DASH-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "dash.js adapter、selector 和回调类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-DASH-04-types.md",
"baselines/dash-types-validation.json",
"dash-validation.md"
]
},
{
"id": "PKG-DASH-05",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"PKG-DASH-04",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "固定 dash.js 4.5.2/5.2.1 与本地 DASH 实际清晰度/音轨、高亮、Auto 和换源组合",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md",
"baselines/dash-sdk.json",
"baselines/dash-sdk-checkpoint.json",
"dash-validation.md",
"changes/2026-09-12-PKG-DASH-05-sdk-types.md",
"baselines/dash-sdk-types-validation.json",
"changes/2026-09-12-PKG-DASH-05-sdk-events.md",
"baselines/dash-sdk-events-validation.json",
"changes/2026-09-12-PKG-DASH-05-seek-diagnosis.md",
"baselines/dash-seek-diagnosis.json"
]
},
{
"id": "PKG-DASH-06",
"phase": "5 包迁移:artplayer-plugin-dash-control",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-dash-control"
],
"dependsOn": [
"PKG-DASH-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "dash.control.js、支持的 dash.js 版本与产物",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-MULTI-SUB-01",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "subtitles/onParser、multipleSubtitles 名称及实际返回方法",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结;接续 VENDOR-03,定位 WebVTT parser 来源/修订及 CC0 头,保留解析/序列化行为",
"evidence": [
"baselines/multiple-subtitles-release.json",
"baselines/multiple-subtitles-contract.md",
"baselines/multiple-subtitles-contract-validation.json",
"changes/2026-09-13-PKG-MULTI-SUB-01-contract.md"
]
},
{
"id": "PKG-MULTI-SUB-02",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "VTT/SRT/ASS、编码/重叠 cue/排序/空轨/失败与切换",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"baselines/multiple-subtitles-failures.json",
"changes/2026-09-13-PKG-MULTI-SUB-02-failures.md"
]
},
{
"id": "PKG-MULTI-SUB-03",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-02",
"CORE-15"
],
"status": "done",
"risk": "H",
"deliverable": "解析与合并/获取/渲染分离,过期请求及对象 URL 清理",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"baselines/multiple-subtitles-resources.json",
"changes/2026-09-13-PKG-MULTI-SUB-03-resources.md"
]
},
{
"id": "PKG-MULTI-SUB-04",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "准确 parser/cue/tree/result 类型与真实异步形状",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"baselines/multiple-subtitles-runtime-types.json",
"changes/2026-09-13-PKG-MULTI-SUB-04-runtime-types.md",
"baselines/multiple-subtitles-public-types.json",
"changes/2026-09-13-PKG-MULTI-SUB-04-public-types.md",
"type-compatibility-policy.md",
"baselines/multiple-subtitles-approved-types.json",
"changes/2026-09-13-PKG-MULTI-SUB-04-approved-types.md"
]
},
{
"id": "PKG-MULTI-SUB-07",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "修复字幕内嵌时间戳序列化",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-03"
],
"status": "done",
"risk": "H",
"deliverable": "保留数字时间戳节点、修正无效 NaN 输出、明确旧/新字幕输出差异",
"acceptance": "旧九份实现可复现,候选有效内嵌时间戳及文字/CSS/原生字幕通过,公开工厂与选择接口不变",
"evidence": [
"baselines/multiple-subtitles-timestamps.json",
"changes/2026-09-13-PKG-MULTI-SUB-07-timestamps.md"
]
},
{
"id": "PKG-MULTI-SUB-05",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-04",
"CORE-22",
"PKG-MULTI-SUB-07"
],
"status": "todo",
"risk": "H",
"deliverable": "与核心字幕/偏移/全屏组合,旧名称调用不变",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-MULTI-SUB-06",
"phase": "5 包迁移:artplayer-plugin-multiple-subtitles",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-multiple-subtitles"
],
"dependsOn": [
"PKG-MULTI-SUB-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "multiple.subtitles.js、parser 来源许可及打包边界",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-JASSUB-01",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "选项透传、result.instance、vendor 来源、worker/WASM/font 路径",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结;接续 VENDOR-04/05,核对 wrapper/worker/WASM/font 的独立来源与通知,保持资源路径和选项透传",
"evidence": [
"baselines/jassub-release.json",
"baselines/jassub-vendor.json",
"baselines/jassub-font-metadata.json",
"baselines/jassub-contract.md",
"baselines/jassub-contract-validation.json",
"changes/2026-09-13-PKG-JASSUB-01-baseline.md",
"baselines/jassub-provenance.json",
"baselines/jassub-provenance-validation.json",
"changes/2026-09-14-PKG-JASSUB-01-provenance.md"
]
},
{
"id": "PKG-JASSUB-02",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "ASS 字体、时钟/seek/倍率/resize、加载失败和销毁",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
"baselines/jassub-failures-validation.json"
]
},
{
"id": "PKG-JASSUB-03",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-02",
"CORE-15",
"CORE-16"
],
"status": "done",
"risk": "H",
"deliverable": "仅整理自有 adapter/销毁;保留第三方文件及来源",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-03-registration.md",
"baselines/jassub-registration-validation.json"
]
},
{
"id": "PKG-JASSUB-04",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "JASSUB option/instance 的兼容类型包装,vendor JS 例外记录",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-04-types.md",
"baselines/jassub-types-validation.json"
]
},
{
"id": "PKG-JASSUB-05",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-04",
"CORE-22",
"PKG-JASSUB-07",
"PKG-JASSUB-08",
"PKG-JASSUB-09"
],
"status": "todo",
"risk": "H",
"deliverable": "真实 worker/WASM 字幕渲染与全屏、旧核心测试",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-JASSUB-06",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "jassub.js、外部资源路径、许可和离线失败记录;接续 VENDOR-04/05 完整组件/字体通知、LGPL 源码分发核对及六份未明确字体的分发处置",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录;来源身份已由01冻结,完整通知和未明确字体的发布处理必须闭环,不能以来源相同替代许可结论",
"evidence": []
},
{
"id": "PKG-JASSUB-07",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "修复 vendor 生命周期与字幕时钟",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-03",
"PKG-JASSUB-02"
],
"status": "done",
"risk": "H",
"deliverable": "独立记录 vendor 适配差异;幂等销毁、跨容器 setVideo、构造回滚、逐帧归属和倍率/能力边界;查询 timeout/Worker error 的缺失数据回调及每请求监听器/定时器清理(JASSUB-QUERY-01)",
"acceptance": "保持公开真实 instance、同步方法与资源路径;保留原 vendor 来源指纹并记录每项实际补丁;候选修复正例和真实字幕/失败/时钟验证通过,未证实设备不得冒充通过",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-07-vendor.md",
"baselines/jassub-vendor-validation.json",
"baselines/jassub-vendor-patch.json"
]
},
{
"id": "PKG-MASK-01",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "模型参数、start/stop、默认下载路径及 mask 样式",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结;接续 SDK-08,分别核实 Yarn 解析版本、未固定版本的模型 solutionPath 和资源来源",
"evidence": [
"baselines/danmuku-mask-release.json",
"baselines/danmuku-mask-registry.json",
"baselines/danmuku-mask-contract.md",
"baselines/danmuku-mask-contract-validation.json",
"changes/2026-09-13-PKG-MASK-01-contract.md"
]
},
{
"id": "PKG-MASK-02",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"PKG-MASK-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "加载期间停止/销毁、重复启动、推理失败、WebGL/CPU 边界",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-13-PKG-MASK-02-failures.md",
"baselines/danmuku-mask-failures-validation.json"
]
},
{
"id": "PKG-MASK-03",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"PKG-MASK-02",
"CORE-18",
"PKG-DANMUKU-07"
],
"status": "done",
"risk": "H",
"deliverable": "模型加载/推理/画布输出分离,阻止重叠推理与过期写入",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-MASK-03-lifecycle.md",
"baselines/danmuku-mask-lifecycle-validation.json"
]
},
{
"id": "PKG-MASK-04",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"PKG-MASK-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "模型 adapter、canvas 和选项的精确类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-14-PKG-MASK-04-types.md",
"baselines/danmuku-mask-types-validation.json"
]
},
{
"id": "PKG-MASK-05",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"PKG-MASK-04",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "真实模型和 danmuku/seek/全屏组合,GPU 资源释放",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-14-PKG-MASK-05-native-checkpoint.md",
"baselines/danmuku-mask-native-validation.json",
"baselines/danmuku-mask-historical-cores.json"
]
},
{
"id": "PKG-MASK-06",
"phase": "5 包迁移:artplayer-plugin-danmuku-mask",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-danmuku-mask"
],
"dependsOn": [
"PKG-MASK-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "danmuku.mask.js、资源版本/许可、CPU fallback 和包体积证据",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-ASR-01",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "length/interval/sampleRate/onAudioChunk、append/hide/stop 的真实能力",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-13-PKG-ASR-01-contracts.md",
"baselines/asr-contract.md",
"baselines/asr-release.json"
]
},
{
"id": "PKG-ASR-02",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "PCM/WAV、chunk 时序、回调慢/拒绝、重复初始化与停止",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-13-PKG-ASR-02-audio-baseline.md",
"baselines/asr-audio-validation.json"
]
},
{
"id": "PKG-ASR-03",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-02",
"CORE-10",
"CORE-18"
],
"status": "done",
"risk": "H",
"deliverable": "AudioContext/Worklet/Stream 生命周期和背压分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-ASR-03-audio-ownership.md",
"baselines/asr-ownership-validation.json"
]
},
{
"id": "PKG-ASR-04",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "主线程/Worklet/音频 buffer 与异步回调类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-13-PKG-ASR-04-public-types.md",
"baselines/asr-types-validation.json",
"baselines/asr-type-diagnostics.json"
]
},
{
"id": "PKG-ASR-05",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-04",
"CORE-22",
"PKG-ASR-07",
"PKG-ASR-08",
"PKG-ASR-09"
],
"status": "doing",
"risk": "H",
"deliverable": "真实 WebAudio 分块、播放暂停/切源/销毁,不引入网络 ASR",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"baselines/asr-volume-validation.json",
"baselines/asr-fallback-validation.json",
"baselines/asr-core.json",
"baselines/asr-local-core-validation.json",
"changes/2026-09-13-PKG-ASR-05-local-core-checkpoint.md",
"baselines/asr-combinations-validation.json",
"changes/2026-09-13-PKG-ASR-05-cors-combinations.md",
"baselines/asr-explicit-capture-validation.json",
"changes/2026-09-13-PKG-ASR-05-editor-generation.md"
]
},
{
"id": "PKG-ASR-06",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "asr.js、Worklet 资源、输出格式与声明证据",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-ADS-01",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "核对 npm 1.0.0~1.0.6 与未发布工作区 2.1.0 的真实参数、类型、结果、倒计时、分发和旧核心来源",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/ads-release.json",
"baselines/ads-contract.md",
"baselines/ads-contract-validation.json",
"changes/2026-09-12-PKG-ADS-01-contract.md",
"scripts/ads-contract.test.mjs"
]
},
{
"id": "PKG-ADS-02",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"PKG-ADS-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "固定 npm 1.0.6 与工作区契约;HTML/视频/图片 HTML、跳过阈值、计时链、工厂复用、多实例、过早/重复方法、播放拒绝与销毁",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-ADS-02-tests.md",
"ads-validation.md",
"baselines/ads-validation.json"
]
},
{
"id": "PKG-ADS-03",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"PKG-ADS-02",
"CORE-10",
"CORE-13"
],
"status": "done",
"risk": "H",
"deliverable": "配置/广告状态/计时/视图/主视频恢复分离,保留产品规则;资源与版本检查改用经验证的旧核心能力边界",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-ADS-03-lifecycle.md",
"ads-validation.md",
"baselines/ads-lifecycle-validation.json"
]
},
{
"id": "PKG-ADS-04",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"PKG-ADS-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "兼容真实 html/video/url/i18n、旧 export= 与工作区 source/type 类型接受面;时长 string/number 漂移与未实现别名单独处置",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-ADS-04-types.md",
"baselines/ads-types-validation.json"
]
},
{
"id": "PKG-ADS-05",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"PKG-ADS-04",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "本地广告 fixture、多实例、正常结束/跳过/销毁;核验历史关联核心 4.5.5、发布 5.4.1 与候选核心的实际归档/能力/媒体组合",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-ADS-05-browser.md",
"baselines/ads-ui-visibility-validation.json"
]
},
{
"id": "PKG-ADS-06",
"phase": "5 包迁移:artplayer-plugin-ads",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-ads"
],
"dependsOn": [
"PKG-ADS-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "ads.js/README/声明一致;旧 require(pkg).default、原 dist 路径、当前 callable/ESM/legacy 的隔离 tarball 及浏览器验收",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-VAST-01",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "异步工厂、callback context、playUrl/playRes/init 与 SDK 版本;实际 npm 1.0.0 与未发布 1.2.0、SDK 1.21.0/1.21.2 的60成员归档和发布关联核心5.1.7",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/vast-contract.md",
"baselines/vast-release.json",
"changes/2026-09-12-PKG-VAST-01-contract.md",
"baselines/vast-contract-validation.json"
]
},
{
"id": "PKG-VAST-02",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"PKG-VAST-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "SDK 失败、重复初始化、广告事件、内容恢复和销毁竞态;发布 id/$container/eager 与工作区 lazy/config 覆盖、callback拒绝、加载中销毁、同毫秒多实例与晚到事件",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-VAST-02-tests.md",
"baselines/vast-behavior-validation.json",
"baselines/vast-core.json",
"vast-validation.md"
]
},
{
"id": "PKG-VAST-03",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"PKG-VAST-02",
"CORE-10",
"CORE-13"
],
"status": "doing",
"risk": "H",
"deliverable": "SDK loader、IMA adapter、广告状态和 DOM 清理分离;保持发布 callback 别名,明确初始化冲突;核心终止与显式 destroy 后重建区分",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-VAST-03-lifecycle.md",
"baselines/vast-lifecycle-validation.json",
"vast-compatibility-decision.md"
]
},
{
"id": "PKG-VAST-04",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"PKG-VAST-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "todo",
"risk": "H",
"deliverable": "IMA/context/Promise 真实类型,外部 SDK 动态对象限定边界;修复 @alugha/ima 声明依赖链,保留 export= 和 require.default 消费;同步错误声明的兼容决策单列",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": []
},
{
"id": "PKG-VAST-05",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"PKG-VAST-04",
"CORE-22"
],
"status": "todo",
"risk": "H",
"deliverable": "官方测试广告或受控 SDK 环境,错误后主视频状态恢复;核验真实5.1.7/5.4.1/候选核心,VAST VPN外部脚本例外逐项记录,不将受控SDK当作实际IMA验收",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-VAST-06",
"phase": "5 包迁移:artplayer-plugin-vast",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-vast"
],
"dependsOn": [
"PKG-VAST-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "vast.js、SDK 资源、声明消费和独立版本记录;核验实际发布 namespace default、历史深路径、ESM和准确声明,版本按政策2.0.0由REL-09统一处理",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-CAST-01",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "url/sdk/icon/mimeType、loader、会话、全局 SDK 与结果",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"baselines/chromecast-release.json",
"baselines/chromecast-contract.md",
"baselines/chromecast-contract-validation.json",
"changes/2026-09-13-PKG-CAST-01-contracts.md"
]
},
{
"id": "PKG-CAST-02",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"PKG-CAST-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "SDK 脚本加载失败/重入、无设备/拒绝、重复实例与销毁",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-13-PKG-CAST-02-failures.md",
"baselines/chromecast-failures-validation.json"
]
},
{
"id": "PKG-CAST-03",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"PKG-CAST-02",
"CORE-11",
"CORE-13"
],
"status": "done",
"risk": "H",
"deliverable": "SDK singleton/实例订阅/会话与控件职责分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-CAST-03-runtime.md",
"baselines/chromecast-runtime-validation.json"
]
},
{
"id": "PKG-CAST-04",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"PKG-CAST-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "Cast 能力 adapter、全局对象和元数据类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-13-PKG-CAST-04-types.md",
"baselines/chromecast-types-validation.json"
]
},
{
"id": "PKG-CAST-05",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"PKG-CAST-04",
"CORE-22"
],
"status": "todo",
"risk": "H",
"deliverable": "stub 测试之外记录实际 Cast 设备会话、源更新和断开",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-CAST-06",
"phase": "5 包迁移:artplayer-plugin-chromecast",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-chromecast"
],
"dependsOn": [
"PKG-CAST-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "chromecast.js、SDK URL/权限能力及待支持环境说明",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-DPIP-01",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "width/height/placeholder/fallbackToVideoPiP、open/close/toggle 返回",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-DPIP-01-contract.md",
"baselines/dpip-release.json",
"baselines/dpip-contract.md",
"baselines/dpip-contract-validation.json",
"dpip-validation.md"
]
},
{
"id": "PKG-DPIP-02",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"PKG-DPIP-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "不支持/拒绝、重复打开、pagehide、核心销毁和视频 PiP fallback",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-DPIP-02-tests.md",
"baselines/dpip-behavior-validation.json",
"dpip-validation.md"
]
},
{
"id": "PKG-DPIP-03",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "整理内部职责与资源",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"PKG-DPIP-02",
"CORE-16",
"CORE-17"
],
"status": "done",
"risk": "H",
"deliverable": "窗口生命周期、DOM 迁移、样式与事件 document 重绑分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-DPIP-03-lifecycle.md",
"baselines/dpip-lifecycle-validation.json",
"dpip-validation.md"
]
},
{
"id": "PKG-DPIP-04",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"PKG-DPIP-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "Document PiP 可选能力和真实状态/返回类型",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-DPIP-04-types.md",
"baselines/dpip-types-validation.json",
"dpip-validation.md"
]
},
{
"id": "PKG-DPIP-05",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"PKG-DPIP-04",
"CORE-22",
"PKG-CANVAS-04",
"PKG-MB-04"
],
"status": "doing",
"risk": "H",
"deliverable": "原生视频及两个 proxy、键盘/焦点/全屏与关闭还原",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-12-PKG-DPIP-05-native-checkpoint.md",
"baselines/dpip-native-validation.json"
]
},
{
"id": "PKG-DPIP-06",
"phase": "5 包迁移:artplayer-plugin-document-pip",
"title": "验证分发并同步文档",
"scope": [
"artplayer-plugin-document-pip"
],
"dependsOn": [
"PKG-DPIP-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "document.pip.js、浏览器能力矩阵、旧接口与恢复证据",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-DANMUKU-01",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "核对弹幕全部公开契约",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "emit/load/config/hide/show/reset/mount、option/isHide/isStop/icons 与事件清单",
"acceptance": "源码、声明、发布包、Bilibili 输入和设置入口对照",
"evidence": [
"baselines/danmuku-release.json",
"baselines/danmuku-contract.md",
"baselines/danmuku-contract-validation.json",
"changes/2026-09-13-PKG-DANMUKU-01-contracts.md"
]
},
{
"id": "PKG-DANMUKU-02",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "建立弹幕算法与浏览器基线",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-01",
"ENG-05",
"ENG-08"
],
"status": "done",
"risk": "H",
"deliverable": "密集/稀疏弹幕、过滤/异步输入、seek/倍率/重载测试",
"acceptance": "轨道选择、发射顺序、事件、内存和可视结果可重跑",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-02-controlled-failures.md",
"baselines/danmuku-failures-validation.json",
"changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
"baselines/danmuku-browser-validation.json"
]
},
{
"id": "PKG-DANMUKU-03",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "整理加载、解析与配置",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-02",
"CORE-08"
],
"status": "done",
"risk": "M",
"deliverable": "bilibili/input/parser/config 的分层与取消",
"acceptance": "旧格式、回调、过滤、追加/替换语义保持",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-03-input.md",
"baselines/danmuku-input-validation.json"
]
},
{
"id": "PKG-DANMUKU-04",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "整理时钟、队列与轨道调度",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-03",
"CORE-10"
],
"status": "done",
"risk": "H",
"deliverable": "danmuku 调度器和确定性时钟测试",
"acceptance": "seek/暂停/倍率/长时间运行无顺序和碰撞回归",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
"baselines/danmuku-scheduler-validation.json"
]
},
{
"id": "PKG-DANMUKU-05",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "整理 DOM 渲染、设置、热力图与 worker",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-04",
"CORE-14",
"CORE-18"
],
"status": "done",
"risk": "H",
"deliverable": "renderer/setting/heatmap/worker 职责及资源归属",
"acceptance": "mount/icons/设置和 worker 协议保持,销毁无后台工作",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-05-resources.md",
"baselines/danmuku-resources-validation.json"
]
},
{
"id": "PKG-DANMUKU-06",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "迁移 TS 与公开声明",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-05",
"ENG-04",
"ENG-06"
],
"status": "done",
"risk": "H",
"deliverable": "自有模块、worker 消息、option/item/result 类型",
"acceptance": "旧参数、扩展字段和事件消费通过,vendored 边界清楚",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-06-types.md",
"baselines/danmuku-types-validation.json"
]
},
{
"id": "PKG-DANMUKU-07",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "弹幕能力稳定性验收",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-06",
"PKG-DANMUKU-10",
"PKG-DANMUKU-11",
"PKG-DANMUKU-12"
],
"status": "done",
"risk": "H",
"deliverable": "负载/渲染/资源对比及 mask 可依赖的稳定边界",
"acceptance": "在试点核心中旧插件 API 与关键帧路径通过",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-07-stability.md",
"baselines/danmuku-stability-validation.json",
"danmuku-stability.md"
]
},
{
"id": "PKG-DANMUKU-08",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "完成新旧核心与组合验收",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-07",
"CORE-22"
],
"status": "todo",
"risk": "H",
"deliverable": "最终核心/旧核心、mask/fullscreen/PiP 组合报告",
"acceptance": "性能无未解释退化,反复装卸无累计资源",
"evidence": []
},
{
"id": "PKG-DANMUKU-09",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "完成分发、示例与文档",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-08",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "danmuku.js、README、声明、worker 与产物",
"acceptance": "tarball 和静态 icons 等旧调用通过,有独立回退版本",
"evidence": []
},
{
"id": "PKG-CANVAS-01",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "callback、canvas 原方法、转发 media 属性/方法/事件",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-CANVAS-01-contract.md",
"baselines/canvas-contract.md",
"baselines/canvas-release.json",
"canvas-validation.md",
"baselines/canvas-contract-validation.json"
]
},
{
"id": "PKG-CANVAS-02",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-CANVAS-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "ready/loadeddata/canplay、play/seek、回调、resize 与销毁",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-CANVAS-02-tests.md",
"baselines/canvas-behavior-validation.json",
"canvas-validation.md"
]
},
{
"id": "PKG-CANVAS-03",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "整理内部职责与资源",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-CANVAS-02",
"CORE-06",
"CORE-11",
"CORE-16"
],
"status": "done",
"risk": "H",
"deliverable": "video adapter/原 canvas 方法/RAF 绘制/事件订阅分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-CANVAS-03-lifecycle.md",
"baselines/canvas-lifecycle-validation.json",
"canvas-validation.md"
]
},
{
"id": "PKG-CANVAS-04",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-CANVAS-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "canvas 与媒体能力的精确组合类型,保持 Result",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-12-PKG-CANVAS-04-types.md",
"baselines/canvas-types-validation.json",
"canvas-validation.md"
]
},
{
"id": "PKG-CANVAS-05",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-CANVAS-04",
"CORE-22",
"PKG-DPIP-04",
"PKG-FACTORY-01"
],
"status": "todo",
"risk": "H",
"deliverable": "真实 video/canvas 绘制、字幕和 document PiP 恢复",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-CANVAS-06",
"phase": "5 包迁移:artplayer-proxy-canvas",
"title": "验证分发并同步文档",
"scope": [
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-CANVAS-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "canvas.js、三种产物、调用兼容与资源证据",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-MB-01",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "核对 shim 与媒体契约",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "全部 option、art.mediabunny、canvas/shim 属性及事件表",
"acceptance": "公开暴露成员和实际发布依赖/资源范围明确;核实 third-party.json 所记录依赖 MPL-2.0 元数据与实际 bundle 的许可/通知范围,不从根 MIT 推断",
"evidence": [
"baselines/mb-release.json",
"baselines/mb-surface.json",
"baselines/mb-contract.md",
"baselines/mb-contract-validation.json",
"mb-validation.md",
"changes/2026-09-12-PKG-MB-01-contract.md"
]
},
{
"id": "PKG-MB-02",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "建立真实媒体与事件基线",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-01",
"ENG-05",
"ENG-08"
],
"status": "done",
"risk": "H",
"deliverable": "MP4/WebM/HLS/Blob/Stream、seek/错误/轨道切换样本",
"acceptance": "ready 事件顺序、音画同步、超时和释放可重跑",
"evidence": [
"changes/2026-09-12-PKG-MB-02-checkpoint.md",
"baselines/mb-media-checkpoint.json",
"mb-validation.md",
"changes/2026-09-12-PKG-MB-02-baseline.md",
"baselines/mb-behavior-validation.json"
]
},
{
"id": "PKG-MB-03",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "整理 input 与加载取消",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-02",
"CORE-09"
],
"status": "done",
"risk": "H",
"deliverable": "input.js 源检测、输入资源、Range 与取消",
"acceptance": "HLS 检测在 input 边界,旧来源类型和超时保持",
"evidence": [
"changes/2026-09-12-PKG-MB-03-input.md",
"baselines/mb-input-validation.json"
]
},
{
"id": "PKG-MB-04",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "整理 VideoShim/EventTarget/Engine 协调",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-03",
"CORE-06",
"CORE-11"
],
"status": "done",
"risk": "H",
"deliverable": "shim 描述符、事件桥、加载状态和操作隔离",
"acceptance": "公开属性/同步异步返回与事件重入顺序保持",
"evidence": [
"baselines/mb-coordination-source.json",
"changes/2026-09-12-PKG-MB-04-shim-checkpoint.md",
"baselines/mb-shim-checkpoint.json",
"changes/2026-09-12-PKG-MB-04-coordination.md",
"baselines/mb-coordination-validation.json"
]
},
{
"id": "PKG-MB-05",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "整理视频解码、seek 和帧释放",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-04"
],
"status": "done",
"risk": "H",
"deliverable": "VideoEngine 调度、队列、晚帧处理和资源释放",
"acceptance": "暂停/seek/切源无旧帧覆盖,默认丢帧策略不变",
"evidence": [
"baselines/mb-video-source.json",
"changes/2026-09-12-PKG-MB-05-video.md",
"baselines/mb-video-validation.json"
]
},
{
"id": "PKG-MB-06",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "整理音频解码、时钟与同步",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-04"
],
"status": "done",
"risk": "H",
"deliverable": "AudioEngine 时钟、缓冲和 AudioContext 归属",
"acceptance": "AV sync、倍速、无音轨、静音/音量和暂停恢复通过",
"evidence": [
"baselines/mb-audio-source.json",
"changes/2026-09-12-PKG-MB-06-audio.md",
"baselines/mb-audio-validation.json"
]
},
{
"id": "PKG-MB-07",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "整理 HLS 配对轨道与 selector",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-05",
"PKG-MB-06",
"CORE-14"
],
"status": "done",
"risk": "H",
"deliverable": "m3u8 配对、质量/音频选择及拓扑清理",
"acceptance": "实际选择高亮、切到无轨道来源清理、无重复 readiness",
"evidence": [
"baselines/mb-hls-source.json",
"changes/2026-09-12-PKG-MB-07-hls.md",
"baselines/mb-hls-validation.json"
]
},
{
"id": "PKG-MB-08",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "完成 TS 与媒体能力声明",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-07",
"ENG-04",
"ENG-06"
],
"status": "done",
"risk": "H",
"deliverable": "8 个自有 JS 模块迁移与 Result/shim 类型",
"acceptance": "解码器/Stream/DOM 类型清楚,旧 Option 和 art.mediabunny 使用保持",
"evidence": [
"baselines/mb-entry-source.json",
"changes/2026-09-12-PKG-MB-08-entry-checkpoint.md",
"baselines/mb-entry-checkpoint.json",
"baselines/mb-capability-source.json",
"changes/2026-09-12-PKG-MB-08-capability.md",
"baselines/mb-capability-validation.json"
]
},
{
"id": "PKG-MB-09",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "完成新旧核心和真实媒体组合",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-08",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "跨浏览器能力、长播放、DPiP、HLS 音轨/质量报告",
"acceptance": "资源释放、事件顺序、AV sync 与支持范围满足基线",
"evidence": [
"changes/2026-09-12-PKG-MB-09-native-pip-checkpoint.md",
"baselines/mb-native-pip-checkpoint.json",
"changes/2026-09-12-PKG-MB-09-sustained-playback-checkpoint.md",
"baselines/mb-sustained-validation.json",
"baselines/mb-sustained-media.json"
]
},
{
"id": "PKG-MB-10",
"phase": "5 包迁移:artplayer-proxy-mediabunny",
"title": "完成分发和文档",
"scope": [
"artplayer-proxy-mediabunny"
],
"dependsOn": [
"PKG-MB-09",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "mediabunny.js、README、依赖版本、三产物和许可; 拆分media声明后的独立编辑器生成/辅助文件过滤与语义检查(IFRAME-04全量生成时暴露)",
"acceptance": "tarball 可消费、无意外依赖升级、旧调用与回退可用",
"evidence": []
},
{
"id": "PKG-IFRAME-01",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "constructor/commit/message/inject、postMessage 协议与历史公开拼写",
"acceptance": "源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结",
"evidence": [
"changes/2026-09-12-PKG-IFRAME-01-contract.md",
"baselines/iframe-release.json",
"baselines/iframe-contract.md",
"baselines/iframe-contract-validation.json"
]
},
{
"id": "PKG-IFRAME-02",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"PKG-IFRAME-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "跨窗口消息、ID 匹配、请求失败、重复 inject、销毁中请求",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"changes/2026-09-12-PKG-IFRAME-02-behavior.md",
"baselines/iframe-behavior-validation.json"
]
},
{
"id": "PKG-IFRAME-03",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "整理内部职责与资源",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"PKG-IFRAME-02",
"CORE-02",
"BASE-07"
],
"status": "done",
"risk": "H",
"deliverable": "请求注册/响应匹配/监听清理分离;origin/source 安全边界独立决策",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-12-PKG-IFRAME-03-requests-checkpoint.md",
"baselines/iframe-requests-checkpoint.json",
"changes/2026-09-12-PKG-IFRAME-03-boundaries-checkpoint.md",
"baselines/iframe-boundaries-checkpoint.json",
"iframe-message-boundary.md",
"changes/2026-09-13-PKG-IFRAME-03-navigation.md",
"baselines/iframe-navigation-validation.json",
"iframe-document-protocol.md"
]
},
{
"id": "PKG-IFRAME-04",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"PKG-IFRAME-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "H",
"deliverable": "消息联合类型、回调/Promise 推导、旧公开字段兼容;旧npm export=与实际namespace、额外helper协议分别核验",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容",
"evidence": [
"changes/2026-09-13-PKG-IFRAME-04-types.md",
"baselines/iframe-types-validation.json"
]
},
{
"id": "PKG-IFRAME-05",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"PKG-IFRAME-04",
"CORE-22"
],
"status": "doing",
"risk": "H",
"deliverable": "真实同源/跨源 iframe、既有 commit 协议;安全变化有独立结论;新旧核心/demo、实际 BFCache/设备和外部中断导航验收,旧端无文档标记的限制明确",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": [
"changes/2026-09-13-PKG-IFRAME-05-integration.md",
"baselines/iframe-integration-validation.json",
"changes/2026-09-13-PKG-IFRAME-05-history.md",
"baselines/iframe-history-validation.json"
]
},
{
"id": "PKG-IFRAME-06",
"phase": "5 包迁移:artplayer-tool-iframe",
"title": "验证分发并同步文档",
"scope": [
"artplayer-tool-iframe"
],
"dependsOn": [
"PKG-IFRAME-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "iframe.js、示例集成和原 script/class 导出验证;旧包名/额外helper深入口与新工具名的迁移结论; 保留旧npm Function回调及namespace/helper与工具类的区别,核验实际编译后消费而非仅声明通过",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "PKG-TOOL-THUMB-01",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "核对包契约与历史用法",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"BASE-05"
],
"status": "done",
"risk": "H",
"deliverable": "构造/defaults/事件/方法/历史拼写、.esm.js 入口和缺失 types",
"acceptance": "源码/声明/README/demo/可恢复发布内容差异已登记;公开形状和版本范围冻结;区分旧 npm 的 main/CSS 与当前工作区无 main、.esm.js/类型缺失,不把工作区状态冒称旧 npm 发布事实",
"evidence": [
"baselines/thumbnail-release.json",
"baselines/thumbnail-contract.md",
"changes/2026-09-13-PKG-TOOL-THUMB-01-contract.md",
"baselines/thumbnail-contract-validation.json"
]
},
{
"id": "PKG-TOOL-THUMB-02",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "建立特有行为与错误测试",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"PKG-TOOL-THUMB-01",
"ENG-03",
"ENG-05"
],
"status": "done",
"risk": "H",
"deliverable": "文件输入/拖放、抽帧网格、begin/end、进度/失败/重复任务",
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
"evidence": [
"baselines/thumbnail-behavior-validation.json",
"changes/2026-09-13-PKG-TOOL-THUMB-02-behavior.md"
]
},
{
"id": "PKG-TOOL-THUMB-03",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "整理内部职责与资源",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"PKG-TOOL-THUMB-02",
"CORE-01"
],
"status": "done",
"risk": "H",
"deliverable": "输入、抽帧队列、网格导出、URL/监听清理分离",
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
"evidence": [
"changes/2026-09-13-PKG-TOOL-THUMB-03-input-checkpoint.md",
"baselines/thumbnail-input-checkpoint.json",
"changes/2026-09-13-PKG-TOOL-THUMB-03-lifecycle.md",
"baselines/thumbnail-lifecycle-validation.json"
]
},
{
"id": "PKG-TOOL-THUMB-04",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "迁移自有源码和公开类型",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"PKG-TOOL-THUMB-03",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "doing",
"risk": "H",
"deliverable": "补齐真实 API 声明,自有 emitter/utils TS 化",
"acceptance": "严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容;为 BASE-DIST-01 提供兼容入口/声明及消费者验证",
"evidence": [
"changes/2026-09-13-PKG-TOOL-THUMB-04-runtime-types.md",
"baselines/thumbnail-runtime-types-validation.json",
"changes/2026-09-13-PKG-TOOL-THUMB-04-public-types.md",
"baselines/thumbnail-public-types-validation.json",
"changes/2026-09-13-PKG-TOOL-THUMB-04-emitter.md",
"baselines/thumbnail-emitter-validation.json"
]
},
{
"id": "PKG-TOOL-THUMB-05",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "验证新旧核心和组合",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"PKG-TOOL-THUMB-04",
"CORE-22"
],
"status": "todo",
"risk": "H",
"deliverable": "工具独立浏览器使用,生成缩略图在核心中显示",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
},
{
"id": "PKG-TOOL-THUMB-06",
"phase": "5 包迁移:artplayer-tool-thumbnail",
"title": "验证分发并同步文档",
"scope": [
"artplayer-tool-thumbnail"
],
"dependsOn": [
"PKG-TOOL-THUMB-05",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "tool.thumbnail.js、历史 ESM 兼容文件、types 路径和 tarball",
"acceptance": "tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录",
"evidence": []
},
{
"id": "SITE-01",
"phase": "6 文档与消费者",
"title": "清点文档/示例/生成链",
"scope": [
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"BASE-04",
"BASE-05"
],
"status": "done",
"risk": "M",
"deliverable": "中英文文档、插件页面、demo URL、编辑器声明与生成目录清单;六类 HTML 入口、prod/libs/code/example 加载行为及移动重定向",
"acceptance": "所有公开 API/插件有对应页面或明确补充任务;核实 BASE-DEMO-01 的历史 thumbnail 插件来源及 29 示例/36 HTML 路径;明确 BASE-05 所记录站点实际分发与未设 private 的 manifest 意图;接续 VENDOR-05/06/07/08 和 BASE-SITE-01/BASE-MEDIA-01,核对字体、Monaco、vConsole、console bundle 与样本来源及分发范围",
"evidence": [
"site-inventory.md",
"baselines/site-inventory.json",
"baselines/site-provenance.json",
"baselines/demo-additions.json",
"changes/2026-09-14-SITE-01-site-inventory.md",
"baselines/site-inventory-validation.json"
]
},
{
"id": "SITE-SMOKE-01",
"phase": "6 文档与消费者",
"title": "迁移示例生成器并验证真实就绪与清理",
"scope": [
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"SITE-01"
],
"status": "done",
"risk": "M",
"deliverable": "TS Markdown 解析/生成与浏览器运行模块;旧命令和 URL、稳定实例就绪 smoke、错误与资源清理",
"acceptance": "复现旧 malformed 死循环并保证有限失败;保留全部既有示例内容、生成确定且 check 只读;不再以 100ms 作为成功,验证原生就绪、异常、取消与清理;三浏览器检查,明确延迟交互与全部 233 示例仍需 EX-03",
"evidence": [
"changes/2026-09-14-SITE-SMOKE-01-documentation-smoke.md",
"baselines/docs-smoke-validation.json",
"scripts/docs-smoke.test.mjs"
]
},
{
"id": "SITE-02",
"phase": "6 文档与消费者",
"title": "整理声明与示例生成器",
"scope": [
"artplayer-vitepress"
],
"dependsOn": [
"SITE-01",
"ENG-04",
"ENG-06",
"SITE-SMOKE-01"
],
"status": "done",
"risk": "M",
"deliverable": "build-ts/build-test 生成链的可验证 TS 脚本",
"acceptance": "不靠字符串拼接掩盖声明错误,生成示例有真实断言或仅标 smoke;替换固定 100ms 成功判定,明确异步错误、清理和生成覆盖限制;坏代码块解析必须终止,覆盖 malformed 分支不推进 regexp 的回归",
"evidence": [
"changes/2026-09-14-SITE-02-editor-declarations.md",
"baselines/editor-declarations-validation.json",
"changes/2026-09-14-SITE-SMOKE-01-documentation-smoke.md"
]
},
{
"id": "SITE-LOAD-01",
"phase": "6 文档与消费者",
"title": "修复文档示例加载顺序与导航边界",
"scope": [
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"SITE-02"
],
"status": "done",
"risk": "M",
"deliverable": "共享 TS loader、移动入口与 Run Code/语言路由,保留 URL 和使用方式",
"acceptance": "旧版复现 define 丢失和依赖乱序;真实浏览器验证成功/失败恢复、顺序、去重、编码/优先级及 localhost/127 路由和语言跳转;不以此替代 SITE-03 构建/翻译流程",
"evidence": [
"changes/2026-09-14-SITE-LOAD-01-site-loading.md",
"baselines/site-loading-validation.json"
]
},
{
"id": "SITE-AI-DOCS-01",
"phase": "6 文档与消费者",
"title": "重构可复现 LLM 文档与安全翻译草稿流程",
"scope": [
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"SITE-LOAD-01",
"SITE-02"
],
"status": "done",
"risk": "M",
"deliverable": "TS 离线文档聚合、显式远程翻译、草稿校验和可回退应用,保留命令与目标路径",
"acceptance": "默认不读密钥/调用网络;LLM 内容可复现并保留来源;旧翻译破坏性行为有复现;错误/限流/超时/结构损坏/过期/路径越界拒绝且英文文档不丢失;未执行付费翻译不计服务验收",
"evidence": [
"changes/2026-09-14-SITE-AI-DOCS-01-documentation-pipeline.md",
"baselines/documentation-pipeline-validation.json"
]
},
{
"id": "SITE-BUILD-01",
"phase": "6 文档与消费者",
"title": "重构 i18n 与文档构建的暂存、替换和 Yarn 编排",
"scope": [
"artplayer",
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"SITE-AI-DOCS-01"
],
"status": "done",
"risk": "M",
"deliverable": "严格 TS 构建模块、编译后替换产物与失败回退,固定 Yarn 子进程和旧构建入口",
"acceptance": "旧 i18n 删除后失败有复现;失败不改变既有产物;语言集合、UMD/ESM/历史别名兼容;文档子进程退出码准确并完成真实 VitePress 构建;不隐式翻译、不修改播放器 API",
"evidence": [
"changes/2026-09-14-SITE-BUILD-01-staged-builds.md",
"baselines/site-build-validation.json"
]
},
{
"id": "SITE-03",
"phase": "6 文档与消费者",
"title": "整理 i18n/文档/LLM 生成流程",
"scope": [
"artplayer-vitepress"
],
"dependsOn": [
"SITE-02",
"SITE-LOAD-01",
"SITE-AI-DOCS-01",
"SITE-BUILD-01"
],
"status": "done",
"risk": "M",
"deliverable": "build-i18n/build-docs/build-llm/trans-docs 的任务边界和错误处理;桌面 common.js 自有 UI 的 TS 迁移与模块拆分",
"acceptance": "原命令兼容、生成可复现,翻译步骤不隐式运行远程服务;覆盖移动 loader 失败恢复 define、脚本依赖顺序、localhost/127.0.0.1 Run Code 目标和语言重定向;桌面剩余 UI 完成 TS 职责拆分并回归运行、导入与持久设置",
"evidence": [
"changes/2026-09-14-SITE-03-desktop-editor.md",
"baselines/site-editor-validation.json"
]
},
{
"id": "SITE-04",
"phase": "6 文档与消费者",
"title": "交叉核对逐包持续维护的文档",
"scope": [
"artplayer-vitepress"
],
"dependsOn": [
"CORE-21",
"SITE-03",
"PKG-CHAPTER-04",
"PKG-AMBILIGHT-04",
"PKG-AUDIO-04",
"PKG-AUTO-THUMB-04",
"PKG-VTT-THUMB-04",
"PKG-HLS-04",
"PKG-DASH-04",
"PKG-MULTI-SUB-04",
"PKG-JASSUB-04",
"PKG-MASK-04",
"PKG-ASR-04",
"PKG-ADS-04",
"PKG-VAST-04",
"PKG-CAST-04",
"PKG-DPIP-04",
"PKG-CANVAS-04",
"PKG-IFRAME-04",
"PKG-TOOL-THUMB-04",
"PKG-DANMUKU-06",
"PKG-MB-08"
],
"status": "todo",
"risk": "M",
"deliverable": "已随实现更新的中文/英文 API、包内实现地图、旧 JS 示例及已知能力限制的全包核对",
"acceptance": "未把缺环境的能力写成已验证,静态核对不等待设备任务;最终 demo 仍由 EX-03 验收;按 SITE-01 声明成员/候选标题清单逐项语义核对,补齐缺失的双语插件说明和 Danmuku 英文入口",
"evidence": []
},
{
"id": "SITE-05",
"phase": "6 文档与消费者",
"title": "构建文档站和验证链接/示例",
"scope": [
"artplayer-vitepress"
],
"dependsOn": [
"SITE-04",
"EX-01",
"EX-02",
"SITE-07"
],
"status": "todo",
"risk": "M",
"deliverable": "VitePress 构建、链接与嵌入 demo 检查",
"acceptance": "文档构建、链接、嵌入路径与声明注入通过;真实完整 demo 保留 EX-03 独立门槛;核对 ENG-PM-01 登记的搜索 peer 范围和真实搜索行为",
"evidence": []
},
{
"id": "SITE-06",
"phase": "6 文档与消费者",
"title": "文档站交付验收",
"scope": [
"artplayer-vitepress"
],
"dependsOn": [
"SITE-05"
],
"status": "todo",
"risk": "M",
"deliverable": "维护指南和站点变更记录",
"acceptance": "未手改 generated 目录,旧 URL 可用、部署与检查分离",
"evidence": []
},
{
"id": "SITE-07",
"phase": "6 文档与消费者",
"title": "整理站点第三方资产与来源说明",
"scope": [
"artplayer-vitepress",
"workspace"
],
"dependsOn": [
"SITE-01"
],
"status": "todo",
"risk": "H",
"deliverable": "Monaco/vConsole/console bundle/字体和样本的冻结来源、可复现构建或替代与站点 notices",
"acceptance": "接续 SITE-01 的字节与换行差异证据;完整许可随实际分发,consoleLog/global/CSS/worker 与旧 URL 兼容;缺字体/媒体使用依据明确处置;资产变更后执行编辑器/移动/字幕/示例回归,不以来源指纹替代授权或运行证据",
"evidence": [
"site-inventory.md",
"baselines/site-provenance.json"
]
},
{
"id": "EX-01",
"phase": "6 文档与消费者",
"title": "验证 React 消费者与 TS",
"scope": [
"example/react.js",
"workspace"
],
"dependsOn": [
"CORE-22",
"ENG-07"
],
"status": "done",
"risk": "M",
"deliverable": "React 挂载/卸载/重挂载、引用和插件样例",
"acceptance": "真实 tarball + TS 消费通过,保留既有 React 集成 API",
"evidence": [
"changes/2026-09-14-EX-01-react-consumer.md",
"baselines/react-consumer-validation.json",
"scripts/react-consumer.mjs"
]
},
{
"id": "EX-02",
"phase": "6 文档与消费者",
"title": "验证 Vue 消费者与更新卸载",
"scope": [
"example/vue.js",
"workspace"
],
"dependsOn": [
"CORE-22",
"ENG-07"
],
"status": "done",
"risk": "M",
"deliverable": "Vue 实例/ref、参数更新、卸载及插件样例",
"acceptance": "旧 JS 组件用法无需修改,重复挂载不泄漏",
"evidence": [
"changes/2026-09-14-EX-02-vue-consumer.md",
"baselines/vue-consumer-validation.json",
"scripts/vue-consumer.mjs"
]
},
{
"id": "EX-03",
"phase": "6 文档与消费者",
"title": "验证全部原生 demo 与外部播放集成",
"scope": [
"workspace"
],
"dependsOn": [
"EX-01",
"EX-02",
"PKG-CHAPTER-06",
"PKG-AMBILIGHT-06",
"PKG-AUDIO-06",
"PKG-AUTO-THUMB-06",
"PKG-VTT-THUMB-06",
"PKG-HLS-06",
"PKG-DASH-06",
"PKG-MULTI-SUB-06",
"PKG-JASSUB-06",
"PKG-MASK-06",
"PKG-ASR-06",
"PKG-ADS-06",
"PKG-VAST-06",
"PKG-CAST-06",
"PKG-DPIP-06",
"PKG-DANMUKU-09",
"PKG-CANVAS-06",
"PKG-MB-10",
"PKG-IFRAME-06",
"PKG-TOOL-THUMB-06"
],
"status": "todo",
"risk": "H",
"deliverable": "8082 全 demo、HLS/DASH/FLV/MPEGTS/WebTorrent 集成记录",
"acceptance": "旧 URL/参数/脚本加载保持;网络/SDK 限制明确,不静默跳过;覆盖编辑器重复 Run 和 ESM/i18n/mobile/iframe,记录实际候选脚本及状态隔离证据;依据 BASE-04 路径台账逐项消除 not-run,处理 BASE-DEMO-01",
"evidence": []
},
{
"id": "MOD-01",
"phase": "7 工具链与性能",
"title": "Bun 固定版本干净安装试点",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-09"
],
"status": "todo",
"risk": "H",
"deliverable": "独立目录的 Bun 安装与 Yarn 冻结基线对比,默认仍为用户选定的 Yarn",
"acceptance": "Node 测试仍通过;安装与资源一致才决定采用;不改 bundler;不自动替换默认 packageManager 或维护锁文件",
"evidence": []
},
{
"id": "MOD-PLUGIN-01",
"phase": "7 工具链与性能",
"title": "迁移插件生成器与类型化模板",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-06",
"SITE-03"
],
"status": "done",
"risk": "M",
"deliverable": "保留 create:plugin CLI;纯渲染/文件发布边界、TS 工厂/声明/测试/示例及维护指南",
"acceptance": "防止覆盖现有包或示例;失败回退;生成包可构建并通过严格类型、旧模块消费及测试;不自动修改既有包或运行安装发布",
"evidence": [
"changes/2026-09-14-MOD-PLUGIN-01-scaffold.md",
"baselines/scaffold-validation.json"
]
},
{
"id": "MOD-02",
"phase": "7 工具链与性能",
"title": "整理剩余开发/构建脚本与插件模板",
"scope": [
"workspace"
],
"dependsOn": [
"ENG-06",
"SITE-03",
"MOD-PLUGIN-01"
],
"status": "done",
"risk": "M",
"deliverable": "dev/build/utils/create-plugin 的 TS 与可测 CLI,模板同时提供旧 API",
"acceptance": "旧脚本入口保留、新插件类型/测试/示例齐全,Lerna 改动单独取证",
"evidence": [
"changes/2026-09-14-MOD-02-library-tooling.md",
"baselines/library-tooling-validation.json"
]
},
{
"id": "MOD-DEV-01",
"phase": "7 工具链与性能",
"title": "修复开发服务器失败状态并明确资源生命周期",
"scope": [
"workspace"
],
"dependsOn": [
"MOD-02"
],
"status": "done",
"risk": "M",
"deliverable": "修复 Servor 占用端口却退出 0 的已复现问题;明确 HTTP/监听/热刷新连接与定时器的启动、失败和关闭责任",
"acceptance": "保持默认 8082、docs 页面、自动刷新和旧 dev 命令;端口冲突退出非零且不终止其他服务,连续启动/停止及编译错误恢复有实际验证;跨平台监听差异单独留证",
"evidence": [
"changes/2026-09-14-MOD-DEV-01-dev-server.md",
"baselines/dev-server-validation.json"
]
},
{
"id": "MOD-03",
"phase": "7 工具链与性能",
"title": "测量并优化核心热路径",
"scope": [
"workspace"
],
"dependsOn": [
"CORE-22",
"ENG-08"
],
"status": "todo",
"risk": "M",
"deliverable": "DOM 读写、进度更新、持久化、初始化的测量与改进",
"acceptance": "相同设备媒体多次比较,契约不变,收益及无效尝试记录;复用 BASE-06 的原始样本与测量限制,至少三组同环境旧新配对,不以单次变快宣称收益",
"evidence": []
},
{
"id": "MOD-04",
"phase": "7 工具链与性能",
"title": "测量并优化重型插件/proxy",
"scope": [
"workspace"
],
"dependsOn": [
"PKG-DANMUKU-09",
"PKG-MASK-06",
"PKG-MB-10",
"ENG-08"
],
"status": "todo",
"risk": "M",
"deliverable": "帧/队列/推理/音画同步与资源长期运行比较",
"acceptance": "不改默认算法/阈值,性能改善有证据;无收益则保留旧实现",
"evidence": []
},
{
"id": "MOD-05",
"phase": "7 工具链与性能",
"title": "完成工具链与性能采用决策",
"scope": [
"workspace"
],
"dependsOn": [
"MOD-01",
"MOD-02",
"MOD-03",
"MOD-04",
"MOD-DEV-01"
],
"status": "todo",
"risk": "M",
"deliverable": "最终 runtime/packageManager/构建配置及性能台账",
"acceptance": "干净安装和全包检查通过;Bun 未采用有理由,不为状态强行切换",
"evidence": []
},
{
"scope": [
"workspace"
],
"status": "todo",
"risk": "H",
"evidence": [],
"id": "REL-08",
"phase": "8 发布验收",
"title": "提前建立逐包发布准入台账",
"dependsOn": [
"BASE-08",
"ENG-07"
],
"deliverable": "每批包/版本/源码/锁文件/工具/tarball integrity、必需测试/设备证据、限制和回退映射",
"acceptance": "受影响能力缺证据明确阻止对应批次;无关批次可独立准备,旧证据在候选内容变化后失效;站点采用真实构建/URL/资源验收,npm 分发依据历史核实,不从版本清单推断新增发布范围;关联 risks.json 和 third-party.json;受影响 bundle/worker/WASM/font/模型的来源与许可通知缺口必须有审查结论,未决项阻止对应批次"
},
{
"id": "REL-01",
"phase": "8 发布验收",
"title": "提前确定分包版本与差异方案",
"scope": [
"workspace"
],
"dependsOn": [
"REL-08",
"CORE-21",
"SITE-03",
"PKG-CHAPTER-04",
"PKG-AMBILIGHT-04",
"PKG-AUDIO-04",
"PKG-AUTO-THUMB-04",
"PKG-VTT-THUMB-04",
"PKG-HLS-04",
"PKG-DASH-04",
"PKG-MULTI-SUB-04",
"PKG-JASSUB-04",
"PKG-MASK-04",
"PKG-ASR-04",
"PKG-ADS-04",
"PKG-VAST-04",
"PKG-CAST-04",
"PKG-DPIP-04",
"PKG-CANVAS-04",
"PKG-IFRAME-04",
"PKG-TOOL-THUMB-04",
"PKG-DANMUKU-06",
"PKG-MB-08",
"PKG-FACTORY-01"
],
"status": "todo",
"risk": "H",
"deliverable": "每包版本/变更日志/依赖/类型差异方案和独立准入状态;按 version-policy.md 冻结各包下一 major(minor/patch 归零)并核实 registry 占用",
"acceptance": "所有包有方案和剩余门槛,未决项明确阻止相应发布;本步骤不声称已经可发布;全部包有 major 目标,版本冲突明确处理,独立准备任务同步 manifest/锁/依赖/日志;按 BASE-05 区分 21 库与文档站分发,不机械把文档站当库上传 npm",
"evidence": []
},
{
"id": "REL-09",
"phase": "8 发布验收",
"title": "落实全包下一 major 版本及依赖元数据",
"scope": [
"workspace"
],
"dependsOn": [
"REL-01",
"DOC-11"
],
"status": "todo",
"risk": "H",
"deliverable": "22 包版本目标落实、适用锁文件/依赖范围/示例/变更日志同步,核实 registry 版本占用",
"acceptance": "版本与 policy 一致,旧核心支持保留;必要拆子任务各自提交,候选构建前完成,不执行 publish",
"evidence": []
},
{
"id": "REL-02",
"phase": "8 发布验收",
"title": "生成候选 tarball 并验证新旧组合",
"scope": [
"workspace"
],
"dependsOn": [
"REL-01",
"CORE-22",
"ENG-07",
"REL-09"
],
"status": "todo",
"risk": "H",
"deliverable": "各候选本地 tarball/integrity 与新旧核心/插件消费者验证报告,外部门槛单独标注",
"acceptance": "隔离安装和可自动化组合通过;设备结论不伪造,最终发布绑定同一候选内容;在目标 major 版本确定后构建 pack,不在测试后改版本",
"evidence": []
},
{
"id": "REL-03",
"phase": "8 发布验收",
"title": "完成真机、外部 SDK 与压力验收",
"scope": [
"workspace"
],
"dependsOn": [
"REL-02",
"EX-03",
"SITE-06",
"MOD-05"
],
"status": "todo",
"risk": "H",
"deliverable": "Safari/移动/PiP/Cast/IMA/模型/长播放完整报告",
"acceptance": "包集成与全项目真机/SDK/压力结论齐全才完成本汇总;独立批次先建立自己的完整门槛子任务",
"evidence": []
},
{
"id": "REL-04",
"phase": "8 发布验收",
"title": "提前演练回退与主线修复同步",
"scope": [
"workspace"
],
"dependsOn": [
"REL-08",
"ENG-07"
],
"status": "todo",
"risk": "H",
"deliverable": "分包旧版本/tag/依赖回退方案与 master 差异",
"acceptance": "隔离包演练可回退,主线修复同步流程可执行;正式每批再核对其实际回退产物",
"evidence": []
},
{
"id": "REVIEW-01",
"phase": "8.1 多轮复盘",
"title": "第一轮全项目架构与兼容性复盘",
"scope": [
"workspace"
],
"dependsOn": [
"REL-02",
"CORE-22",
"SITE-04",
"DOC-08",
"MOD-01",
"MOD-02",
"MOD-03",
"CORE-25"
],
"status": "todo",
"risk": "H",
"deliverable": "22 包结构、类型、旧 API/路径、测试盲区和维护文档的逐包报告",
"acceptance": "本轮阻断项由独立修复任务关闭并复测;环境缺口转交下一轮,不宣称已发布就绪",
"evidence": []
},
{
"id": "REVIEW-02",
"phase": "8.1 多轮复盘",
"title": "第二轮真实浏览器与生态集成复盘",
"scope": [
"workspace"
],
"dependsOn": [
"REVIEW-01",
"REL-03"
],
"status": "todo",
"risk": "H",
"deliverable": "Chrome 交互、自动浏览器、新旧组合、真机/SDK/性能/资源的全范围报告",
"acceptance": "所需环境证据齐全,前轮修复再次核对;本轮阻断项关闭,无关 mock 不替代真实验收",
"evidence": []
},
{
"id": "REVIEW-03",
"phase": "8.1 多轮复盘",
"title": "第三轮 npm 候选内容与发布准备复盘",
"scope": [
"workspace"
],
"dependsOn": [
"REVIEW-02",
"REL-04",
"CI-04"
],
"status": "todo",
"risk": "H",
"deliverable": "实际候选 integrity、干净安装构建/消费者、入口/许可/版本/tag/回退及前轮证据汇总",
"acceptance": "最终候选完整检查通过,发布阻断项为零;准备可审阅的批次报告,不自动执行 publish;逐包核对 major 目标,不能用大版本豁免旧 API 兼容",
"evidence": []
},
{
"id": "REL-05",
"phase": "8 发布验收",
"title": "经授权发布候选并收集反馈",
"scope": [
"workspace"
],
"dependsOn": [
"REL-03",
"REL-04",
"REVIEW-03"
],
"status": "todo",
"risk": "H",
"deliverable": "候选 tag、完整产物 integrity、反馈与复现记录",
"acceptance": "实际发布授权/操作/版本可追溯;本计划不自动执行发布",
"evidence": []
},
{
"id": "REL-06",
"phase": "8 发布验收",
"title": "经授权分批正式发布",
"scope": [
"workspace"
],
"dependsOn": [
"REL-05"
],
"status": "todo",
"risk": "H",
"deliverable": "正式分包版本/tag/站点文档及兼容公告",
"acceptance": "候选验收通过,安装/浏览器复核和回退入口就绪;候选反馈修复须独立建任务并复验三轮受影响结论,正式内容与最终验证产物一致",
"evidence": []
},
{
"id": "REL-07",
"phase": "8 发布验收",
"title": "关闭重构里程碑并维护后续队列",
"scope": [
"workspace"
],
"dependsOn": [
"REL-06",
"ENG-LINT-01"
],
"status": "todo",
"risk": "L",
"deliverable": "最终任务/设计/证据归档和维护指南",
"acceptance": "全范围任务有结论、无未解释兼容缺口;遗留项有明确后续责任",
"evidence": []
},
{
"id": "PKG-FACTORY-01",
"phase": "5 工厂类型兼容补审",
"title": "修复已迁移工厂的反向赋值兼容",
"scope": [
"artplayer-proxy-canvas",
"artplayer-plugin-ambilight"
],
"dependsOn": [
"PKG-CANVAS-04",
"PKG-AMBILIGHT-04",
"PKG-DPIP-04"
],
"status": "done",
"risk": "H",
"deliverable": "复现两包旧typeof工厂替换与新.default/可选重载冲突,修复公开类型并补安装消费者、产物和文档",
"acceptance": "默认工厂的历史合法反向赋值继续通过;既有类型/运行时导出逐版本核对,不能只验证Parameters或直接调用",
"evidence": [
"baselines/factory-assignment-gaps.json",
"baselines/factory-compatibility-proposals.json",
"factory-compatibility-decision.md",
"changes/2026-09-12-PKG-FACTORY-01-decision.md",
"type-compatibility-policy.md",
"baselines/factory-compatibility-validation.json",
"changes/2026-09-13-PKG-FACTORY-01-compatible-types.md"
]
},
{
"id": "CORE-25",
"phase": "3-4 核心迁移",
"title": "修复无 navigator 环境读取默认选项",
"scope": [
"artplayer"
],
"dependsOn": [
"CORE-22",
"ENG-12"
],
"status": "done",
"risk": "M",
"deliverable": "安全读取默认语言并保留浏览器已有默认值;实际 Node 与发布产物正反例",
"acceptance": "记录旧发布版 ReferenceError;候选在无 navigator 时可读默认选项,浏览器语言和公开类型不回归;不以补全局对象隐藏错误",
"evidence": [
"changes/2026-09-13-CORE-25-defaults-ssr.md",
"baselines/defaults-ssr-validation.json"
]
},
{
"id": "ENG-12",
"phase": "2 测试与工程基础",
"title": "隔离库构建的 public 源码与分发内容",
"scope": [
"workspace",
"artplayer"
],
"dependsOn": [
"ENG-03",
"CORE-21"
],
"status": "done",
"risk": "M",
"deliverable": "禁用库的隐式 public 复制,拒绝误入包内的 TS 源码,清理生成污染并验证真实构建",
"acceptance": "三格式真实构建和严格 tarball 检查通过;已有声明和所有剩余成员字节不变;文档站使用独立构建",
"evidence": [
"changes/2026-09-13-ENG-12-library-public.md",
"baselines/library-public-validation.json"
]
},
{
"id": "PKG-ASR-07",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "修复原生播放音量二次衰减",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-04"
],
"status": "done",
"risk": "H",
"deliverable": "移除重复音量应用;保留新旧原生音频振幅对照及正式产物验收",
"acceptance": "Chromium/Firefox 两核心和 source/main/legacy 输出音量线性、静音和 stop/restart 正确;旧版平方衰减单独保留;单元/类型/真实安装通过,不代替设备验收",
"evidence": [
"changes/2026-09-13-PKG-ASR-07-playback-volume.md",
"baselines/asr-volume-validation.json"
]
},
{
"id": "PKG-ASR-08",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "修复捕获回退重复播放与静音漏声",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-07"
],
"status": "done",
"risk": "H",
"deliverable": "捕获回退静音输出图、非零PCM与外部播放归属;真实红绿证据及产物验证",
"acceptance": "已进入回退后不产生额外输出、静音不漏声、外部播放图不被关闭、stop/restart/换源清理正确;明确Firefox受控拒绝不代表自然选择回退",
"evidence": [
"changes/2026-09-13-PKG-ASR-08-capture-output.md",
"baselines/asr-fallback-validation.json"
]
},
{
"id": "PKG-ASR-09",
"phase": "5 包迁移:artplayer-plugin-asr",
"title": "提供显式捕获归属并取消过期切源重启",
"scope": [
"artplayer-plugin-asr"
],
"dependsOn": [
"PKG-ASR-04",
"PKG-ASR-08"
],
"status": "done",
"risk": "H",
"deliverable": "保留默认API的capture模式、精确runtime类型、可取消重启和原生外部归属/CORS证据",
"acceptance": "显式模式零直接绑定、不增加输出、拥有资源正确清理;Firefox不强制异常,CORS无绕过;旧工厂类型保持;延迟关闭期间pause/stop取消旧重启",
"evidence": [
"changes/2026-09-13-PKG-ASR-09-explicit-capture.md",
"baselines/asr-explicit-capture-validation.json"
]
},
{
"id": "PKG-DANMUKU-10",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "修复 issue958 密集热力图过高与曲线裁平",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-05"
],
"status": "done",
"risk": "M",
"deliverable": "自动密度缩放与曲线边界、历史自定义坐标兼容及真实浏览器红绿证据",
"acceptance": "16000条三种分布在两核心三引擎和source/main/legacy不遮挡;显式轴和自定义points保持旧解释,有单独commit",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-10-heatmap-density.md",
"baselines/danmuku-heatmap-density-validation.json"
]
},
{
"id": "PKG-DANMUKU-11",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "修复 Worker 隐藏等待吞掉可见寿命",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-06"
],
"status": "done",
"risk": "M",
"deliverable": "成功放置时的可见计时与延迟回复回归",
"acceptance": "真实 Worker 延迟下完整显示寿命;保留暂停/回收/取消和公开契约",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-11-visible-lifetime.md",
"baselines/danmuku-lifetime-validation.json"
]
},
{
"id": "PKG-DANMUKU-12",
"phase": "5 包迁移:artplayer-plugin-danmuku",
"title": "保持异步放置期间的原生帧采样与寿命维护",
"scope": [
"artplayer-plugin-danmuku"
],
"dependsOn": [
"PKG-DANMUKU-11"
],
"status": "done",
"risk": "H",
"deliverable": "每帧采样与串行dispatcher、代际buffer及回归",
"acceptance": "异步等待不丢已到时采样、不延迟既有寿命维护;保留顺序、取消与公开readys窗口",
"evidence": [
"changes/2026-09-13-PKG-DANMUKU-12-frame-sampling.md",
"baselines/danmuku-frame-sampling-validation.json"
]
},
{
"id": "PKG-JASSUB-08",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "修复默认 offscreen 初始化消息顺序",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-07"
],
"status": "done",
"risk": "H",
"deliverable": "在释放排队绘制消息前转移初始画布;独立 vendor 补丁、默认模式原生回归和维护文档",
"acceptance": "保留默认能力选择、Worker/资源和公开同步 API;旧红新绿消息顺序测试及真实默认 offscreen 播放/seek/全屏通过,主线程绘制保持",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-08-offscreen.md",
"baselines/jassub-offscreen-validation.json",
"baselines/jassub-offscreen-patch.json"
]
},
{
"id": "PKG-JASSUB-09",
"phase": "5 包迁移:artplayer-plugin-jassub",
"title": "修复 hybrid 迟到绘制与销毁后画布重建",
"scope": [
"artplayer-plugin-jassub"
],
"dependsOn": [
"PKG-JASSUB-08"
],
"status": "doing",
"risk": "H",
"deliverable": "释放旧混合绘制 bitmap,不改变新模式的画布/时钟;销毁后切字幕不重新分配画布;来源补丁、原生排队消息及维护记录",
"acceptance": "旧红新绿验证旧帧不能重建画布/解除新绘制等待;正常 hybrid 绘制保持;真实 Worker/ImageBitmap 交错、主线程及默认模式回归通过,能力缺口明确",
"evidence": [
"changes/2026-09-14-PKG-JASSUB-09-hybrid.md",
"baselines/jassub-hybrid-validation.json",
"baselines/jassub-hybrid-patch.json",
"changes/2026-09-14-PKG-JASSUB-09-firefox-diagnostics.md",
"changes/2026-09-14-PKG-JASSUB-09-display.md",
"baselines/jassub-display-validation.json"
]
},
{
"id": "PKG-AUTO-THUMB-07",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "终止抽帧时清空私有画布像素尺寸",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-02",
"CORE-09",
"CORE-19"
],
"status": "done",
"risk": "M",
"deliverable": "将私有 canvas 尺寸归入 job 清理;完成、取消、失败及分配重入均有回归,保留已编码 JPEG",
"acceptance": "旧红新绿证明保留回调时画布归零,单项清理失败不阻断其他资源;原生取消和完成后 JPEG 仍可解码,原 API/时间公式/类型不变",
"evidence": [
"changes/2026-09-14-PKG-AUTO-THUMB-07-canvas.md",
"baselines/auto-thumbnail-canvas-validation.json"
]
},
{
"id": "PKG-AUTO-THUMB-08",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "保留旧声明并提供准确异步类型入口",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-02",
"ENG-04",
"ENG-06",
"CORE-07"
],
"status": "done",
"risk": "M",
"deliverable": "保留实际 npm 1.1.0 根声明;新增同实现 /runtime 类型、编辑器声明及隔离安装消费者",
"acceptance": "原 Parameters/ReturnType/替代函数不变;准确 Promise 类型正反例、CJS/ESM 条件入口和声明解析通过;不把像素与设备缺口计为通过",
"evidence": [
"changes/2026-09-14-PKG-AUTO-THUMB-08-types.md",
"baselines/auto-thumbnail-types-validation.json"
]
},
{
"id": "PKG-AUTO-THUMB-09",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "兼容旧 CommonJS default 与直接工厂调用",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-02",
"PKG-AUTO-THUMB-08"
],
"status": "done",
"risk": "M",
"deliverable": "同一 callable 上的 default 自别名,保留最新根声明并补准确 runtime 别名类型;旧/新实际包入口证据",
"acceptance": "旧红新绿、直接/default/ESM/legacy/global 调用一致;旧根类型提取不变,公开准确类型与实际别名匹配;不关闭抽帧像素和设备缺口",
"evidence": [
"changes/2026-09-14-PKG-AUTO-THUMB-09-alias.md",
"baselines/auto-thumbnail-alias-validation.json"
]
},
{
"id": "PKG-AUTO-THUMB-10",
"phase": "5 包迁移:artplayer-plugin-auto-thumbnail",
"title": "为渐进 JPEG 编码建立取消时限与独立资源归属",
"scope": [
"artplayer-plugin-auto-thumbnail"
],
"dependsOn": [
"PKG-AUTO-THUMB-02",
"PKG-AUTO-THUMB-07"
],
"status": "done",
"risk": "M",
"deliverable": "拆分私有 canvas 编码模块,一次一帧的30秒编码时限,完成/失败/切源/销毁取消;迟到和重复回调无副作用",
"acceptance": "受控回调未返回的旧红新绿、正常JPEG和前一预览保持、同步重入/清理失败有回归;真实三浏览器编码/取消通过,公开时间公式与入口不变,首帧风险独立保留",
"evidence": [
"changes/2026-09-14-PKG-AUTO-THUMB-10-encoding.md",
"baselines/auto-thumbnail-encoding-validation.json"
]
},
{
"id": "ENG-LINT-01",
"phase": "2 工程基础",
"title": "修复 Mask manifest 排序并恢复全仓 lint",
"scope": [
"artplayer-plugin-danmuku-mask",
"workspace"
],
"dependsOn": [
"PKG-MASK-04"
],
"status": "done",
"risk": "L",
"deliverable": "仅调整 manifest 字段顺序,独立验证全仓只读 lint 与元数据语义不变",
"acceptance": "根 lint 通过;解析后的 manifest 深度相等;不改包版本、依赖或公开入口",
"evidence": [
"changes/2026-09-14-ENG-LINT-01-manifest-order.md",
"baselines/manifest-lint-validation.json"
]
}
]
}