Files
ArtPlayer/refactor/decisions.md

6.9 KiB
Raw Permalink Blame History

决策记录

状态:采用方向 / 待验证 / 已拒绝 / 已替代。采用方向不代表实现完成,技术细节可由后续证据修订。

ID 状态 决策 原因与约束
ADR-001 采用方向 保留公共 Artplayer 门面、渐进替换内部 大量旧用户及插件;属性/事件/分发均是契约
ADR-002 采用方向 自有核心、插件、proxy、工具逐步 TS 化 消除实现/声明漂移;JS/TS 过渡,公开类型兼容
ADR-003 采用方向 先测试、生命周期,再大范围模块调整 已有销毁与切源风险;不能仅靠改写语言获得可靠性
ADR-004 已替代 Bun 仅作隔离评估,默认包管理器使用 Yarn 用户明确指定 Yarn,见 ADR-021;保留 Node 测试语义
ADR-005 采用方向 保留 Vite/Rollup 的既有分发能力 UMD/AMD/legacy、Less/SVG/worker 兼容成本明确
ADR-006 采用方向 每包独立任务和版本,公共共享依赖谨慎增加 支持旧核心配新插件;不强制生态同步升级
ADR-007 采用方向 机器任务表 + 可读生成表 + 每次变更记录 支持 AI 接续、依赖检查和证据追溯
ADR-008 待验证 内部资源作用域和操作身份隔离 清理/取消语义待基线测试,不能先决定新增 Promise 拒绝
ADR-009 待验证 精确公共类型的兼容扩展策略 错误声明修正也可能破坏现有 TS 用户;逐项记录
ADR-010 采用方向 AI 改善工程,不默认给播放器加入远程 AI 能力 避免增加运行依赖、网络请求、成本和用户行为变化
ADR-011 采用方向 vendored 代码维持独立来源和许可 TS 迁移限自有逻辑,第三方更新独立验证
ADR-012 已拒绝 一次性重写核心并同时更换包管理器、bundler、测试框架 变量过多,难以定位回归和回退
ADR-013 采用方向 用户授权在旧接口兼容前提下主动改善全部不合理内部设计 2026-09-10 明确要求:TS 迁移伴随清晰拆分、充分有效测试、持续文档和 AI 接续能力;任务清单可按证据扩展
ADR-014 采用方向 每完成一个任务立即创建独立本地 commit 用户明确要求;实现/测试/文档/状态同次提交,主题带任务 ID,核实成功后再开始下一任务;不等同推送授权
ADR-015 采用方向 自主安装所需依赖并添加合理脚本 用户明确授权;按具体任务选型,记录用途/版本/环境/依赖归属,验证旧接口、产物与可复现执行,随任务独立提交
ADR-016 采用方向 最小基线和旧核心上的早期插件试点 DOC-07 发现原试点依赖 32 个前置任务;先验证工具闭环,再做核心大范围迁移
ADR-017 采用方向 分离准备工作、自动化验证与真实环境发布门槛 文档/本地候选不等待无关硬件;相关能力发布仍须真实证据,全项目任务范围不缩减
ADR-018 采用方向 历史失败台账与逐模块严格门槛 初始全包类型/环境不一定全绿;不掩盖既有问题、不允许新增回归,迁移包与发布范围严格验收
ADR-019 采用方向 候选产物内容绑定测试证据 来源 SHA、锁文件/工具和 tarball integrity 可追溯,内容变化后重新验证,避免测一份发布另一份
ADR-020 采用方向 全部 workspace 包各自升级到下一个 major,minor/patch 归零 2026-09-10 用户明确要求;替代旧“不自动提升全部 major”策略,保留 independent、旧 API 及跨版本插件兼容;目标见 version-policy.md

| ADR-021 | 采用方向 | 用户指定 Yarn,固定 Classic 1.22.22 和唯一 yarn.lock | 与原 v1 锁格式一致;保留 Node 24.21.0 和既有依赖版本,ENG-PM-01 验证;替代 ENG-01 的 npm 默认工具选择 | | ADR-022 | 采用方向 | Chrome 不可用时使用 Codex 内置浏览器 | 用户明确授权;记录实际环境和能力范围,必要设备测试仍独立验收 | | ADR-023 | 已验证于 Audio Track | 参数类型纠正会破坏旧推断时,默认入口保留兼容类型,/runtime 复用相同运行文件提供精确类型 | PKG-AUDIO-04 的 Parameters 与无注解 update 实现证明 Partial/重载仍可能破坏旧用户;沿用核心的类型分层方向,具体包需独立编译与入口身份验证,不增加第二套实现或用 any 绕过 | | ADR-024 | 已验证于 CORE-24 | 切源播放意图归属当前操作,在公开 play/pause 命令入口更新,内部暂停不覆盖用户意图 | Audio-05 三引擎复现连续切源最终停在 0;新操作继承未完成操作的意图,显式暂停及其修订号终止旧恢复副作用,过期 Promise 仍保留原结算语义;不依赖用户回调之后才执行的事件监听器 | | ADR-027 | 用户已确认,逐包实施验证 | 历史声明冲突以最新已发布类型形状为准,较早差异提供迁移,合法旧JS继续兼容,/runtime提供精确类型 | 2026-09-13明确答复“接受这条规则并继续”;Canvas/Ambilight/VTT Thumbnail/Multiple Subtitles已完成相关类型任务,后续各包独立验证,见type-compatibility-policy.md,不等同全包完成或发布授权 |

编号更正(2026-09-13):历史类型策略最初误用已由Iframe消息边界占用的ADR-025, 现唯一编号为ADR-027。此前类型相关变更记录、包架构及冻结报告中的“ADR-025” 指向type-compatibility-policy.md,应读作ADR-027; 不改写已归档证据或已验证包内容。Iframe原ADR-025/026及其引用保持原意。

开始实现前需补齐的决定

ADR-026:Iframe采用可选文档标记与两阶段导航归属,保留旧端wire和公开回调; 原生片段跳转不取消同文档请求。协议、拒绝时机和未升级端/真实BFCache的边界见 文档协议。

ADR-025:Iframe绑定实际父子窗口,保留跨源/重定向/opaque-origin与公开local receiver, 同时拒绝无关窗口和无效消息。独立依据、兼容影响与剩余信任限制见 Iframe消息边界;本轮不将来源绑定视为导航或全包发布验收。

  1. 支持的历史核心/插件版本、TS 最低版本与浏览器能力矩阵,由 BASE-01/ENG-01 登记证据。
  2. 连续切源、销毁中 Promise 的结果与错误策略,由 CORE-04/CORE-09 的变更记录明确。
  3. 真机与外部 SDK 验证环境、负责者和缺失检查的发布处理,由 ENG-05/REL-03 明确。
  4. 公共类型发现历史错误且无法完全兼容时的版本策略,由 CORE-07 和 REL-01 明确。

新决策模板

ID / 日期 / 关联任务:
状态:
问题与源码/测试证据:
选择及备选方案:
为何选择:
公开 API、类型、包分发影响:
验证方法与回退:
替代的旧决策: