mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-22 13:21:20 -08:00
refactor(core): CORE-13 type component registries and own control lifetimes
This commit is contained in:
1 parent
9eb7c945ca
commit
697817eceb
68 files changed
+10100
-1925
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,41 @@
|
||||
# CORE-13 组件注册与控件
|
||||
|
||||
状态:完成;源码、严格类型、构建、安装包与本地三浏览器验收通过。
|
||||
|
||||
## 职责与兼容
|
||||
|
||||
Component、control、layer、contextmenu 和 qualityMix 迁移 TS。注册器、DOM、条目资源、选择生命周期、内置装配、布局观察、进度计算/视图/交互按实际职责拆分;简单控件保留独立工厂。共享 typed UIEvents 和最小宿主不引入第二套事件总线;主构造门面的整合仍交 CORE-20。包内 ARCHITECTURE.md 给出实际地图、修改入口与边界。
|
||||
|
||||
保持裸工厂调用、回调 this、原始 Event 和参数、索引排序、HTML 数字转换、更新时原配置对象合并、同步 mounted/beforeUnmount、属性别名及缓存条目形状。Component add/update 可返回 div;controls.add/update 继续返回 undefined。公开 d.ts 不在此轮收紧,BASE-TYPE-04 与只写 quality 属性的 BASE-TYPE-08 仍交 CORE-21。
|
||||
|
||||
条目资源在渲染前登记,remove/update 释放内置 DOM 与 Emitter 订阅、拖动和提示定时器;整实例销毁释放作用域,但不新增逐条 beforeUnmount 调用或清空历史 cache/alias。自定义 mounted 返回值仍忽略,用户自行创建的监听器/SDK 工作需自行 beforeUnmount 清理,没有凭空引入 disposer 协议。
|
||||
|
||||
## 缺陷与修正
|
||||
|
||||
- BASE-LIFE-09:旧控件移除后时间/音量/菜单仍响应事件,拖动仍可 seek。候选按条目释放并在 Emitter 快照内检查关闭状态,用户自己的订阅保留。
|
||||
- BASE-LIFE-10:旧 mounted 抛错残留 DOM/cache/监听器,beforeUnmount 重入重复执行并抛错,已脱离 DOM 的条目移除也抛错。候选回滚失败条目且保留成功的重入替换,递归移除同条目幂等;beforeUnmount 自身抛错仍保留条目可重试并传播原异常。
|
||||
- BASE-LIFE-11:旧 selector 背景点击及异步拒绝产生未处理异常,乱序和移除后结果仍覆盖标题。候选忽略无项点击,报告原始失败,只接受当前选择的完成;内置清晰度通知也绑定选择生命周期,包括通知文本准备期间重入。第三方 onSelect 自有异步副作用不会被自动取消。
|
||||
- BASE-DOM-03:旧 selector 数组用于更新后因不可配置属性重复定义而抛错。候选保持 getter 标志,通过 WeakMap 重绑已关闭条目;同时共享到两个活动控件仍非法。
|
||||
- BASE-DOM-04:旧 `__proto__` 名称别名会改变 registry 原型。候选为它定义普通 own 属性,仍可按名称读 DOM,不再改原型。
|
||||
- BASE-DOM-05:旧 highlight.text 可通过引号注入 DOM 属性;候选使用 dataset 按文本写入。没有声称移除用户明确支持的 HTML 控件内容。
|
||||
- BASE-DOM-02 部分:窄容器控件换行,所有按钮保持可见;新增 --art-controls-height 记录总高度,字幕/面板跟随,旧 --art-control-height 保持单行单位高度。CORE-14 仍需处理窄设置树/面板,因此此风险保持 open。
|
||||
|
||||
## 验证与过程
|
||||
|
||||
源码组件资源 8 项 Node 测试、根与核心 TS 检查通过;源码专项三浏览器 84 项通过,最终安装包 UMD 与 legacy 同套完整矩阵各 342 项通过。新增用例覆盖真实右键/点击、视频进度、旧新错误对照、回调/别名/返回值、乱序、清理和尺寸变化。ResizeObserver 不可用分支单独测试;没有将 UA 覆盖当实体设备证据。
|
||||
|
||||
首次窄容器用例增加实际 16:9 高度后暴露候选控件组仍 height:100% 的裁切:57 通过、3 失败。修正遗漏的子组 CSS,再验证 640/320/240px,保留原失败报告。之后观察器用例 81 通过、3 失败,原因是字幕仍在既有 CSS transition 中;改为有界轮询最终计算样式,未扩大超时或移除动画,随后 84 项通过。
|
||||
|
||||
本任务未新增依赖或修改锁文件;package.json 将组件资源测试加入既有 test:unit,确保 CI 执行。没有版本变更、推送或发布。原型名/生命周期/选择器修复为有旧新复现的缺陷修正,不静默改正常 API。回退需一起回退 TS 模块、样式、生成产物、测试和对应记录;不能仅回退组件基类而保留依赖其条目作用域的控件。
|
||||
|
||||
完整安装 UMD 首轮 341 通过、1 项 WebKit 切源位置失败。补充原生 seeking/seeked/loadedmetadata/canplay 轨迹后复现:初始 seek 已结束但实际落在接近 0 秒,切源保留的正是这个实际位置;旧测试仅等 seeking=false,没有证明初始 3 秒前提。诊断中精确等于 3 的临时断言也错误拒绝毫秒偏差,已改用原有 0.05 秒精度。曾尝试等待 buffered/seekable 均覆盖 3 秒,但本地 WebKit 实际播放后仍报告 buffered=[]、seekable=[[0,8]]、readyState=4,这个附加假设不成立,保留失败报告并撤回。最终用例通过真实播放/暂停手势启动媒体,再确认 seekable 目标并设置初始位置,在切换前后断言位置,保留范围与媒体轨迹;没有修改播放器逻辑、重复 seek、扩大超时或放宽原切换断言。专项每引擎重复 10 次用于确认该前提修正,再重跑完整矩阵。
|
||||
|
||||
## 最终交付证据
|
||||
|
||||
- yarn ci:check:177 项通过(148 单元、4 工程、25 基线),110 个生产 TS 文件严格检查;其中核心 105、chapter 5。
|
||||
- yarn build artplayer 与 yarn build:i18n 成功;实际核心/chapter tarball 仓库外安装消费:27 项运行时通过、五组类型零诊断。
|
||||
- 最终安装 UMD 和 legacy 各 342 项三浏览器通过,包含本任务 84 项;无跳过、重试、flaky 或未处理页面异常。旧缺陷测试显式收集并断言预期拒绝,没有把它们冒充候选成功行为。
|
||||
- [验证记录](../baselines/components-validation.json) 校验全部核心源码与打包构建快照一致,三个格式产物与 tarball 及 docs/compiled 指纹一致,公开声明、包内架构文档、22 个语言文件和完整许可一致;记录实际引擎版本、逐项结果与早期失败原因。
|
||||
- 关闭 BASE-LIFE-09/10/11 和 BASE-DOM-03/04/05;BASE-DOM-02 保持 open,窄设置面板交 CORE-14。没有远端 CI、实体设备或全生态发布验收声明。
|
||||
|
||||
本任务独立本地提交;当前总任务 214 项,49 完成、165 待办。下一项 CORE-14 设置树、渲染、选择与布局。
|
||||
+17
-17
@@ -5,28 +5,28 @@
|
||||
## 现状证据
|
||||
|
||||
- [入口](../packages/artplayer/src/index.js)顺序构造所有子系统;[player](../packages/artplayer/src/player/index.js)通过 mixin 将属性安装到 art。
|
||||
- [Component](../packages/artplayer/src/utils/component.js)负责控件缓存、DOM 和监听器;[Setting](../packages/artplayer/src/setting/index.js)还有独立的树、渲染和更新语义。
|
||||
- [Component](../packages/artplayer/src/utils/component.ts)负责控件缓存、DOM 和监听器;[Setting](../packages/artplayer/src/setting/index.js)还有独立的树、渲染和更新语义。
|
||||
- [Events](../packages/artplayer/src/events/index.js)集中管理一部分 DOM 监听器,但定时器、异步请求和内部 Emitter 订阅仍由各模块管理。
|
||||
- [声明](../packages/artplayer/types/artplayer.d.ts)与源码独立维护;[build-ts](../scripts/build-ts.js)进行文本拼接。
|
||||
|
||||
## 目标职责
|
||||
|
||||
| 领域 | 现有文件范围 | 目标与迁移方式 |
|
||||
| --- | --- | --- |
|
||||
| 公共门面 | src/index.js、player/*Mix.js | 保留原签名和属性描述符;委托内部服务,不一次性换继承结构 |
|
||||
| 配置 | option、scheme、config、默认值 | 区分用户输入与归一化配置;保持默认值、合并语义和错误时机 |
|
||||
| 生命周期 | constructor、destroy、Events、各模块清理 | 实例资源作用域与操作资源作用域,清理恰好一次、可重入、失败后继续释放 |
|
||||
| 内部事件 | utils/emitter.js | typed event map、未知事件兼容扩展、原调用顺序和 ctx |
|
||||
| 媒体能力 | template、proxy、player | 内部精确的能力接口与原生视频类型分离;公共 video 兼容层保留 |
|
||||
| 播放流程 | play/pause/toggle/seek/url/switch/eventInit | 媒体状态、操作身份、加载恢复与 UI 响应分离 |
|
||||
| UI 注册 | utils/component、control、layer、contextmenu | 保留 name/cache/update/remove;明确 DOM 和绑定的归属 |
|
||||
| 设置面板 | setting/index.js | 分开树整理、选择状态、渲染、布局、绑定;共享能共享的逻辑,不强行统一返回类型 |
|
||||
| 字幕 | subtitle.js、utils/subtitle.js | 获取、解析、track/DOM 渲染、取消和对象 URL 回收分开 |
|
||||
| 显示模式 | fullscreen/fullscreenWeb/pip/mini/auto* | 显式恢复位置和样式,保持互斥顺序、用户手势与移动端语义 |
|
||||
| 输入 | events、hotkey | 鼠标/触控/键盘/焦点归属清晰,跨 document 重新绑定和清理 |
|
||||
| 无障碍 | template、control、setting、显示模式 | 明确键盘导航、可访问名称、焦点进入退出和字幕能力,保留旧 DOM/CSS 与热键契约 |
|
||||
| 内置功能 | plugins/*、info/notice/loading/mask | 逐项登记定时器和订阅,不能因内部插件迁移改变默认启用条件 |
|
||||
| 资源 | i18n、icons、style、libs | 保持子路径、图标键、CSS 类和样式注入;记录 vendored 依赖来源 |
|
||||
| 领域 | 现有文件范围 | 目标与迁移方式 |
|
||||
| -------- | -------------------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| 公共门面 | src/index.js、player/*Mix.js | 保留原签名和属性描述符;委托内部服务,不一次性换继承结构 |
|
||||
| 配置 | option、scheme、config、默认值 | 区分用户输入与归一化配置;保持默认值、合并语义和错误时机 |
|
||||
| 生命周期 | constructor、destroy、Events、各模块清理 | 实例资源作用域与操作资源作用域,清理恰好一次、可重入、失败后继续释放 |
|
||||
| 内部事件 | utils/emitter.js | typed event map、未知事件兼容扩展、原调用顺序和 ctx |
|
||||
| 媒体能力 | template、proxy、player | 内部精确的能力接口与原生视频类型分离;公共 video 兼容层保留 |
|
||||
| 播放流程 | play/pause/toggle/seek/url/switch/eventInit | 媒体状态、操作身份、加载恢复与 UI 响应分离 |
|
||||
| UI 注册 | utils/component、control、layer、contextmenu | 保留 name/cache/update/remove;明确 DOM 和绑定的归属 |
|
||||
| 设置面板 | setting/index.js | 分开树整理、选择状态、渲染、布局、绑定;共享能共享的逻辑,不强行统一返回类型 |
|
||||
| 字幕 | subtitle.js、utils/subtitle.js | 获取、解析、track/DOM 渲染、取消和对象 URL 回收分开 |
|
||||
| 显示模式 | fullscreen/fullscreenWeb/pip/mini/auto* | 显式恢复位置和样式,保持互斥顺序、用户手势与移动端语义 |
|
||||
| 输入 | events、hotkey | 鼠标/触控/键盘/焦点归属清晰,跨 document 重新绑定和清理 |
|
||||
| 无障碍 | template、control、setting、显示模式 | 明确键盘导航、可访问名称、焦点进入退出和字幕能力,保留旧 DOM/CSS 与热键契约 |
|
||||
| 内置功能 | plugins/*、info/notice/loading/mask | 逐项登记定时器和订阅,不能因内部插件迁移改变默认启用条件 |
|
||||
| 资源 | i18n、icons、style、libs | 保持子路径、图标键、CSS 类和样式注入;记录 vendored 依赖来源 |
|
||||
|
||||
## 生命周期设计约束
|
||||
|
||||
|
||||
+3
-2
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 214 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 166 / doing 0 / blocked 0 / done 48 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 165 / doing 0 / blocked 0 / done 49 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
| CORE-10 | artplayer<br>迁移播放与时间/状态属性 | CORE-09 | play/pause/toggle/seek/volume/rate/duration 等模块 | 旧返回值、拒绝、mutex、位置恢复、属性描述符与事件通过;接续 CORE-07 / BASE-TYPE-04 的 toggle void 与实际 Promise 分支冲突,不吞拒绝 | H | done |
|
||||
| CORE-11 | artplayer<br>整理媒体事件、ready 与重连 | CORE-10 | 媒体转发、重连、UI 响应职责分离 | readiness 次数/顺序、过期重连、原错误参数有回归 | H | done |
|
||||
| CORE-12 | artplayer<br>迁移模板及公开资源入口 | CORE-06, CORE-04, BASE-04 | template/icons/i18n/style、SSR 与 proxy 挂载 | DOM/CSS/global/样式注入、i18n 子路径及 SSR import 保持;不把 SSR import/useSSR 保持扩大为服务端构造播放器;复跑 BASE-05 的 SSR import/模板、浏览器 useSSR 节点复用和非浏览器构造错误;接续 VENDOR-01/02,核对 screenfull/hint 复制版本、修改与分发通知,保留 DOM/CSS/fullscreen 行为 | H | done |
|
||||
| CORE-13 | artplayer<br>迁移组件注册与控件 | CORE-12, CORE-08 | Component/control/layer/contextmenu 的资源与 TS 边界 | add/update/remove、name、selector、mounted/beforeUnmount 通过;处理 BASE-DOM-02 窄容器控件裁切,保留 controls.update 的旧 undefined 返回值 | H | todo |
|
||||
| CORE-13 | artplayer<br>迁移组件注册与控件 | CORE-12, CORE-08 | Component/control/layer/contextmenu 的资源与 TS 边界 | add/update/remove、name、selector、mounted/beforeUnmount 通过;处理 BASE-DOM-02 窄容器控件裁切,保留 controls.update 的旧 undefined 返回值 | H | done |
|
||||
| CORE-14 | artplayer<br>拆分设置树、渲染和布局 | CORE-13 | setting model/selection/render/layout 的分批实现 | 不强行统一控件返回值,嵌套选择、默认高亮、更新清理通过;结合 BASE-DOM-02 验证窄容器设置定位;接续 BASE-TYPE-07 的 find null、add/update item、remove undefined 声明冲突 | H | todo |
|
||||
| CORE-15 | artplayer<br>迁移字幕获取、解析和渲染 | CORE-11, CORE-13 | subtitle 请求/track/DOM/URL 生命周期与类型 | 过期结果、偏移、cue 数组、原生全屏及错误路径通过;接续 BASE-TYPE-07 的真实 cue 数组与旧隐式 scalar 回调声明兼容 | H | todo |
|
||||
| CORE-16 | artplayer<br>迁移全屏、PiP、mini 与尺寸模式 | CORE-11, CORE-12 | 显示模式服务和原公开属性门面 | 模式互斥/恢复位置、手势权限、移动方向和退出失败通过 | H | todo |
|
||||
@@ -447,6 +447,7 @@
|
||||
- CORE-10: [记录](changes/2026-09-11-CORE-10-playback-properties.md) [记录](baselines/playback-properties-validation.json)
|
||||
- CORE-11: [记录](changes/2026-09-11-CORE-11-media-events.md) [记录](baselines/media-events-validation.json)
|
||||
- CORE-12: [记录](changes/2026-09-11-CORE-12-template-resources.md) [记录](baselines/template-resources-validation.json)
|
||||
- CORE-13: [记录](changes/2026-09-11-CORE-13-components.md) [记录](baselines/components-validation.json)
|
||||
- PKG-CHAPTER-01: [记录](changes/2026-09-10-PKG-CHAPTER-01-contract.md) [记录](baselines/chapter-contract.md)
|
||||
- PKG-CHAPTER-02: [记录](changes/2026-09-10-PKG-CHAPTER-02-tests.md) [记录](baselines/chapter-validation.json)
|
||||
- PKG-CHAPTER-03: [记录](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md) [记录](baselines/chapter-migration-validation.json)
|
||||
|
||||
+17
-9
@@ -1,5 +1,13 @@
|
||||
# 进度与证据
|
||||
|
||||
## 当前实施:CORE-13 组件注册与控件完成
|
||||
|
||||
Component/control/layer/contextmenu 与 qualityMix 迁移 TS,拆清注册、DOM、资源、选择生命周期、进度交互和布局;修复移除后残留订阅、失败注册与重入清理、过期选择写入、selector 重用和文本属性注入。正常回调/排序/别名/描述符保持,controls.add/update 仍返回 undefined。
|
||||
|
||||
177 项 Node/工程/基线通过,核心及 chapter 共 110 个生产 TS 文件严格检查;最终安装 UMD 和 legacy 各 342 项三浏览器通过,实际 tarball 27 项运行时与五组类型零诊断。见 [交付](changes/2026-09-11-CORE-13-components.md) 和 [指纹及结果](baselines/components-validation.json)。关闭 BASE-LIFE-09/10/11、BASE-DOM-03/04/05;BASE-DOM-02 的窄设置面板留 CORE-14,公开返回值与只写属性声明仍交 CORE-21。
|
||||
|
||||
当前分支 codex/compatible-modernization,214 项中 49 完成、165 待办;核心 105 个 TS 文件、chapter 5 个。下一项 CORE-14 设置树、选择、渲染与布局;CORE-13 按单任务本地提交,未推送或发布。
|
||||
|
||||
## 当前实施:CORE-12 模板及公开资源入口完成
|
||||
|
||||
模板、图标、语言和样式入口迁移 TS,保留 SSR/DOM/proxy 身份及语言分发。169 项 Node/工程/基线通过,最终安装 UMD 与 legacy 各 258 项三浏览器通过;打包 27 项运行时及五组类型零诊断。复制资源固定上游内容、全部适配和实际分发许可已核对,关闭 VENDOR-01/02 与 BASE-I18N-01;公开模板/图标类型差异 BASE-TYPE-09 交 CORE-21。见 [交付](changes/2026-09-11-CORE-12-template-resources.md)。当前 214 项,48 完成、166 待办;核心 71 个 TS 文件、chapter 5 个。下一项 CORE-13 组件注册与控件。
|
||||
@@ -241,15 +249,15 @@ BASE-01 已提交 `1d705b30`。BASE-HARNESS-01 完成发布包采集页面/本
|
||||
|
||||
以下来自建立计划前的同一会话评估,属于初步诊断,不代替 BASE 阶段的已发布产物基线与完整浏览器测试:
|
||||
|
||||
| 检查 | 结果与限制 |
|
||||
| --- | --- |
|
||||
| `node --test test/playback.test.js test/dash-control.test.js` | Node 25.2.1,19 项通过;这是 mock/单元测试 |
|
||||
| 核心 src/types、test、scripts/*.js 的 ESLint(不加 --fix) | 通过;没有把插件模板占位符作为普通源码 lint |
|
||||
| 三个 TS 样例,TS 5.9.3、strict、types: [] | 通过;未隔离环境类型时存在第三方 DOM/WebCodecs/markdown 声明冲突 |
|
||||
| 使用项目构建配置 write:false 进行 ESM/现代 UMD/legacy UMD 内存构建 | 成功;不是完整 npm pack 或全部发布构建;未写产物 |
|
||||
| 销毁源码隔离探针 | 重复 destroy 可误删其他实例注册项;需要正式回归用例 |
|
||||
| 连续切源源码隔离探针 | 一次 canplay 可结算两次切源;尚未真实浏览器复现影响 |
|
||||
| `bun test ./test/playback.test.js ./test/dash-control.test.js` | Bun 1.3.14:1 通过、18 失败,mock.fn 不兼容;未来版本需重测 |
|
||||
| 检查 | 结果与限制 |
|
||||
| ------------------------------------------------------------------ | ---------------------------------------------------------------- |
|
||||
| `node --test test/playback.test.js test/dash-control.test.js` | Node 25.2.1,19 项通过;这是 mock/单元测试 |
|
||||
| 核心 src/types、test、scripts/*.js 的 ESLint(不加 --fix) | 通过;没有把插件模板占位符作为普通源码 lint |
|
||||
| 三个 TS 样例,TS 5.9.3、strict、types: [] | 通过;未隔离环境类型时存在第三方 DOM/WebCodecs/markdown 声明冲突 |
|
||||
| 使用项目构建配置 write:false 进行 ESM/现代 UMD/legacy UMD 内存构建 | 成功;不是完整 npm pack 或全部发布构建;未写产物 |
|
||||
| 销毁源码隔离探针 | 重复 destroy 可误删其他实例注册项;需要正式回归用例 |
|
||||
| 连续切源源码隔离探针 | 一次 canplay 可结算两次切源;尚未真实浏览器复现影响 |
|
||||
| `bun test ./test/playback.test.js ./test/dash-control.test.js` | Bun 1.3.14:1 通过、18 失败,mock.fn 不兼容;未来版本需重测 |
|
||||
|
||||
## 清点中新增的待核对项
|
||||
|
||||
|
||||
@@ -56,3 +56,9 @@
|
||||
| BASE-LIFE-08 | resolved / 已复现 | Ready continues after a control callback destroys the instance | CORE-11 |
|
||||
| BASE-I18N-01 | resolved / 已复现 | Missing prototype-named translations return inherited functions | CORE-12 |
|
||||
| BASE-TYPE-09 | open / 源码/产物事实 | Template and icon declarations claim incompatible DOM and static shapes | CORE-21 |
|
||||
| BASE-LIFE-09 | resolved / 已复现 | Removed builtin controls retain subscriptions and progress drag effects | CORE-13 |
|
||||
| BASE-LIFE-10 | resolved / 已复现 | Component mounting and removal failures leave partial entries or recurse | CORE-13 |
|
||||
| BASE-LIFE-11 | resolved / 已复现 | Selector failures are unhandled and obsolete completion overwrites current UI | CORE-13 |
|
||||
| BASE-DOM-03 | resolved / 已复现 | Reusing selector items after update redefines nonconfigurable properties | CORE-13 |
|
||||
| BASE-DOM-04 | resolved / 已复现 | A component named __proto__ changes its registry prototype | CORE-13 |
|
||||
| BASE-DOM-05 | resolved / 已复现 | Highlight text interpolation permits unintended HTML attributes | CORE-13 |
|
||||
+140
-1
@@ -170,7 +170,8 @@
|
||||
"refactor/baselines/dom.json"
|
||||
],
|
||||
"compatibleResolution": "在保留自定义控件扩展入口下修正布局。",
|
||||
"closureCriteria": "320px 及正常容器的设置/模式操作真实可用。"
|
||||
"closureCriteria": "320px 及正常容器的设置/模式操作真实可用。",
|
||||
"workspaceState": "CORE-13 final installed UMD and legacy verify wrapped controls at 640/320/240px with real 16:9 heights and observed total-height offsets, including ResizeObserver fallback. Narrow setting tree/panel interactions still require CORE-14; this finding remains open."
|
||||
},
|
||||
{
|
||||
"id": "BASE-DEMO-01",
|
||||
@@ -993,6 +994,144 @@
|
||||
],
|
||||
"compatibleResolution": "Keep old legal declarations accepted, expose accurate template and icon views without inventing runtime properties.",
|
||||
"closureCriteria": "Old consumers and accurate template/media/icon view consumers pass all supported type modes and runtime shape checks."
|
||||
},
|
||||
{
|
||||
"id": "BASE-LIFE-09",
|
||||
"title": "Removed builtin controls retain subscriptions and progress drag effects",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Keep per-entry owned listeners, timers and drag callbacks inert after removal while preserving user subscriptions.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
},
|
||||
{
|
||||
"id": "BASE-LIFE-10",
|
||||
"title": "Component mounting and removal failures leave partial entries or recurse",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Rollback failed registration, preserve successful reentrant replacement and original errors, retain failed beforeUnmount for retry.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
},
|
||||
{
|
||||
"id": "BASE-LIFE-11",
|
||||
"title": "Selector failures are unhandled and obsolete completion overwrites current UI",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Keep callback arguments and default flags; report owned failures and gate titles and builtin quality notices by active selection.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
},
|
||||
{
|
||||
"id": "BASE-DOM-03",
|
||||
"title": "Reusing selector items after update redefines nonconfigurable properties",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Keep getter descriptors and rebind only after the previous entry closes.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
},
|
||||
{
|
||||
"id": "BASE-DOM-04",
|
||||
"title": "A component named __proto__ changes its registry prototype",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Preserve named DOM access with a normal own property without changing registry prototype.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
},
|
||||
{
|
||||
"id": "BASE-DOM-05",
|
||||
"title": "Highlight text interpolation permits unintended HTML attributes",
|
||||
"confirmation": "reproduced",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"CORE-13"
|
||||
],
|
||||
"evidence": [
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js",
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md"
|
||||
],
|
||||
"compatibleResolution": "Assign highlight text through dataset while retaining marker positions and intentional control HTML APIs.",
|
||||
"closureCriteria": "Published/candidate comparison, final installed UMD and legacy browser matrices, strict types and package verification must pass; original failure evidence remains recorded.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-11-CORE-13-components.md",
|
||||
"refactor/baselines/components-validation.json",
|
||||
"test/browser/components.spec.js",
|
||||
"test/component-resources.test.js"
|
||||
],
|
||||
"resolutionRationale": "Published/candidate behavior comparisons and both final installed artifact matrices pass. Entry ownership, transactional registration/removal, current selection guards and literal text assignment correct reproduced defects while retaining normal callbacks, return values, descriptors and public declarations. Source and shipped bytes match the tested package."
|
||||
}
|
||||
]
|
||||
}
|
||||
+5
-2
@@ -990,11 +990,14 @@
|
||||
"CORE-12",
|
||||
"CORE-08"
|
||||
],
|
||||
"status": "todo",
|
||||
"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": []
|
||||
"evidence": [
|
||||
"changes/2026-09-11-CORE-13-components.md",
|
||||
"baselines/components-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "CORE-14",
|
||||
|
||||
Reference in new issue
Block a user