Files
ArtPlayer/refactor/decisions.md
T

66 lines
6.9 KiB
Markdown
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.
# 决策记录
状态:采用方向 / 待验证 / 已拒绝 / 已替代。采用方向不代表实现完成,技术细节可由后续证据修订。
| 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](type-compatibility-policy.md),不等同全包完成或发布授权 |
编号更正(2026-09-13):历史类型策略最初误用已由Iframe消息边界占用的ADR-025,
现唯一编号为ADR-027。此前类型相关变更记录、包架构及冻结报告中的“ADR-025”
指向[type-compatibility-policy.md](type-compatibility-policy.md),应读作ADR-027;
不改写已归档证据或已验证包内容。Iframe原ADR-025/026及其引用保持原意。
## 开始实现前需补齐的决定
ADR-026:Iframe采用可选文档标记与两阶段导航归属,保留旧端wire和公开回调;
原生片段跳转不取消同文档请求。协议、拒绝时机和未升级端/真实BFCache的边界见
[文档协议](iframe-document-protocol.md)。
ADR-025:Iframe绑定实际父子窗口,保留跨源/重定向/opaque-origin与公开local receiver,
同时拒绝无关窗口和无效消息。独立依据、兼容影响与剩余信任限制见
[Iframe消息边界](iframe-message-boundary.md);本轮不将来源绑定视为导航或全包发布验收。
1. 支持的历史核心/插件版本、TS 最低版本与浏览器能力矩阵,由 BASE-01/ENG-01 登记证据。
2. 连续切源、销毁中 Promise 的结果与错误策略,由 CORE-04/CORE-09 的变更记录明确。
3. 真机与外部 SDK 验证环境、负责者和缺失检查的发布处理,由 ENG-05/REL-03 明确。
4. 公共类型发现历史错误且无法完全兼容时的版本策略,由 CORE-07 和 REL-01 明确。
## 新决策模板
```text
ID / 日期 / 关联任务:
状态:
问题与源码/测试证据:
选择及备选方案:
为何选择:
公开 API、类型、包分发影响:
验证方法与回退:
替代的旧决策:
```