mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
4004 lines
233 KiB
JSON
4004 lines
233 KiB
JSON
{
|
||
"schemaVersion": 1,
|
||
"task": "BASE-07",
|
||
"sourceCommit": "e01f39ff",
|
||
"updatedAt": "2026-09-12",
|
||
"note": "Open means closure evidence is outstanding; source-observed and unverified are not reproduced runtime bugs. A source issue already mitigated in the workspace still requires candidate regression evidence. No accepted-with-scope item is implied by baseline task completion.",
|
||
"items": [
|
||
{
|
||
"id": "ENG-PERF-01",
|
||
"title": "Candidate core bundles exceed the BASE-06 size review threshold in all three formats",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"CORE-22",
|
||
"MOD-03",
|
||
"REVIEW-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/coverage-performance.md",
|
||
"refactor/baselines/quality-validation.json",
|
||
"refactor/changes/2026-09-11-ENG-08-quality-reports.md",
|
||
"refactor/baselines/core-setting-navigation-partial.json",
|
||
"refactor/changes/2026-09-11-CORE-22-core-acceptance.md",
|
||
"refactor/core-acceptance.md",
|
||
"refactor/baselines/core-acceptance-validation.json"
|
||
],
|
||
"compatibleResolution": "Attribute the growth to actual modules and build output, remove avoidable overhead while preserving APIs, and document any justified remaining cost against matching published entries.",
|
||
"closureCriteria": "Fresh isolated artifacts have reproducible raw/gzip9/Brotli6 results and an explicit size review; do not raise or overwrite the historical threshold to pass.",
|
||
"workspaceState": "First ENG-08 modern core measurement: 134037 to 207875 raw bytes, 35486 to 58374 gzip9, 32533 to 53326 Brotli6. Chapter remains below the combined relative/absolute review threshold. This is a review requirement, not a release approval. CORE-22 navigation phase: 208030 raw / 58429 gzip9 / 53361 Brotli6 modern bytes. Preferred-target revalidation removes a second panel scan at a cost of 55 gzip bytes over ENG-08; it does not resolve total bundle growth. Final CORE-22: modern 208037 raw / 58434 gzip9 / 53372 Brotli6; legacy 212218 / 59686 / 54412; ESM 361496 / 77141 / 70030. Navigation and initial-layout work were reduced, but total size remains above the historical threshold. MOD-03 and REVIEW-01 must review this before release."
|
||
},
|
||
{
|
||
"id": "ENG-PERF-02",
|
||
"title": "Intermittent constructor and destruction timing signals require follow-up paired measurement",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"CORE-22",
|
||
"MOD-03",
|
||
"REVIEW-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/coverage-performance.md",
|
||
"refactor/baselines/quality-validation.json",
|
||
"refactor/changes/2026-09-11-ENG-08-quality-reports.md",
|
||
"refactor/baselines/core-setting-navigation-partial.json",
|
||
"refactor/changes/2026-09-11-CORE-22-core-acceptance.md",
|
||
"refactor/core-acceptance.md",
|
||
"refactor/baselines/core-acceptance-validation.json"
|
||
],
|
||
"compatibleResolution": "Repeat paired measurements on the same environment, distinguish initialization and teardown work from host jitter, and optimize only after identifying a reproducible cost.",
|
||
"closureCriteria": "Explain repeat-group timing signals with retained samples and source fingerprints; do not infer a regression or improvement from a single group or expand timing allowances.",
|
||
"workspaceState": "First ENG-08 run: Firefox group 2 had core/chapter constructor delta 3/5 ms, WebKit group 3 chapter delta 3 ms, versus 2 ms absolute allowance. Other groups did not trigger. Candidate resource checks passed independently. Final run: Chromium/Firefox had no timing signals; WebKit group 1 core/chapter each increased 3 ms, with no signals in the other two groups. The intermittent review remains open. CORE-22 navigation phase: Chromium group 1 core/chapter destroy deltas 3.1/2.5 ms and group 3 chapter constructor delta 2.8 ms; WebKit group 1 chapter destroy delta 27 ms (71 to 98 ms); Firefox has no timing signals. Other groups do not reproduce those destroy signals. All 54 candidate resource probes pass. The timed fixture uses default settings disabled, so these measurements do not establish any timing effect from setting navigation changes. Final CORE-22: no constructor timing signals in any of the three engines; Chromium/Firefox have no timing signals. WebKit group 1 chapter destruction delta 44 ms and group 2 core delta 30 ms remain, group 3 has no signal. All 54 candidate resource probes pass. Chromium sampling identifies native load/DOM teardown cost but does not establish the cause of WebKit signals. MOD-03/REVIEW-01 retain the open review without changing allowances."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-06",
|
||
"title": "Published switch leaves an unhandled rejection and an unsettled promise when resume fails",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md",
|
||
"test/playback.test.js"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"workspaceState": "Current switchMix uses silencePromise and test/playback.test.js covers resume rejection. Published baseline still reproduces the old failure; preserve the existing workspace mitigation during migration.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-09-source-operations.md",
|
||
"refactor/baselines/source-operations-validation.json",
|
||
"test/source.test.js",
|
||
"test/playback.test.js",
|
||
"test/browser/source.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned source generations settle superseded/destroyed calls with undefined, prevent stale restart/restoration and actual playMix effects, retain original load failures and best-effort resume settlement. Published baselines remain unchanged; real-media comparisons and controlled native-play tests cover the candidate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-01",
|
||
"title": "Superseded switch resolves along with the latest source",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-09-source-operations.md",
|
||
"refactor/baselines/source-operations-validation.json",
|
||
"test/source.test.js",
|
||
"test/playback.test.js",
|
||
"test/browser/source.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned source generations settle superseded/destroyed calls with undefined, prevent stale restart/restoration and actual playMix effects, retain original load failures and best-effort resume settlement. Published baselines remain unchanged; real-media comparisons and controlled native-play tests cover the candidate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-02",
|
||
"title": "Switch remains unsettled during the bounded observation after destroy",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-09-source-operations.md",
|
||
"refactor/baselines/source-operations-validation.json",
|
||
"test/source.test.js",
|
||
"test/playback.test.js",
|
||
"test/browser/source.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned source generations settle superseded/destroyed calls with undefined, prevent stale restart/restoration and actual playMix effects, retain original load failures and best-effort resume settlement. Published baselines remain unchanged; real-media comparisons and controlled native-play tests cover the candidate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-03",
|
||
"title": "Async plugin registers its result after destroy",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-08"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-08-plugin-manager.md",
|
||
"refactor/baselines/plugins-validation.json",
|
||
"test/plugins.test.js",
|
||
"test/browser/plugins.spec.js"
|
||
],
|
||
"resolutionRationale": "Closing guards stop late writes, post-close factories and reentrant name/coercion/reset registration. Pending success still fulfills with the registry and public rejection identity is preserved. This closes late registration only, not arbitrary plugin resource ownership."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-04",
|
||
"title": "Destroying an instance twice unregisters a different live instance",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-04-instance-lifecycle.md",
|
||
"refactor/baselines/instance-lifecycle-validation.json",
|
||
"test/browser/lifecycle.spec.js",
|
||
"test/instance-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "内部防重入与 index >= 0 检查保留其他实例;正常 destroy 回调可挂载替代实例,旧实例重复销毁不移除其 DOM。UMD 与 legacy 三浏览器通过。"
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-05",
|
||
"title": "Failed constructor leaves initialized markup/listeners until explicit probe cleanup",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/lifecycle.json",
|
||
"refactor/baselines/lifecycle-coverage.md"
|
||
],
|
||
"compatibleResolution": "按对应 CORE 任务修复,保持合法旧调用;异步取消需明确结算策略,不把 pending 或重复销毁当正常兼容要求。",
|
||
"closureCriteria": "候选正向回归和旧新差异记录通过;有界观察问题不得仅靠延长等待隐藏。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-04-instance-lifecycle.md",
|
||
"refactor/baselines/instance-lifecycle-validation.json",
|
||
"test/browser/lifecycle.spec.js",
|
||
"test/instance-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "失败构造释放已初始化的监听/已接入定时器并恢复原 DOM/SSR 节点;proxy、插件及 Events 半初始化失败和清理同时抛错均有真实浏览器回归。未迁移的字幕/SDK 等资源仍由对应任务验收。"
|
||
},
|
||
{
|
||
"id": "BASE-DOM-01",
|
||
"title": "控件 Tab 不可达",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-23",
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dom.json"
|
||
],
|
||
"compatibleResolution": "补键盘可达性、焦点及名称,保留旧 DOM/CSS 和快捷键。",
|
||
"closureCriteria": "真实键盘与焦点回归通过,不只检查静态属性。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-23-keyboard-focus.md",
|
||
"refactor/baselines/keyboard-validation.json",
|
||
"test/browser/accessibility.spec.js",
|
||
"test/browser/accessibility-setting.spec.js",
|
||
"test/browser/accessibility-integration.spec.js"
|
||
],
|
||
"resolutionRationale": "旧发布包的 Tab 缺口保留对照;现有按钮、进度/音量滑块、选择列表、设置、mini、信息/锁定层及菜单具备真实键盘与焦点回归,保留旧快捷键和点击契约。新安装包 modern/legacy 各 1749 项三引擎全量通过,CI 468 项;动态入口失效先复现再修正。只关闭主要控件 Tab 不可达;物理 Apple/触摸/IME/辅助技术与 CORE-22/发布复盘仍为独立门槛。"
|
||
},
|
||
{
|
||
"id": "BASE-DOM-02",
|
||
"title": "窄容器中控件裁切",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-13",
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dom.json"
|
||
],
|
||
"compatibleResolution": "在保留自定义控件扩展入口下修正布局。",
|
||
"closureCriteria": "320px 及正常容器的设置/模式操作真实可用。",
|
||
"workspaceState": "CORE-13 wrapped controls and CORE-14 bounded settings/native input/autoOrientation checks now pass the final installed UMD and legacy matrices; 320px layouts remain operable with long text and wrapped control rows.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-DEMO-01",
|
||
"title": "旧 thumbnail 插件示例不对应当前 workspace 包",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/thumbnail.js",
|
||
"refactor/baselines/demo-inventory.json"
|
||
],
|
||
"compatibleResolution": "核实旧外部插件和链接,不自动替换为不同 API 的 auto-thumbnail。",
|
||
"closureCriteria": "示例依赖有来源,旧参数/URL 的保留或迁移解释完整。"
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-01",
|
||
"title": "NodeNext ESM 默认导出与声明互操作失配",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"ENG-04",
|
||
"CORE-07",
|
||
"PKG-CHAPTER-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/consumers.json"
|
||
],
|
||
"compatibleResolution": "分配 ESM/CJS 声明入口,保留旧解析模式,避免 any/skipLibCheck 掩盖。",
|
||
"closureCriteria": "四模式原合法消费通过,NodeNext ESM 对实际默认导出可构造/调用。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
|
||
"refactor/baselines/chapter-types-validation.json",
|
||
"test/types/chapter-exports.ts",
|
||
"test/types/language-value.ts",
|
||
"test/types/commonjs.cts",
|
||
"refactor/scripts/types.test.mjs"
|
||
],
|
||
"resolutionRationale": "格式匹配的 CJS/ESM 声明及旧 TS legacy/language 回退通过五组编译模式;实际安装 tarball 的已知诊断清零,运行时路径/导出不变,旧发布基线隔离重跑保持原失败。"
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-02",
|
||
"title": "chapter 可选运行时参数被声明为必填",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CHAPTER-02"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/consumers.json",
|
||
"refactor/fixtures/api.js"
|
||
],
|
||
"compatibleResolution": "补充兼容可选参数,不删除已接受的配置。",
|
||
"closureCriteria": "无参数和正确参数编译,错误参数依旧被拒绝,运行时一致。",
|
||
"resolutionEvidence": [
|
||
"packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts",
|
||
"test/types/chapter-options.ts",
|
||
"refactor/scripts/types.test.mjs",
|
||
"test/browser/chapter.spec.js",
|
||
"refactor/changes/2026-09-10-PKG-CHAPTER-02-tests.md"
|
||
],
|
||
"resolutionRationale": "工厂 option 扩展为可选,旧/新 TS 消费与实际无参插件注册通过;update 及非法输入仍受严格约束。编辑器声明已重新生成。NodeNext ESM 与 legacy 分发问题仍由其他条目跟踪。"
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-03",
|
||
"title": "chapter legacy 缺旧模块解析的声明回退",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"ENG-04",
|
||
"PKG-CHAPTER-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/consumers.json"
|
||
],
|
||
"compatibleResolution": "保留 legacy 文件和导入路径,补旧解析类型回退。",
|
||
"closureCriteria": "Node10 解析和 NodeNext/Bundler 消费均有正向证据。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-10-PKG-CHAPTER-04-public-types.md",
|
||
"refactor/baselines/chapter-types-validation.json",
|
||
"test/types/chapter-exports.ts",
|
||
"test/types/language-value.ts",
|
||
"test/types/commonjs.cts",
|
||
"refactor/scripts/types.test.mjs"
|
||
],
|
||
"resolutionRationale": "格式匹配的 CJS/ESM 声明及旧 TS legacy/language 回退通过五组编译模式;实际安装 tarball 的已知诊断清零,运行时路径/导出不变,旧发布基线隔离重跑保持原失败。"
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-04",
|
||
"title": "plugins.add / toggle 的旧声明返回值与运行时不同",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-07",
|
||
"CORE-08",
|
||
"CORE-10",
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/consumers.json",
|
||
"refactor/baselines/public-api.json",
|
||
"refactor/baselines/lifecycle.json",
|
||
"test/types/declaration-legacy.ts",
|
||
"refactor/changes/2026-09-11-CORE-07-declarations.md",
|
||
"refactor/baselines/declarations-validation.json"
|
||
],
|
||
"compatibleResolution": "保留旧声明接受范围并协调精确重载/扩展,不静默把同步注册改成 async。",
|
||
"closureCriteria": "返回值类型与运行时差异逐项说明,旧合法消费和拒绝传播回归通过。",
|
||
"scopeNote": "Historical root inaccuracies remain intentional compatibility behavior; the optional runtime entry provides the accurate alternative validated by CORE-21.",
|
||
"playbackResolution": "Both the existing PlaybackControls view and the new runtime entry expose accurate playback results; old root acceptance remains unchanged.",
|
||
"resolutionRationale": "The optional runtime entry models sync registration as the original registry, Promise registration as Promise<registry>, and toggle as the actual play/pause result. Old root returns remain accepted. Installed module/constructor identity, old factories, rejection tests and all five legacy/eight precise consumer modes pass without runtime wrappers.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "BASE-DIST-01",
|
||
"title": "thumbnail tool 分发入口与类型文件缺失",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-04",
|
||
"PKG-TOOL-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/distribution.json",
|
||
"refactor/baselines/thumbnail-contract.md",
|
||
"refactor/baselines/thumbnail-release.json",
|
||
"refactor/scripts/thumbnail-contract.test.mjs",
|
||
"refactor/baselines/thumbnail-public-types-validation.json"
|
||
],
|
||
"compatibleResolution": "Recovered 3.5.31 has main and a CSS entry; baseline workspace lacks main and points to missing .esm.js/types. Recoverable CDN main is verified against Git, not an original tarball. Preserve supported paths, decide historical CSS disposition, add real declarations and verify isolated installs in 04/06.",
|
||
"closureCriteria": "隔离打包消费者能加载所有原承诺路径,dist 不作为源码直接手改。",
|
||
"workspaceState": "Current root ESM, direct CJS, legacy and declarations pass isolated installs. Missing historical .esm.js was replaced by the real root .mjs entry. Historical 3.5.31 CSS path/disposition and complete original promised-path review remain 06; item stays open."
|
||
},
|
||
{
|
||
"id": "BASE-PERF-01",
|
||
"title": "销毁后的 resize 防抖重新创建 notice timer",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17",
|
||
"CORE-04",
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/performance.json"
|
||
],
|
||
"compatibleResolution": "为 debounce/晚到 UI 工作建立销毁归属;不靠等待自然过期掩盖。",
|
||
"closureCriteria": "正常 resize 保持,destroy 后无该回调及新 notice timer。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-04-instance-lifecycle.md",
|
||
"refactor/baselines/instance-lifecycle-validation.json",
|
||
"test/browser/lifecycle.spec.js",
|
||
"test/instance-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "resize timeout 由实例 scope 取消,正常 burst 合并保持;销毁后该 resize 不再执行,Notice timer 为 null,已排队 UI 工作不再重建提示。"
|
||
},
|
||
{
|
||
"id": "BASE-SOURCE-01",
|
||
"title": "工作区 5.4.1 与采集时真实发布 5.4.0 不同",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"BASE-08",
|
||
"REL-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/releases.json"
|
||
],
|
||
"compatibleResolution": "分别保留工作区与 npm 基线,目标大版本不变;更新发布窗口需新取证。",
|
||
"closureCriteria": "候选报告明确比较版本与 tarball,不声称工作区版本即已发布。"
|
||
},
|
||
{
|
||
"id": "BASE-SOURCE-02",
|
||
"title": "registry gitHead 与发布包版本对应不可靠",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"ENG-07",
|
||
"REL-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/releases.json"
|
||
],
|
||
"compatibleResolution": "以 tarball 内容和可验证的构建来源为准,不能据 gitHead 自动声称复现。",
|
||
"closureCriteria": "候选 commit、工具链、包内容可关联,旧来源未知仍明确。"
|
||
},
|
||
{
|
||
"id": "BASE-SITE-01",
|
||
"title": "文档站实际为静态站点但 manifest 未设 private",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01",
|
||
"REL-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/distribution.json"
|
||
],
|
||
"compatibleResolution": "区分站点部署和库 npm 发布;自身 next-major 要求保留。",
|
||
"closureCriteria": "发布流程显式列出站点处理方式,不机械将其当库发布。"
|
||
},
|
||
{
|
||
"id": "BASE-MEDIA-01",
|
||
"title": "示例媒体和字体的完整来源/授权链待核实",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"BASE-08",
|
||
"SITE-01",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/sample",
|
||
"docs/assets/jassub"
|
||
],
|
||
"compatibleResolution": "复用现有样本时记录来源;缺许可的公开分发样本需补证据或可兼容替代,不能从文件名猜授权。",
|
||
"closureCriteria": "候选实际分发样本有来源、许可/使用依据和测试映射。"
|
||
},
|
||
{
|
||
"id": "VENDOR-01",
|
||
"title": "screenfull 来源、版本与许可闭环",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-12"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"packages/artplayer/src/libs/screenfull.js"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-12-template-resources.md",
|
||
"refactor/baselines/template-resources-validation.json",
|
||
"refactor/scripts/core-vendor.mjs",
|
||
"test/core-vendor.test.js",
|
||
"packages/artplayer/THIRD_PARTY_NOTICES"
|
||
],
|
||
"resolutionRationale": "Pinned upstream source and license contents, exhaustive normalized adaptation checks, actual package notices and standalone bundle headers verified. Local runtime retained; native fullscreen gestures and prefixed adapter tests pass. Historical screenfull acquisition tag is explicitly unknown; v6.0.2 is the fixed comparison reference."
|
||
},
|
||
{
|
||
"id": "VENDOR-02",
|
||
"title": "hint.css 来源、版本与许可闭环",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-12"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"packages/artplayer/src/style/hint.less"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-12-template-resources.md",
|
||
"refactor/baselines/template-resources-validation.json",
|
||
"refactor/scripts/core-vendor.mjs",
|
||
"test/core-vendor.test.js",
|
||
"packages/artplayer/THIRD_PARTY_NOTICES"
|
||
],
|
||
"resolutionRationale": "Pinned upstream source and license contents, exhaustive normalized adaptation checks, actual package notices and standalone bundle headers verified. Local runtime retained; native fullscreen gestures and prefixed adapter tests pass. Historical screenfull acquisition tag is explicitly unknown; v6.0.2 is the fixed comparison reference."
|
||
},
|
||
{
|
||
"id": "VENDOR-03",
|
||
"title": "webvtt-parser 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"packages/artplayer-plugin-multiple-subtitles/src/parser.js"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "VENDOR-04",
|
||
"title": "jassub-code-and-workers 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"packages/artplayer-plugin-jassub/src/jassub.es.js",
|
||
"packages/artplayer-plugin-jassub/worker",
|
||
"docs/assets/jassub/jassub-worker.js",
|
||
"docs/assets/jassub/jassub-worker.wasm",
|
||
"docs/assets/jassub/jassub-worker-modern.wasm"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "VENDOR-05",
|
||
"title": "jassub-font-assets 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-01",
|
||
"SITE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/jassub/default.woff2",
|
||
"docs/assets/jassub/fonts"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "VENDOR-06",
|
||
"title": "monaco-static-assets 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01",
|
||
"SITE-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/vs"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "VENDOR-07",
|
||
"title": "vconsole 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/vconsole.min.js"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "VENDOR-08",
|
||
"title": "console-bundle 来源、版本与许可闭环",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/console.js"
|
||
],
|
||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。"
|
||
},
|
||
{
|
||
"id": "SDK-01",
|
||
"title": "hls.js 实际集成验证范围",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-HLS-05",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-hls-control/src/index.ts",
|
||
"docs/assets/example/hls.control.js",
|
||
"refactor/hls-validation.md"
|
||
],
|
||
"compatibleResolution": "Caller supplies art.hls; homepage demo loads hls.js 1.5.17. Preserve quality/audio selectors and old core integration.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-02",
|
||
"title": "dash.js 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-DASH-01",
|
||
"EX-03",
|
||
"PKG-DASH-05"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"docs/assets/example/dash.control.js",
|
||
"refactor/baselines/dash-control-contract.md"
|
||
],
|
||
"compatibleResolution": "Caller supplies art.dash. Preserve published 4.x callers (demo 4.5.2) and workspace 5.x stable representation IDs (demo 5.2.1); verify actual media and SDK lifecycle in PKG-DASH-05.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-03",
|
||
"title": "flv.js 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/flv.js"
|
||
],
|
||
"compatibleResolution": "Demo dependency flv.js 1.6.2; customType playback/teardown must be tested with actual SDK.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-04",
|
||
"title": "mpegts.js 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/mpegts.js"
|
||
],
|
||
"compatibleResolution": "Demo dependency mpegts.js 1.7.3; actual codec/stream/browser support remains unverified.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-05",
|
||
"title": "webtorrent 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/webtorrent.js"
|
||
],
|
||
"compatibleResolution": "Demo URL uses webtorrent@1, a moving major selector; preserve caller integration and explicitly capture actual runtime version.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-06",
|
||
"title": "google-cast 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-CAST-01",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-chromecast/src/index.js"
|
||
],
|
||
"compatibleResolution": "Default remote cast_sender.js?loadCastFramework=1; sdk URL/options and actual Cast device/session behavior require separate validation.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-07",
|
||
"title": "ima-via-glomex 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VAST-01",
|
||
"PKG-VAST-05"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-vast/src/sdk.ts",
|
||
"refactor/baselines/vast-contract.md",
|
||
"refactor/baselines/vast-release.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-01-contract.md",
|
||
"refactor/baselines/vast-contract-validation.json",
|
||
"refactor/vast-validation.md",
|
||
"refactor/baselines/vast-behavior-validation.json"
|
||
],
|
||
"compatibleResolution": "@glomex/vast-ima-player loadImaSdk loads external IMA; preserve event/content/ad state and teardown, do not equate mocks with vendor service acceptance.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。",
|
||
"workspaceState": "VAST 1.0.0 and SDK 1.21.0/1.21.2 archives verified; Google IMA remote execution remains unverified. User allows recording/skipping only persistent VAST script loading failures caused by VPN rules, not Ads or other VAST code/type failures. This exception has not been used."
|
||
},
|
||
{
|
||
"id": "SDK-08",
|
||
"title": "mediapipe-tensorflow 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-01",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-danmuku-mask/src/index.js"
|
||
],
|
||
"compatibleResolution": "Npm dependency versions are separate from unversioned solutionPath CDN assets; keep option override, backend fallback, model result disposal and masks.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-09",
|
||
"title": "jassub-worker-wasm-fonts 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-01",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-jassub/src/index.js",
|
||
"docs/assets/example/jassub.js"
|
||
],
|
||
"compatibleResolution": "Preserve options pass-through, result.instance and worker/wasm/font URLs. Wrapper, worker and WASM must be a verified compatible set.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-10",
|
||
"title": "mediabunny 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MB-01",
|
||
"PKG-MB-09"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-proxy-mediabunny/src/input.ts",
|
||
"packages/artplayer-proxy-mediabunny/package.json"
|
||
],
|
||
"compatibleResolution": "Preserve native-video-like events, HLS input and topology, codec capability failures and AV sync; actual library/codec environment still requires verification.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-11",
|
||
"title": "asr-caller-service 实际集成验证范围",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-ASR-01",
|
||
"PKG-ASR-05",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-asr/src/index.js",
|
||
"docs/assets/example/asr.js"
|
||
],
|
||
"compatibleResolution": "Core plugin supplies PCM to caller onAudioChunk. Example fetches an external ASR endpoint and opens its returned WebSocket; not an embedded ASR SDK or a verified service.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||
},
|
||
{
|
||
"id": "SDK-12",
|
||
"title": "option-validator 实际集成验证范围",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-01",
|
||
"CORE-07",
|
||
"CORE-22"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer/src/index.ts",
|
||
"packages/artplayer/src/option/resolve.ts",
|
||
"test/options.test.js",
|
||
"test/browser/options.spec.js",
|
||
"test/browser/initialization.spec.js",
|
||
"refactor/baselines/core-acceptance-validation.json"
|
||
],
|
||
"compatibleResolution": "Bundled validation dependency; preserve validation/default/merge behavior and failure cleanup when typing constructor boundaries.",
|
||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-acceptance-validation.json",
|
||
"refactor/core-acceptance.md",
|
||
"refactor/changes/2026-09-11-CORE-22-core-acceptance.md"
|
||
],
|
||
"resolutionRationale": "option-validator 2.0.6 is a bundled synchronous dependency with recorded file hash and lock/version evidence. Current and published real-browser consumers retain default/merge identity, callback behavior, exact invalid-option errors before mounting, subsequent container reuse and destruction; modern/legacy full matrices and current unit tests passed. The dependency itself has no source-switch, network or physical-device lifecycle, so those external-SDK conditions do not apply; player media lifecycle is covered by the core matrix. This closes its integration scope, not an independent audit of the upstream project."
|
||
},
|
||
{
|
||
"id": "BUILD-AMD-01",
|
||
"title": "AMD 全局导出补丁误将固定参数 t 当作全局对象",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"ENG-06"
|
||
],
|
||
"evidence": [
|
||
"scripts/utils.js",
|
||
"refactor/scripts/build.test.mjs",
|
||
"refactor/baselines/build-validation.json"
|
||
],
|
||
"compatibleResolution": "从实际 UMD 包装提取全局参数,保留 AMD 工厂返回和旧 global 名称;不识别的包装失败而非静默发布。",
|
||
"closureCriteria": "正常构建的 TS 资源夹具和全部库 UMD/legacy AMD 返回与全局为同一对象;其余输出仅允许已解释变化。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-10-ENG-06-build-development.md",
|
||
"refactor/baselines/build-validation.json",
|
||
"refactor/scripts/build.test.mjs"
|
||
],
|
||
"resolutionRationale": "构建逻辑修复已完成;63 产物中 24 仅修复接收者,42 浏览器 AMD 检查通过。未改变旧 npm 内容;正式发布仍须用新工具生成实际候选。"
|
||
},
|
||
{
|
||
"id": "UTIL-MERGE-01",
|
||
"title": "mergeDeep lets a JSON __proto__ key replace the result prototype",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-01"
|
||
],
|
||
"evidence": [
|
||
"test/utils.test.js",
|
||
"refactor/changes/2026-09-10-CORE-01-typed-utils.md"
|
||
],
|
||
"compatibleResolution": "Write own data properties while preserving ordinary deep merge and array semantics.",
|
||
"closureCriteria": "Published defect remains observable; current and three artifacts keep normal prototypes, nested behavior and input identity.",
|
||
"resolutionEvidence": [
|
||
"test/utils.test.js",
|
||
"packages/artplayer/src/utils/property.ts",
|
||
"refactor/changes/2026-09-10-CORE-01-typed-utils.md"
|
||
],
|
||
"resolutionRationale": "Published/current and three format contracts prove the __proto__ result-prototype correction, with ordinary merge/reference behavior retained."
|
||
},
|
||
{
|
||
"id": "UTIL-DOWNLOAD-01",
|
||
"title": "Temporary download anchor remains if click throws",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-10-CORE-01-typed-utils.md",
|
||
"test/browser/utils.spec.js"
|
||
],
|
||
"compatibleResolution": "Use finally to remove only the owned anchor, preserve thrown error and caller URL ownership.",
|
||
"closureCriteria": "Real successful download and controlled click-failure cleanup pass in all three browsers.",
|
||
"resolutionEvidence": [
|
||
"test/browser/utils.spec.js",
|
||
"packages/artplayer/src/utils/file.ts",
|
||
"refactor/changes/2026-09-10-CORE-01-typed-utils.md"
|
||
],
|
||
"resolutionRationale": "Chromium, Firefox and WebKit downloaded the real fixture; controlled click failure still propagated and left no anchor."
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-05",
|
||
"title": "Public Utils declarations omit exports and misstate timer/descriptor signatures",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-07",
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer/types/utils.d.ts",
|
||
"test/utils.test.js",
|
||
"test/types/utils-source.ts",
|
||
"refactor/changes/2026-09-10-CORE-01-typed-utils.md",
|
||
"test/types/declaration-legacy.ts",
|
||
"refactor/changes/2026-09-11-CORE-07-declarations.md",
|
||
"refactor/baselines/declarations-validation.json"
|
||
],
|
||
"compatibleResolution": "Coordinate compatible public overloads/exports separately; use accurate strict types in migrated source.",
|
||
"closureCriteria": "Cover missing unescape/ArtPlayerError, def identity/property keys, optional sleep, timer void returns and ignored debounce context; retain legal old consumers in new/old compilers.",
|
||
"scopeNote": "Historical root inaccuracies remain intentional compatibility behavior; the optional runtime entry provides the accurate alternative validated by CORE-21.",
|
||
"resolutionRationale": "Generated runtime Utils covers actual exports, object/PropertyKey def target identity, optional sleep, timer void results and preserved receivers with ignored debounce context documented. Source correspondence, installed positive/negative consumers and real utility behavior pass; historical root signatures remain accepted.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "EVENT-NAME-01",
|
||
"title": "Emitter event names collide with Object.prototype",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-02"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-11-CORE-02-typed-emitter.md",
|
||
"test/public-behavior.test.js",
|
||
"test/browser/emitter.spec.js"
|
||
],
|
||
"compatibleResolution": "Own property lookup and data descriptors accept reserved event names while preserving registry prototype.",
|
||
"closureCriteria": "Published observation and candidate regression pass in Node, all three artifact formats and three browsers.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-02-typed-emitter.md",
|
||
"refactor/baselines/emitter-validation.json",
|
||
"test/public-behavior.test.js",
|
||
"test/browser/emitter.spec.js"
|
||
],
|
||
"resolutionRationale": "Own property lookup and data descriptors accept reserved event names while preserving registry prototype."
|
||
},
|
||
{
|
||
"id": "EVENT-ONCE-01",
|
||
"title": "Nested dispatch snapshots invoke the same once registration twice",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-02"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-11-CORE-02-typed-emitter.md",
|
||
"test/public-behavior.test.js",
|
||
"test/browser/emitter.spec.js"
|
||
],
|
||
"compatibleResolution": "The wrapper records consumption before unsubscribe/invocation; ordinary dispatch snapshot semantics are retained.",
|
||
"closureCriteria": "Published observation and candidate regression pass in Node, all three artifact formats and three browsers.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-02-typed-emitter.md",
|
||
"refactor/baselines/emitter-validation.json",
|
||
"test/public-behavior.test.js",
|
||
"test/browser/emitter.spec.js"
|
||
],
|
||
"resolutionRationale": "The wrapper records consumption before unsubscribe/invocation; ordinary dispatch snapshot semantics are retained."
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-06",
|
||
"title": "Public Option requires url and excludes numeric control HTML accepted by existing JS",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-07"
|
||
],
|
||
"evidence": [
|
||
"test/browser/options.spec.js",
|
||
"test/types/options-source.ts",
|
||
"refactor/baselines/options-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-05-resolved-options.md"
|
||
],
|
||
"compatibleResolution": "Expand public declarations for the verified legal JS forms; preserve existing typed inputs and runtime defaults.",
|
||
"closureCriteria": "Replace the two historical negative fixtures with positive public consumers and verify old/new TypeScript plus installed package modes.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-07-declarations.md",
|
||
"refactor/baselines/declarations-validation.json",
|
||
"test/types/declaration-inputs.ts",
|
||
"test/browser/options.spec.js"
|
||
],
|
||
"resolutionRationale": "Additive OptionInput/ComponentInput and constructor/component overloads accept omitted URL and numeric HTML while preserving historical Option reads. Five installed compiler modes and old/new core browser input cases pass."
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-07",
|
||
"title": "Setting returns, subtitle contextual payloads and notice getter conflict with historical declarations",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-07",
|
||
"CORE-14",
|
||
"CORE-15",
|
||
"CORE-18",
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"test/browser/declarations.spec.js",
|
||
"test/types/declaration-legacy.ts",
|
||
"packages/artplayer/types/artplayer.d.ts",
|
||
"packages/artplayer/types/events.d.ts",
|
||
"refactor/baselines/declarations-validation.json"
|
||
],
|
||
"compatibleResolution": "Keep legacy consumers; add explicit cue-array listener overloads, type internal implementations accurately, and resolve remaining generated/public facade contracts at CORE-21 without false intersections.",
|
||
"closureCriteria": "Actual setting/null/void and notice boolean returns, cue array callbacks and old legal type consumers all have an explicit compatible declaration strategy and package tests.",
|
||
"scopeNote": "Historical root inaccuracies remain intentional compatibility behavior; the optional runtime entry provides the accurate alternative validated by CORE-21.",
|
||
"workspaceState": "Generated runtime Setting/Subtitle/Notice expose item/null/void, cue-array contextual payloads and boolean notice reads independently from message writes. Installed consumers and real browser callbacks/returns pass. The historical root retains its old inference/returns and explicit array overloads rather than using false intersections.",
|
||
"resolutionRationale": "Generated runtime Setting/Subtitle/Notice expose item/null/void, cue-array contextual payloads and boolean notice reads independently from message writes. Installed consumers and real browser callbacks/returns pass. The historical root retains its old inference/returns and explicit array overloads rather than using false intersections.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-08",
|
||
"title": "Write-only player commands have fictitious public getter declarations",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer/types/player.d.ts",
|
||
"test/playback-properties.test.js",
|
||
"test/browser/playback-properties.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-10-playback-properties.md",
|
||
"refactor/baselines/playback-properties-validation.json",
|
||
"test/types/declaration-legacy.ts"
|
||
],
|
||
"compatibleResolution": "Keep historical consumer acceptance, model source command reads as undefined, and provide an accurate public facade without inventing runtime getters.",
|
||
"closureCriteria": "seek/forward/backward/switch/quality reads and writes have an explicit accurate compatibility strategy validated against old TypeScript consumers and real package descriptors.",
|
||
"resolutionRationale": "The optional runtime entry exposes undefined reads and the actual write types for seek/forward/backward/switch/quality; TS 5.1.6/5.9.3 consumers verify independent accessors. Published/candidate descriptors and reads pass; historical TS 4.3.5 consumers and PlaybackControls remain accepted. No runtime getter was invented.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-07",
|
||
"title": "Queued reconnect survives source replacement and reloads the new resource",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-11"
|
||
],
|
||
"evidence": [
|
||
"test/media-events.test.js",
|
||
"test/browser/media-events.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-11-media-events.md"
|
||
],
|
||
"compatibleResolution": "Keep ordinary event order and error identity; scope retries to the current source and stop internal UI/ready work when its instance closes.",
|
||
"closureCriteria": "Real published/candidate regression comparisons, controlled lifecycle tests and installed UMD/legacy validation pass without altering the frozen published baseline.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-11-media-events.md",
|
||
"refactor/baselines/media-events-validation.json",
|
||
"test/media-events.test.js",
|
||
"test/browser/media-events.spec.js"
|
||
],
|
||
"resolutionRationale": "Published/candidate real-browser comparisons reproduce stale retry or ghost ready and validate candidate cancellation. Owned source lifetimes preserve retries after switch rejection, while instance closure stops UI work; original Event/count and ordinary readiness order remain tested."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-08",
|
||
"title": "Ready continues after a control callback destroys the instance",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-11"
|
||
],
|
||
"evidence": [
|
||
"test/media-events.test.js",
|
||
"test/browser/media-events.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-11-media-events.md"
|
||
],
|
||
"compatibleResolution": "Keep ordinary event order and error identity; scope retries to the current source and stop internal UI/ready work when its instance closes.",
|
||
"closureCriteria": "Real published/candidate regression comparisons, controlled lifecycle tests and installed UMD/legacy validation pass without altering the frozen published baseline.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-11-media-events.md",
|
||
"refactor/baselines/media-events-validation.json",
|
||
"test/media-events.test.js",
|
||
"test/browser/media-events.spec.js"
|
||
],
|
||
"resolutionRationale": "Published/candidate real-browser comparisons reproduce stale retry or ghost ready and validate candidate cancellation. Owned source lifetimes preserve retries after switch rejection, while instance closure stops UI work; original Event/count and ordinary readiness order remain tested."
|
||
},
|
||
{
|
||
"id": "BASE-I18N-01",
|
||
"title": "Missing prototype-named translations return inherited functions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-12"
|
||
],
|
||
"evidence": [
|
||
"test/template-resources.test.js",
|
||
"test/browser/template-resources.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-12-template-resources.md"
|
||
],
|
||
"compatibleResolution": "Read own dictionary keys while preserving explicit custom names and empty-string fallback.",
|
||
"closureCriteria": "Published/candidate browser comparison, source tests and installed distribution entries pass.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-12-template-resources.md",
|
||
"refactor/baselines/template-resources-validation.json",
|
||
"test/template-resources.test.js",
|
||
"test/browser/template-resources.spec.js"
|
||
],
|
||
"resolutionRationale": "Published/candidate real browser comparison verifies own-key fallback while preserving explicit prototype-named translations and empty values. Installed UMD/legacy and all language entries pass."
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-09",
|
||
"title": "Template and icon declarations claim incompatible DOM and static shapes",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer/types/template.d.ts",
|
||
"packages/artplayer/types/icons.d.ts",
|
||
"test/browser/template-resources.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-12-template-resources.md"
|
||
],
|
||
"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.",
|
||
"resolutionRationale": "Generated runtime Template/Icons/MediaSurface model nullable SSR/query nodes, real icon wrappers, div container validation and static html placement. Constructor-stage host consumers reject premature getters; installed type modes and published/candidate shape/browser checks pass while old imports remain compatible.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"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."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-06",
|
||
"title": "Moved setting items retain parent and option bindings from the old tree",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting.spec.js",
|
||
"test/setting-model.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Preserve hidden getter flags and identity while rebinding a removed item to its current parent/panel.",
|
||
"closureCriteria": "Final Setting migration, cleanup, strict types and installed UMD/legacy regressions must pass. Source-only model results do not close this task.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-07",
|
||
"title": "Generated setting names collide with explicit names in nested branches",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting.spec.js",
|
||
"test/setting-model.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Reserve explicit names before allocating IDs; preserve normal names and monotonic counters.",
|
||
"closureCriteria": "Final Setting migration, cleanup, strict types and installed UMD/legacy regressions must pass. Source-only model results do not close this task.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-12",
|
||
"title": "Removed or updated setting rows retain descendant panels and builtin subscriptions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting.spec.js",
|
||
"test/setting-resources.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Own DOM/Emitter subscriptions per rendered item and release descendants and cached panels on update/removal.",
|
||
"closureCriteria": "Finish manager/resource rollback and verify strict source types, full installed UMD/legacy and builtin/legacy plugin combinations before closure.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-13",
|
||
"title": "Obsolete setting callback completions overwrite current UI and failures are unhandled",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting.spec.js",
|
||
"test/setting-resources.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Preserve callback arguments and synchronous state; only the latest live write target may accept completion, and report the original failure.",
|
||
"closureCriteria": "Finish manager/resource rollback and verify strict source types, full installed UMD/legacy and builtin/legacy plugin combinations before closure.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-14",
|
||
"title": "Removed or replaced setting items still run deferred mounted callbacks",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting.spec.js",
|
||
"test/setting-resources.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Bind deferred mounted to its rendered generation and cancel obsolete timers without introducing a disposer return contract.",
|
||
"closureCriteria": "Finish manager/resource rollback and verify strict source types, full installed UMD/legacy and builtin/legacy plugin combinations before closure.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-08",
|
||
"title": "Sharing a live setting object leaves a second published instance blank and can steal candidate bindings",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-14"
|
||
],
|
||
"evidence": [
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/setting-model.test.js",
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md"
|
||
],
|
||
"compatibleResolution": "Reject transfer from an active owner before mutating either tree; allow original-object reuse after removal or destruction, preserving item return identity and immutable getters.",
|
||
"closureCriteria": "Retain the published sharing baseline and candidate ownership diagnosis; verify rejection, both owner lifetimes, subtree reuse, full strict checks and final installed UMD/legacy matrices before closure.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-14-setting.md",
|
||
"refactor/baselines/setting-validation.json",
|
||
"test/browser/setting.spec.js",
|
||
"test/browser/setting-update.spec.js",
|
||
"test/browser/setting-ownership.spec.js",
|
||
"test/browser/setting-interaction.spec.js",
|
||
"test/setting-model.test.js",
|
||
"test/setting-resources.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass the complete 519-case three-engine matrix. Managed tree/DOM/resource rollback, async generation guards, scoped mounts and panel/header ownership preserve normal identities, callbacks and returns. Narrow layouts and native input/touch interactions pass; simultaneous live object sharing fails before mutation while transfer after removal/destruction preserves the original object. Source and shipped package bytes match the tested artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-15",
|
||
"title": "Subtitle requests overwrite newer state and mutate tracks after destroy",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-15"
|
||
],
|
||
"evidence": [
|
||
"test/browser/subtitle-lifecycle.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-15-subtitle.md"
|
||
],
|
||
"compatibleResolution": "Scope requests, abort and settle superseded calls; ignore stale conversion, errors and notices.",
|
||
"closureCriteria": "Installed UMD/legacy cover out-of-order fetch/body completion, rejection, cancellation, reentry and destroy.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-15-subtitle.md",
|
||
"refactor/baselines/subtitle-validation.json",
|
||
"test/browser/subtitle-lifecycle.spec.js",
|
||
"test/subtitle.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass 600 real-browser checks. Subtitle cancellation settles promptly and stale work cannot commit. Only generated URLs are owned; native fullscreen-kind rebuilds retain them and failure/reentry/destroy cleanup is verified. Runtime and type consumers pass against the exact packed source and artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-16",
|
||
"title": "Subtitle URLs revoke caller resources and leak the final generated resource",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-15"
|
||
],
|
||
"evidence": [
|
||
"test/browser/subtitle-lifecycle.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-15-subtitle.md"
|
||
],
|
||
"compatibleResolution": "Own only generated URLs and release track callbacks/resources on replace, failure and destroy.",
|
||
"closureCriteria": "Installed UMD/legacy prove caller URL survival, owned URL release, full-screen reuse, failed replacement and callback cleanup.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-15-subtitle.md",
|
||
"refactor/baselines/subtitle-validation.json",
|
||
"test/browser/subtitle-lifecycle.spec.js",
|
||
"test/subtitle.test.js"
|
||
],
|
||
"resolutionRationale": "Final installed UMD and legacy each pass 600 real-browser checks. Subtitle cancellation settles promptly and stale work cannot commit. Only generated URLs are owned; native fullscreen-kind rebuilds retain them and failure/reentry/destroy cleanup is verified. Runtime and type consumers pass against the exact packed source and artifacts."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-09",
|
||
"title": "Web fullscreen loses style and placement across repeated entry or configuration changes",
|
||
"closureCriteria": "Final installed matrices prove original styles, parent and sibling restoration, resize integration, reentry and failure recovery.",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-web.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-16-display.md"
|
||
],
|
||
"compatibleResolution": "Capture the first entry layout, restore original ownership on exit/destroy, preserve ordinary events, and stop obsolete operations after reentry.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-web.spec.js"
|
||
],
|
||
"resolutionRationale": "Session snapshots retain exact initial styles and parent/sibling positions through repeated entry, flag changes and reentry. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-17",
|
||
"title": "Destroy in body web fullscreen leaves a connected orphan player",
|
||
"closureCriteria": "Final installed matrices prove ownership restoration for both removeHtml values and reentrant destroy without late events.",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-web.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-16-display.md"
|
||
],
|
||
"compatibleResolution": "Capture the first entry layout, restore original ownership on exit/destroy, preserve ordinary events, and stop obsolete operations after reentry.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-web.spec.js"
|
||
],
|
||
"resolutionRationale": "Fullscreen body placement is restored before template destruction; a failed restore detaches only a still-displaced player while preserving the original error. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-10",
|
||
"title": "Native fullscreen state and exit affect unrelated player instances",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-native.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-16-display.md"
|
||
],
|
||
"compatibleResolution": "Derive fullscreen from the instance player/video ownership, ignore unrelated changes, preserve normal event-before-class ordering, and exit only the owned element.",
|
||
"closureCriteria": "Final installed UMD/legacy matrices cover real gesture entry, two live instances, fullscreen exit rejection/retry, subtitle integration and display mode composition.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-native.spec.js"
|
||
],
|
||
"resolutionRationale": "Fullscreen ownership follows the actual instance player/video; real native tests cover two instances and mode transitions. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-18",
|
||
"title": "Native fullscreen retains destroyed listeners and leaks rejected request listeners",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-native.spec.js",
|
||
"test/display-native.test.js",
|
||
"refactor/changes/2026-09-11-CORE-16-display.md"
|
||
],
|
||
"compatibleResolution": "Scope per-instance and per-request listeners, preserve observable native rejection identity, settle cancelled requests promptly, and release late cancelled entry without retaining destroyed instances.",
|
||
"closureCriteria": "Final installed matrices cover assignment errors, descriptor rejection, request cancellation/destroy, late Promise and controlled void APIs; document the weak document-lifetime fallback guard and physical-device limitations.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-native.spec.js",
|
||
"test/display-native.test.js"
|
||
],
|
||
"resolutionRationale": "Owned request listeners settle on success/failure/cancel, cancelled native entry is released, and void exit waits for both possible owned elements to leave. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-11",
|
||
"title": "Video-only fullscreen ignores native video state and begin/end transitions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-video-fullscreen.spec.js",
|
||
"test/display-video-fullscreen.test.js"
|
||
],
|
||
"compatibleResolution": "Read native video presentation/display state and listen to video begin/end plus the historical document bridge, deduplicating the same transition while retaining the synchronous setter.",
|
||
"closureCriteria": "Installed candidate regressions cover state, event order, reentry, PiP distinction and exit retry; record separately the physical iOS validation gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-video-fullscreen.spec.js",
|
||
"test/display-video-fullscreen.test.js"
|
||
],
|
||
"resolutionRationale": "Controlled native video presentation events and state distinguish fullscreen from PiP and deduplicate transitions without changing synchronous setters. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-19",
|
||
"title": "Video-only fullscreen survives player destruction and late entry",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-video-fullscreen.spec.js",
|
||
"test/display-video-fullscreen.test.js"
|
||
],
|
||
"compatibleResolution": "Dispose instance listeners, exit owned video presentation, and leave only a static video-held cancellation guard for unabortable late entry without retaining the instance.",
|
||
"closureCriteria": "Installed regressions cover active and pending destruction, exit failure behavior, new entry after cancellation and video shims without state properties; physical-device evidence remains explicit.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-video-fullscreen.spec.js",
|
||
"test/display-video-fullscreen.test.js"
|
||
],
|
||
"resolutionRationale": "Video-only instance listeners are removed at destruction; static video-held weak cancellation guards release late entry without holding the player scope. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-12",
|
||
"title": "PiP reports another video as active and WebKit ignores native presentation transitions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-pip.spec.js",
|
||
"test/browser/display-pip-webkit.spec.js"
|
||
],
|
||
"compatibleResolution": "Keep native element/null and WebKit boolean return shapes, restrict native ownership, observe WebKit transitions and preserve repeated synchronous setter events.",
|
||
"closureCriteria": "Installed matrices retain getter/setter contracts and prove native gestures/playback, transition deduplication, fullscreen composition and explicit unsupported capabilities.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-pip.spec.js",
|
||
"test/browser/display-pip-webkit.spec.js"
|
||
],
|
||
"resolutionRationale": "PiP retains native Element/null and WebKit boolean getters, ignores unrelated ownership and stale leave events, and observes native UI transitions. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-20",
|
||
"title": "PiP survives destruction or late entry and rejected assignments become unhandled",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-pip.spec.js",
|
||
"test/browser/display-pip-webkit.spec.js",
|
||
"test/display-pip.test.js"
|
||
],
|
||
"compatibleResolution": "Scope native listeners, restrict exit to owned presentation, suppress obsolete failure notices, and release late cancelled entry without instance-retaining WebKit guards.",
|
||
"closureCriteria": "Installed matrices verify destroy/cancel, rejection notices, retry, reentry and cross-instance isolation; document that the historical void setter cannot expose a rejected Promise.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-pip.spec.js",
|
||
"test/browser/display-pip-webkit.spec.js",
|
||
"test/display-pip.test.js"
|
||
],
|
||
"resolutionRationale": "PiP scope disposal exits owned presentation; late cancellation and rejected assignments are handled without stale notices or unhandled rejection. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-TYPE-10",
|
||
"title": "PiP getter is declared boolean but native runtime returns an element or null",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16",
|
||
"CORE-21"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-pip.spec.js",
|
||
"test/types/display-pip.ts",
|
||
"packages/artplayer/types/player.d.ts"
|
||
],
|
||
"compatibleResolution": "Keep old legal JS return identities and historical public consumers; model the internal branch-dependent getter accurately and coordinate a compatible public declaration strategy in CORE-21.",
|
||
"closureCriteria": "Public declaration strategy and installed JS/TS consumers explicitly cover native element/null and fallback boolean without silently narrowing old legal consumption.",
|
||
"workspaceState": "Generated runtime Player exposes native Element|null or WebKit boolean PiP reads and boolean writes. Installed positive/negative type consumers and native/fallback browser behavior pass, preserving original JS return identity and historical boolean declaration acceptance at the old root. Physical Apple/AirPlay certification remains a separate release gate.",
|
||
"resolutionRationale": "Generated runtime Player exposes native Element|null or WebKit boolean PiP reads and boolean writes. Installed positive/negative type consumers and native/fallback browser behavior pass, preserving original JS return identity and historical boolean declaration acceptance at the old root. Physical Apple/AirPlay certification remains a separate release gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/core-declarations-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-21-public-declarations.md",
|
||
"packages/artplayer/types/COMPATIBILITY.md",
|
||
"test/types/runtime-public.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "BASE-DOM-13",
|
||
"title": "Mini exit loses the video's original parent and sibling position",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-mini.spec.js",
|
||
"test/display-mini.test.js"
|
||
],
|
||
"compatibleResolution": "Capture original placement once per entry session, restore it on exit/destroy, preserve popup reuse and original DOM/display contracts, and retain the snapshot for failed-exit retry.",
|
||
"closureCriteria": "Installed matrices cover placement and playback, reentry, recovery, caller-owned popups, narrow viewports and other display modes.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-mini.spec.js",
|
||
"test/display-mini.test.js"
|
||
],
|
||
"resolutionRationale": "Mini restores original parent/sibling snapshots and retains legacy first/reused DOM order, failure retry and caller-owned popup identity. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-21",
|
||
"title": "Mini leaves a connected popup after player destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-mini.spec.js"
|
||
],
|
||
"compatibleResolution": "Own created popup and subscriptions in the instance scope, stop drag on hide/destroy, preserve caller-owned popup nodes, and serialize reentrant view creation.",
|
||
"closureCriteria": "Installed matrices prove owned popup removal for both destroy modes, no late drag writes, active playback/controls, construction failure/abort recovery and at most one popup during reentry.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-mini.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned mini popup and subscriptions are removed at destruction; hiding cancels drag and reentrant creation yields at most one popup. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-14",
|
||
"title": "Unready media sizing partially overwrites layout and emits NaN height",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-sizing.spec.js",
|
||
"test/display-sizing.test.js",
|
||
"refactor/baselines/display-sizing-validation.json"
|
||
],
|
||
"compatibleResolution": "Defer unusable geometry without invalid CSS or measurement events; recover on the next valid call while preserving normal sizing, descriptors, ratio parsing and event contracts.",
|
||
"closureCriteria": "Installed matrices cover unready/hidden geometry, recovery, ratio/flip contracts, destruction and orientation composition.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-sizing.spec.js",
|
||
"test/display-sizing.test.js"
|
||
],
|
||
"resolutionRationale": "Unusable media/container dimensions defer layout and invalid measurements; normal geometry, later recovery, ratio/flip and destruction contracts are verified. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-15",
|
||
"title": "Auto orientation exit clears caller-owned inline dimensions and transforms",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-orientation.spec.js",
|
||
"refactor/baselines/display-orientation-validation.json"
|
||
],
|
||
"compatibleResolution": "Own rotation properties and coordinate restoration with fullscreenWeb; retain initial snapshots, repeated rotated dimensions and normal resize behavior.",
|
||
"closureCriteria": "Installed matrices cover exit/destroy, repeated entry, rotated playback and ratio/flip composition; document device rotation and safe-area evidence limitations.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-orientation.spec.js"
|
||
],
|
||
"resolutionRationale": "Rotation and fullscreen restoration preserve caller-owned inline geometry; repeated entry, both destruction modes and real rotated playback/ratio/flip are verified. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-22",
|
||
"title": "Orientation lock success after fullscreen exit reactivates a cancelled player",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-16"
|
||
],
|
||
"evidence": [
|
||
"test/browser/display-orientation.spec.js",
|
||
"test/display-orientation.test.js",
|
||
"refactor/baselines/display-orientation-validation.json"
|
||
],
|
||
"compatibleResolution": "Scope rotation timers and subscriptions, cancel locks on exit/destroy, release cancelled late success, and protect newer ArtPlayer requests with per-platform ownership tokens.",
|
||
"closureCriteria": "Installed matrices and unit tests cover timer cancellation, late success/rejection, repeated entry, retry, destruction and cross-instance ownership; physical orientation remains an explicit device gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-16-display.md",
|
||
"refactor/baselines/display-validation.json",
|
||
"test/browser/display-orientation.spec.js",
|
||
"test/display-orientation.test.js"
|
||
],
|
||
"resolutionRationale": "Owned timers and subscriptions cancel cleanly; orientation request tokens prevent stale classes/notices and old-instance unlock of newer ArtPlayer locks. Final installed UMD/legacy each pass 900 browser cases and exact-package consumers pass. Controlled platform paths do not certify physical devices; REL-03/REVIEW-02 retains that release gate."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-16",
|
||
"title": "Hotkeys intercept input in rebound documents and shadow roots",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/hotkey.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/dpip-native-validation.json"
|
||
],
|
||
"compatibleResolution": "Resolve the keyboard event document and deep editable focus while retaining normal shortcuts, modifiers and generic keydown notifications.",
|
||
"closureCriteria": "Final installed matrices cover real typing and playback keys, iframe/global rebinding, shadow and inherited editing, composition and source ownership.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Event-document and deep editable focus checks preserve actual iframe/shadow typing while retaining ordinary shortcuts. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-17",
|
||
"title": "Prototype-named hotkeys fail registration through inherited keys properties",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/hotkey.spec.js",
|
||
"test/hotkey.test.js"
|
||
],
|
||
"compatibleResolution": "Use own-property registration without changing the public keys object prototype, callback arrays, chainable methods or receiver contract.",
|
||
"closureCriteria": "Installed and unit regressions retain normal registration/removal, prototype-name safety, array identity, callback mutation and original errors.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Own-property registration supports prototype-named keys without changing the public keys prototype or arrays. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-23",
|
||
"title": "Repeated Hotkey initialization accumulates keyboard subscriptions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/hotkey.spec.js",
|
||
"test/hotkey.test.js"
|
||
],
|
||
"compatibleResolution": "Own one subscription in the instance scope and reuse default callbacks, preserving explicit default restoration and stopping post-destroy dispatch.",
|
||
"closureCriteria": "Final installed matrices cover repeated init, default restoration, mobile manual initialization, real key operations and destruction during a callback.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "One scoped hotkey subscription and stable default callbacks retain opt-in initialization and restoration. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-24",
|
||
"title": "Mutable capture options and partial native registration failures leave listeners behind",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/listener-registry.spec.js",
|
||
"test/listener-registry.test.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md"
|
||
],
|
||
"compatibleResolution": "Snapshot capture, roll back failed registration, release direct-disposer and aborted records, and preserve native callback identity, once and duplicate semantics.",
|
||
"closureCriteria": "Final installed matrices cover mutable/null options, registration failure, direct native removal, once/abort, retryable cleanup and destruction during registration.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Capture snapshots, rollback and owned disposal retain native callback identity and handle abort/failure/destruction. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-25",
|
||
"title": "Failed global rebinding drops the old document and retains partial new listeners",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/global-events.spec.js",
|
||
"test/global-events.test.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md"
|
||
],
|
||
"compatibleResolution": "Commit a new document/window binding only after registration succeeds, keep the previous binding on failure and cancel interrupted generations without changing event identities or target fallback rules.",
|
||
"closureCriteria": "Final installed matrices cover actual iframe rebinding, document/window failure rollback, nested rebinding, destruction and keyboard focus integration.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Staged global bindings commit only on successful registration; cancelled/reentrant generations cannot overwrite newer targets. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-26",
|
||
"title": "Click callbacks that destroy the player still trigger subsequent default playback actions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/pointer-events.spec.js",
|
||
"test/pointer-events.test.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md"
|
||
],
|
||
"compatibleResolution": "Check instance closure before pointer handling and after click/double-click callbacks, own document focus subscriptions, and retain native events, click thresholds, nested dispatch and normal default actions.",
|
||
"closureCriteria": "Final installed matrices cover real mouse playback, desktop/mobile callback destruction, normal click pairs, focus/hover/move behavior and unit fullscreen/error/cleanup contracts.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Pointer handlers check closure after user callbacks and no longer trigger playback/fullscreen after destruction. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-27",
|
||
"title": "Cancelled, locked or replaced touches continue a previous seek gesture",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/gesture.spec.js",
|
||
"test/gesture.test.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md"
|
||
],
|
||
"compatibleResolution": "Track the active touch, source and orientation; cancel invalidated sessions, own touch-end/cancel subscriptions and preserve ordinary drag axes, thresholds and multipliers.",
|
||
"closureCriteria": "Final installed matrices retain normal video/progress touch behavior and verify cancel, lock, multitouch, identity changes, source/rotation changes and invalid geometry; physical touch remains a release gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Touch/source/orientation identity and cancellation prevent invalid sessions from continuing; normal axes and multipliers remain. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-28",
|
||
"title": "Gesture callbacks continue seeking or updating progress after destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/gesture.spec.js",
|
||
"test/gesture.test.js",
|
||
"refactor/changes/2026-09-11-CORE-17-input.md"
|
||
],
|
||
"compatibleResolution": "Check the current gesture after progress/seek callbacks and before subsequent writes; permit the shared position helper to check an optional caller lifetime without changing its ordinary call contract.",
|
||
"closureCriteria": "Final installed matrices and unit tests cover destruction/reentry/errors during absolute and relative seeking, with original event order and normal desktop progress behavior retained.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Gesture lifetime checks stop post-callback seek/bar/notice writes and preserve nested gesture ownership. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-29",
|
||
"title": "Scroll throttle reset timers remain pending after player destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/event-scheduling.spec.js",
|
||
"test/event-scheduling.test.js"
|
||
],
|
||
"compatibleResolution": "Own the view throttle timer and emitter subscriptions while retaining leading-only dispatch, captured delay, live gap and synchronous nested behavior.",
|
||
"closureCriteria": "Final installed matrices and unit tests cover pending timer removal, view callback destruction/errors, normal scroll/mini behavior and remaining scheduling ownership.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Owned leading-throttle timers and subscriptions cancel at destruction with normal timing and synchronous errors retained. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-30",
|
||
"title": "Screen orientation changes are ignored when onchange is initially null",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/event-scheduling.spec.js",
|
||
"test/event-scheduling.test.js"
|
||
],
|
||
"compatibleResolution": "Detect addEventListener on the owner's orientation target and retain the existing coalesced resize flow and disposal.",
|
||
"closureCriteria": "Installed matrices cover controlled orientation events with a null onchange property and resize/cleanup regressions; physical orientation remains a release gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "Orientation listeners use event capability on the owner target rather than requiring an assigned onchange handler. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-18",
|
||
"title": "View visibility uses the original global viewport after container adoption into an iframe",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-17"
|
||
],
|
||
"evidence": [
|
||
"test/browser/event-scheduling.spec.js",
|
||
"test/event-scheduling.test.js"
|
||
],
|
||
"compatibleResolution": "Use the current container owner document's viewport while preserving the original edge and gap arithmetic.",
|
||
"closureCriteria": "Installed matrices cover actual iframe adoption/rebinding, normal visibility and exact gap boundaries without changing public viewport utilities.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-17-input.md",
|
||
"refactor/baselines/input-validation.json"
|
||
],
|
||
"resolutionRationale": "View calculations use the current owner viewport after iframe adoption and preserve the original edge/gap boundaries. Final installed UMD/legacy each pass 1119 full-suite plus 24 supplemental cases on identical artifacts, and exact-package consumers pass. Controlled touch/IME/orientation paths do not waive physical-device release gates."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-31",
|
||
"title": "Notice reentrant writes can schedule after destruction or erase a newer message",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"test/notice.test.js",
|
||
"test/browser/notice.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md"
|
||
],
|
||
"compatibleResolution": "Preserve public fields and normal hide/expiry behavior; own timer generations and reject stale writes.",
|
||
"closureCriteria": "Installed UMD and legacy verify normal notices, reentrant writes and destruction without late timers or stale DOM effects.",
|
||
"workspaceState": "Final CORE-18 source, production outputs and installed UMD/legacy artifacts match; ownership and compatible behavior are verified.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md",
|
||
"refactor/baselines/builtins-prompts-validation.json",
|
||
"test/notice.test.js",
|
||
"test/browser/notice.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned prompt/input resources prevent stale callbacks and survive reentry/removal/destruction; normal public API and event ordering are retained. Final installed UMD and legacy each pass 1350 browser cases, including 207 CORE-18 cases, plus actual tarball runtime/type consumers. Physical mobile and release-review gates remain outstanding for the overall refactor."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-32",
|
||
"title": "Fast-forward repeated starts and missing cancellation retain timers or accelerated playback",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"test/fast-forward.test.js",
|
||
"test/browser/fast-forward.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md"
|
||
],
|
||
"compatibleResolution": "Own a single press in the current source; restore its prior rate and clean subscriptions while preserving native load reset behavior.",
|
||
"closureCriteria": "Installed UMD and legacy verify touch and cancellation, pause/lock/source/destroy and rate restoration; physical touch limitations remain documented.",
|
||
"workspaceState": "Final CORE-18 source, production outputs and installed UMD/legacy artifacts match; ownership and compatible behavior are verified.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md",
|
||
"refactor/baselines/builtins-prompts-validation.json",
|
||
"test/fast-forward.test.js",
|
||
"test/browser/fast-forward.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned prompt/input resources prevent stale callbacks and survive reentry/removal/destruction; normal public API and event ordering are retained. Final installed UMD and legacy each pass 1350 browser cases, including 207 CORE-18 cases, plus actual tarball runtime/type consumers. Physical mobile and release-review gates remain outstanding for the overall refactor."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-33",
|
||
"title": "Auto-playback restarts retain obsolete resume clicks, subscriptions and timers",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"test/auto-playback.test.js",
|
||
"test/browser/auto-playback.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md"
|
||
],
|
||
"compatibleResolution": "Keep storage and public plugin contracts; bind one prompt generation to the layer and source, independently of instance-owned time recording.",
|
||
"closureCriteria": "Installed UMD and legacy prove single current resume action, actual playback/storage, close/rejection and restart/source/remove/destroy cleanup.",
|
||
"workspaceState": "Final CORE-18 source, production outputs and installed UMD/legacy artifacts match; ownership and compatible behavior are verified.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md",
|
||
"refactor/baselines/builtins-prompts-validation.json",
|
||
"test/auto-playback.test.js",
|
||
"test/browser/auto-playback.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned prompt/input resources prevent stale callbacks and survive reentry/removal/destruction; normal public API and event ordering are retained. Final installed UMD and legacy each pass 1350 browser cases, including 207 CORE-18 cases, plus actual tarball runtime/type consumers. Physical mobile and release-review gates remain outstanding for the overall refactor."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-34",
|
||
"title": "Lock icon and miniature progress subscriptions outlive their UI or player",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"test/builtin-layers.test.js",
|
||
"test/browser/builtin-layers.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md"
|
||
],
|
||
"compatibleResolution": "Scope icon subscriptions to their layer and miniature progress to the player; retain live lock setters after UI removal while suppressing post-destroy mutations.",
|
||
"closureCriteria": "Installed UMD and legacy verify builtin activation matrix, state/event/icon contracts, layer removal and retained setters/events after destruction.",
|
||
"workspaceState": "Final CORE-18 source, production outputs and installed UMD/legacy artifacts match; ownership and compatible behavior are verified.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md",
|
||
"refactor/baselines/builtins-prompts-validation.json",
|
||
"test/builtin-layers.test.js",
|
||
"test/browser/builtin-layers.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned prompt/input resources prevent stale callbacks and survive reentry/removal/destruction; normal public API and event ordering are retained. Final installed UMD and legacy each pass 1350 browser cases, including 207 CORE-18 cases, plus actual tarball runtime/type consumers. Physical mobile and release-review gates remain outstanding for the overall refactor."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-35",
|
||
"title": "Info repeated initialization retains polling and close callbacks; destroyed reads continue writing",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-18"
|
||
],
|
||
"evidence": [
|
||
"test/prompt-components.test.js",
|
||
"test/browser/prompt-components.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md"
|
||
],
|
||
"compatibleResolution": "Own one info initialization generation; preserve mask destroy observer ordering and finalize its resources after event dispatch, including failure paths.",
|
||
"closureCriteria": "Installed UMD and legacy verify info initial/repeated/mobile/manual/failed init and DOM conversion, plus mask playback, destroy ordering and throwing-observer finalization.",
|
||
"workspaceState": "Final CORE-18 source, production outputs and installed UMD/legacy artifacts match; ownership and compatible behavior are verified.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-11-CORE-18-builtins-prompts.md",
|
||
"refactor/baselines/builtins-prompts-validation.json",
|
||
"test/prompt-components.test.js",
|
||
"test/browser/prompt-components.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned prompt/input resources prevent stale callbacks and survive reentry/removal/destruction; normal public API and event ordering are retained. Final installed UMD and legacy each pass 1350 browser cases, including 207 CORE-18 cases, plus actual tarball runtime/type consumers. Physical mobile and release-review gates remain outstanding for the overall refactor."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-36",
|
||
"title": "Screenshot Blob callback failures escape and leave public promises pending",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/screenshot.test.js"
|
||
],
|
||
"compatibleResolution": "Preserve legal capture results and error propagation, while fixing asynchronous failure and stale lifecycle effects.",
|
||
"closureCriteria": "Candidate unit, real-browser and installed-package regressions plus compatibility review pass.",
|
||
"workspaceState": "Before migration, null Blob and thrown createObjectURL escape the asynchronous callback. Candidate Node regression passes; final installed-package evidence remains outstanding. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-37",
|
||
"title": "Screenshot completion can download or emit after destruction or source replacement",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/screenshot.test.js",
|
||
"test/browser/screenshot.spec.js"
|
||
],
|
||
"compatibleResolution": "Preserve legal capture results and error propagation, while fixing asynchronous failure and stale lifecycle effects.",
|
||
"closureCriteria": "Candidate unit, real-browser and installed-package regressions plus compatibility review pass.",
|
||
"workspaceState": "Before migration, screenshot await resumes download and event effects after disposal or source replacement. Candidate guards preserve the captured string result while suppressing stale effects. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-38",
|
||
"title": "Screenshot toolbar leaves internal capture failures as unhandled rejections",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/browser/screenshot.spec.js",
|
||
"refactor/baselines/screenshot-partial.json"
|
||
],
|
||
"compatibleResolution": "Consume the internal toolbar Promise after the existing notice, while preserving rejection of every public capture method.",
|
||
"closureCriteria": "Exact historical Error identity is reproduced and candidate toolbar, cross-origin and installed-package regressions pass.",
|
||
"workspaceState": "Published toolbar produces one exactly identified rejection per engine; source candidate produces none. Real cross-origin toolbar validation passes. Installed-package exit remains outstanding. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-39",
|
||
"title": "Thumbnail image completions can overwrite newer configuration or hover state and outlive controls",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnails.test.js",
|
||
"test/browser/thumbnails.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve public configuration identity, dimensions, layout positioning and public URL ownership; repair documented crop and lifecycle defects.",
|
||
"closureCriteria": "Candidate type, unit, actual image browser and installed-package validation pass with explicit historical differences.",
|
||
"workspaceState": "Five of seven initial Node cases fail before migration. Candidate generation/source/control ownership guards and latest-hover rendering now pass focused Node and real-image browser checks. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-40",
|
||
"title": "Image load failures leave thumbnail loading frozen and canvas callback failures escape public loadImg promises",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnails.test.js",
|
||
"test/browser/thumbnails.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve public configuration identity, dimensions, layout positioning and public URL ownership; repair documented crop and lifecycle defects.",
|
||
"closureCriteria": "Candidate type, unit, actual image browser and installed-package validation pass with explicit historical differences.",
|
||
"workspaceState": "Owned image requests now settle on cancellation or failure and release handlers; the public utility retains HTMLImageElement results and callback errors reject. Transient no-store HTTP failure can retry in all three engines. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-41",
|
||
"title": "Scaled thumbnail Blob URLs survive replacement, control removal and destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnails.test.js",
|
||
"test/browser/thumbnails.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve public configuration identity, dimensions, layout positioning and public URL ownership; repair documented crop and lifecycle defects.",
|
||
"closureCriteria": "Candidate type, unit, actual image browser and installed-package validation pass with explicit historical differences.",
|
||
"workspaceState": "Candidate internal URLs belong to the thumbnail configuration/control. Public loadImg and screenshot Blob URL ownership stays with callers. Final installed-package evidence remains outstanding. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-DOM-19",
|
||
"title": "Thumbnail row boundaries and first-cell return do not match the generated zero-based sprite grid",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnails.test.js",
|
||
"test/browser/thumbnails.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve public configuration identity, dimensions, layout positioning and public URL ownership; repair documented crop and lifecycle defects.",
|
||
"closureCriteria": "Candidate type, unit, actual image browser and installed-package validation pass with explicit historical differences.",
|
||
"workspaceState": "artplayer-tool-thumbnail uses index modulo column and floor(index / column). Published renderer selects the previous row last cell at exact multiples and writes invalid double-negative CSS for the first cell. Corrected candidate crop is compared against a numbered real SVG grid. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-42",
|
||
"title": "Progress callbacks and active drags can seek an obsolete source or removed control",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/source.test.js",
|
||
"test/progress.test.js",
|
||
"test/browser/progress-quality.spec.js",
|
||
"test/browser/source.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve legal progress and quality APIs, callback order, source results and caller ownership; stop obsolete work and bound native position correction.",
|
||
"closureCriteria": "Unit, strict types and installed-package browser matrices pass with explicit baseline differences and native evidence.",
|
||
"workspaceState": "Published real progress interactions continue seeking after setBar reentry; candidate guards entry, source and action identity and ends a drag on source replacement. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-43",
|
||
"title": "Replacing a media source revokes a caller-owned Blob URL still in use",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/source.test.js",
|
||
"test/progress.test.js",
|
||
"test/browser/progress-quality.spec.js",
|
||
"test/browser/source.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve legal progress and quality APIs, callback order, source results and caller ownership; stop obsolete work and bound native position correction.",
|
||
"closureCriteria": "Unit, strict types and installed-package browser matrices pass with explicit baseline differences and native evidence.",
|
||
"workspaceState": "Published URL setter revokes the supplied old URL. Node fetch and three-browser byte ownership checks reproduce the consumer failure; candidate preserves caller ownership after switching and destruction. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-44",
|
||
"title": "Native quality restoration can settle at a different position after its first seek",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-19"
|
||
],
|
||
"evidence": [
|
||
"test/source.test.js",
|
||
"test/progress.test.js",
|
||
"test/browser/progress-quality.spec.js",
|
||
"test/browser/source.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"compatibleResolution": "Preserve legal progress and quality APIs, callback order, source results and caller ownership; stop obsolete work and bound native position correction.",
|
||
"closureCriteria": "Unit, strict types and installed-package browser matrices pass with explicit baseline differences and native evidence.",
|
||
"workspaceState": "Windows WebKit native event traces show the first seek reporting the accepted target then completing near zero. Waiting or deferring alone is insufficient. Candidate waits for native completion and performs at most one correction; a persistent seeked listener prevents a pending Promise after that correction. Final CORE-19 CI and installed-package acceptance passed; see resolution evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/capture-progress-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-19-capture-thumbnails.md"
|
||
],
|
||
"resolutionRationale": "Core source, strict types, unit cases, real images/media, actual installed tarball and full UMD/legacy matrices pass. Explicit historical defect differences are documented; no API/type removal or environment waiver."
|
||
},
|
||
{
|
||
"id": "BASE-ENV-01",
|
||
"title": "Windows WebKit native Blob video samples lack decoding support; Apple-device validation remains outstanding",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"REL-03",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"test/browser/progress-quality.spec.js",
|
||
"refactor/environment-matrix.md"
|
||
],
|
||
"compatibleResolution": "Keep byte ownership and real HTTP playback evidence distinct from native Blob decoding; do not infer Safari or Apple-device support from Windows WebKit.",
|
||
"closureCriteria": "Record actual Safari and Apple device versions and native sample capabilities, then compare published/candidate load, playback, seek, source replacement and Blob ownership.",
|
||
"workspaceState": "Independent video probes on Windows WebKit 26.6 return error 4 and width zero for both local MP4 and WebM Blob samples. Chromium and Firefox decode the tested Blob sample. WebKit ownership tests explicitly report decodedBlob=false.",
|
||
"resolutionEvidence": []
|
||
},
|
||
{
|
||
"id": "BASE-ENV-02",
|
||
"title": "Custom iOS or Macintosh user agents dereference absent browser globals during SSR import",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/environment.test.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Keep UA matching, override priority and browser flags while guarding absent window and navigator globals.",
|
||
"closureCriteria": "Published failure, isolated environment flags and complete candidate entry/installed import regressions pass without new import side effects.",
|
||
"workspaceState": "Absent window/navigator are guarded without changing custom UA priority or lazy evaluation. Full UMD/legacy/ESM imports from the installed tarball pass the explicit no-browser-global profile, and published failures remain tested.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/environment.test.js"
|
||
],
|
||
"resolutionRationale": "Absent window/navigator are guarded without changing custom UA priority or lazy evaluation. Full UMD/legacy/ESM imports from the installed tarball pass the explicit no-browser-global profile, and published failures remain tested."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-45",
|
||
"title": "Previous workspace safe-area measurement leaks its probe when native style access fails",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/dom-boundaries.test.js",
|
||
"test/browser/dom-boundaries.spec.js",
|
||
"test/helpers/legacy-safe-area.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve public utility exports, tree/style semantics and primary errors while closing owned probe cleanup and absent-global failures.",
|
||
"closureCriteria": "Complete entry, source/consumer types and installed-package/browser exit pass with explicit source provenance.",
|
||
"workspaceState": "The CORE-19 own-source safe-area helper is frozen with provenance; candidate finally cleanup releases its probe on native append/style failures while preserving primary errors. Installed browser regressions pass. The npm baseline does not contain this helper.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/dom-boundaries.test.js",
|
||
"test/browser/dom-boundaries.spec.js",
|
||
"test/helpers/legacy-safe-area.js"
|
||
],
|
||
"resolutionRationale": "The CORE-19 own-source safe-area helper is frozen with provenance; candidate finally cleanup releases its probe on native append/style failures while preserving primary errors. Installed browser regressions pass. The npm baseline does not contain this helper."
|
||
},
|
||
{
|
||
"id": "BASE-ENV-03",
|
||
"title": "Fallback event-path utilities dereference absent window in server environments",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/dom-boundaries.test.js",
|
||
"test/browser/dom-boundaries.spec.js",
|
||
"test/helpers/legacy-safe-area.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve public utility exports, tree/style semantics and primary errors while closing owned probe cleanup and absent-global failures.",
|
||
"closureCriteria": "Complete entry, source/consumer types and installed-package/browser exit pass with explicit source provenance.",
|
||
"workspaceState": "Fallback event paths preserve native receiver, original array identity and DOM ancestry while supporting an absent window. Published failure and candidate source/browser regressions pass.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/dom-boundaries.test.js",
|
||
"test/browser/dom-boundaries.spec.js",
|
||
"test/helpers/legacy-safe-area.js"
|
||
],
|
||
"resolutionRationale": "Fallback event paths preserve native receiver, original array identity and DOM ancestry while supporting an absent window. Published failure and candidate source/browser regressions pass."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-46",
|
||
"title": "Option initialization continues native, style and source writes after reentrant destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/initialization.test.js",
|
||
"test/helpers/legacy-option-init.js",
|
||
"test/helpers/legacy-airplay.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve initialization and AirPlay contracts while stopping effects after lifecycle cancellation; keep real device limits explicit.",
|
||
"closureCriteria": "Final constructor, strict source types, normal/error/teardown tests and installed-package/browser acceptance pass.",
|
||
"workspaceState": "Option initialization retains ordered native/storage/style/source writes, but checks lifecycle closure after callbacks, getters and conversion boundaries. Frozen old traces and complete installed construction tests cover the difference.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/initialization.test.js",
|
||
"test/helpers/legacy-option-init.js",
|
||
"test/helpers/legacy-airplay.js"
|
||
],
|
||
"resolutionRationale": "Option initialization retains ordered native/storage/style/source writes, but checks lifecycle closure after callbacks, getters and conversion boundaries. Frozen old traces and complete installed construction tests cover the difference."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-47",
|
||
"title": "AirPlay methods can call a picker or publish events and notices after destruction",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/initialization.test.js",
|
||
"test/helpers/legacy-option-init.js",
|
||
"test/helpers/legacy-airplay.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve initialization and AirPlay contracts while stopping effects after lifecycle cancellation; keep real device limits explicit.",
|
||
"closureCriteria": "Final constructor, strict source types, normal/error/teardown tests and installed-package/browser acceptance pass.",
|
||
"workspaceState": "AirPlay capability detection, picker getter/call completion, event and notice publication stop after closure. Controlled source and installed construction checks preserve normal receiver/error behavior; real AirPlay devices remain unverified release scope.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/initialization.test.js",
|
||
"test/helpers/legacy-option-init.js",
|
||
"test/helpers/legacy-airplay.js"
|
||
],
|
||
"resolutionRationale": "AirPlay capability detection, picker getter/call completion, event and notice publication stop after closure. Controlled source and installed construction checks preserve normal receiver/error behavior; real AirPlay devices remain unverified release scope."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-48",
|
||
"title": "Proxy-time destruction cannot clean a template before its public assignment",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/instance-lifecycle.test.js",
|
||
"test/browser/initialization.spec.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve normal constructor order, public property visibility and first-call teardown semantics while cancelling later installation and cleaning the mounting template.",
|
||
"closureCriteria": "Strict final entry, normal/failed/reentrant construction and installed package/browser acceptance pass.",
|
||
"workspaceState": "Private mounting ownership permits cleanup before public template assignment. Installed removeHtml true/false, proxy ownership, destroy-observer order, replacement construction and failed-constructor regressions pass.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/instance-lifecycle.test.js",
|
||
"test/browser/initialization.spec.js"
|
||
],
|
||
"resolutionRationale": "Private mounting ownership permits cleanup before public template assignment. Installed removeHtml true/false, proxy ownership, destroy-observer order, replacement construction and failed-constructor regressions pass."
|
||
},
|
||
{
|
||
"id": "BASE-LIFE-49",
|
||
"title": "Constructor and Player initialization continue after a callback destroys the instance",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-20"
|
||
],
|
||
"evidence": [
|
||
"test/browser/initialization.spec.js",
|
||
"test/initialization.test.js",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md"
|
||
],
|
||
"compatibleResolution": "Preserve normal constructor order, public property visibility and first-call teardown semantics while cancelling later installation and cleaning the mounting template.",
|
||
"closureCriteria": "Strict final entry, normal/failed/reentrant construction and installed package/browser acceptance pass.",
|
||
"workspaceState": "Player installers and outer construction stop after reentrant closure without publishing later plugins or registering the dead instance. Installed normal descriptors/static/subclass behavior and getter/native-write destruction cases pass.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/entry-validation.json",
|
||
"refactor/changes/2026-09-11-CORE-20-entry.md",
|
||
"test/browser/initialization.spec.js",
|
||
"test/initialization.test.js"
|
||
],
|
||
"resolutionRationale": "Player installers and outer construction stop after reentrant closure without publishing later plugins or registering the dead instance. Installed normal descriptors/static/subclass behavior and getter/native-write destruction cases pass."
|
||
},
|
||
{
|
||
"id": "HLS-UI-01",
|
||
"title": "空轨道和关闭配置仍残留 HLS 菜单",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-HLS-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/hls-validation.md",
|
||
"test/hls-control.test.js",
|
||
"test/browser/hls-control.spec.js"
|
||
],
|
||
"compatibleResolution": "使用既有 remove API 清理不再可用的 UI,保留菜单名称及选择语义。",
|
||
"closureCriteria": "候选空轨道、关闭开关及恢复测试通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/hls-modules-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-HLS-03-modules.md",
|
||
"packages/artplayer-plugin-hls-control/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "PKG-HLS-03 候选回归与新旧核心/实际 Hls.js 1.5.17 验证:空菜单、过期回调/订阅、Auto 及音轨同步。环境/SDK 扩展范围仍由 SDK-01 与 HLS-ENV-01 保持 open,不据此放行发布。"
|
||
},
|
||
{
|
||
"id": "HLS-LIFE-01",
|
||
"title": "过期 HLS 选择回调与销毁后 update 仍工作",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-HLS-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/hls-validation.md",
|
||
"test/hls-control.test.js",
|
||
"test/browser/hls-control.spec.js"
|
||
],
|
||
"compatibleResolution": "限制过期实例回调,整理监听器归属,Hls 仍由调用方销毁。",
|
||
"closureCriteria": "替换、销毁、重入及 SDK 订阅解绑的候选回归通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/hls-modules-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-HLS-03-modules.md",
|
||
"packages/artplayer-plugin-hls-control/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "PKG-HLS-03 候选回归与新旧核心/实际 Hls.js 1.5.17 验证:空菜单、过期回调/订阅、Auto 及音轨同步。环境/SDK 扩展范围仍由 SDK-01 与 HLS-ENV-01 保持 open,不据此放行发布。"
|
||
},
|
||
{
|
||
"id": "HLS-AUTO-01",
|
||
"title": "真实 ABR 播放的 Auto 标签在 update 后丢失",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-HLS-03",
|
||
"PKG-HLS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/hls-validation.md",
|
||
"test/hls-control.test.js",
|
||
"test/browser/hls-control.spec.js"
|
||
],
|
||
"compatibleResolution": "区分自动策略与实际播放档位,保留手动及 Auto 选择值。",
|
||
"closureCriteria": "实际 SDK 自动/手动切换和事件同步通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/hls-modules-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-HLS-03-modules.md",
|
||
"packages/artplayer-plugin-hls-control/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "PKG-HLS-03 候选回归与新旧核心/实际 Hls.js 1.5.17 验证:空菜单、过期回调/订阅、Auto 及音轨同步。环境/SDK 扩展范围仍由 SDK-01 与 HLS-ENV-01 保持 open,不据此放行发布。"
|
||
},
|
||
{
|
||
"id": "HLS-ENV-01",
|
||
"title": "Windows WebKit 缺失 MSE,HLS 播放矩阵尚缺 Safari 证据",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-HLS-05",
|
||
"REL-09",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"refactor/hls-validation.md",
|
||
"test/hls-control.test.js",
|
||
"test/browser/hls-control.spec.js"
|
||
],
|
||
"compatibleResolution": "显式验证宿主不支持,保留 14 skipped,不作为播放通过;补有 MSE 的 Safari/macOS/iOS 环境。",
|
||
"closureCriteria": "实际 Safari/MSE/native 路径证据齐全,不能仅凭 Windows 能力检查关闭。"
|
||
},
|
||
{
|
||
"id": "HLS-CRASH-01",
|
||
"title": "Firefox Hls 1.5.17 worker 销毁可在原生 video 与候选核心复现崩溃",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-HLS-SDK-01",
|
||
"PKG-HLS-05",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"test/browser/hls-sdk.spec.js",
|
||
"refactor/changes/2026-09-12-PKG-HLS-SDK-01-integration.md",
|
||
"refactor/baselines/hls-sdk-diagnostics.json",
|
||
"refactor/scripts/hls-sdk-diagnostic.mjs"
|
||
],
|
||
"compatibleResolution": "直接原生 video(无 ArtPlayer/插件)和候选核心已有 page crashed;候选核心无观察器也复现。继续区分 SDK、Firefox/Playwright 与媒体销毁,不静默改核心 destroy 顺序或调用方 SDK 配置。",
|
||
"closureCriteria": "取得可解释的崩溃诊断或直接 SDK 对照;验证处置和新旧核心/worker/分组销毁矩阵,不能仅以再次通过关闭。"
|
||
},
|
||
{
|
||
"id": "HLS-PLAYBACK-01",
|
||
"title": "Firefox 旧核心与 Hls 1.7.2 切组后视频档位未完成切换",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-HLS-SDK-01",
|
||
"PKG-HLS-05",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"test/browser/hls-sdk.spec.js",
|
||
"refactor/changes/2026-09-12-PKG-HLS-SDK-01-integration.md",
|
||
"refactor/baselines/hls-sdk-validation.json"
|
||
],
|
||
"compatibleResolution": "区分 SDK、测试媒体/时序和宿主问题,保留真实档位/解码断言及 trace;不扩大等待或只验证菜单。",
|
||
"closureCriteria": "直接 Hls 与新旧核心对照定位切换停滞,验证处置和正常/连续组切换,不能以重复通过关闭。"
|
||
},
|
||
{
|
||
"id": "AUDIO-LIFE-01",
|
||
"title": "Audio Track 销毁后 update 与媒体/订阅缺少终止守卫",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUDIO-02",
|
||
"PKG-AUDIO-03",
|
||
"PKG-AUDIO-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-track-contract.md",
|
||
"refactor/baselines/audio-track-release.json",
|
||
"test/audio-track.test.js",
|
||
"test/browser/audio-track.spec.js",
|
||
"refactor/baselines/audio-validation.json"
|
||
],
|
||
"compatibleResolution": "保留公开 audio 和同步 update,封闭销毁后的资源写入并管理插件订阅,验证待决播放拒绝。",
|
||
"closureCriteria": "受控复现和新旧核心真实媒体切源/销毁验证通过,不以源码观察代替泄漏证据。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/audio-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-AUDIO-03-lifecycle.md",
|
||
"packages/artplayer-plugin-audio-track/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "候选源码/三格式受控回归及 main/legacy 三引擎验证:插件自己解绑,关闭后的 update/回调/拒绝无资源写入,移除 src 后无新增媒体错误;安装/解绑失败仍释放。此关闭只覆盖已登记守卫/空 src 问题,不称全设备无内存泄漏。"
|
||
},
|
||
{
|
||
"id": "AUDIO-SYNC-01",
|
||
"title": "Audio Track 未同步原生暂停/结束,偏移边界与切源/缓冲仍待完整验证",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUDIO-02",
|
||
"PKG-AUDIO-03",
|
||
"PKG-AUDIO-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-track-contract.md",
|
||
"refactor/baselines/audio-track-release.json",
|
||
"test/audio-track.test.js",
|
||
"test/browser/audio-track.spec.js",
|
||
"refactor/baselines/audio-validation.json",
|
||
"refactor/baselines/audio-lifecycle-validation.json",
|
||
"refactor/baselines/audio-combinations-checkpoint.json"
|
||
],
|
||
"compatibleResolution": "03 已修复原生暂停/结束;05 的连续切源和偏移原生对照已验证,真实缓冲 Chromium/Firefox 初轮通过但 Windows WebKit 保留 AUDIO-BUFFER-01;策略/设备缺口继续 open。",
|
||
"closureCriteria": "正常/边界/失败/缓冲恢复有媒体与受控断言,实际支持环境缺口明确处理。"
|
||
},
|
||
{
|
||
"id": "AUDIO-TYPE-01",
|
||
"title": "Audio Track update 部分配置与公开/编辑器声明不一致",
|
||
"confirmation": "source-observed",
|
||
"status": "accepted-with-scope",
|
||
"owners": [
|
||
"PKG-AUDIO-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-track-contract.md",
|
||
"refactor/baselines/audio-track-release.json"
|
||
],
|
||
"compatibleResolution": "ADR-023:默认/legacy 保留旧必填 url 推断与上下文实现;新增 /runtime 复用同一 JS,精确支持部分 update,编辑器通过 RuntimeFactory 显式选择。",
|
||
"closureCriteria": "当前与旧编译器的正反例、CJS/ESM/legacy 入口及实际编辑器通过。",
|
||
"resolutionRationale": "直接拓宽或重载会使旧上下文实现的 url 成为 string | undefined,已用实际编译复现。五组 TS 正反例、README、CJS/ESM 同一函数、真实 Monaco 三引擎已通过。接受默认旧声明有意保持窄签名的范围,不声称所有入口默认支持部分 update;隔离安装和完整分发仍由 Audio-06 验证。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-AUDIO-04-types.md",
|
||
"refactor/baselines/audio-types-validation.json",
|
||
"refactor/decisions.md"
|
||
]
|
||
},
|
||
{
|
||
"id": "AUDIO-DEMO-01",
|
||
"title": "Audio Track README 示例链接名称不匹配且缺维护说明",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUDIO-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-track-contract.md",
|
||
"refactor/baselines/audio-track-release.json"
|
||
],
|
||
"compatibleResolution": "修正 audio.track 示例路径,补真实模块地图及 update/生命周期说明。",
|
||
"closureCriteria": "README、示例、公开声明一致,8082 正式 demo 和包分发验证通过。"
|
||
},
|
||
{
|
||
"id": "CORE-SOURCE-01",
|
||
"title": "候选核心连续切源丢失原播放意图",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-24"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-combinations-first.json",
|
||
"packages/artplayer/src/source/switch.ts"
|
||
],
|
||
"compatibleResolution": "继承被替代切源操作的播放意图;显式暂停可以取消恢复,过期操作继续只结算不发布副作用。",
|
||
"closureCriteria": "新旧对照的连续切源、手动暂停、重入/取消/错误/销毁和正式产物三引擎验证通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-CORE-24-source-intent.md",
|
||
"refactor/baselines/core-source-intent-validation.json",
|
||
"test/source.test.js",
|
||
"test/browser/source-intent.spec.js"
|
||
],
|
||
"resolutionRationale": "待完成切源操作继承播放意图,公开 play/pause 在原生调用及用户监听器之前更新;内部暂停标记仅消费一次,暂停修订号阻止晚到恢复副作用。34 项源测试、594 项 CI、正式 main/legacy 各 81 项三引擎和原六项 Audio 失败重跑通过,隔离 tarball 字节/运行时/类型验证通过。范围是公开命令及切源操作,不关闭独立 AUDIO-RESUME-01、真机或完整发布门槛。"
|
||
},
|
||
{
|
||
"id": "AUDIO-RESUME-01",
|
||
"title": "WebKit 旧核心切源后候选音频保持暂停",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUDIO-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/audio-combinations-first.json",
|
||
"test/audio-track.test.js",
|
||
"test/browser/audio-combinations.spec.js",
|
||
"refactor/baselines/audio-combinations-checkpoint.json"
|
||
],
|
||
"compatibleResolution": "原生时间零且未暂停、未结束、readyState>2 时允许恢复;显式 proxy playing 布尔值优先。canplay 仅恢复暂停且宿主可播放的 audio,保持公开接口与同步算法。",
|
||
"closureCriteria": "保留原始失败,精确事件复现并有旧核心/新核心三引擎回归;不可仅重复到绿灯。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/audio-combinations-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-AUDIO-05-combinations.md",
|
||
"packages/artplayer-plugin-audio-track/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "失败日志确认 seeked 时间零、readyState=4、paused=false 而 art.playing=false。受控用例先红后绿,实际三格式 97 项通过;main/legacy 每组 78 项含三引擎旧/新核心组合通过。仅关闭此具体恢复缺陷,真实缓冲、策略与设备范围保持开放。"
|
||
},
|
||
{
|
||
"id": "AUDIO-BUFFER-01",
|
||
"title": "Windows WebKit 原生媒体无法在受限响应下推进至真实缓冲",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUDIO-05"
|
||
],
|
||
"evidence": [
|
||
"test/browser/audio-buffering.spec.js",
|
||
"test/browser/media-gate-native.spec.js",
|
||
"test/helpers/media-gate.js",
|
||
"test/media-gate.test.js",
|
||
"refactor/baselines/audio-combinations-checkpoint.json",
|
||
"refactor/audio-validation.md"
|
||
],
|
||
"compatibleResolution": "保留真实 waiting 断言;使用独立原生对照和其他实际支持环境/输入继续验证,不将没有播放推进的诊断当成缓冲通过,也不凭此改变插件 API 或否定真实 Safari 支持。",
|
||
"closureCriteria": "受影响的缓冲/恢复得到真实媒体证据;与原生能力和测试夹具差异分开,发布环境的剩余范围经显式处理。"
|
||
},
|
||
{
|
||
"id": "CHAPTER-LAYOUT-01",
|
||
"title": "长章节标题超出窄播放器进度条宽度",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CHAPTER-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/chapter-combinations-checkpoint.json",
|
||
"test/browser/chapter-combinations.spec.js"
|
||
],
|
||
"compatibleResolution": "样式限制最大宽度并省略溢出显示,保留完整 textContent/data-title、DOM hooks 和原有章节数据语义。",
|
||
"closureCriteria": "两种核心三引擎窄屏候选标题不越界,历史溢出观察和完整文本保留断言通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/chapter-combinations-checkpoint.json",
|
||
"packages/artplayer-plugin-chapter/src/style.less",
|
||
"packages/artplayer-plugin-chapter/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "先复现 6 个候选失败并保留截图,CSS 修复后正式 main/legacy 分别 12 个长标题用例通过(各含 6 历史溢出观察)。实际浏览器输入与产物指纹已冻结,API/类型未改变。"
|
||
},
|
||
{
|
||
"id": "CHAPTER-TIMING-01",
|
||
"title": "Windows WebKit 清晰度切换曾在等待窗口内未见 restart,稍后状态恢复",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-CHAPTER-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/chapter-combinations-checkpoint.json",
|
||
"test/browser/chapter-combinations.spec.js",
|
||
"refactor/changes/2026-09-12-PKG-CHAPTER-05-combinations.md"
|
||
],
|
||
"compatibleResolution": "记录原生事件和绝对/相对时序,进一步区分媒体驱动耗时、夹具和核心源操作;未证明原因前不改核心、不扩大超时或重复到绿灯。",
|
||
"closureCriteria": "确认先前超时的来源并有对应可靠回归;后续单次通过不足以关闭。"
|
||
},
|
||
{
|
||
"id": "DASH-SDK-01",
|
||
"title": "npm 发布版 4.x 与工作区仅 5.x 的 SDK 接口不兼容",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-DASH-02",
|
||
"PKG-DASH-03",
|
||
"PKG-DASH-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dash-control-contract.md",
|
||
"refactor/baselines/dash-control-release.json",
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts",
|
||
"docs/assets/example/dash.control.js",
|
||
"test/dash-contract.test.js",
|
||
"refactor/dash-validation.md",
|
||
"test/dash-lifecycle.test.js",
|
||
"refactor/baselines/dash-runtime.json",
|
||
"refactor/baselines/dash-sdk-checkpoint.json"
|
||
],
|
||
"compatibleResolution": "按方法能力适配两代已存在用法,保留 v5 稳定 ID,不能要求旧消费者改用新 SDK。",
|
||
"closureCriteria": "归档旧用法、v4/v5 受控及实际媒体矩阵通过,清晰度键不混用。"
|
||
},
|
||
{
|
||
"id": "DASH-LIFE-01",
|
||
"title": "DASH 空拓扑残留 UI,监听和旧选择回调缺乏关闭守卫",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DASH-02",
|
||
"PKG-DASH-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dash-control-contract.md",
|
||
"refactor/baselines/dash-control-release.json",
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts",
|
||
"docs/assets/example/dash.control.js",
|
||
"test/dash-contract.test.js",
|
||
"refactor/dash-validation.md",
|
||
"test/dash-lifecycle.test.js",
|
||
"refactor/baselines/dash-runtime.json"
|
||
],
|
||
"compatibleResolution": "仅释放插件自有 ready/restart/destroy 订阅和 UI,SDK 仍由调用方拥有;替换后旧回调不写旧实例。",
|
||
"closureCriteria": "空列表、换源/SDK、销毁后引用、安装异常有回归,其他实例与 SDK 不被误释放。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DASH-03-runtime.md",
|
||
"refactor/baselines/dash-runtime.json",
|
||
"packages/artplayer-plugin-dash-control/ARCHITECTURE.md"
|
||
],
|
||
"resolutionRationale": "空拓扑/禁用/失败/销毁清理自有 UI 与订阅,旧 revision/SDK 引用无副作用;先红后绿、两代方法表及三格式 Node 生命周期、新旧核心 main/legacy 各 84 项真实 DOM 通过。只关闭插件所有权和引用缺陷,不替代实际 SDK/MPD、demo 或设备验证。"
|
||
},
|
||
{
|
||
"id": "DASH-STATE-01",
|
||
"title": "DASH 当前项高亮使用真值 ID、音轨身份和标签去重,边界待核实",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DASH-02",
|
||
"PKG-DASH-03",
|
||
"PKG-DASH-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dash-control-contract.md",
|
||
"refactor/baselines/dash-control-release.json",
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts",
|
||
"docs/assets/example/dash.control.js",
|
||
"test/dash-contract.test.js",
|
||
"refactor/dash-validation.md",
|
||
"test/dash-lifecycle.test.js",
|
||
"refactor/baselines/dash-runtime.json",
|
||
"refactor/baselines/dash-sdk-checkpoint.json"
|
||
],
|
||
"compatibleResolution": "验证零 ID、重复标签和克隆音轨当前项,在保持原展示语义时按实际可选项定位高亮。",
|
||
"closureCriteria": "有受控和真实 SDK 证据说明选中的 representation/track 与 UI 一致。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DASH-05-sdk-events.md",
|
||
"refactor/baselines/dash-sdk-events-validation.json",
|
||
"test/dash-events.test.js",
|
||
"test/browser/dash-sdk.spec.js"
|
||
],
|
||
"resolutionRationale": "受控两代 SDK 保留零 ID、重复标签和唯一克隆轨道匹配;实际固定 SDK 4.5.2/5.2.1、新旧核心、main/legacy 的控制栏/设置、外部选择和 Auto 刷新与实际 representation/track 一致。仅关闭当前项与菜单同步缺陷;暂停无事件的纯配置修改仍用显式 update,seek 停滞、无 MSE、设备与完整分发不在此关闭范围。"
|
||
},
|
||
{
|
||
"id": "DASH-TYPE-01",
|
||
"title": "DASH 类型未表达默认工厂参数、SDK 回调对象和现代模块入口",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DASH-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dash-control-contract.md",
|
||
"refactor/baselines/dash-control-release.json",
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts",
|
||
"docs/assets/example/dash.control.js"
|
||
],
|
||
"compatibleResolution": "保留旧类型推断,提供准确的 SDK 适配/回调契约和兼容格式入口,不以 any 掩盖源码。",
|
||
"closureCriteria": "严格源码、旧/新编译器消费者与隔离产物类型验证通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/dash-types-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-DASH-04-types.md",
|
||
"test/types/dash-control.ts",
|
||
"refactor/scripts/dash-package-types.mjs",
|
||
"refactor/changes/2026-09-12-PKG-DASH-05-sdk-types.md",
|
||
"refactor/baselines/dash-sdk-types-validation.json"
|
||
],
|
||
"resolutionRationale": "五个自有 TS 模块严格检查通过,真实旧 npm 声明/候选消费者在 TS 4.3/5.9 兼容,五种模块模式及非法用法验证、真实 Monaco、工作区外 Yarn tarball 安装与类型检查通过。只关闭插件自身声明和格式解析问题,实际 SDK 类型/媒体矩阵仍由 05 接续。"
|
||
},
|
||
{
|
||
"id": "DASH-DEMO-01",
|
||
"title": "DASH 示例仅新 SDK 且重复安装会累积销毁回调",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-DASH-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/dash-control-contract.md",
|
||
"refactor/baselines/dash-control-release.json",
|
||
"packages/artplayer-plugin-dash-control/src/index.ts",
|
||
"packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts",
|
||
"docs/assets/example/dash.control.js"
|
||
],
|
||
"compatibleResolution": "验证真实 SDK 销毁和示例重载路径,对齐 v4/v5 文档与示例,不让旧监听误操作新实例。",
|
||
"closureCriteria": "真实 8082 demo、旧/新 SDK 路径与 tarball 产物一致,监听和 SDK 所有权可验证。"
|
||
},
|
||
{
|
||
"id": "DASH-SEEK-01",
|
||
"title": "dash.js 4.5.2 空裁剪漏更新缓冲量,稳定暂停 seek 后调度停滞",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-DASH-05",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"test/browser/dash-sdk.spec.js",
|
||
"refactor/baselines/dash-sdk-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-DASH-05-sdk-checkpoint.md",
|
||
"refactor/changes/2026-09-12-PKG-DASH-05-seek-diagnosis.md",
|
||
"refactor/baselines/dash-seek-diagnosis.json",
|
||
"test/browser/dash-buffer-observer.js"
|
||
],
|
||
"compatibleResolution": "已用原生 SDK、SourceBuffer/调度指标和 SDK 5 空裁剪刷新的一行诊断回植确认根因。兼容处置尚未落地;不在核心伪造 timeupdate、不偏移 seek、不强制所有旧用户升级 SDK,也不将诊断补丁计为正式上游通过。",
|
||
"closureCriteria": "原失败的新旧核心/插件组合有确定根因与对应修复/可验证环境边界;原生对照及原顺序、原目标回归成立,后续偶然通过不能关闭。"
|
||
},
|
||
{
|
||
"id": "ADS-TYPE-01",
|
||
"title": "Ads 声明丢失真实 html/video/url,旧 totalDuration 为 string,当前 source/type 未实现",
|
||
"confirmation": "reproduced",
|
||
"status": "accepted-with-scope",
|
||
"owners": [
|
||
"PKG-ADS-02",
|
||
"PKG-ADS-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-release.json",
|
||
"refactor/baselines/ads-contract.md",
|
||
"packages/artplayer-plugin-ads/types/artplayer-plugin-ads.d.ts",
|
||
"packages/artplayer-plugin-ads/src/index.ts",
|
||
"refactor/changes/2026-09-12-PKG-ADS-04-types.md",
|
||
"refactor/scripts/ads-types.test.mjs"
|
||
],
|
||
"compatibleResolution": "保留真实html/video/url/i18n及两套历史输入的普通调用;string时长仍在运行时拒绝、source/type仍不实现。用户2026-09-12明确接受Parameters字段推导变宽,README和编译用例提供准确Option、/runtime及收窄迁移;不扩大到其他API差异。",
|
||
"closureCriteria": "两套旧消费者、可选工厂、合法运行字段和错误参数有严格正反例,声明与真实方法一致。",
|
||
"resolutionRationale": "用户在收到具体TS2322影响和两套矛盾声明证据后答复“接受这项类型推导修正,写清迁移说明并继续”。五模式、冻结声明、隔离包和真实编辑器通过;诊断测试继续保留,不声称所有历史TS程序无改动兼容。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-ADS-04-types.md",
|
||
"refactor/baselines/ads-types-validation.json",
|
||
"packages/artplayer-plugin-ads/README.md",
|
||
"refactor/scripts/ads-types.test.mjs",
|
||
"test/types/ads.ts"
|
||
]
|
||
},
|
||
{
|
||
"id": "ADS-DIST-01",
|
||
"title": "Ads npm 1.0.6 default namespace 与未发布 2.1.0 callable/exports 分发不同",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-ADS-04",
|
||
"PKG-ADS-06",
|
||
"REL-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-release.json",
|
||
"refactor/baselines/ads-contract.md",
|
||
"refactor/scripts/ads-contract.test.mjs",
|
||
"packages/artplayer-plugin-ads/package.json",
|
||
"refactor/baselines/ads-types-validation.json"
|
||
],
|
||
"compatibleResolution": "保留旧 require(pkg).default、global 与有效 dist 路径,同时支持当前 callable/ESM/legacy。工作区 2.1.0 不冒充实际已发布版本,正式目标仍按计划 3.0.0。",
|
||
"closureCriteria": "工作区外真实 tarball 的旧/新导入、浏览器与声明入口全部验证,版本占用再次核实。"
|
||
},
|
||
{
|
||
"id": "ADS-CORE-01",
|
||
"title": "Ads 旧发布关联核心 4.5.5,当前源码新增 >=5 门槛和 document 事件桥依赖",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ADS-02",
|
||
"PKG-ADS-03",
|
||
"PKG-ADS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-release.json",
|
||
"refactor/baselines/ads-contract.md",
|
||
"packages/artplayer-plugin-ads/src/index.ts",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-03-lifecycle.md",
|
||
"packages/artplayer-plugin-ads/ARCHITECTURE.md",
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md"
|
||
],
|
||
"compatibleResolution": "先核验实际核心归档和能力,通过本地 fallback 保留原用户调用;不能用未发布源码门槛强制全部旧消费者升级,也不泛称全部 4.x 通过。",
|
||
"closureCriteria": "4.5.5 关联来源和实际可用组合明确,5.4.1/候选核心与原生 visibility/事件桥路径有真实浏览器证据。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"test/browser/ads-ui.spec.js",
|
||
"refactor/scripts/ads-native-visibility.mjs",
|
||
"test/ads-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "实际4.5.5归档已冻结;候选入口按能力检查,没有>=5门槛。4.5.5/5.4.1/候选核心main/legacy的三引擎UI及原生Chrome标签可见性通过,覆盖原生监听和较新核心事件桥,不泛化为全部4.x。"
|
||
},
|
||
{
|
||
"id": "ADS-LIFE-01",
|
||
"title": "Ads 计时链、重复/过早调用、工厂复用与销毁缺乏资源边界",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ADS-02",
|
||
"PKG-ADS-03",
|
||
"PKG-ADS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-contract.md",
|
||
"packages/artplayer-plugin-ads/src/index.ts",
|
||
"test/ads.test.js",
|
||
"test/browser/ads.spec.js",
|
||
"refactor/ads-validation.md",
|
||
"refactor/baselines/ads-validation.json",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-03-lifecycle.md",
|
||
"packages/artplayer-plugin-ads/ARCHITECTURE.md",
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md"
|
||
],
|
||
"compatibleResolution": "先复现重复 play 的计时链、skip 后计时、destroy 后恢复与复用工厂 options;以实例所有权和幂等清理修正,不更改广告时长/跳过规则。",
|
||
"closureCriteria": "时钟/订阅/DOM 与主片恢复的成功、异常、重入、销毁、复用和多实例回归通过。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"test/browser/ads-ui.spec.js",
|
||
"refactor/scripts/ads-native-visibility.mjs",
|
||
"test/ads-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "03的可重跑重复/过早/复用/重入/拒绝修复与本批194项源码及三格式回归通过;真实双实例、后台销毁及自有资源清理通过。新增未创建root时误删调用方undefined属性的复现与修复,不触碰未拥有的引用。"
|
||
},
|
||
{
|
||
"id": "ADS-MEDIA-01",
|
||
"title": "Ads metadata 与 play 拒绝、隐藏页媒体状态和内容恢复仍缺真实验证",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-ADS-02",
|
||
"PKG-ADS-03",
|
||
"PKG-ADS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-contract.md",
|
||
"packages/artplayer-plugin-ads/src/index.ts",
|
||
"docs/assets/example/ads.js",
|
||
"test/ads.test.js",
|
||
"test/browser/ads.spec.js",
|
||
"refactor/ads-validation.md",
|
||
"refactor/baselines/ads-validation.json",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-03-lifecycle.md",
|
||
"packages/artplayer-plugin-ads/ARCHITECTURE.md",
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md"
|
||
],
|
||
"compatibleResolution": "用本地媒体验证事件安装顺序、加载失败与拒绝、倒计时和广告播放的独立语义,恢复主片时不吞公共拒绝或在销毁后播放。 05已验证桌面Chrome真实后台标签暂停/恢复、视频继续播放和后台销毁,main/legacy各6组合;最小化和实际移动端媒体策略仍缺设备证据,保持open。",
|
||
"closureCriteria": "实际广告/主片的加载、暂停/恢复、失败/换源/销毁和隐藏状态有新旧核心组合证据。"
|
||
},
|
||
{
|
||
"id": "ADS-UI-01",
|
||
"title": "Ads 零等待跳过与初始状态不符,全屏图标/外部状态需核验",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ADS-02",
|
||
"PKG-ADS-03",
|
||
"PKG-ADS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/ads-contract.md",
|
||
"packages/artplayer-plugin-ads/src/index.ts",
|
||
"docs/assets/example/ads.js",
|
||
"test/ads.test.js",
|
||
"test/browser/ads.spec.js",
|
||
"refactor/ads-validation.md",
|
||
"refactor/baselines/ads-validation.json",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-03-lifecycle.md",
|
||
"packages/artplayer-plugin-ads/ARCHITECTURE.md",
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md"
|
||
],
|
||
"compatibleResolution": "复现 playDuration<=0 文案可关闭但 isCanClose 尚为 false;按既有 demo 规则修复,验证全屏按钮和外部退出状态,保留 CSS/DOM 钩子。",
|
||
"closureCriteria": "零/正/不可跳阈值、真实点击、倒计时/详情/静音/全屏与外部状态组合均有回归。",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/ads-ui-visibility-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-ADS-05-browser.md",
|
||
"refactor/baselines/ads-lifecycle-validation.json",
|
||
"test/browser/ads-ui.spec.js",
|
||
"refactor/scripts/ads-native-visibility.mjs",
|
||
"test/ads-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "零/正/不可关闭阈值及错误输入由现有Node/媒体回归保持;main/legacy分别27项真实原生全屏(初始/外部退出/按钮)、静音、详情popup和窄屏翻译控件通过。截图已查看;手机设备策略仍由05媒体门槛承接。"
|
||
},
|
||
{
|
||
"id": "VAST-CONTEXT-01",
|
||
"title": "Published VAST callback aliases and eager Player differ from the unpublished lazy workspace",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VAST-02",
|
||
"PKG-VAST-03",
|
||
"PKG-VAST-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vast-contract.md",
|
||
"refactor/baselines/vast-release.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-01-contract.md",
|
||
"refactor/baselines/vast-contract-validation.json",
|
||
"refactor/vast-compatibility-decision.md"
|
||
],
|
||
"compatibleResolution": "Restore published id/$container access and reconcile eager non-null Player with lazy workspace usage using explicit consumer evidence.",
|
||
"closureCriteria": "Published and workspace consumer fixtures cover all callback fields and initialization timing; any irreconcilable behavior has a concrete decision rather than implicit waiver."
|
||
},
|
||
{
|
||
"id": "VAST-TYPE-01",
|
||
"title": "VAST declares an async factory as synchronous and imports an unavailable SDK type dependency",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VAST-04",
|
||
"PKG-VAST-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vast-contract.md",
|
||
"refactor/baselines/vast-release.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-01-contract.md",
|
||
"refactor/baselines/vast-contract-validation.json",
|
||
"refactor/baselines/vast-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-03-lifecycle.md"
|
||
],
|
||
"compatibleResolution": "Provide accurate Promise/context/IMA types and a self-contained installed declaration chain while checking legacy export= and consumers.",
|
||
"closureCriteria": "Strict isolated package consumers pass without skipLibCheck; synchronous Result inference differences are reproduced and resolved or separately approved. Ads approval does not apply.",
|
||
"workspaceState": "Direct @alugha/ima2.1.0 removes the two TS2307 diagnostics in TS5.9.3 and4.3.5; public synchronous Result mismatch and isolated packaged declaration validation remain04/06."
|
||
},
|
||
{
|
||
"id": "VAST-LIFE-01",
|
||
"title": "VAST SDK and container lack core destruction ownership and pending work cancellation",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VAST-02",
|
||
"PKG-VAST-03",
|
||
"PKG-VAST-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vast-contract.md",
|
||
"refactor/baselines/vast-release.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-01-contract.md",
|
||
"refactor/baselines/vast-contract-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-02-tests.md",
|
||
"refactor/baselines/vast-behavior-validation.json",
|
||
"refactor/baselines/vast-core.json",
|
||
"refactor/vast-validation.md",
|
||
"refactor/baselines/vast-lifecycle-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-03-lifecycle.md"
|
||
],
|
||
"compatibleResolution": "Reproduce pending SDK/callback destruction, errors, duplicate IDs and stale ad events before adding compatible cleanup and state ownership.",
|
||
"closureCriteria": "Tests prove cleanup during load/callback rejection/core destruction and distinguish explicit plugin recreation from terminal core destruction; vendor media restoration is separately verified.",
|
||
"workspaceState": "45 Node tests include 16 frozen historical observations across 10 lifecycle/error categories. Real browser core destruction plus late SDK resolution leaves a newly allocated recorder in the detached player across 5.1.7/5.4.1/candidate. Google IMA allocation itself is not simulated as evidence; exact wrapper SDK boundary is controlled. All production fixes remain PKG-VAST-03 work. PKG-VAST-03 checkpoint: 15 candidate lifecycle assertions fail on frozen workspace and pass after TS ownership changes; 117 real browser wrapper checks pass with controlled SDK. Risk stays open pending full compatibility and actual vendor acceptance."
|
||
},
|
||
{
|
||
"id": "VAST-DIST-01",
|
||
"title": "Published VAST CommonJS default namespace differs from the current callable distribution",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VAST-04",
|
||
"PKG-VAST-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vast-contract.md",
|
||
"refactor/baselines/vast-release.json",
|
||
"refactor/changes/2026-09-12-PKG-VAST-01-contract.md",
|
||
"refactor/baselines/vast-contract-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve require(pkg).default alongside callable factory, script global and current ESM/legacy paths.",
|
||
"closureCriteria": "Real packed main/legacy/ESM, historical deep imports, export= consumers and local demo/editor all pass with immutable published comparisons."
|
||
},
|
||
{
|
||
"id": "AMBILIGHT-LIFE-01",
|
||
"title": "Ambilight sampling and RAF/DOM ownership lack terminal/error handling",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-AMBILIGHT-02",
|
||
"PKG-AMBILIGHT-03",
|
||
"PKG-AMBILIGHT-05"
|
||
],
|
||
"compatibleResolution": "Reproduce errors, zero sizes, RAF id zero, escaped methods and destroy before adding plugin-local ownership without changing stop semantics.",
|
||
"closureCriteria": "Published failures reproduced, candidate cleanup and real canvas/media/source-switch checks pass.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/ambilight-contract.md",
|
||
"refactor/baselines/ambilight-release.json",
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-02-tests.md",
|
||
"refactor/baselines/ambilight-behavior-validation.json",
|
||
"refactor/ambilight-validation.md",
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-03-lifecycle.md",
|
||
"refactor/baselines/ambilight-lifecycle-validation.json"
|
||
],
|
||
"workspaceState": "Candidate source split into four strict TS modules. RAF zero, terminal cleanup, rollback and reentrant frames repaired; 16 candidate tests pass (14 fail against frozen source). Eighteen native video/canvas tests pass across three cores and three engines after reproducing Firefox width-reset taint and replacing failed canvas. Risk remains open for proxy lifecycle/capability checks in PKG-AMBILIGHT-05; do not extend native video evidence to proxies."
|
||
},
|
||
{
|
||
"id": "AMBILIGHT-TYPE-01",
|
||
"title": "Ambilight declarations disagree with optional factory argument and differ across published generations",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-AMBILIGHT-04",
|
||
"PKG-AMBILIGHT-06"
|
||
],
|
||
"compatibleResolution": "Preserve legal old/new calls and ignored zIndex, validate export= and default consumers without narrowing inferred options.",
|
||
"closureCriteria": "Installed old/current compiler consumers and documented historical limitations verified.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/ambilight-contract.md",
|
||
"refactor/baselines/ambilight-release.json",
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-01-contract.md"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-04-types.md",
|
||
"refactor/baselines/ambilight-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Packed candidate passes seven old/current compiler configurations, including no-interop default imports; optional factory overload preserves published 1.1.0 Parameters input. Both exact published declarations and prior 1.0.0-to-1.1.0 field optionality difference are verified. Candidate corrects the actual 1.1.0 NodeNext ESM failure; this is not full device or distribution acceptance."
|
||
},
|
||
{
|
||
"id": "AMBILIGHT-DIST-01",
|
||
"title": "Ambilight 1.0.0 CommonJS default namespace differs from callable 1.1.0",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-AMBILIGHT-04",
|
||
"PKG-AMBILIGHT-06"
|
||
],
|
||
"compatibleResolution": "Keep callable factory with compatible self default alias.",
|
||
"closureCriteria": "Packed root/legacy/global/ESM and old namespace consumers pass.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/ambilight-contract.md",
|
||
"refactor/baselines/ambilight-release.json",
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-01-contract.md"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-04-types.md",
|
||
"refactor/baselines/ambilight-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Actual production and installed root/legacy callable factories have self default identity, native ESM default is callable and script globals match. Public default/import= consumers pass. Broader deep-import/demo/package-browser review remains task 06."
|
||
},
|
||
{
|
||
"id": "AMBILIGHT-PROXY-01",
|
||
"title": "Canvas proxy output pixels differ from forwarded video dimensions",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AMBILIGHT-PROXY-01",
|
||
"PKG-AMBILIGHT-05"
|
||
],
|
||
"compatibleResolution": "Sample Canvas width/height while native video retains intrinsic videoWidth/videoHeight; preserve public calls and lifecycle.",
|
||
"closureCriteria": "Node resize/zero-size/normal-video and actual supported-core canvas palette comparisons pass across three engines.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
|
||
"refactor/baselines/ambilight-proxy-validation.json"
|
||
],
|
||
"resolutionRationale": "Node output resize/zero-size and normal video tests pass; actual 5.4.0/candidate canvas proxy nine-color regions pass across three engines. Actual 5.1.7 lacks proxy option and is recorded as a native capability observation, not a canvas pass. Proxy-owned lifecycle and final device acceptance remain tasks CANVAS and AMBILIGHT-05."
|
||
},
|
||
{
|
||
"id": "CANVAS-LIFE-01",
|
||
"title": "Canvas proxy pending draw, bitmap and delayed subscriptions lack terminal ownership",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-CANVAS-02",
|
||
"PKG-CANVAS-03",
|
||
"PKG-CANVAS-05"
|
||
],
|
||
"compatibleResolution": "Reproduce pending bitmap completion and rollback/late subscription before adding explicit draw scheduling and resource ownership.",
|
||
"closureCriteria": "Historical failures reproduced and candidate terminal/error/bitmap/real media lifecycle verified.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/canvas-contract.md",
|
||
"refactor/baselines/canvas-release.json",
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-02-tests.md",
|
||
"refactor/baselines/canvas-behavior-validation.json"
|
||
],
|
||
"workspaceState": "24 candidate assertions show historical 20 failures/4 normal controls and all pass after ownership changes. Final native 18 proxy cases across actual npm core 5.4.0/candidate and three engines verify media/source/pause/seek/callback destruction and escaped-method termination. Full device and public declaration/distribution acceptance remains tasks 04-06.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-03-lifecycle.md",
|
||
"refactor/baselines/canvas-lifecycle-validation.json"
|
||
],
|
||
"resolutionRationale": "24 candidate assertions show historical 20 failures/4 normal controls and all pass after ownership changes. Final native 18 proxy cases across actual npm core 5.4.0/candidate and three engines verify media/source/pause/seek/callback destruction and escaped-method termination. Full device and public declaration/distribution acceptance remains tasks 04-06."
|
||
},
|
||
{
|
||
"id": "CANVAS-TYPE-01",
|
||
"title": "Canvas proxy declarations change required callback across generations and omit forwarded media capabilities",
|
||
"confirmation": "source-observed",
|
||
"owners": [
|
||
"PKG-CANVAS-04",
|
||
"PKG-CANVAS-06"
|
||
],
|
||
"compatibleResolution": "Keep optional current callback inference and actual canvas return while validating historical consumers and any additive media surface types.",
|
||
"closureCriteria": "Strict old/current compiler consumers and installed callback/result/import variants verified without new inference narrowing.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/canvas-contract.md",
|
||
"refactor/baselines/canvas-release.json",
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-01-contract.md"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-04-types.md",
|
||
"refactor/baselines/canvas-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Packed candidate compiles in seven old/current compiler configurations; Parameters stays optional and ReturnType stays exactly HTMLCanvasElement, including assigning an ordinary Canvas. Additive MediaCanvas is explicit opt-in. Eleven invalid uses are rejected in every candidate mode; exact archived declarations retain the pre-existing 1.0.0 required to 1.1.0 optional distinction. Candidate also corrects the recorded published 1.1.0 NodeNext ESM failure.",
|
||
"workspaceState": "Packed candidate compiles in seven old/current compiler configurations; Parameters stays optional and ReturnType stays exactly HTMLCanvasElement, including assigning an ordinary Canvas. Additive MediaCanvas is explicit opt-in. Eleven invalid uses are rejected in every candidate mode; exact archived declarations retain the pre-existing 1.0.0 required to 1.1.0 optional distinction. Candidate also corrects the recorded published 1.1.0 NodeNext ESM failure."
|
||
},
|
||
{
|
||
"id": "CANVAS-DIST-01",
|
||
"title": "Canvas proxy published CommonJS namespace differs from current callable export",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-CANVAS-04",
|
||
"PKG-CANVAS-06"
|
||
],
|
||
"compatibleResolution": "Preserve both require.default and callable factory with actual global, legacy and ESM paths.",
|
||
"closureCriteria": "Packed runtime/type and real local demo/editor consumers pass.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/canvas-contract.md",
|
||
"refactor/baselines/canvas-release.json",
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-01-contract.md"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-04-types.md",
|
||
"refactor/baselines/canvas-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Production main/legacy/browser global and ESM plus real isolated installed root/legacy imports retain callable factory and self default identities. Seven installed type consumer modes validate the correct declaration wrapper including no-interop. Full deep paths/content/demo and device checks remain tasks 05/06.",
|
||
"workspaceState": "Production main/legacy/browser global and ESM plus real isolated installed root/legacy imports retain callable factory and self default identities. Seven installed type consumer modes validate the correct declaration wrapper including no-interop. Full deep paths/content/demo and device checks remain tasks 05/06."
|
||
},
|
||
{
|
||
"id": "CANVAS-PIXEL-01",
|
||
"title": "Historical Canvas proxy produces transparent frames with detached native video in tested WebKit",
|
||
"status": "resolved",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-CANVAS-03",
|
||
"PKG-CANVAS-05"
|
||
],
|
||
"compatibleResolution": "Verify actual pixel recovery with explicit backing media ownership and stable public canvas surface; do not infer that attaching after playback fixes it.",
|
||
"closureCriteria": "Candidate native proxy pixels, pause/seek/source switch and terminal cleanup pass all three engines; device limitations remain explicit.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-02-tests.md",
|
||
"refactor/baselines/canvas-behavior-validation.json"
|
||
],
|
||
"workspaceState": "Final native pixel cases verify original 320x180 media dimensions, multiple colors, alpha255, resize and source replacement across two cores and three engines. Backing video is mounted before play at intrinsic CSS size. Diagnostic zero-count and 1px regressions are preserved; this resolves the recorded Windows Playwright defect, not all Safari/mobile device validation.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-CANVAS-03-lifecycle.md",
|
||
"refactor/baselines/canvas-lifecycle-validation.json"
|
||
],
|
||
"resolutionRationale": "Final native pixel cases verify original 320x180 media dimensions, multiple colors, alpha255, resize and source replacement across two cores and three engines. Backing video is mounted before play at intrinsic CSS size. Diagnostic zero-count and 1px regressions are preserved; this resolves the recorded Windows Playwright defect, not all Safari/mobile device validation."
|
||
},
|
||
{
|
||
"id": "DPIP-PACK-01",
|
||
"title": "Published Document PiP 1.0.0 tarball omits every declared runtime entry",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-06"
|
||
],
|
||
"compatibleResolution": "Keep the immutable broken archive as a negative case; verify complete candidate tarball and document the historical version boundary.",
|
||
"closureCriteria": "Candidate archive and real runtime entries verified; missing 1.0.0 runtime is documented rather than replaced or claimed fixed in place.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/dpip-release.json",
|
||
"refactor/baselines/dpip-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-01-contract.md"
|
||
]
|
||
},
|
||
{
|
||
"id": "DPIP-DIST-01",
|
||
"title": "Document PiP namespace.default in 1.0.1/1.0.2 differs from callable 1.1.0 export",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-04",
|
||
"PKG-DPIP-06"
|
||
],
|
||
"compatibleResolution": "Support old default namespace access and new callable factory without changing runtime names or entrypoints.",
|
||
"closureCriteria": "Actual candidate root/legacy/global/ESM and installed consumers verify both access shapes.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/dpip-release.json",
|
||
"refactor/baselines/dpip-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Actual main/legacy/global/ESM and real isolated installed root/legacy consumers verify direct callable and self default identities. Conditional declaration wrappers and old resolver legacy mapping are verified; full demo/archive and device scopes remain tasks05/06."
|
||
},
|
||
{
|
||
"id": "DPIP-TYPE-01",
|
||
"title": "Document PiP requires options and declares void actions and writable flags that differ from runtime",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-04"
|
||
],
|
||
"compatibleResolution": "Verify historical legal callers and extraction before providing precise async and readonly capabilities; do not reuse unrelated Ads approval.",
|
||
"closureCriteria": "Old/current consumer matrix and runtime/type distinctions are verified and documented without silently narrowing historical consumers.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/dpip-release.json",
|
||
"refactor/baselines/dpip-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Exact required default factory signature and direct/extracted Result remain assignable, including whole-factory replacements. Named AsyncResult and RuntimeFactory describe unmodified runtime values explicitly. Historical import= module.default access is preserved by CJS declarations; source checks its precise result."
|
||
},
|
||
{
|
||
"id": "DPIP-LIFE-01",
|
||
"title": "Document PiP has no separate ownership for pending window requests and delayed post-transition callbacks",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-02",
|
||
"PKG-DPIP-03",
|
||
"PKG-DPIP-05"
|
||
],
|
||
"compatibleResolution": "Reproduce overlapping open/close/destroy and retained controls/listeners before implementing terminal state and resource ownership.",
|
||
"closureCriteria": "Historical races reproduced; candidate late windows and delayed effects cannot revive disposed players, with native lifecycle validation.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/dpip-release.json",
|
||
"refactor/baselines/dpip-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-02-tests.md",
|
||
"refactor/baselines/dpip-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-03-lifecycle.md",
|
||
"refactor/baselines/dpip-lifecycle-validation.json"
|
||
],
|
||
"workspaceState": "Six strict TS modules with candidate fixes for pending requests, terminal effects, partial rollback and style ownership. Candidate versus frozen tests preserve historical failures. Native Document PiP/proxy/device evidence remains task05; current iframe coverage controls the window API."
|
||
},
|
||
{
|
||
"id": "DPIP-DOM-01",
|
||
"title": "Document PiP copies global-document styles and retains original parent without transactional rollback",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-02",
|
||
"PKG-DPIP-03",
|
||
"PKG-DPIP-05"
|
||
],
|
||
"compatibleResolution": "Reproduce adoption/style/restore errors and foreign ownerDocument cases, then implement explicit document and rollback ownership.",
|
||
"closureCriteria": "Candidate failures restore node identity, order, document bindings and styles with native window/proxy evidence.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/dpip-release.json",
|
||
"refactor/baselines/dpip-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-02-tests.md",
|
||
"refactor/baselines/dpip-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-03-lifecycle.md",
|
||
"refactor/baselines/dpip-lifecycle-validation.json"
|
||
],
|
||
"workspaceState": "Six strict TS modules with candidate fixes for pending requests, terminal effects, partial rollback and style ownership. Candidate versus frozen tests preserve historical failures. Native Document PiP/proxy/device evidence remains task05; current iframe coverage controls the window API."
|
||
},
|
||
{
|
||
"id": "DPIP-STYLE-01",
|
||
"title": "Document PiP 1.1.0 and frozen source duplicate style IDs when evaluated before DOMContentLoaded",
|
||
"owners": [
|
||
"PKG-DPIP-03"
|
||
],
|
||
"compatibleResolution": "Preserve the style id and injection timing while deduplicating at insertion and releasing loading listeners.",
|
||
"closureCriteria": "Historical two-node versus Parcel cached one-node difference stays explicit; candidate has one final style node under duplicate evaluation.",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-02-tests.md",
|
||
"refactor/baselines/dpip-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-03-lifecycle.md",
|
||
"refactor/baselines/dpip-lifecycle-validation.json"
|
||
],
|
||
"workspaceState": "Six strict TS modules with candidate fixes for pending requests, terminal effects, partial rollback and style ownership. Candidate versus frozen tests preserve historical failures. Native Document PiP/proxy/device evidence remains task05; current iframe coverage controls the window API.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-03-lifecycle.md",
|
||
"refactor/baselines/dpip-lifecycle-validation.json"
|
||
],
|
||
"resolutionRationale": "Candidate and frozen-source comparison verifies one style node and zero retained DOMContentLoaded listeners after duplicate evaluation. Insertion rechecks the shared id; reentrant style insertion cleanup is covered separately. Native window acceptance is unrelated and remains task05."
|
||
},
|
||
{
|
||
"id": "DPIP-MEDIA-01",
|
||
"title": "WebKit reports styled width640 for width320 media in the controlled Document PiP iframe matrix",
|
||
"owners": [
|
||
"PKG-DPIP-05"
|
||
],
|
||
"compatibleResolution": "Use independent native media controls to determine the dimension behavior and verify real Document PiP playback and proxy dimensions.",
|
||
"closureCriteria": "Exact browser/version evidence distinguishes layout-driven reports from intrinsic pixels and validates native media continuity; do not treat controlled iframe success as native PiP acceptance.",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-02-tests.md",
|
||
"refactor/baselines/dpip-behavior-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "DPIP-RESOLVE-01",
|
||
"title": "Historical Document PiP exports hide declarations or infer an uncallable CommonJS namespace in modern resolution",
|
||
"status": "resolved",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-DPIP-04",
|
||
"PKG-DPIP-06"
|
||
],
|
||
"compatibleResolution": "Use format-specific declaration wrappers and explicit types conditions while preserving old resolver paths and exact historical negative controls.",
|
||
"closureCriteria": "All candidate installed modes compile with exact invalid-use rejection; each historical missing type/default namespace failure stays recorded by version and mode.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/dpip-types-validation.json"
|
||
],
|
||
"resolutionRationale": "27 isolated installed modes preserve eight exact historical failure cases; all seven candidate modes and twelve historical modes are zero-diagnostic. Published1.0.0 runtime absence is retained separately, not fixed in place."
|
||
},
|
||
{
|
||
"id": "FACTORY-TYPE-01",
|
||
"title": "Canvas and Ambilight default self property narrows assignability of historical factory replacements",
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-FACTORY-01"
|
||
],
|
||
"compatibleResolution": "Preserve historical complete factory assignments while modeling actual export variants explicitly; do not equate unchanged Parameters with complete callable compatibility. The 72-case proposal matrix demonstrates that required or optional self.default and pure export-default/export-equals shapes each preserve different historical consumers; the proposed latest-release type baseline is awaiting explicit user acceptance.",
|
||
"closureCriteria": "Both historical and candidate replacement fixtures, all supported export/declaration paths and installed consumers verified; unresolved variant conflicts require an explicit decision rather than silent narrowing.",
|
||
"evidence": [
|
||
"refactor/baselines/factory-assignment-gaps.json",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-04-types.md",
|
||
"refactor/baselines/factory-compatibility-proposals.json",
|
||
"refactor/factory-compatibility-decision.md"
|
||
]
|
||
},
|
||
{
|
||
"id": "MB-LICENSE-01",
|
||
"title": "Historical MediaBunny proxy bundles embed SDK code without MPL notice markers or separate license/source provenance",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-MB-10"
|
||
],
|
||
"compatibleResolution": "Inventory the actual candidate bundle modules, preserve relevant license/notice text and corresponding source availability; never infer embedded historical SDK version from the current lock.",
|
||
"closureCriteria": "Final candidate archive includes verified dependency license/notice and source provenance, with historical unknowns documented; no root-MIT substitution.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/mb-release.json",
|
||
"refactor/baselines/mb-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-01-contract.md"
|
||
]
|
||
},
|
||
{
|
||
"id": "MB-LIFE-01",
|
||
"title": "MediaBunny load, track replacement, timeout, RAF and audio callbacks lack one shared terminal owner",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-MB-02",
|
||
"PKG-MB-03",
|
||
"PKG-MB-04",
|
||
"PKG-MB-05",
|
||
"PKG-MB-06",
|
||
"PKG-MB-07",
|
||
"PKG-MB-09"
|
||
],
|
||
"compatibleResolution": "Reproduce pending operations and destroy/source-switch races before migrating each owner; preserve public event and promise behavior while preventing stale resource use. MB-02 now reproduces late load rejection and uncancelled waiting/loadstart timers after destroy in all three historical implementations using a controlled host. Other interleavings and full-core native behavior are not yet verified. Expanded MB-02 baseline reproduces play-after-pause/destroy, rejected-play false state, seek-after-destroy and retained successful-load timeout timers in all three actual historical implementations; Range and active-timeout normal controls remain separate. MB-03 candidate owns pending Input before track selection and cancels load/HEAD/timers on source replacement, timeout and destroy; source/main/legacy regressions pass. Pending play/seek, late decoder work and full readiness coordination remain MB-04/05/06, so this risk stays open. MB-04 shim checkpoint fixes synthetic RAF retention and terminal event-listener cleanup, including engine cleanup exceptions. Closing the event bridge does not prove pending engine operations stopped; coordination remains in progress. MB-04 now guards play/seek/replacement completion, preserves explicit pause, observes stale failures and isolates reentrant event sequences. Decoder-internal late frames/audio and HLS UI races remain MB-05/06/07; risk stays open. MB-05 migrates VideoEngine and owns iterators, late first/second seek frames, pending reads, per-instance RAF and poster callbacks; same native race assertions fail on old main and pass on candidate. Independent CanvasSink pools also prevent multiple obsolete seek samples from overwriting queued current-frame pixels. Audio nodes, long-run AV sync and HLS UI topology remain MB-06/07/09. MB-06 migrates AudioEngine into six checked modules, owns context/gain/nodes/iterators and removable cancellation waits, preserves clock and gain formulas, and invalidates pending resume/decoding across pause/source/destroy. Same old main fails 29 of 37 audio assertions and four native pause-cleanup cases; candidate passes with short native 1x/2x AV-clock samples. Long-run AV sync, full combinations and HLS UI topology remain MB-07/09, so risk stays open. MB-07 migrates HLS UI to four checked modules, guards stale refresh/selection callbacks, cleans each surface and owns terminal listeners. Quality/audio queries share a latest-intent token and retry pairing against changed media snapshots. Forty-three old-main assertions yield 11 pass/32 fail; sixteen old native UI/query cases fail and twenty candidate native cases pass across old/new cores. Long-run AV sync and full combinations remain MB-09; capability/type/package gates remain MB-08/10. MB-09 checkpoints add 24 actual native Document PiP playback/lifecycle cases with visible openers and four native old/new-core sustained HLS cases, each at least 195 wall seconds across 1x/2x, seek, quality and audio. Maximum sampled frame/audio-clock delta is 51.34ms; active nodes peak at 64 and all approximately 13.7k created nodes per case disconnect on teardown, with iterators/queues empty. This does not close background behavior, complete plugin combinations, physical-device capability, acoustic synchronization or hour-scale validation.",
|
||
"closureCriteria": "Historical failing interleavings and candidate cancellation/cleanup pass with real media and event evidence, including long playback and track topology.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/mb-release.json",
|
||
"refactor/baselines/mb-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-02-checkpoint.md",
|
||
"refactor/baselines/mb-media-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-02-baseline.md",
|
||
"refactor/baselines/mb-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-03-input.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-04-shim-checkpoint.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-04-coordination.md",
|
||
"refactor/baselines/mb-coordination-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-05-video.md",
|
||
"refactor/baselines/mb-video-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-06-audio.md",
|
||
"refactor/baselines/mb-audio-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-07-hls.md",
|
||
"refactor/baselines/mb-hls-validation.json",
|
||
"refactor/baselines/mb-native-pip-checkpoint.json",
|
||
"refactor/baselines/mb-sustained-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "MB-TYPE-01",
|
||
"title": "MediaBunny proxy declares only Canvas while exposing a shim and changes CommonJS export generation between releases",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-MB-08",
|
||
"PKG-MB-10"
|
||
],
|
||
"compatibleResolution": "Preserved exact optional whole-factory and HTMLCanvasElement result; real VideoShim implements opt-in media/Player/HLS/synthetic-frame types without modern SDK declarations leaking to older compilers. Conditional ESM declarations and classic legacy resolution work. Runtime supports both historical default namespace and callable use without a required default property narrowing factory replacement. Final isolated installs of two frozen releases and candidate pass 17 compiler/runtime cases; seven candidate modes each reject fifteen invalid uses and check bidirectional assignments against actual frozen declaration bytes. Complete distribution/license/device gates remain separate.",
|
||
"closureCriteria": "Actual installed old/candidate compiler and runtime export matrices pass with negative controls; any incompatible declaration generation requires an explicit decision.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/mb-release.json",
|
||
"refactor/baselines/mb-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-01-contract.md",
|
||
"refactor/changes/2026-09-12-PKG-MB-08-entry-checkpoint.md",
|
||
"refactor/baselines/mb-entry-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-08-capability.md",
|
||
"refactor/baselines/mb-capability-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-MB-08-capability.md",
|
||
"refactor/baselines/mb-capability-validation.json"
|
||
],
|
||
"resolutionRationale": "Preserved exact optional whole-factory and HTMLCanvasElement result; real VideoShim implements opt-in media/Player/HLS/synthetic-frame types without modern SDK declarations leaking to older compilers. Conditional ESM declarations and classic legacy resolution work. Runtime supports both historical default namespace and callable use without a required default property narrowing factory replacement. Final isolated installs of two frozen releases and candidate pass 17 compiler/runtime cases; seven candidate modes each reject fifteen invalid uses and check bidirectional assignments against actual frozen declaration bytes. Complete distribution/license/device gates remain separate."
|
||
},
|
||
{
|
||
"id": "MB-CAP-01",
|
||
"title": "Current Windows WebKit lacks WebCodecs and Web Audio constructors needed by historical MediaBunny proxies",
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-MB-02",
|
||
"PKG-MB-09"
|
||
],
|
||
"compatibleResolution": "Keep exact capability negative controls and validate usable browsers/codecs separately; improve unsupported-capability reporting during migration without fabricating decoder support.",
|
||
"closureCriteria": "Per-browser native media/support matrix and predictable unsupported-capability behavior verified, including target Safari evidence where support is claimed.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-MB-02-checkpoint.md",
|
||
"refactor/baselines/mb-media-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-02-baseline.md",
|
||
"refactor/baselines/mb-behavior-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "MB-READY-01",
|
||
"title": "MediaBunny historical readiness can repeat for trackless input and occur after capability errors",
|
||
"status": "resolved",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-MB-04",
|
||
"PKG-MB-09"
|
||
],
|
||
"compatibleResolution": "Coordinated metadata publishes once, trackless input rejects before decoder setup, and stale callbacks cannot publish. MB-08 additionally rejects existing but wholly undecodable tracks before metadata/data/canplay and before replacement success, preserving one usable audio/video track, SDK query errors and late-operation cancellation. Sixteen controlled Node cases and thirty added browser cases distinguish twelve controlled rejection cases, eight native partial-decoder playback cases and ten missing-API controls; the final 150-case media suite passes. Physical Safari/support-range work remains MB-CAP-01 rather than being claimed from these controls.",
|
||
"closureCriteria": "Candidate metadata/data/canplay ordering and counts pass normal, absent-track and failure interleavings in native browsers and controlled race tests.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-MB-02-baseline.md",
|
||
"refactor/baselines/mb-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-04-coordination.md",
|
||
"refactor/baselines/mb-coordination-validation.json",
|
||
"refactor/baselines/mb-entry-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-MB-08-capability.md",
|
||
"refactor/baselines/mb-capability-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-12-PKG-MB-08-capability.md",
|
||
"refactor/baselines/mb-capability-validation.json"
|
||
],
|
||
"resolutionRationale": "Coordinated metadata publishes once, trackless input rejects before decoder setup, and stale callbacks cannot publish. MB-08 additionally rejects existing but wholly undecodable tracks before metadata/data/canplay and before replacement success, preserving one usable audio/video track, SDK query errors and late-operation cancellation. Sixteen controlled Node cases and thirty added browser cases distinguish twelve controlled rejection cases, eight native partial-decoder playback cases and ten missing-API controls; the final 150-case media suite passes. Physical Safari/support-range work remains MB-CAP-01 rather than being claimed from these controls."
|
||
},
|
||
{
|
||
"id": "DPIP-DISPLAY-01",
|
||
"title": "Web fullscreen body placement reclaims a player adopted into another document",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-22",
|
||
"PKG-DPIP-05"
|
||
],
|
||
"compatibleResolution": "Select the player current ownerDocument body for FULLSCREEN_WEB_IN_BODY while preserving the existing entry snapshot, focus restoration and public event order.",
|
||
"closureCriteria": "Native Document PiP candidate video/Canvas/MediaBunny keep body placement in the popup, repeated exit restores placement, and cross-document iframe/focus plus existing display/input regressions pass on rebuilt core artifacts.",
|
||
"evidence": [
|
||
"refactor/changes/2026-09-12-PKG-DPIP-05-native-checkpoint.md",
|
||
"test/browser/dpip-native.spec.js",
|
||
"test/browser/display-web.spec.js"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/dpip-native-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-DPIP-05-native-checkpoint.md"
|
||
],
|
||
"resolutionRationale": "Original candidate native video reproduction moves the player into the wrong document and fails. Current ownerDocument body placement passes source 84, built main 219 and built legacy 84 related cases, including real native PiP video/Canvas/MediaBunny and iframe placement/focus. Reentry/failure/teardown and keyboard regressions retain their assertions. Full CI and import/SSR checks pass. Native Fullscreen API, background and device gates are separate and not waived."
|
||
},
|
||
{
|
||
"id": "IFRAME-LIFE-01",
|
||
"title": "Iframe timestamp IDs and unowned pending requests/timers lack terminal cleanup",
|
||
"owners": [
|
||
"PKG-IFRAME-02",
|
||
"PKG-IFRAME-03",
|
||
"PKG-IFRAME-05"
|
||
],
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"compatibleResolution": "Owned requests and ADR-026 document cancellation are implemented. Task 05 verifies actual desktop players/Monaco and source/main/legacy cached history plus stop/204/truncated-response recovery. Full Chromium proves native BFCache; Firefox/WebKit only prove reload controls. Keep open for physical devices, remaining cache engines and final release acceptance; legacy peers retain documented document-identity limits.",
|
||
"closureCriteria": "Old behavior and candidate fixes have deterministic race/resource tests plus actual iframe integration.",
|
||
"evidence": [
|
||
"refactor/baselines/iframe-contract.md",
|
||
"refactor/baselines/iframe-release.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-01-contract.md",
|
||
"refactor/baselines/iframe-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-02-behavior.md",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-03-requests-checkpoint.md",
|
||
"refactor/baselines/iframe-requests-checkpoint.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-03-boundaries-checkpoint.md",
|
||
"refactor/baselines/iframe-boundaries-checkpoint.json",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-03-navigation.md",
|
||
"refactor/baselines/iframe-navigation-validation.json",
|
||
"refactor/iframe-document-protocol.md",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-05-integration.md",
|
||
"refactor/baselines/iframe-integration-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-05-history.md",
|
||
"refactor/baselines/iframe-history-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "IFRAME-TRUST-01",
|
||
"title": "Iframe executable commit protocol accepts messages without source/origin validation",
|
||
"owners": [
|
||
"PKG-IFRAME-03",
|
||
"PKG-IFRAME-05"
|
||
],
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"compatibleResolution": "ADR-025 binds actual native peers; ADR-026 correlates negotiated documents. IFRAME-05 adds actual same/cross-origin media and editor evidence on three core versions, four bridge pairings and three desktop engines. This is not an origin allowlist or commit sandbox. Keep final acceptance and legacy/custom unmarked-message limits open.",
|
||
"closureCriteria": "Controlled and real same/cross-origin evidence plus an explicit documented compatibility decision and supported trust model.",
|
||
"evidence": [
|
||
"refactor/baselines/iframe-contract.md",
|
||
"refactor/baselines/iframe-release.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-01-contract.md",
|
||
"refactor/baselines/iframe-behavior-validation.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-02-behavior.md",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-03-boundaries-checkpoint.md",
|
||
"refactor/baselines/iframe-boundaries-checkpoint.json",
|
||
"refactor/iframe-message-boundary.md",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-03-navigation.md",
|
||
"refactor/baselines/iframe-navigation-validation.json",
|
||
"refactor/iframe-document-protocol.md",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-05-integration.md",
|
||
"refactor/baselines/iframe-integration-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-05-history.md",
|
||
"refactor/baselines/iframe-history-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "IFRAME-DIST-01",
|
||
"title": "Iframe tool name is unavailable at registry observation and old archive includes distinct helper exports",
|
||
"owners": [
|
||
"PKG-IFRAME-04",
|
||
"PKG-IFRAME-06"
|
||
],
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"compatibleResolution": "IFRAME-04 adds paired CJS/ESM declarations and verifies three actual isolated installs, including old namespace/helper and existing Function callback differences. Keep old package-name/helper facade, emitted-consumer runtime and final distribution gates with IFRAME-06; the time-scoped tool registry observation is not a release claim.",
|
||
"closureCriteria": "Actual installed entry/declaration tests and documented old-name/helper/new-tool distribution behavior; registry observation remains time scoped.",
|
||
"evidence": [
|
||
"refactor/baselines/iframe-contract.md",
|
||
"refactor/baselines/iframe-release.json",
|
||
"refactor/changes/2026-09-12-PKG-IFRAME-01-contract.md",
|
||
"refactor/changes/2026-09-13-PKG-IFRAME-04-types.md",
|
||
"refactor/baselines/iframe-types-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "THUMB-COMPAT-01",
|
||
"title": "Thumbnail recovered 3.5.31 and workspace 4.4.0 have conflicting height and event timing defaults",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-04",
|
||
"PKG-TOOL-THUMB-05"
|
||
],
|
||
"compatibleResolution": "Freeze both implementations and derive a concrete compatibility policy before changing defaults; no silent claim that identical calls have identical historical semantics.",
|
||
"closureCriteria": "Explicit documented compatibility decision, old/candidate tests and migration examples covering delay, height, input reset and readiness.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/thumbnail-contract.md",
|
||
"refactor/baselines/thumbnail-release.json",
|
||
"refactor/scripts/thumbnail-contract.test.mjs",
|
||
"refactor/baselines/thumbnail-behavior-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-02-behavior.md",
|
||
"test/thumbnail.test.js",
|
||
"test/browser/thumbnail-tool.spec.js",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-03-lifecycle.md",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-04-public-types.md"
|
||
],
|
||
"workspaceState": "Explicit user question pending: prefer published 3.5.31 defaults with opt-in 4.4 behavior, or accept the documented old-version differences and retain 4.4 defaults. No answer inferred; runtime unchanged."
|
||
},
|
||
{
|
||
"id": "THUMB-LIFE-01",
|
||
"title": "Thumbnail drop binding and repeated destroy fail; pending work and replacement resource ownership need repair",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-02",
|
||
"PKG-TOOL-THUMB-03",
|
||
"PKG-TOOL-THUMB-05"
|
||
],
|
||
"compatibleResolution": "03 splits input/sheet/source/extraction/lifecycle and fixes reproduced cancellation, Blob URL ownership, native errors, callback failure/reentrancy and decoder reset. Keep risk open for 04 strict types and 05 complete core/Safari integration; Windows WebKit Blob-unavailable controls do not prove extraction.",
|
||
"closureCriteria": "Deterministic old failure/candidate success for replacement, error and destruction plus real media/browser resource validation.",
|
||
"status": "open",
|
||
"evidence": [
|
||
"refactor/baselines/thumbnail-contract.md",
|
||
"refactor/baselines/thumbnail-release.json",
|
||
"refactor/scripts/thumbnail-contract.test.mjs",
|
||
"refactor/baselines/thumbnail-behavior-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-02-behavior.md",
|
||
"test/thumbnail.test.js",
|
||
"test/browser/thumbnail-tool.spec.js",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-03-input-checkpoint.md",
|
||
"packages/artplayer-tool-thumbnail/ARCHITECTURE.md",
|
||
"test/thumbnail-input.test.js",
|
||
"test/browser/thumbnail-input.spec.js",
|
||
"refactor/baselines/thumbnail-input-checkpoint.json",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-03-lifecycle.md",
|
||
"test/thumbnail-lifecycle.test.js",
|
||
"refactor/baselines/thumbnail-lifecycle-validation.json"
|
||
]
|
||
},
|
||
{
|
||
"id": "THUMB-PROVENANCE-01",
|
||
"title": "Thumbnail local emitter attribution and historical distribution completeness remain unverified",
|
||
"confirmation": "source-observed",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-04",
|
||
"PKG-TOOL-THUMB-06"
|
||
],
|
||
"compatibleResolution": "Historical release declares tiny-emitter; review local emitter provenance/license before TS migration. Keep recovered individual CDN files distinct from full npm archive evidence.",
|
||
"closureCriteria": "Reviewed emitter attribution and license ledger plus explicit historical artifact recovery limits and complete candidate tarball evidence.",
|
||
"status": "resolved",
|
||
"evidence": [
|
||
"refactor/baselines/thumbnail-contract.md",
|
||
"refactor/baselines/thumbnail-release.json",
|
||
"refactor/scripts/thumbnail-contract.test.mjs",
|
||
"refactor/baselines/thumbnail-public-types-validation.json",
|
||
"refactor/baselines/thumbnail-emitter-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/thumbnail-public-types-validation.json",
|
||
"refactor/baselines/thumbnail-vendor/sources.json",
|
||
"packages/artplayer-tool-thumbnail/THIRD_PARTY_NOTICES",
|
||
"refactor/baselines/thumbnail-emitter-validation.json"
|
||
],
|
||
"resolutionRationale": "Fixed 2.1.0 upstream comparison and local adaptation reviewed; complete MIT notice verified in every standalone bundle and every byte of the actual installed candidate pack. Exact original copied revision and complete historical npm archive remain unknown and are explicitly bounded, not claimed recovered. Historical CSS/paths remain independently open under BASE-DIST-01.",
|
||
"workspaceState": "Current candidate source/bundle/packed attribution verified; repeat installed artifact verification when release contents change."
|
||
},
|
||
{
|
||
"id": "THUMB-MEDIA-01",
|
||
"title": "Windows WebKit native Blob URLs cannot load tested MP4 media despite successful HTTP controls",
|
||
"status": "open",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-05",
|
||
"PKG-TOOL-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/thumbnail-behavior-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-02-behavior.md",
|
||
"test/thumbnail.test.js",
|
||
"test/browser/thumbnail-tool.spec.js"
|
||
],
|
||
"compatibleResolution": "Preserve independent HTTP/Blob capability controls; obtain actual supported WebKit/Safari file extraction evidence before release acceptance. Do not count the 12 unavailable controls as successful thumbnail generation or silently replace local files with HTTP media.",
|
||
"closureCriteria": "Actual generated PNG/extraction and lifecycle proof in supported Safari/WebKit environments, or explicit supported-environment decision with migration documentation; Windows limitation stays identifiable."
|
||
},
|
||
{
|
||
"id": "VENDOR-09",
|
||
"title": "Thumbnail tiny-emitter 改写来源与最终分发许可",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-04",
|
||
"PKG-TOOL-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/thumbnail-vendor/sources.json",
|
||
"packages/artplayer-tool-thumbnail/src/emitter.ts",
|
||
"packages/artplayer-tool-thumbnail/THIRD_PARTY_NOTICES",
|
||
"test/thumbnail-vendor.test.js",
|
||
"refactor/baselines/thumbnail-public-types-validation.json",
|
||
"refactor/baselines/thumbnail-emitter-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve original attribution, typed local dispatch compatibility and complete MIT notice in source/package/standalone bundles.",
|
||
"closureCriteria": "Pinned upstream reference and local adaptation reviewed; all bundle and actual packed distribution notices verified. Do not claim the exact original copied revision or a recovered complete historical archive.",
|
||
"workspaceState": "Current candidate source/bundle/packed attribution verified; repeat installed artifact verification when release contents change.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/thumbnail-public-types-validation.json",
|
||
"refactor/baselines/thumbnail-vendor/sources.json",
|
||
"packages/artplayer-tool-thumbnail/THIRD_PARTY_NOTICES",
|
||
"refactor/baselines/thumbnail-emitter-validation.json"
|
||
],
|
||
"resolutionRationale": "Fixed 2.1.0 upstream comparison and local adaptation reviewed; complete MIT notice verified in every standalone bundle and every byte of the actual installed candidate pack. Exact original copied revision and complete historical npm archive remain unknown and are explicitly bounded, not claimed recovered. Historical CSS/paths remain independently open under BASE-DIST-01."
|
||
},
|
||
{
|
||
"id": "THUMB-EVENT-01",
|
||
"title": "Thumbnail 原型事件名与嵌套 once 派发缺陷",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-04"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnail-emitter.test.js",
|
||
"refactor/changes/2026-09-13-PKG-TOOL-THUMB-04-emitter.md",
|
||
"refactor/baselines/thumbnail-emitter-validation.json"
|
||
],
|
||
"compatibleResolution": "Use own event keys and preserve registry descriptors/prototype; consume each once registration before removal and invocation across nested snapshots.",
|
||
"closureCriteria": "Frozen failure/candidate success, ordinary event and lifecycle parity, all runtime formats and actual browser plus installed candidate evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/thumbnail-emitter-validation.json",
|
||
"test/thumbnail-emitter.test.js",
|
||
"test/browser/thumbnail-emitter.spec.js"
|
||
],
|
||
"resolutionRationale": "Frozen workspace reproduces five failures. Own-key/data-descriptor registry and once-per-registration consumption pass source/main/legacy, actual browser and installed candidate checks while ordinary snapshot/ctx/off/duplicate behavior remains tested."
|
||
}
|
||
]
|
||
}
|