mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 03:46:16 -08:00
6836 lines
421 KiB
JSON
6836 lines
421 KiB
JSON
{
|
||
"schemaVersion": 1,
|
||
"task": "BASE-07",
|
||
"sourceCommit": "e01f39ff",
|
||
"updatedAt": "2026-09-14T07:23:15.393Z",
|
||
"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",
|
||
"refactor/changes/2026-09-14-MOD-03-slider-updates.md",
|
||
"refactor/baselines/slider-updates-validation.json",
|
||
"refactor/changes/2026-09-14-MOD-03-performance-acceptance.md",
|
||
"refactor/baselines/core-performance-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. MOD-03 slider checkpoint: dynamic ARIA writes compare actual DOM before mutation. Main/legacy three paired groups per desktop engine pass operation/native-playback checks. Synthetic repeated-event timings include slower groups; main is 208943 raw / 58756 gzip9 / 53660 Brotli6, +10 gzip bytes from the immediate prechange artifact. Full installed BASE-06 pairing and remaining hotspots are still outstanding; this risk stays open. MOD-03 completion: native persistence (9 paired cases), installed layout/navigation (12 cases), Chromium first-frame CPU sampling, and fresh installed BASE-06 three-group comparisons are complete. Final formal candidate resource windows all pass; original 349ms harness failure and first Chromium destruction signal are retained. Size remains review-required. Storage caching was rejected to preserve independently parsed objects and synchronous interleaved settings. REVIEW-01 retains this open release review; completion of MOD-03 does not waive it."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/changes/2026-09-14-MOD-03-slider-updates.md",
|
||
"refactor/baselines/slider-updates-validation.json",
|
||
"refactor/changes/2026-09-14-MOD-03-performance-acceptance.md",
|
||
"refactor/baselines/core-performance-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. MOD-03 slider checkpoint: dynamic ARIA writes compare actual DOM before mutation. Main/legacy three paired groups per desktop engine pass operation/native-playback checks. Synthetic repeated-event timings include slower groups; main is 208943 raw / 58756 gzip9 / 53660 Brotli6, +10 gzip bytes from the immediate prechange artifact. Full installed BASE-06 pairing and remaining hotspots are still outstanding; this risk stays open. MOD-03 completion: native persistence (9 paired cases), installed layout/navigation (12 cases), Chromium first-frame CPU sampling, and fresh installed BASE-06 three-group comparisons are complete. Final formal candidate resource windows all pass; original 349ms harness failure and first Chromium destruction signal are retained. Size remains review-required. Storage caching was rejected to preserve independently parsed objects and synchronous interleaved settings. REVIEW-01 retains this open release review; completion of MOD-03 does not waive it."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/site-inventory.md"
|
||
],
|
||
"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",
|
||
"refactor/site-inventory.md"
|
||
],
|
||
"compatibleResolution": "区分站点部署和库 npm 发布;自身 next-major 要求保留。",
|
||
"closureCriteria": "发布流程显式列出站点处理方式,不机械将其当库发布。"
|
||
},
|
||
{
|
||
"id": "BASE-MEDIA-01",
|
||
"title": "示例媒体和字体的完整来源/授权链待核实",
|
||
"confirmation": "unverified",
|
||
"status": "open",
|
||
"owners": [
|
||
"BASE-08",
|
||
"SITE-01",
|
||
"EX-03",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/sample",
|
||
"docs/assets/jassub",
|
||
"refactor/site-inventory.md",
|
||
"refactor/baselines/site-provenance.json",
|
||
"refactor/changes/2026-09-15-SITE-07-font-notices.md",
|
||
"refactor/baselines/site-font-notices-provenance.json",
|
||
"refactor/baselines/site-font-notices-validation.json"
|
||
],
|
||
"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": "reproduced",
|
||
"status": "resolved",
|
||
"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,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-01-contract.md",
|
||
"refactor/baselines/multiple-subtitles-contract-validation.json",
|
||
"refactor/baselines/multiple-subtitles-vendor/sources.json",
|
||
"refactor/scripts/multiple-subtitles-vendor.mjs",
|
||
"test/multiple-subtitles-vendor.test.js",
|
||
"packages/artplayer-plugin-multiple-subtitles/THIRD_PARTY_NOTICES"
|
||
],
|
||
"resolutionRationale": "Pinned parser/license/manifest revision and exact normalized executable adaptation verified, including old shipped IIFE sources. Full CC0 dedication is present in actual packed package and all standalone bundle headers. Parser/serializer parity and plugin normal contracts pass. Historical acquisition commit remains unknown; pinned revision is the comparison reference. Device coverage remains in package tasks 05/06."
|
||
},
|
||
{
|
||
"id": "VENDOR-04",
|
||
"title": "jassub-code-and-workers 来源、版本与许可闭环",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-01",
|
||
"PKG-JASSUB-06"
|
||
],
|
||
"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",
|
||
"refactor/baselines/jassub-release.json",
|
||
"refactor/baselines/jassub-vendor.json",
|
||
"refactor/baselines/jassub-font-metadata.json",
|
||
"refactor/baselines/jassub-contract.md",
|
||
"refactor/baselines/jassub-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-JASSUB-01-baseline.md",
|
||
"refactor/baselines/jassub-provenance.json",
|
||
"refactor/baselines/jassub-provenance-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-01-provenance.md"
|
||
],
|
||
"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": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-01",
|
||
"SITE-01",
|
||
"PKG-JASSUB-06",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/jassub/default.woff2",
|
||
"docs/assets/jassub/fonts",
|
||
"refactor/baselines/jassub-release.json",
|
||
"refactor/baselines/jassub-vendor.json",
|
||
"refactor/baselines/jassub-font-metadata.json",
|
||
"refactor/baselines/jassub-contract.md",
|
||
"refactor/baselines/jassub-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-JASSUB-01-baseline.md",
|
||
"refactor/baselines/jassub-provenance.json",
|
||
"refactor/baselines/jassub-provenance-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-01-provenance.md",
|
||
"refactor/site-inventory.md",
|
||
"refactor/baselines/site-provenance.json",
|
||
"refactor/changes/2026-09-15-SITE-07-font-notices.md",
|
||
"refactor/baselines/site-font-notices-provenance.json",
|
||
"refactor/baselines/site-font-notices-validation.json"
|
||
],
|
||
"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": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"SITE-01",
|
||
"SITE-05",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/vs",
|
||
"refactor/site-inventory.md",
|
||
"refactor/baselines/site-provenance.json",
|
||
"refactor/changes/2026-09-14-SITE-07-vendor-notices.md",
|
||
"refactor/baselines/site-notices-checkpoint.json",
|
||
"scripts/site-vendor/manifest.json",
|
||
"refactor/baselines/site-codicons-provenance.json",
|
||
"refactor/baselines/site-codicons-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-codicons.md",
|
||
"refactor/baselines/monaco-typescript-provenance.json",
|
||
"refactor/baselines/monaco-typescript-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-typescript.md",
|
||
"scripts/site-vendor/monaco/typescript.ts",
|
||
"scripts/site-vendor/monaco/reproduce-typescript.ts",
|
||
"refactor/baselines/monaco-languages-provenance.json",
|
||
"refactor/baselines/monaco-languages-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-languages.md",
|
||
"scripts/site-vendor/monaco/languages.ts",
|
||
"scripts/site-vendor/monaco/reproduce-languages.ts",
|
||
"refactor/baselines/monaco-language-notices.json",
|
||
"refactor/baselines/monaco-language-notices-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-language-notices.md",
|
||
"scripts/site-vendor/monaco/notices.ts",
|
||
"refactor/baselines/monaco-modes-provenance.json",
|
||
"refactor/baselines/monaco-modes-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-modes.md",
|
||
"scripts/site-vendor/monaco/compiler.ts",
|
||
"scripts/site-vendor/monaco/reproduce-modes.ts",
|
||
"refactor/baselines/monaco-basic-provenance.json",
|
||
"refactor/baselines/monaco-basic-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-basic.md",
|
||
"refactor/baselines/monaco-core-origins-provenance.json",
|
||
"refactor/baselines/monaco-core-origins-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-core-origins.md",
|
||
"refactor/baselines/monaco-core-build-provenance.json",
|
||
"refactor/baselines/monaco-core-build-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-core-build.md",
|
||
"refactor/baselines/monaco-contributions-provenance.json",
|
||
"refactor/baselines/monaco-contributions-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-contributions.md",
|
||
"refactor/baselines/monaco-css-build-provenance.json",
|
||
"refactor/baselines/monaco-css-build-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-css.md",
|
||
"refactor/baselines/monaco-node-path-provenance.json",
|
||
"refactor/baselines/monaco-node-path-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-node-path.md",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-dom.md",
|
||
"refactor/baselines/monaco-dom-origins-provenance.json",
|
||
"refactor/baselines/monaco-dom-origins-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-monaco-unicode.md",
|
||
"refactor/baselines/monaco-unicode-provenance.json",
|
||
"refactor/baselines/monaco-unicode-validation.json"
|
||
],
|
||
"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,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"workspaceState": "Monaco 0.30.1 remains byte-pinned, including its known CSS newline-only difference. Codicons 0.0.26, TypeScript 4.4.4 and language-service licenses are delivered. Three service workers, four modes and 76 basic-language bundles reproduce exactly; all 13 core JS minified outputs reproduce with locked esbuild 0.12.6 on Windows x64. Loader/header and css/nls source origins match fixed Git; two maps inventory 584 prepared-source entries and 549 different names. DOMPurify 2.3.1 and marked 3.0.2 have exact source adaptations and complete notice supplements; 85 site notices were verified by HTTP/mobile browser checks. Latest contribution check verifies six archives and 102 Git members, emits 88 TS registration modules and uses RequireJS 2.3.6/Terser 5.9.0 to reproduce the entire dev/min editor assembly, including core string-table entry, dependency injection, order, alias and map trailer. Latest units 23/23, strict type/lint and offline/network source checks pass; modes/tokenizer regressions pass 6/6 across three engines with 2523 token cases per engine. Earlier ten-locale editing/find 30/30 and diff-worker 3/3 evidence remains recorded separately. CSS now reproduces from 68 styles, three embedded images and the copied font, with 81 verified Git members. The archived transport/plugin recipes match every prepared ESM stylesheet; explicit normalization of 70 generated CRLF separators reproduces the entire development CSS. cssnano 4.1.11/PostCSS 7.0.35 reproduce complete minified CSS using isolated frozen Yarn installs (153 selectors/143 versions) and historical browser defaults. The site retains its five header CRLF differences. The exact upstream stage that normalized the 70 development separators is still unidentified. Latest units 25/25, strict type/lint and offline/network checks pass; new three-engine style/theme/font/resize regressions pass 3/3. Original core TS compilation and remaining embedded-origin review stay open; this is not release approval or an exhaustive sanitizer audit. The Node path origin is now fixed to v14.16.0/bd60e93357a118204ea238d94e7a9e4209d93062 and the verified VS Code port. Its complete existing notice text matches both sources; a source supplement corrects the older index link without rewriting it. Six removed exports reproduce both source-map inputs; pinned TS 4.5.0-dev.20211021 emits exact full editor/worker modules. Thirty deterministic original Node path results pass in each browser engine, together with all 86 delivered notices and actual playback: 6/6 browser, 28/28 unit, type/lint, offline/network checks. Chromium retains one observed media ERR_ABORTED despite successful playback. Other embedded origins/full core compilation remain open. DOM helpers now bind six exact VS Code/source-map declarations and fixed WinJS4.4.5 comparison source/complete MIT terms to the unchanged editor; original adaptation version remains unknown, not inferred from that reference. Other origins and full original core compilation remain open. Unicode checkpoint reproduces RTL/Emoji predicates and all 5034 grapheme integers using mixed historical snapshots, matching both original maps and unchanged shipped editor/worker; complete historical Unicode terms and explicit source/version limitations are delivered. Other origins and full original core compilation remain open."
|
||
},
|
||
{
|
||
"id": "VENDOR-07",
|
||
"title": "vconsole 来源、版本与许可闭环",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-01",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/vconsole.min.js",
|
||
"refactor/site-inventory.md",
|
||
"refactor/baselines/site-provenance.json",
|
||
"refactor/changes/2026-09-14-SITE-07-vendor-notices.md",
|
||
"refactor/baselines/site-notices-checkpoint.json",
|
||
"scripts/site-vendor/manifest.json",
|
||
"refactor/baselines/vconsole-notices-provenance.json",
|
||
"refactor/baselines/vconsole-notices-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-vconsole-notices.md"
|
||
],
|
||
"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,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"workspaceState": "Fixed-commit sources and original lockfile reproduce npm vConsole 3.15.0 exactly. Untruncated module resources identify eight bundled package runtimes plus webpack bootstrap, whose complete original license texts now ship. The original incomplete LICENSE is preserved and the explicitly referenced MIT body is separately supplied and attributed. Three native browser mobile/log/play/destroy cases serve all notice bytes exactly; the previously fixed local lifecycle patch is unchanged. This closes this vConsole source/notice risk, not whole-site, device or release gates.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/vconsole-notices-provenance.json",
|
||
"refactor/baselines/vconsole-notices-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-vconsole-notices.md",
|
||
"scripts/site-vendor/manifest.json",
|
||
"scripts/site-vendor/vconsole/reproduce.ts"
|
||
],
|
||
"resolutionRationale": "Fixed-commit sources and original lockfile reproduce npm vConsole 3.15.0 exactly. Untruncated module resources identify eight bundled package runtimes plus webpack bootstrap, whose complete original license texts now ship. The original incomplete LICENSE is preserved and the explicitly referenced MIT body is separately supplied and attributed. Three native browser mobile/log/play/destroy cases serve all notice bytes exactly; the previously fixed local lifecycle patch is unchanged. This closes this vConsole source/notice risk, not whole-site, device or release gates."
|
||
},
|
||
{
|
||
"id": "VENDOR-08",
|
||
"title": "console-bundle 来源、版本与许可闭环",
|
||
"confirmation": "source-observed",
|
||
"status": "accepted-with-scope",
|
||
"owners": [
|
||
"SITE-01",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/third-party.json",
|
||
"docs/assets/js/console.js",
|
||
"refactor/site-inventory.md",
|
||
"refactor/baselines/site-provenance.json",
|
||
"refactor/console-modernization.md",
|
||
"refactor/baselines/site-console-inventory.json",
|
||
"refactor/baselines/site-console-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-baseline.md",
|
||
"test/browser/site-console.spec.js",
|
||
"refactor/baselines/console-feed-provenance.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-feed-source.md",
|
||
"scripts/site-vendor/console/provenance.ts",
|
||
"scripts/site-vendor/console/reproduce.ts",
|
||
"refactor/baselines/console-commonjs-provenance.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-commonjs.md",
|
||
"refactor/baselines/console-esm-provenance.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-esm.md",
|
||
"scripts/site-vendor/console/reconstruction.ts",
|
||
"refactor/baselines/console-embedded-notices.json",
|
||
"refactor/baselines/console-notices-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-notices.md",
|
||
"scripts/site-vendor/console/embedded-notices.ts",
|
||
"docs/THIRD_PARTY_NOTICES.md",
|
||
"refactor/baselines/console-embedded-sources.json",
|
||
"refactor/baselines/console-embedded-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-embedded-sources.md",
|
||
"scripts/site-vendor/console/embedded-sources.ts",
|
||
"refactor/baselines/console-derived-attribution.json",
|
||
"refactor/baselines/console-derived-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-derived-attribution.md",
|
||
"scripts/site-vendor/console/attribution.ts",
|
||
"refactor/baselines/console-stackoverflow-provenance.json",
|
||
"refactor/baselines/console-stackoverflow-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-stackoverflow.md",
|
||
"scripts/site-vendor/console/stackoverflow.ts",
|
||
"refactor/baselines/console-shallowequal-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-shallowequal.md",
|
||
"refactor/console-notice-review.md",
|
||
"refactor/baselines/console-notice-review-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-notice-review.md",
|
||
"scripts/site-vendor/console/notices.ts"
|
||
],
|
||
"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,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||
"workspaceState": "Current identified console source and notice scope is reviewed; 47 console notices, 65 total site notices pass actual three-engine delivery. Component-to-upstream-license binding now rejects misassigned licenses. See console-notice-review.md for the source matrix, CC material handling and retained historical reconstruction limits. This does not close other site asset or release review gates.",
|
||
"resolutionEvidence": [
|
||
"refactor/console-notice-review.md",
|
||
"refactor/baselines/console-notice-review-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-notice-review.md"
|
||
],
|
||
"resolutionRationale": "All 100 retained modules and Parcel have exact reproducing sources, all identified embedded origins have original notices, and 44 components are bound to verified upstream materials before actual distribution. The unchanged runtime retains tested API behavior. Accept only the documented historical-reconstruction limits: the original full lockfile, uniquely installed versions and former online Closure service are not recovered. Component licenses remain separate, including CC BY-SA 4.0. Re-review changed code or integration boundaries and revalidate release candidates."
|
||
},
|
||
{
|
||
"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/sdk.ts"
|
||
],
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-VAST-05-native-checkpoint.md",
|
||
"refactor/baselines/vast-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-VAST-05-skip-checkpoint.md",
|
||
"refactor/baselines/vast-skip-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-vast-installed.md",
|
||
"refactor/baselines/ci-vast-installed-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": "Real IMA3.789.0 executes with immutable npm1.0.0/candidate bundles: final27 desktop combinations22 passed5 failed; error303 recovery/recreation/active-ad destruction6 passed. Initial27 were23 passed4 failed and are preserved. SDK9000/late loading and historical WebKit ad-frame failures remain open. IAB SDK200 but bridge document ERR_BLOCKED_BY_CLIENT; physical devices/playUrl/skip not accepted. No VPN exception or timeout widening/retry-to-green. Native playUrl/IMA skip UI adds5/6 passes (one9000 failure despite later skip), shared server12/12 passes. Historical WebKit trace contains real ad frames; three fixed raw-media diagnostic runs passed without changing the assertion, so the original intermittent failure is not closed. CI-01 complete installed bundle checkpoint: source/installed native-script loader and cancellation controls each36/36; real remote IMA3.789.0 across three desktop engines39/39 (30 installed candidate,9 published controls), including303 recovery/recreation/active-ad destroy and actual skip UI. No retries/skips or VPN exception. This new successful run does not close earlier intermittent9000/late-ad/historical WebKit observations, physical-device or full distribution gates."
|
||
},
|
||
{
|
||
"id": "SDK-08",
|
||
"title": "mediapipe-tensorflow 实际集成验证范围",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-01",
|
||
"PKG-MASK-05",
|
||
"PKG-MASK-06"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-danmuku-mask/src/index.ts",
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MASK-05-native-checkpoint.md"
|
||
],
|
||
"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.ts",
|
||
"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.ts",
|
||
"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 播放切组及销毁路径出现页面崩溃信号",
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-HLS-SDK-01-http-teardown.md",
|
||
"refactor/baselines/hls-http-teardown-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-HLS-SDK-01-sdk-sequence.md",
|
||
"refactor/baselines/hls-sdk-sequence-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-HLS-SDK-01-controller-state.md",
|
||
"refactor/baselines/hls-controller-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-HLS-SDK-01-native-exception.md",
|
||
"refactor/baselines/hls-native-validation.json"
|
||
],
|
||
"compatibleResolution": "直接原生 video(无 ArtPlayer/插件)和候选核心已有 page crashed;候选核心无观察器也复现。继续区分 SDK、Firefox/Playwright 与媒体销毁,不静默改核心 destroy 顺序或调用方 SDK 配置。",
|
||
"closureCriteria": "取得可解释的崩溃诊断或直接 SDK 对照;验证处置和新旧核心/worker/分组销毁矩阵,不能仅以再次通过关闭。",
|
||
"workspaceState": "2026-09-14 direct HTTP/no ArtPlayer/plugin/Worker observer:35 diagnostics,31 passed4 failed. Worker reset-first fails1/10 and1/5; no-worker10/10 and optional pre-destroy snapshot5/5 pass. SDK-first also fails2/5. Three phase-recorded crashes occur during final-state collection after destroy returned. Installed Firefox TargetRegistry observer receives oop-frameloader-crashed; no native stack/root cause established. Do not substitute no-worker/snapshot success or change core teardown order; risk remains open. 2026-09-15 sequence: direct native video first 1.5.17 case reports page crash in high-group phase before explicit destroy; no earlier SDK case, ArtPlayer, plugin, route, SDK logger or Worker observer. Three ordered sequences plus one default invocation total 8 passed/1 failed. Native cause remains unproven; do not restrict investigation to teardown or merge distinct signals into a proven shared cause. 2026-09-15 installed Firefox 1543 local omni.ja buildconfig includes --disable-crashreporter; playwright.cfg locks crash reporter off. No native stack collected. Environment-variable-only capture cannot restore a compile-disabled component; next evidence needs scoped Windows native debugging or a separately validated browser build. Later in this checkpoint, direct 1.5.17 crashed twice before destroy (one first-in-sequence); no ArtPlayer/plugin. Optional Node event queue retained 97 events in the second crash, ending during overlapping audio/video flush and high selection at media time 0.381837. Crash receipt was low-group; following assertion failure was high-group. No native module/exception/stack established. 2026-09-15 native capture: direct Hls 1.5.17, worker=true, HTTP, immediate switch yielded two pre-destroy page crashes in six iterations. ProcDump 12.01 captured one unhandled C0000005 read at address 0x8, exception thread named DOM Worker, xul.dll+0x3bc4be0. First/second page crashes retained 96/95 host events. No symbol stack or root cause; do not equate the separate 1.7.2 playback stall. Later six and two iterations pass without dumps, but native monitoring is partial due to permission-denied subprocesses; all monitors exited. Risk remains open."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/changes/2026-09-15-PKG-HLS-SDK-01-switch-boundary.md",
|
||
"refactor/baselines/hls-switch-boundary-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-HLS-SDK-01-controller-state.md",
|
||
"refactor/baselines/hls-controller-validation.json"
|
||
],
|
||
"compatibleResolution": "区分 SDK、测试媒体/时序和宿主问题,保留真实档位/解码断言及 trace;不扩大等待或只验证菜单。",
|
||
"closureCriteria": "直接 Hls 与新旧核心对照定位切换停滞,验证处置和正常/连续组切换,不能以重复通过关闭。",
|
||
"workspaceState": " 2026-09-15 unchanged integration 20/20 passes do not close historical failure. Optional --controller-state now captures fixed SDK controller/buffer/fragment tracker state. Final direct and published-core controls pass for both SDKs; successful cases can briefly show main ENDED and empty media ranges while video SourceBuffer remains populated. Original failure still needs those independent buffers and tracker state; no forced-reset workaround."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/changes/2026-09-15-CI-01-subtitles-installed.md",
|
||
"refactor/baselines/ci-subtitles-installed-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-AUDIO-05-prefix.md",
|
||
"refactor/baselines/audio-prefix-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-source-webkit.md",
|
||
"refactor/baselines/ci-source-webkit-validation.json"
|
||
],
|
||
"compatibleResolution": "保留真实 waiting 断言;使用独立原生对照和其他实际支持环境/输入继续验证,不将没有播放推进的诊断当成缓冲通过,也不凭此改变插件 API 或否定真实 Safari 支持。",
|
||
"closureCriteria": "受影响的缓冲/恢复得到真实媒体证据;与原生能力和测试夹具差异分开,发布环境的剩余范围经显式处理。",
|
||
"workspaceState": "CI-01 九包安装扩展的首轮 336 项中,Windows WebKit 八项新旧音频受限媒体组合继续失败。七项未观察到目标可信 waiting,一项受限视频路径耗尽整体时间并在最终状态读取中报页面关闭。其他引擎均通过;保留原始失败,不以销毁后状态反推初始解码错误,不推断新的共同底层原因。 Same-file prefix controls now show Windows WebKit can start before releasing the tail with larger prefixes (video188653/audio65536), but four committed native diagnostics still record no trusted waiting. Default three-engine diagnostics retain Chromium/Firefox8 progression+waiting and WebKit4 no progression/no waiting. Before-release request copies distinguish held bytes from final sent counters; no production fix or waiver. Complete WebKit source run ae56937d3: all eight initial dual-clock assertions pass, then all eight fail the original trusted waiting/time>0.3 assertion at line30. Seven record no waiting; one has only a trusted time0 event. Held prefixes remain96KiB/32KiB. Recovery assertions are not reached; no production fix or waiver."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-CHAPTER-05-timing.md",
|
||
"refactor/baselines/chapter-timing-observations.json",
|
||
"refactor/baselines/ci-ads-installed-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-ads-installed.md",
|
||
"refactor/changes/2026-09-15-PKG-CHAPTER-05-native-timing.md",
|
||
"refactor/baselines/chapter-native-timing-validation.json"
|
||
],
|
||
"compatibleResolution": "记录原生事件和绝对/相对时序,进一步区分媒体驱动耗时、夹具和核心源操作;未证明原因前不改核心、不扩大超时或重复到绿灯。",
|
||
"closureCriteria": "确认先前超时的来源并有对应可靠回归;后续单次通过不足以关闭。",
|
||
"workspaceState": "Six-package installed run: WebKit candidate/core Chapter failed after restart while waiting for non-seeking readyState>=2. A trace evaluation took 9939.104 ms and returned false; initial seeked had already fired, followed later by another seeking/canplay. This is a different observed phase from the previous restart timeout; common root cause remains unconfirmed. Keep both failures and investigate without relaxing timeouts. Fixed diagnostic runs with/without trace each retain one WebKit combination failure, while observed native getters/setters remain <=2 ms and page heartbeats show roughly five-second gaps. A no-ArtPlayer native video control restores with one correction yet reproduces a similar five-second gap; deferring correction still shows 5104 ms. Exact cause and relation to each earlier ten-second failure remain unconfirmed; no production timer workaround adopted."
|
||
},
|
||
{
|
||
"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",
|
||
"PKG-DASH-SEEK-01"
|
||
],
|
||
"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",
|
||
"refactor/changes/2026-09-14-CI-01-source-chromium.md",
|
||
"refactor/baselines/ci-source-chromium-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-DASH-SEEK-01-buffer-metrics.md",
|
||
"refactor/baselines/dash-seek-recovery-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-adaptive-installed.md",
|
||
"refactor/baselines/ci-adaptive-installed-validation.json",
|
||
"refactor/baselines/ci-source-firefox-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-EDITOR-VAST-01-consumer.md"
|
||
],
|
||
"compatibleResolution": "PKG-DASH-SEEK-01 已在候选插件按精确版本和真实空缓冲同步 SDK 指标,新旧核心及两引擎严格跳转通过。裸 SDK 4.5.2 和冻结旧插件仍保留原始失败;不伪造媒体事件、不偏移 seek、不强制升级 SDK,完整组合及发布验收仍开放。",
|
||
"closureCriteria": "原失败的新旧核心/插件组合有确定根因与对应修复/可验证环境边界;原生对照及原顺序、原目标回归成立,后续偶然通过不能关闭。",
|
||
"workspaceState": "CI-01 十二包安装扩展中,裸 SDK 4.5.2 在 Chromium/Firefox 的恢复时间仍为 6,原断言大于 6.2 失败;候选插件集成通过不关闭裸 SDK 原始缺陷,完整失败报告保留。 Complete Firefox source run at 4545c4367 again fails the bare 4.5.2 control; all four candidate stable-boundary cases pass. Original failure remains open and unfiltered."
|
||
},
|
||
{
|
||
"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": "accepted-with-scope",
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-VAST-03-compatibility.md",
|
||
"refactor/baselines/vast-compatibility-validation.json"
|
||
],
|
||
"compatibleResolution": "User accepted npm eager default and explicit workspace-1.2 lazy mode. Published callback data fields, SDK defaults, container styles and request forwarding are preserved; workspace extensions are opt-in.",
|
||
"closureCriteria": "Published and workspace consumer fixtures cover all callback fields and initialization timing; any irreconcilable behavior has a concrete decision rather than implicit waiver.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-VAST-03-compatibility.md",
|
||
"refactor/baselines/vast-compatibility-validation.json",
|
||
"refactor/vast-compatibility-decision.md"
|
||
],
|
||
"resolutionRationale": "The mutually exclusive initialization timing is explicitly approved and covered by published/workspace consumer tests. Unpublished lazy callers add the second option; public declarations remain VAST-TYPE-01/task04 and real IMA remains task05."
|
||
},
|
||
{
|
||
"id": "VAST-TYPE-01",
|
||
"title": "VAST declares an async factory as synchronous and imports an unavailable SDK type dependency",
|
||
"confirmation": "reproduced",
|
||
"status": "accepted-with-scope",
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-VAST-04-types.md",
|
||
"refactor/baselines/vast-types-validation.json",
|
||
"refactor/vast-type-decision.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": "Task04 complete: root npm bytes and exact factory relationships preserved; CJS/ESM runtime types, editor consumers, old/current compiler positives and per-line negatives pass. Runtime public types share Context/Result/config with implementation. Full media and distribution acceptance remain05/06.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-VAST-04-types.md",
|
||
"refactor/baselines/vast-types-validation.json",
|
||
"refactor/vast-type-decision.md"
|
||
],
|
||
"resolutionRationale": "User separately accepted npm1.0.0 root compatibility types and /runtime accurate Promise/SDK/context types, with unpublished workspace migration. Fourteen actual isolated installation/compiler cases pass without skipLibCheck and enforce SDK dependency resolution; root historical inaccuracy is disclosed, not presented as runtime truth."
|
||
},
|
||
{
|
||
"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",
|
||
"refactor/changes/2026-09-14-PKG-VAST-03-compatibility.md",
|
||
"refactor/baselines/vast-compatibility-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-VAST-05-native-checkpoint.md",
|
||
"refactor/baselines/vast-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-VAST-05-skip-checkpoint.md",
|
||
"refactor/baselines/vast-skip-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-vast-installed.md",
|
||
"refactor/baselines/ci-vast-installed-validation.json"
|
||
],
|
||
"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": "Task03 controlled82 Node/162 browser checks remain valid; task05 adds6 real IMA303 recovery/recreation/active-ad core destruction passes across three engines/two modes. Native full combination failures, devices and remaining ad lifecycle paths keep this risk open; no claim of complete vendor/device acceptance. Native playUrl/IMA skip UI adds5/6 passes (one9000 failure despite later skip), shared server12/12 passes. Historical WebKit trace contains real ad frames; three fixed raw-media diagnostic runs passed without changing the assertion, so the original intermittent failure is not closed. CI-01 complete installed bundle checkpoint: source/installed native-script loader and cancellation controls each36/36; real remote IMA3.789.0 across three desktop engines39/39 (30 installed candidate,9 published controls), including303 recovery/recreation/active-ad destroy and actual skip UI. No retries/skips or VPN exception. This new successful run does not close earlier intermittent9000/late-ad/historical WebKit observations, physical-device or full distribution gates."
|
||
},
|
||
{
|
||
"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",
|
||
"PKG-VAST-07"
|
||
],
|
||
"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-14-PKG-VAST-07-default-alias.md",
|
||
"refactor/baselines/vast-alias-validation.json",
|
||
"test/vast-exports.test.js",
|
||
"refactor/changes/2026-09-14-PKG-VAST-04-types.md",
|
||
"refactor/baselines/vast-types-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.",
|
||
"workspaceState": "Task07 preserves old JavaScript default calls. Task04 adds accurate typed default on /runtime, actual isolated root/legacy/runtime imports and native ESM identity checks; preserves npm root types. Historical deep paths, complete browser distribution and old namespace reflection distinction remain task06; risk stays open."
|
||
},
|
||
{
|
||
"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": "resolved",
|
||
"confirmation": "reproduced",
|
||
"owners": [
|
||
"PKG-FACTORY-01"
|
||
],
|
||
"compatibleResolution": "User accepted latest published 1.1.0 root type shapes on 2026-09-13 (ADR-025). Pure factories preserve reverse assignments and NodeNext namespace; additive runtime declarations model optional calls and self aliases. Earlier 1.0 conflicts have explicit migrations.",
|
||
"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",
|
||
"refactor/type-compatibility-policy.md",
|
||
"refactor/baselines/factory-compatibility-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-FACTORY-01-compatible-types.md"
|
||
],
|
||
"resolutionRationale": "34 actual isolated installation cases, 14 zero-diagnostic candidate modes with 14/15 invalid statements each, eight focused tests and shared strict consumer checks; old diagnostics and legal namespace replacements retained. JavaScript files unchanged.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/factory-compatibility-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-FACTORY-01-compatible-types.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",
|
||
"refactor/thumbnail-compatibility-decision.md",
|
||
"refactor/changes/2026-09-15-PKG-TOOL-THUMB-04-policy-proposal.md"
|
||
],
|
||
"workspaceState": "Concrete proposal prepared: recovered 3.5.31 runtime defaults and optional workspace-4.4 mode, explicitly including the class-level DEFAULTS difference, delay/height validation, event/frame timing and input reset. Frozen contract/behavior tests rerun 62/62. User choice remains pending; no mode/default change implemented or inferred from other package approvals."
|
||
},
|
||
{
|
||
"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."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-TYPE-01",
|
||
"title": "Published declarations misdescribe async registration and switch height/number option fields across generations",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-04",
|
||
"PKG-AUTO-THUMB-08"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/auto-thumbnail-release.json",
|
||
"refactor/baselines/auto-thumbnail-contract.md",
|
||
"refactor/scripts/auto-thumbnail-contract.test.mjs",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-08-types.md",
|
||
"refactor/baselines/auto-thumbnail-types-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve actual Promise runtime and old valid consumers; explicitly retain the historically ignored height field and verify paired CJS/ESM declarations. PKG-AUTO-THUMB-08 retains npm 1.1.0 root bytes and adds tested /runtime types and editor generation; older 1.0.x isolated consumer/export evidence is still pending in 04/06.",
|
||
"closureCriteria": "Old and current isolated consumers, negative type cases and matching runtime registration pass; any irreconcilable inference change has an explicit user decision."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-EXPORT-01",
|
||
"title": "Published 1.0.1 CommonJS default namespace differs from the direct function exported by 1.1.0",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-04",
|
||
"PKG-AUTO-THUMB-06",
|
||
"PKG-AUTO-THUMB-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/auto-thumbnail-release.json",
|
||
"refactor/baselines/auto-thumbnail-contract.md",
|
||
"refactor/scripts/auto-thumbnail-contract.test.mjs",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-09-alias.md",
|
||
"refactor/baselines/auto-thumbnail-alias-validation.json"
|
||
],
|
||
"compatibleResolution": "Exercise both old .default calls and direct require calls plus globals, actual ESM and legacy. PKG-AUTO-THUMB-09 restores default JavaScript calls on the same callable and validates actual 1.0.1, 1.1.0 and candidate installs, plus accurate runtime alias types and three-engine native completion. Full old root type/import-shape evidence remains in 04/06.",
|
||
"closureCriteria": "Installed tarballs and matching type consumers retain both usable calling forms with documented entry behavior."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-DIST-01",
|
||
"title": "Published 1.0.0 archive lacks declared main and legacy runtimes",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/auto-thumbnail-release.json",
|
||
"refactor/baselines/auto-thumbnail-contract.md",
|
||
"refactor/scripts/auto-thumbnail-contract.test.mjs"
|
||
],
|
||
"compatibleResolution": "Keep the historical missing-entry baseline explicit; never substitute Git source as a released artifact.",
|
||
"closureCriteria": "Candidate pack has all declared runtime/types/assets and reviewed historical deep paths; missing old entries remain explicitly recorded."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-LIFE-01",
|
||
"title": "Extraction tasks, decoder handlers and final object URLs lack source-switch and destroy ownership",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-02",
|
||
"PKG-AUTO-THUMB-03",
|
||
"PKG-AUTO-THUMB-05",
|
||
"PKG-AUTO-THUMB-11"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/auto-thumbnail-release.json",
|
||
"refactor/baselines/auto-thumbnail-contract.md",
|
||
"refactor/scripts/auto-thumbnail-contract.test.mjs",
|
||
"test/auto-thumbnail.test.js",
|
||
"refactor/baselines/auto-thumbnail-failures.md",
|
||
"refactor/baselines/auto-thumbnail-failures-validation.json",
|
||
"test/auto-thumbnail-lifecycle.test.js",
|
||
"test/browser/auto-thumbnail-lifecycle.spec.js",
|
||
"refactor/baselines/auto-thumbnail-lifecycle-checkpoint.json",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-11-handler-cleanup.md",
|
||
"refactor/baselines/auto-thumbnail-handler-validation.json",
|
||
"test/auto-thumbnail-frames.test.js"
|
||
],
|
||
"compatibleResolution": "Cancel obsolete work and release owned resources while retaining live options and progressive usable sheet updates.",
|
||
"closureCriteria": "Delayed callbacks, repeated metadata, switching, destroy, multiple instances and failure cleanup are reproduced then pass source/artifacts and native browser checks.",
|
||
"workspaceState": "Task03 ownership checkpoint: 22 candidate lifecycle regressions fail on frozen source and pass on source/main/legacy; two further explicit-URL short-circuit and duration-snapshot cases preserve historical successes. Final candidate runs have 24 passing cases each; 27 native lifecycle cases verify destroy/restart/completion and URL/decoder cleanup. New index/options/session/extraction modules fix serial encoding, stale callbacks, failure cleanup and selected reentry paths. Pixel/frame correctness, resource budgets and additional boundaries remain for task03; old/final core acceptance remains task05. Risk stays open rather than claiming complete extraction repair. Task11 fixes throwing event-property cleanup skipping deadline/frame cancellation: eight controlled regressions fail on pre-change main and pass source/main/legacy; each actual artifact also passes21 native lifecycle checks. This does not prove spontaneous native setter failure or close remaining resource/pixel/combination gates."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-ENCODE-01",
|
||
"title": "Unserialized encodes include blank output and lack media/canvas/input failure handling",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-02",
|
||
"PKG-AUTO-THUMB-03",
|
||
"PKG-AUTO-THUMB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/auto-thumbnail-release.json",
|
||
"refactor/baselines/auto-thumbnail-contract.md",
|
||
"refactor/scripts/auto-thumbnail-contract.test.mjs",
|
||
"test/auto-thumbnail.test.js",
|
||
"refactor/baselines/auto-thumbnail-failures.md",
|
||
"refactor/baselines/auto-thumbnail-failures-validation.json",
|
||
"test/auto-thumbnail-lifecycle.test.js",
|
||
"test/browser/auto-thumbnail-lifecycle.spec.js",
|
||
"refactor/baselines/auto-thumbnail-lifecycle-checkpoint.json"
|
||
],
|
||
"compatibleResolution": "Preserve JPEG grid/time/scale while bounding jobs, sequencing valid updates and handling null Blob, invalid media and thrown callbacks.",
|
||
"closureCriteria": "Fault controls and native valid/corrupt media prove no stale sheet replacement, leaked URLs or unhandled async callbacks; capability limitations remain explicit.",
|
||
"workspaceState": "Task03 ownership checkpoint: 22 candidate lifecycle regressions fail on frozen source and pass on source/main/legacy; two further explicit-URL short-circuit and duration-snapshot cases preserve historical successes. Final candidate runs have 24 passing cases each; 27 native lifecycle cases verify destroy/restart/completion and URL/decoder cleanup. New index/options/session/extraction modules fix serial encoding, stale callbacks, failure cleanup and selected reentry paths. Pixel/frame correctness, resource budgets and additional boundaries remain for task03; old/final core acceptance remains task05. Risk stays open rather than claiming complete extraction repair."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-PIXEL-01",
|
||
"title": "Historical auto-thumbnail yields black sampled JPEG cells on Windows WebKit while played native video and static JPEG controls yield color",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-03",
|
||
"PKG-AUTO-THUMB-05"
|
||
],
|
||
"evidence": [
|
||
"test/browser/auto-thumbnail.spec.js",
|
||
"refactor/baselines/auto-thumbnail-failures.md",
|
||
"refactor/baselines/auto-thumbnail-failures-validation.json",
|
||
"test/browser/auto-thumbnail-pixels.spec.js",
|
||
"refactor/baselines/auto-thumbnail-hidden-renderer.json",
|
||
"refactor/baselines/auto-thumbnail-timeline-media.json",
|
||
"test/auto-thumbnail-frames.test.js",
|
||
"refactor/baselines/auto-thumbnail-frame-presentation.json",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-03-rendering-readiness.md",
|
||
"refactor/baselines/auto-thumbnail-rendering-readiness.json",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-03-first-seek.md",
|
||
"refactor/baselines/auto-thumbnail-first-seek.json",
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-03-native-decoder.md",
|
||
"refactor/baselines/auto-thumbnail-native-decoder.json",
|
||
"refactor/changes/2026-09-15-CI-01-adaptive-installed.md",
|
||
"refactor/baselines/ci-adaptive-installed-validation.json"
|
||
],
|
||
"compatibleResolution": "Establish actual decoded-frame readiness for the existing timeline/grid and preserve silent independent extraction; do not waive colored pixel checks as unsupported media. Intrinsic-size hidden/opacity/clip/visible rendering crossed with current/readyState/first-loadeddata-event strategies still misses the unique first frame in all 12 Windows WebKit profiles. Correct Firefox frames retain totalVideoFrames=0, so that counter cannot be a portable readiness gate. Do not reintroduce these unvalidated workarounds. First-seek diagnostics additionally exclude drawing the first loadeddata frame without seek, one/two RAF waits, post-seek RAF waits and verified forward/back seeking on the recorded Windows WebKit host. The warm comparison first had an invalid stale-event completion, then a timeout; final bounded retries verify actual [1,1,0] seeking and still miss purple. Controls retain purple. These are exclusions, not production fixes.",
|
||
"closureCriteria": "Candidate source and artifacts generate usable sampled pixels on native browser controls with lifecycle checks; supported Safari and core combinations remain explicit final gates.",
|
||
"workspaceState": "The frames module now waits for native presentation and seek completion on capable browsers. Chromium/Firefox source/main/legacy assert all five cells including first purple frame, second red cell, legitimate black and presentation times. Callback-less Windows WebKit first two cells remain diagnostic, later cells asserted; physical Safari/core combinations remain open. 84 native lifecycle/pixel cases passed with explicit held native-frame vs Blob-fallback paths; 19 new Node cases fail 17 ways on prior checkpoint and all 52 current cases pass per candidate. Risk and task03 remain open. Native-only18-case Windows probe also misses the purple first frame in all6 WebKit26.6 cases (hidden/visible paused and immediate play-pause, original and no-B-frame H.264);12 Chromium/Firefox controls recover it. No ArtPlayer/plugin is imported, narrowing but not resolving the native surface boundary. Rate/offset/layout explorations failed and must not be reintroduced as assumed fixes. CI-01 实际安装候选三引擎生命周期/像素 27 项通过;Windows WebKit 两个像素用例仍明确仅验证后面三格,首两格为诊断。没有将此结果用于关闭原首帧风险或认定完整核心组合。"
|
||
},
|
||
{
|
||
"id": "VTT-THUMB-DIST-01",
|
||
"title": "Historical 1.0.0 main/legacy contain invalid regular expressions and cannot load",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vtt-thumbnail-release.json",
|
||
"refactor/baselines/vtt-thumbnail-contract.md",
|
||
"refactor/scripts/vtt-thumbnail-contract.test.mjs"
|
||
],
|
||
"compatibleResolution": "Preserve archive evidence without reproducing broken entry syntax.",
|
||
"closureCriteria": "Candidate actual installed main/legacy/ESM/types/global entries work and historical deep paths are reviewed."
|
||
},
|
||
{
|
||
"id": "VTT-THUMB-PARSE-01",
|
||
"title": "Historical compiled arrows differ from shipped source; parsing floors bounds and assumes alternating lines",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-02",
|
||
"PKG-VTT-THUMB-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vtt-thumbnail-release.json",
|
||
"refactor/baselines/vtt-thumbnail-contract.md",
|
||
"refactor/scripts/vtt-thumbnail-contract.test.mjs",
|
||
"test/vtt-thumbnail.test.js",
|
||
"refactor/baselines/vtt-thumbnail-failures.json",
|
||
"test/vtt-thumbnail-lifecycle.test.js",
|
||
"test/browser/vtt-thumbnail-lifecycle.spec.js",
|
||
"refactor/baselines/vtt-thumbnail-resources.json"
|
||
],
|
||
"compatibleResolution": "Preserve valid cue selection and geometry; test malformed data and standard VTT separately from old compiler defects.",
|
||
"closureCriteria": "Parser fixtures include malformed, empty, real demo VTT, fractional and shared bounds, relative URLs and historical accepted formats.",
|
||
"resolutionEvidence": [
|
||
"test/vtt-thumbnail-parser.test.js",
|
||
"test/browser/vtt-thumbnail-lifecycle.spec.js",
|
||
"refactor/baselines/vtt-thumbnail-parser.json",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-03-parser.md"
|
||
],
|
||
"resolutionRationale": "Historical compiled/source arrow differences stay frozen. Pure parser validates malformed input with original lines, handles metadata blocks/IDs/settings and long hours, retains legacy boundaries/URL/coordinate semantics and compares all 120 demo cues. Candidate factories and native old/new core cases demonstrate rejection before mounting and recovery. This resolves the thumbnail parsing scope; declaration, full device/core and installed-package risks remain separate."
|
||
},
|
||
{
|
||
"id": "VTT-THUMB-LIFE-01",
|
||
"title": "Fetch completion, setBar listeners and mobile timers have no destroy ownership",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-02",
|
||
"PKG-VTT-THUMB-03",
|
||
"PKG-VTT-THUMB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vtt-thumbnail-release.json",
|
||
"refactor/baselines/vtt-thumbnail-contract.md",
|
||
"refactor/scripts/vtt-thumbnail-contract.test.mjs",
|
||
"test/vtt-thumbnail.test.js",
|
||
"refactor/baselines/vtt-thumbnail-failures.json",
|
||
"test/vtt-thumbnail-lifecycle.test.js",
|
||
"test/browser/vtt-thumbnail-lifecycle.spec.js",
|
||
"refactor/baselines/vtt-thumbnail-resources.json"
|
||
],
|
||
"compatibleResolution": "Own requests, listeners, timers and controls per registration without stale writes or cross-instance cleanup.",
|
||
"closureCriteria": "Deferred request, destroy, failure, timer, repeated registration and native core scenarios demonstrate cleanup."
|
||
},
|
||
{
|
||
"id": "VTT-THUMB-TYPE-01",
|
||
"title": "Published declarations falsely describe async registration as a synchronous result",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vtt-thumbnail-release.json",
|
||
"refactor/baselines/vtt-thumbnail-contract.md",
|
||
"refactor/scripts/vtt-thumbnail-contract.test.mjs",
|
||
"test/types/vtt-thumbnail-runtime.ts",
|
||
"refactor/baselines/vtt-thumbnail-runtime-types.json",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-public-types.md",
|
||
"refactor/baselines/vtt-thumbnail-public-types.json",
|
||
"refactor/scripts/vtt-thumbnail-package-types.mjs",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-module-forms.md",
|
||
"refactor/baselines/vtt-thumbnail-module-forms.json"
|
||
],
|
||
"compatibleResolution": "Approved latest npm 1.1.0 root factory/namespace stays exact; additive runtime supplies accurate asynchronous and module forms. Earlier 1.0.x type conflicts have explicit migration under ADR-025.",
|
||
"closureCriteria": "Isolated old/new compiler and installed consumers verify options, styles, callback and result forms.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/vtt-thumbnail-approved-types.json",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-approved-types.md",
|
||
"refactor/type-compatibility-policy.md"
|
||
],
|
||
"resolutionRationale": "32 isolated installation configurations, seven zero-diagnostic candidate modes with 12 exact invalid statements each, 5 focused tests. Legal latest namespace and complete factory replacements retained, historical incompatible forms recorded. No production JS changed."
|
||
},
|
||
{
|
||
"id": "VTT-THUMB-EXPORT-01",
|
||
"title": "Older CommonJS default objects and thumbnails control names differ from latest direct export and vtt-thumbnail name",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-04",
|
||
"PKG-VTT-THUMB-05",
|
||
"PKG-VTT-THUMB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/vtt-thumbnail-release.json",
|
||
"refactor/baselines/vtt-thumbnail-contract.md",
|
||
"refactor/scripts/vtt-thumbnail-contract.test.mjs",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-public-types.md",
|
||
"refactor/baselines/vtt-thumbnail-public-types.json",
|
||
"refactor/scripts/vtt-thumbnail-package-types.mjs",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-module-forms.md",
|
||
"refactor/baselines/vtt-thumbnail-module-forms.json",
|
||
"refactor/baselines/vtt-thumbnail-approved-types.json",
|
||
"refactor/changes/2026-09-13-PKG-VTT-THUMB-04-approved-types.md"
|
||
],
|
||
"compatibleResolution": "Approved latest npm 1.1.0 root factory/namespace stays exact; additive runtime supplies accurate asynchronous and module forms. Earlier 1.0.x type conflicts have explicit migration under ADR-025. Historical thumbnails/vtt-thumbnail control names and complete core/distribution validation remain 05/06.",
|
||
"closureCriteria": "Actual package consumers and old/new cores prove supported forms; unresolved differences stay explicit."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-TYPE-01",
|
||
"title": "Declarations omit async registration, tracks/reset and make the subtitles array required",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/multiple-subtitles-release.json",
|
||
"refactor/baselines/multiple-subtitles-contract.md",
|
||
"test/multiple-subtitles.test.js",
|
||
"refactor/scripts/multiple-subtitles-contract.test.mjs",
|
||
"refactor/baselines/multiple-subtitles-public-types.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-04-public-types.md",
|
||
"refactor/scripts/multiple-subtitles-types.test.mjs",
|
||
"refactor/scripts/multiple-subtitles-package-types.mjs"
|
||
],
|
||
"compatibleResolution": "Approved latest npm 1.2.0 root factory/namespace stays exact; additive runtime supplies accurate asynchronous and module forms. Earlier 1.0.0/1.1.0 type conflicts have explicit migration under ADR-025.",
|
||
"closureCriteria": "Strict old/new consumers and installed type views cover parameters, result methods and factory replacement.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/multiple-subtitles-approved-types.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-04-approved-types.md",
|
||
"refactor/type-compatibility-policy.md"
|
||
],
|
||
"resolutionRationale": "22 isolated installation configurations, seven zero-diagnostic candidate modes with 16 exact invalid statements each, 7 focused tests. Legal latest namespace and complete factory replacements retained, historical incompatible forms recorded. No production JS changed."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-MERGE-01",
|
||
"title": "1.0.0 merges cues by index while later versions concatenate independently timed track cues",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-02",
|
||
"PKG-MULTI-SUB-03",
|
||
"PKG-MULTI-SUB-05",
|
||
"PKG-MULTI-SUB-10"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/multiple-subtitles-release.json",
|
||
"refactor/baselines/multiple-subtitles-contract.md",
|
||
"test/multiple-subtitles.test.js",
|
||
"refactor/scripts/multiple-subtitles-contract.test.mjs",
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"test/browser/multiple-subtitles-history.spec.js",
|
||
"refactor/baselines/multiple-subtitles-failures.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-02-failures.md",
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-05-combinations.md",
|
||
"refactor/baselines/multiple-subtitles-combinations-validation.json",
|
||
"test/browser/multiple-subtitles-combinations.spec.js",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-10-legacy-captions.md",
|
||
"refactor/baselines/multiple-subtitles-legacy-validation.json",
|
||
"test/multiple-subtitles-caption.test.js",
|
||
"test/browser/multiple-subtitles-legacy.spec.js"
|
||
],
|
||
"compatibleResolution": "Keep historical merge profiles explicit and test real overlap/timing before choosing compatibility behavior.",
|
||
"closureCriteria": "Unaligned lengths, overlap, sorting, names and real subtitle display across supported cores are verified.",
|
||
"workspaceState": "Task10 adapts old activeCue-only hosts to display all independently timed native cues. Source/main/legacy regressions cover old5.1.2/5.1.7. Historical1.1/1.2 losses remain explicit; broader profile/device acceptance remains in task05. Old5.1.2 ASS converter is separate task11."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-LIFE-01",
|
||
"title": "Pending downloads and final object URL have no destroy owner",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-02",
|
||
"PKG-MULTI-SUB-03",
|
||
"PKG-MULTI-SUB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/multiple-subtitles-release.json",
|
||
"refactor/baselines/multiple-subtitles-contract.md",
|
||
"test/multiple-subtitles.test.js",
|
||
"refactor/scripts/multiple-subtitles-contract.test.mjs",
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"test/browser/multiple-subtitles-history.spec.js",
|
||
"refactor/baselines/multiple-subtitles-failures.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-02-failures.md",
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"compatibleResolution": "Reproduce stale completion and own requests and URLs without changing public selection methods.",
|
||
"closureCriteria": "Cancellation, failures, source changes, repeated selection and destroy are verified with native core coverage.",
|
||
"workspaceState": "Candidate resource fixes and serialization parity are verified in task 03. This risk remains open for the complete supported-core/device coverage owned by task 05."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-EXPORT-01",
|
||
"title": "Older CommonJS default objects conflict with export-assignment declarations; latest exports a direct factory",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-04",
|
||
"PKG-MULTI-SUB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/multiple-subtitles-release.json",
|
||
"refactor/baselines/multiple-subtitles-contract.md",
|
||
"test/multiple-subtitles.test.js",
|
||
"refactor/scripts/multiple-subtitles-contract.test.mjs",
|
||
"refactor/baselines/multiple-subtitles-public-types.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-04-public-types.md",
|
||
"refactor/scripts/multiple-subtitles-types.test.mjs",
|
||
"refactor/scripts/multiple-subtitles-package-types.mjs",
|
||
"refactor/baselines/multiple-subtitles-approved-types.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-04-approved-types.md"
|
||
],
|
||
"compatibleResolution": "Approved latest npm 1.2.0 root factory/namespace stays exact; additive runtime supplies accurate asynchronous and module forms. Earlier 1.0.0/1.1.0 type conflicts have explicit migration under ADR-025. Complete shipped archive/deep-entry and example acceptance remains 06; actual browser/core combinations remain 05.",
|
||
"closureCriteria": "Actual installed CJS/ESM/global/legacy consumers and their declarations are verified."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-HTTP-01",
|
||
"title": "HTTP error responses with parseable bodies are installed as subtitles",
|
||
"compatibleResolution": "Reject actual HTTP failures with explicit diagnostics while preserving successful conversion and original transport errors.",
|
||
"closureCriteria": "Native HTTP errors, transport/body failures, sibling cancellation and successful requests have candidate regressions.",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-03",
|
||
"PKG-MULTI-SUB-05"
|
||
],
|
||
"evidence": [
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"test/browser/multiple-subtitles-history.spec.js",
|
||
"refactor/baselines/multiple-subtitles-failures.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-02-failures.md",
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "HTTP failures reject before body consumption and abort their requests. Exact transport/body errors, sibling cancellation, conversion success and native 404 rejection pass candidate regressions; source/main/legacy run with both core fixtures."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-HOST-01",
|
||
"title": "Subtitle init rejections are ignored and failed installation or URL replacement leaks or invalidates resources",
|
||
"compatibleResolution": "Own installation results and URL rollback while preserving void selection methods and normal registration timing.",
|
||
"closureCriteria": "Synchronous and asynchronous host failures, stale rejection, allocation failure and destroy leave no plugin-owned live resources.",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-03",
|
||
"PKG-MULTI-SUB-05"
|
||
],
|
||
"evidence": [
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"test/browser/multiple-subtitles-history.spec.js",
|
||
"refactor/baselines/multiple-subtitles-failures.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-02-failures.md",
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/multiple-subtitles-resources.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-03-resources.md",
|
||
"test/multiple-subtitles-lifecycle.test.js",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Owned installations retain prior URLs on synchronous failure, observe async rejections, release the failed active URL without affecting newer installs, and clean up on destroy. Controlled sync/async/reentrant/getter failures and native Blob revocation pass; void methods and registration timing are preserved."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-TIMESTAMP-01",
|
||
"title": "Text wrappers replace numeric inline cue timestamps and serialize NaN times",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-07",
|
||
"PKG-MULTI-SUB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/multiple-subtitles-runtime-types.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-04-runtime-types.md",
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"refactor/baselines/multiple-subtitles-timestamps.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-07-timestamps.md",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js"
|
||
],
|
||
"compatibleResolution": "Preserve numeric timestamp nodes while retaining subtitle text, track wrappers and selection contracts; record the intentional repair of invalid legacy output.",
|
||
"closureCriteria": "Valid inline timestamps and surrounding text survive serialization and native subtitle playback; frozen historical failure remains reproducible and ordinary markup regressions pass.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/multiple-subtitles-timestamps.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-07-timestamps.md",
|
||
"test/multiple-subtitles-merge.test.js",
|
||
"test/browser/multiple-subtitles-lifecycle.spec.js",
|
||
"packages/artplayer-plugin-multiple-subtitles/src/caption.ts"
|
||
],
|
||
"resolutionRationale": "Numeric timestamp nodes serialize inside valid VTT class markers, preserve native processing instructions, and are unwrapped only in the custom caption DOM without deleting subsequent text. Source/main/legacy tests, frozen-tree and timestamp cases, strict negative fixtures, and 108 native cases across both core fixtures pass. Public cue edits verify literal text preservation independently of the unresolved vendor entity bug."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-ENTITY-01",
|
||
"title": "Vendored cue entity decoding retains semicolons after lt, gt and amp entities",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-05",
|
||
"PKG-MULTI-SUB-08"
|
||
],
|
||
"evidence": [
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"refactor/baselines/multiple-subtitles-timestamps.json",
|
||
"refactor/changes/2026-09-13-PKG-MULTI-SUB-07-timestamps.md",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-08-entities.md",
|
||
"refactor/baselines/multiple-subtitles-entities-validation.json"
|
||
],
|
||
"compatibleResolution": "Supply exact named entities through the existing parser constructor option, preserve historical lenient aliases and the frozen vendor body, and protect literal text through serialization/unescape.",
|
||
"closureCriteria": "Nine historical implementations reproduce the defect; candidate entity/markup regressions and real subtitle display pass, with vendor adaptation and provenance documentation updated.",
|
||
"workspaceState": "Nine historical implementations retain stray semicolons; candidate table adapter and text escaping fix six named references, double encoding and literal tags. Actual native VTT and HTML display pass in all3 Windows engines on published/candidate cores. Complete historical-core/device combinations remain task05.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-08-entities.md",
|
||
"refactor/baselines/multiple-subtitles-entities-validation.json"
|
||
],
|
||
"resolutionRationale": "Eleven focused cases,294 package tests,42 source browser and6 actual built-main browser cases pass. The parser executable body is unchanged and its full upstream adaptation/notices checks remain enforced; the authored configuration adapter resolves the plugin defect without a vendor patch."
|
||
},
|
||
{
|
||
"id": "JASSUB-TYPE-01",
|
||
"title": "JASSUB declared required URLs, Promise methods and resize parameter order differ from actual historical behavior",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/jassub-contract.md",
|
||
"test/jassub.test.js",
|
||
"refactor/scripts/jassub-contract.test.mjs"
|
||
],
|
||
"compatibleResolution": "Keep synchronous registration and real instance methods while separately preserving old parameter/return extraction and extension indexes. Do not implement the old inaccurate declaration as new runtime behavior.",
|
||
"closureCriteria": "Strict old/new consumers and actual installed declarations cover option defaults, instance methods, callback/return extraction, resize order and existing extension fields."
|
||
},
|
||
{
|
||
"id": "JASSUB-EXPORT-01",
|
||
"title": "JASSUB historical CommonJS object.default changes to a direct factory in 1.1.0",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-04",
|
||
"PKG-JASSUB-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/jassub-contract-validation.json",
|
||
"refactor/baselines/jassub-release.json",
|
||
"test/jassub.test.js"
|
||
],
|
||
"compatibleResolution": "Preserve actual historical JS default/direct forms and validate their declared module views independently.",
|
||
"closureCriteria": "Installed CJS/ESM/global/legacy consumers and public types preserve the supported historical forms."
|
||
},
|
||
{
|
||
"id": "CORE-DEFAULTS-SSR-01",
|
||
"title": "Reading static defaults throws when navigator is absent",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CORE-25"
|
||
],
|
||
"evidence": [
|
||
"test/package/runtime.cjs",
|
||
"packages/artplayer/src/option/defaults.ts",
|
||
"refactor/changes/2026-09-13-CI-01-node-consumers.md",
|
||
"refactor/baselines/node-consumer-validation.json"
|
||
],
|
||
"compatibleResolution": "Read navigator through a guarded global lookup while preserving browser language defaults and public declaration shape.",
|
||
"closureCriteria": "Published failure remains explicit; source and actual installed candidate defaults work without navigator on selected Node versions and browser language behavior stays unchanged.",
|
||
"workspaceState": "Node 20.19.0 actual installed probe fails with ReferenceError: navigator is not defined. Published 5.4.0 and candidate 5.4.1 both reproduce under explicitly absent navigator on every selected runtime. CI-01 records this known failure, then compares default values under the same controlled en-US navigator; this is not a production fix.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-CORE-25-defaults-ssr.md",
|
||
"refactor/baselines/defaults-ssr-validation.json"
|
||
],
|
||
"resolutionRationale": "Candidate source and actual installed main/legacy/ESM defaults work without navigator on Node 20.19.0/22.12.0/24.21.0. Three-engine source/main/legacy browser cases preserve en-US/zh-CN defaults and explicit language overrides; historical failure remains exact. Strict package release now reports zero known runtime blockers for this fixture."
|
||
},
|
||
{
|
||
"id": "ENG-DIST-PUBLIC-01",
|
||
"title": "Vite copied authored declarations into library distribution",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"ENG-12"
|
||
],
|
||
"evidence": [
|
||
"test/library-build.test.js",
|
||
"refactor/baselines/library-public-validation.json",
|
||
"refactor/changes/2026-09-13-ENG-12-library-public.md"
|
||
],
|
||
"compatibleResolution": "Disable library publicDir copying and reject non-declaration TypeScript members anywhere in checked tarballs.",
|
||
"closureCriteria": "Actual format builds omit public source/resources; dirty historical candidate fails the guard; new archive has no copied sources and preserves other bytes.",
|
||
"workspaceState": "Actual candidate had copied authored public TS files in dist; getViteBuildConfig now disables publicDir. Strict member checking rejects the prior archive, and the replacement differs only by source removals.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/library-public-validation.json",
|
||
"refactor/changes/2026-09-13-ENG-12-library-public.md"
|
||
],
|
||
"resolutionRationale": "Three-format disk fixture and actual core archive prove removal; all other package members remain byte-identical. Full 21-library and docs build passed. CORE-25 runtime work was present but is not closed by this task."
|
||
},
|
||
{
|
||
"id": "ASR-TYPE-01",
|
||
"title": "ASR declarations omit asynchronous stop and callback text results",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/asr-contract.md",
|
||
"refactor/baselines/asr-release.json"
|
||
],
|
||
"compatibleResolution": "Keep historical assignment compatibility while supplying accurate asynchronous consumption.",
|
||
"closureCriteria": "Actual old/new installed TS consumers cover void callback, Promise<void>, returned text and factory substitution.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-04-public-types.md",
|
||
"refactor/baselines/asr-types-validation.json",
|
||
"refactor/scripts/asr-package-types.mjs",
|
||
"test/types/asr-public.ts",
|
||
"refactor/fixtures/consumers/asr-esm-namespace.ts"
|
||
],
|
||
"resolutionRationale": "Root/legacy preserve historical void callback and stop, factory substitution and legal NodeNext namespace shape. Additive runtime supplies text/null/void callbacks and Promise stop with consistent named types. Actual isolated 2.0/2.1/candidate installs, seven candidate compiler configurations and 12 per-mode invalid statements verify declarations. Existing old NodeNext direct-call diagnostics remain explicit, not candidate success."
|
||
},
|
||
{
|
||
"id": "ASR-CHUNK-01",
|
||
"title": "ASR tick discards underfilled chunks and overrun samples in source",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-02",
|
||
"PKG-ASR-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/asr-contract.md",
|
||
"refactor/baselines/asr-release.json",
|
||
"test/asr-audio.test.js",
|
||
"refactor/changes/2026-09-13-PKG-ASR-02-audio-baseline.md",
|
||
"refactor/baselines/asr-audio-validation.json"
|
||
],
|
||
"compatibleResolution": "Reproduce exact sample loss and retain queue remainders with bounded, ordered callback delivery.",
|
||
"closureCriteria": "Exact PCM/WAV byte sequence and slow/rejected callback regression tests pass without losing or reordering accepted input.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-03-audio-ownership.md",
|
||
"refactor/baselines/asr-ownership-validation.json",
|
||
"test/asr-lifecycle.test.js",
|
||
"test/asr-encoding.test.js"
|
||
],
|
||
"resolutionRationale": "Copied linked blocks retain underfilled input and tails; exact byte parity and FIFO tests pass. One callback per generation prevents overlap; rejection recovery and obsolete completions are covered. Exceeding the larger of 60 seconds or two configured chunks pauses capture with an explicit error; long configured intervals remain collectable."
|
||
},
|
||
{
|
||
"id": "ASR-LIFE-01",
|
||
"title": "ASR partial initialization, pause resume and stale callback cleanup need controlled evidence",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-02",
|
||
"PKG-ASR-03",
|
||
"PKG-ASR-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/asr-contract.md",
|
||
"refactor/baselines/asr-release.json",
|
||
"test/asr-audio.test.js",
|
||
"refactor/changes/2026-09-13-PKG-ASR-02-audio-baseline.md",
|
||
"refactor/baselines/asr-audio-validation.json"
|
||
],
|
||
"compatibleResolution": "Own pending setup, URLs, source nodes and callbacks across pause, stop, restart and terminal destruction.",
|
||
"closureCriteria": "Failure/race regression tests plus native WebAudio playback and cleanup evidence prove resource ownership.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-03-audio-ownership.md",
|
||
"refactor/baselines/asr-ownership-validation.json",
|
||
"test/asr-lifecycle.test.js",
|
||
"test/asr-encoding.test.js"
|
||
],
|
||
"resolutionRationale": "Candidate ownership/race regression tests pass, including retired-port delivery and module failure before binding video. Actual Chromium/Firefox source/main/legacy with both cores verify pause, source change, explicit stop/restart and final close. Direct media contexts deliberately remain player-owned until destroy; disposable stream contexts close on stop. General native fallback/volume/device acceptance remains ASR-05 and SDK-11, not claimed by this specific fix."
|
||
},
|
||
{
|
||
"id": "ASR-VOLUME-01",
|
||
"title": "ASR applies media volume twice and squares playback amplitude",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-07"
|
||
],
|
||
"evidence": [
|
||
"test/browser/asr-playback.spec.js",
|
||
"refactor/baselines/asr-volume-validation.json"
|
||
],
|
||
"compatibleResolution": "Retain public volume API and apply it once through the media element.",
|
||
"closureCriteria": "Native graph amplitude is linear across volume changes, mute and ASR stop/restart; old behavior is separately reproduced.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-07-playback-volume.md",
|
||
"refactor/baselines/asr-volume-validation.json"
|
||
],
|
||
"resolutionRationale": "Native Chromium/Firefox source/main/legacy on published and candidate core pass relative-amplitude assertions. Formal 2.1 baseline retains squared amplitude. The fix does not establish physical device or captured-fallback acceptance."
|
||
},
|
||
{
|
||
"id": "ASR-FALLBACK-01",
|
||
"title": "Captured fallback produces a second audible route even when the video is muted",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-08"
|
||
],
|
||
"evidence": [
|
||
"test/browser/asr-fallback.spec.js",
|
||
"refactor/baselines/asr-fallback-validation.json"
|
||
],
|
||
"compatibleResolution": "Keep recognition PCM and external media ownership; remove only the extra ASR speaker output.",
|
||
"closureCriteria": "Native fallback has zero speaker output and nonzero PCM before/after stop and source change; owned tracks/contexts close without closing the external owner.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-08-capture-output.md",
|
||
"refactor/baselines/asr-fallback-validation.json"
|
||
],
|
||
"resolutionRationale": "Native Chromium and controlled-rejection Firefox source/main/legacy with both cores pass. Firefox natural branch selection remains separate ASR-FOREIGN-01."
|
||
},
|
||
{
|
||
"id": "ASR-FOREIGN-01",
|
||
"title": "Firefox permits parallel native media-element owners instead of selecting capture fallback",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-05",
|
||
"PKG-ASR-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/asr-fallback-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-ASR-08-capture-output.md"
|
||
],
|
||
"compatibleResolution": "Establish an explicit compatible ownership contract for external audio graphs without silently changing default direct-path PCM/mute semantics.",
|
||
"closureCriteria": "Natural Firefox external-owner integration has no duplicate output or has a documented, validated explicit ownership mode; controlled binding rejection alone cannot close this finding.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/asr-explicit-capture-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-ASR-09-explicit-capture.md"
|
||
],
|
||
"resolutionRationale": "The documented explicit capture mode satisfies the ownership-mode closure branch: native Firefox never calls direct binding and keeps the external route independent. This is not automatic default-mode owner detection."
|
||
},
|
||
{
|
||
"id": "ASR-CORS-01",
|
||
"title": "Default WebAudio binding silences CORS-cross-origin media that otherwise advances normally",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-ASR-05"
|
||
],
|
||
"evidence": [
|
||
"test/browser/asr-cors.spec.js",
|
||
"refactor/baselines/asr-combinations-validation.json",
|
||
"refactor/baselines/asr-explicit-capture-validation.json"
|
||
],
|
||
"compatibleResolution": "Document required CORS setup and provide an explicitly chosen capture path that never takes over media playback; do not bypass browser security or silently change default PCM semantics.",
|
||
"closureCriteria": "Authorized capture and same-origin recovery remain valid; an explicit integration avoids direct ownership for restricted input, fails or stays silent without rerouting playback, and is documented with native evidence."
|
||
},
|
||
{
|
||
"id": "ASR-RESTART-01",
|
||
"title": "Delayed captured-source restart resumes recognition after a newer pause or stop",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-09"
|
||
],
|
||
"evidence": [
|
||
"test/asr-explicit-capture.test.js",
|
||
"refactor/baselines/asr-explicit-capture-validation.json"
|
||
],
|
||
"compatibleResolution": "Invalidate stale restart continuation using the lifecycle epoch while allowing the next explicit play.",
|
||
"closureCriteria": "Pause and stop during delayed context close prevent a new graph and timer; later play works normally.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-ASR-09-explicit-capture.md",
|
||
"refactor/baselines/asr-explicit-capture-validation.json"
|
||
],
|
||
"resolutionRationale": "Two delayed-close red tests now pass in source/main/legacy, with subsequent play verified; native restart and default regressions pass."
|
||
},
|
||
{
|
||
"id": "VENDOR-10",
|
||
"title": "Chromecast embeds a Font Awesome Pro path with no established redistribution entitlement",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-06"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-chromecast/src/cast.svg",
|
||
"refactor/baselines/chromecast-release.json"
|
||
],
|
||
"compatibleResolution": "Replace the default embedded artwork with an owned simple Cast indicator while retaining the custom icon option and wrapper classes; keep historical provenance separate.",
|
||
"closureCriteria": "Owned or properly licensed default artwork replaces the commercial-marked source and every shipped bundle, with source/provenance and generated-output checks.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Original repo-authored geometric SVG replaces the commercial path in source and all three built/copied formats; historical source remains frozen, no claim of rights in the removed artwork."
|
||
},
|
||
{
|
||
"id": "CAST-TYPE-01",
|
||
"title": "Chromecast declarations describe a synchronous name-only registration and omit existing runtime callbacks and query methods",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-04"
|
||
],
|
||
"evidence": [
|
||
"packages/artplayer-plugin-chromecast/types/artplayer-plugin-chromecast.d.ts",
|
||
"refactor/baselines/chromecast-contract.md"
|
||
],
|
||
"compatibleResolution": "Preserve the latest published root factory type and provide a precise runtime type view; verify valid historical JavaScript module forms independently.",
|
||
"closureCriteria": "Frozen type consumers and replacements pass, accurate async/callback/state declarations work through an additive entry, and actual installed exports are tested.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-04-types.md",
|
||
"refactor/baselines/chromecast-types-validation.json",
|
||
"refactor/scripts/chromecast-types.test.mjs",
|
||
"refactor/scripts/chromecast-package-types.mjs"
|
||
],
|
||
"resolutionRationale": "Actual npm 1.1.0 root factory and namespace contracts retained; older export-assignment conflict documented. Additive runtime describes real async/callback/state API through the same JS. Four tests and 17 installed configurations verify identities, replacements, editor and 17 individual negative statements per candidate mode. Real receivers remain CAST05."
|
||
},
|
||
{
|
||
"id": "CAST-SDK-01",
|
||
"title": "Cast requestSession completion is incorrectly passed to loadMedia as a session",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"test/chromecast-failures.test.js",
|
||
"refactor/baselines/chromecast-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Retrieve the actual current session after request success and validate live instance ownership.",
|
||
"closureCriteria": "Successful undefined/null request result loads through the current session; absence and refusal preserve appropriate original errors.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "35 candidate source/main/legacy tests and 135 native browser DOM/core cases verify corrected behavior against controlled SDK boundaries. 93 frozen historical observations remain. Actual remote SDK and receivers remain SDK06/CAST05, not waived."
|
||
},
|
||
{
|
||
"id": "CAST-LOADER-01",
|
||
"title": "Cast readiness waits hang or overwrite each other across ready SDKs, repeated clicks and multiple instances",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"test/chromecast-failures.test.js",
|
||
"refactor/baselines/chromecast-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Coordinate one reusable loader per document with readiness detection, shared pending work and complete error settlement.",
|
||
"closureCriteria": "Ready, pending, failure, retry, external callback and multiple instances are covered without duplicate scripts or stranded callers.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "35 candidate source/main/legacy tests and 135 native browser DOM/core cases verify corrected behavior against controlled SDK boundaries. 93 frozen historical observations remain. Actual remote SDK and receivers remain SDK06/CAST05, not waived."
|
||
},
|
||
{
|
||
"id": "CAST-LIFE-01",
|
||
"title": "Cast listeners and continuations survive player destruction and update another player icon",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"test/chromecast-failures.test.js",
|
||
"refactor/baselines/chromecast-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Use per-registration lifecycle ownership, scoped control nodes and obsolete-operation checks without ending a page-shared session.",
|
||
"closureCriteria": "Destroyed players get no late media loads or callbacks; subscriptions are removed and separate players keep independent UI.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "35 candidate source/main/legacy tests and 135 native browser DOM/core cases verify corrected behavior against controlled SDK boundaries. 93 frozen historical observations remain. Actual remote SDK and receivers remain SDK06/CAST05, not waived."
|
||
},
|
||
{
|
||
"id": "CAST-STATE-01",
|
||
"title": "Cast terminal session states leave the normalized callback and icon connected",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"test/chromecast-failures.test.js",
|
||
"refactor/baselines/chromecast-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Map terminal states without changing the raw SessionState query API.",
|
||
"closureCriteria": "Ended and failed states update UI and callbacks while getCastState keeps original SessionState values.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "35 candidate source/main/legacy tests and 135 native browser DOM/core cases verify corrected behavior against controlled SDK boundaries. 93 frozen historical observations remain. Actual remote SDK and receivers remain SDK06/CAST05, not waived."
|
||
},
|
||
{
|
||
"id": "CAST-ERROR-01",
|
||
"title": "Cast media loading rejection escapes on a detached Promise while the click has already fulfilled",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CAST-03",
|
||
"PKG-CAST-05"
|
||
],
|
||
"evidence": [
|
||
"test/chromecast-failures.test.js",
|
||
"refactor/baselines/chromecast-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Await the complete media-loading chain and preserve one original error notification.",
|
||
"closureCriteria": "loadMedia failure reaches the click promise exactly once, no orphan rejection or duplicated error callback; success ordering remains documented.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||
"refactor/baselines/chromecast-runtime-validation.json",
|
||
"test/chromecast-runtime.test.js",
|
||
"test/browser/chromecast-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "35 candidate source/main/legacy tests and 135 native browser DOM/core cases verify corrected behavior against controlled SDK boundaries. 93 frozen historical observations remain. Actual remote SDK and receivers remain SDK06/CAST05, not waived."
|
||
},
|
||
{
|
||
"id": "MASK-LIFETIME-01",
|
||
"title": "Mask asynchronous initialization and inference continue after stop or destroy",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-02",
|
||
"PKG-MASK-03",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-MASK-02-failures.md",
|
||
"refactor/baselines/danmuku-mask-failures-validation.json",
|
||
"test/danmuku-mask-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-MASK-03-lifecycle.md",
|
||
"refactor/baselines/danmuku-mask-lifecycle-validation.json",
|
||
"test/danmuku-mask-lifecycle.test.js",
|
||
"refactor/baselines/danmuku-mask-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MASK-05-native-checkpoint.md"
|
||
],
|
||
"compatibleResolution": "Invalidate stale work while keeping restartable stop distinct from final destroy; release model and subscriptions. PKG-MASK-03 fixes controlled stale work, owned bitmaps and subscriptions; native SDK dispose completion is not exposed by body-segmentation 1.0.2 and remains a real-resource validation limit in PKG-MASK-05.",
|
||
"closureCriteria": "Pending initialization/inference cannot write masks or schedule work after stop/destroy; errors settle and owned resources are released."
|
||
},
|
||
{
|
||
"id": "MASK-START-01",
|
||
"title": "Concurrent Mask start calls can initialize multiple models and create independent RAF chains",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MASK-02",
|
||
"PKG-MASK-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-MASK-02-failures.md",
|
||
"refactor/baselines/danmuku-mask-failures-validation.json",
|
||
"test/danmuku-mask-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-MASK-03-lifecycle.md",
|
||
"refactor/baselines/danmuku-mask-lifecycle-validation.json",
|
||
"test/danmuku-mask-lifecycle.test.js"
|
||
],
|
||
"compatibleResolution": "Share pending initialization and own at most one inference loop per live registration.",
|
||
"closureCriteria": "Repeated and concurrent starts, stop then start, failures and multiple instances have deterministic resource and result assertions.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-MASK-03-lifecycle.md",
|
||
"refactor/baselines/danmuku-mask-lifecycle-validation.json",
|
||
"test/danmuku-mask-lifecycle.test.js"
|
||
],
|
||
"resolutionRationale": "Controlled shared-SDK multiple-instance, concurrent/repeated start, cancellation/restart behind inference/disposal, failure recovery and synchronous reentry prove one owned chain per registration. Actual global SDK/device state is separately retained by PKG-MASK-05."
|
||
},
|
||
{
|
||
"id": "MASK-MODEL-01",
|
||
"title": "Published Mask options and installed MediaPipe adapter consume different model settings",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-02",
|
||
"PKG-MASK-04",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json"
|
||
],
|
||
"compatibleResolution": "Freeze actual default/zero behavior and distinguish supported SDK configuration from inactive historical option fields before changing effects.",
|
||
"closureCriteria": "Effective model selection, zero values and configuration mapping have controlled and real model evidence, with explicit compatibility decisions for effect changes."
|
||
},
|
||
{
|
||
"id": "MASK-BACKEND-01",
|
||
"title": "Mask TensorFlow backend fallback does not establish MediaPipe fallback and failed initialization keeps scheduling",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-02",
|
||
"PKG-MASK-03",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-MASK-02-failures.md",
|
||
"refactor/baselines/danmuku-mask-failures-validation.json",
|
||
"test/danmuku-mask-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-MASK-03-lifecycle.md",
|
||
"refactor/baselines/danmuku-mask-lifecycle-validation.json",
|
||
"test/danmuku-mask-lifecycle.test.js"
|
||
],
|
||
"compatibleResolution": "Model backend outcomes explicitly, settle initialization failures and document the actual MediaPipe capability boundary.",
|
||
"closureCriteria": "Fulfilled false, rejection, CPU failure, createSegmenter failure and later retry are tested; real inference fallback is separately evidenced."
|
||
},
|
||
{
|
||
"id": "MASK-DOM-01",
|
||
"title": "Mask registration and frame processing assume Danmuku DOM, readable frames and a 2D context",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-02",
|
||
"PKG-MASK-03",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-MASK-02-failures.md",
|
||
"refactor/baselines/danmuku-mask-failures-validation.json",
|
||
"test/danmuku-mask-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-MASK-03-lifecycle.md",
|
||
"refactor/baselines/danmuku-mask-lifecycle-validation.json",
|
||
"test/danmuku-mask-lifecycle.test.js",
|
||
"refactor/baselines/danmuku-mask-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MASK-05-native-checkpoint.md"
|
||
],
|
||
"compatibleResolution": "Handle missing dependencies and frame/context failures without stale writes or uncontrolled loops while preserving plugin ordering.",
|
||
"closureCriteria": "Missing Danmuku/context, CORS failure, source changes and ready/destroy timing have controlled and real browser evidence."
|
||
},
|
||
{
|
||
"id": "MASK-NOTICE-01",
|
||
"title": "Published Mask bundles lack a separate third-party notice despite bundled SDK code",
|
||
"confirmation": "source-observed",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-mask-contract.md",
|
||
"refactor/baselines/danmuku-mask-release.json",
|
||
"refactor/baselines/danmuku-mask-contract-validation.json"
|
||
],
|
||
"compatibleResolution": "Trace included SDK assets and license notices against actual bundle sources; preserve required notices in candidate packages.",
|
||
"closureCriteria": "Document incorporated SDK provenance and applicable notices; inspect built and packed artifacts, without treating manifest license claims as full clearance."
|
||
},
|
||
{
|
||
"id": "DANMUKU-TYPE-01",
|
||
"title": "Danmuku historical declared results, optional mount and initial Promise input disagree with runtime",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-03",
|
||
"PKG-DANMUKU-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-06-types.md",
|
||
"refactor/baselines/danmuku-types-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve latest published complete root type contracts and actual legal JS return identities; expose accurate types separately.",
|
||
"closureCriteria": "Installed consumers verify latest root assignments and precise async/getter/mount contracts; initial Promise mismatch has an explicit tested resolution.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-06-types.md",
|
||
"refactor/baselines/danmuku-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Preserved actual npm 5.3.0 complete root/legacy declaration and installed consumer behavior; optional runtime entry describes tested async owner, getter, mount, data, icon and callback contracts. Verified actual implementation assignability and packed/offline-installed current and historical compiler consumers."
|
||
},
|
||
{
|
||
"id": "DANMUKU-INPUT-01",
|
||
"title": "Danmuku replaces time zero with current time plus 0.5 and mutates supplied input objects",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-02",
|
||
"PKG-DANMUKU-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json"
|
||
],
|
||
"compatibleResolution": "Separate the time-zero defect from observable input object identity/mutation before changing parsing or queue ownership.",
|
||
"closureCriteria": "Zero, absent, negative and explicit times plus object identity are covered with candidate expectations and compatibility decisions.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json",
|
||
"test/danmuku-input.test.js",
|
||
"test/browser/danmuku-input.spec.js"
|
||
],
|
||
"resolutionRationale": "Candidate source/main/legacy preserve input mutation and internal returns while explicitly preserving zero and clamping negative time; native browsers confirm zero."
|
||
},
|
||
{
|
||
"id": "DANMUKU-CONFIG-01",
|
||
"title": "Danmuku JSON configuration comparison ignores a replacement filter function",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-02",
|
||
"PKG-DANMUKU-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json"
|
||
],
|
||
"compatibleResolution": "Compare relevant configuration values without dropping callable properties; retain callback receivers and config event ordering.",
|
||
"closureCriteria": "Function-only changes take effect, unchanged options remain stable and partial configuration/callback reentry has regression evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json",
|
||
"test/danmuku-input.test.js",
|
||
"test/browser/danmuku-input.spec.js"
|
||
],
|
||
"resolutionRationale": "Candidate source/main/legacy apply function-only updates, preserve equal plain values and callback receivers, reject invalid updates transactionally, and withstand synchronous reentry; native browsers confirm."
|
||
},
|
||
{
|
||
"id": "DANMUKU-CLEANUP-01",
|
||
"title": "Danmuku removes a different resize callback and retains the settings lock timer on destroy",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-02",
|
||
"PKG-DANMUKU-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||
"refactor/baselines/danmuku-browser-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-05-resources.md",
|
||
"refactor/baselines/danmuku-resources-validation.json"
|
||
],
|
||
"compatibleResolution": "Track and release exact subscription and timer ownership across settings, renderer and instances.",
|
||
"closureCriteria": "Repeated lifecycle and pending settings actions leave no owned subscriptions, timers or late DOM writes.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-05-resources.md",
|
||
"refactor/baselines/danmuku-resources-validation.json",
|
||
"test/danmuku-setting.test.js",
|
||
"test/danmuku-heatmap.test.js",
|
||
"test/browser/danmuku-resources.spec.js"
|
||
],
|
||
"resolutionRationale": "Exact subscriptions/proxy registry entries, send countdowns, external settings and owned renderer nodes are released; stale sends are cancelled and shared host values restored conditionally. Native two-core source/main/legacy matrices and real docs smoke passed."
|
||
},
|
||
{
|
||
"id": "DANMUKU-TYPE-02",
|
||
"title": "Danmuku id, icons, Slider steps, heatmap points and partial configuration drift from declarations",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-05",
|
||
"PKG-DANMUKU-06"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-06-types.md",
|
||
"refactor/baselines/danmuku-types-validation.json"
|
||
],
|
||
"compatibleResolution": "Validate actual accepted data and static properties, retain root compatibility and document effective fields.",
|
||
"closureCriteria": "Positive and negative installed consumers and source behavior tests cover these fields without widening away old factory contracts.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-06-types.md",
|
||
"refactor/baselines/danmuku-types-validation.json"
|
||
],
|
||
"resolutionRationale": "Preserved actual npm 5.3.0 complete root/legacy declaration and installed consumer behavior; optional runtime entry describes tested async owner, getter, mount, data, icon and callback contracts. Verified actual implementation assignability and packed/offline-installed current and historical compiler consumers."
|
||
},
|
||
{
|
||
"id": "DANMUKU-ASYNC-01",
|
||
"title": "Danmuku asynchronous input, worker replies and pending visibility have unverified failure and cancellation paths",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-02",
|
||
"PKG-DANMUKU-03",
|
||
"PKG-DANMUKU-04",
|
||
"PKG-DANMUKU-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/baselines/danmuku-failures-validation.json",
|
||
"test/danmuku-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||
"refactor/baselines/danmuku-browser-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||
"refactor/baselines/danmuku-input-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json"
|
||
],
|
||
"compatibleResolution": "Reproduce load ordering, Bilibili rejection and late worker/visibility paths before defining operation ownership.",
|
||
"closureCriteria": "Failures settle, obsolete results cannot alter new queues or destroyed instances, and worker resources are released with browser evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json",
|
||
"test/danmuku-scheduler.test.js",
|
||
"test/danmuku-worker-client.test.js",
|
||
"test/browser/danmuku-scheduler.spec.js"
|
||
],
|
||
"resolutionRationale": "Task03 input/parser settlement and task04 worker/visibility ownership prevent stale continuation, including recovery reentry; final native matrices verify worker disposal. Settings/heatmap cleanup remains separately open."
|
||
},
|
||
{
|
||
"id": "DANMUKU-HEATMAP-01",
|
||
"title": "Danmuku heatmap sampling can become zero and points/instance ownership need browser validation",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-02",
|
||
"PKG-DANMUKU-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json",
|
||
"refactor/baselines/danmuku-failures-validation.json",
|
||
"test/danmuku-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||
"refactor/baselines/danmuku-browser-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-05-resources.md",
|
||
"refactor/baselines/danmuku-resources-validation.json"
|
||
],
|
||
"compatibleResolution": "Use isolated timeout-protected reproduction for narrow dimensions, then define finite sampling and per-instance rendering.",
|
||
"closureCriteria": "Narrow widths terminate, points/config behavior is explicit and multiple SVG/control instances remain independent.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-05-resources.md",
|
||
"refactor/baselines/danmuku-resources-validation.json",
|
||
"test/danmuku-setting.test.js",
|
||
"test/danmuku-heatmap.test.js",
|
||
"test/browser/danmuku-resources.spec.js"
|
||
],
|
||
"resolutionRationale": "Narrow/invalid sampling terminates; exact historical curves and nested point mutation retained; valid large inputs are not capped arbitrarily. Native multi-instance and repeated-bundle gradient isolation preserves the first legacy ID and independent progress/control cleanup."
|
||
},
|
||
{
|
||
"id": "DANMUKU-SOURCE-01",
|
||
"title": "Danmuku registry Git associations differ from releases and static icon provenance remains incomplete",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-DANMUKU-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/danmuku-contract.md",
|
||
"refactor/baselines/danmuku-contract-validation.json",
|
||
"refactor/baselines/danmuku-release.json"
|
||
],
|
||
"compatibleResolution": "Use actual archive identity, preserve missing historical Git information and audit icon source/notice obligations.",
|
||
"closureCriteria": "Candidate tarball paths, complete module forms and icon/source provenance are explicitly reviewed; unresolved history is not invented."
|
||
},
|
||
{
|
||
"id": "DANMUKU-TRACK-01",
|
||
"title": "Native simultaneous fixed Danmuku comments can overlap with duplicate start loops and repeated Worker IDs",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-04",
|
||
"PKG-DANMUKU-05",
|
||
"PKG-DANMUKU-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||
"refactor/baselines/danmuku-browser-validation.json",
|
||
"test/browser/danmuku-baseline.spec.js",
|
||
"test/danmuku-failures.test.js",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json"
|
||
],
|
||
"compatibleResolution": "Enforce one owned scheduler loop and request correlation before claiming simultaneous native anti-overlap stability; keep strict track geometry tests.",
|
||
"closureCriteria": "Deterministic duplicate-loop/worker regressions and repeated candidate native simultaneous-load geometry pass without extra nodes or stale state; a later passing old snapshot alone does not close the race.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json",
|
||
"test/danmuku-scheduler.test.js",
|
||
"test/danmuku-worker-client.test.js",
|
||
"test/browser/danmuku-scheduler.spec.js"
|
||
],
|
||
"resolutionRationale": "Single owned loop, correlated IDs and unchanged real geometry algorithm pass deterministic regressions, all native matrices and 60 additional repeated dense cases with strict geometry, request and node counts; broad long-load acceptance remains task07."
|
||
},
|
||
{
|
||
"id": "DANMUKU-INPUT-02",
|
||
"title": "Intermediate explicit-zero correction regressed accepted NaN timestamp fallback",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-04"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json",
|
||
"test/danmuku-input.test.js"
|
||
],
|
||
"compatibleResolution": "Preserve old NaN default currentTime+0.5, corrected explicit zero and old Infinity normalization without widening validation.",
|
||
"closureCriteria": "Frozen history and current candidate numeric comparisons pass, and actual native candidate renders NaN input.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-04-scheduler.md",
|
||
"refactor/baselines/danmuku-scheduler-validation.json",
|
||
"test/browser/danmuku-scheduler.spec.js"
|
||
],
|
||
"resolutionRationale": "Historical source/main/legacy establish old behavior; source/main/legacy final input and native matrices confirm the one-condition correction. Task03 frozen evidence is preserved."
|
||
},
|
||
{
|
||
"id": "DANMUKU-LOAD-01",
|
||
"title": "Native lifecycle fixtures sometimes miss timestamp eligibility during concurrent workload; real frame/window behavior needs load evidence",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-05-resources.md",
|
||
"refactor/baselines/danmuku-resources-validation.json",
|
||
"test/browser/danmuku-scheduler.spec.js",
|
||
"refactor/baselines/danmuku-stability-validation.json",
|
||
"refactor/baselines/danmuku-frame-sampling-validation.json"
|
||
],
|
||
"compatibleResolution": "Capture native RAF/media-time gaps and scheduled/eligible/visible item counts under realistic load before deciding whether the old plus/minus 0.1 second eligibility rule needs a compatible correction.",
|
||
"closureCriteria": "Real load runs explain missing scheduled items with frame and media evidence, and any confirmed implementation defect has a regression and compatible fix; seeding ready in lifecycle fixtures is not closure evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/danmuku-stability-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-07-stability.md",
|
||
"refactor/baselines/danmuku-frame-sampling-validation.json",
|
||
"refactor/baselines/danmuku-lifetime-validation.json"
|
||
],
|
||
"resolutionRationale": "Native timing evidence distinguishes unobserved CPU-blocked windows from asynchronous scheduler starvation. Tasks 11/12 fix the reproduced implementation defects. Final three-engine real-load runs keep candidate scheduled rows observed/displayed/recycled exactly once, with actual node reuse and state/Worker ownership; unchanged historical CPU-gap semantics and full model/device/release scope remain explicit."
|
||
},
|
||
{
|
||
"id": "DANMUKU-HEATMAP-02",
|
||
"title": "Issue958 dense automatic heatmaps exceed the fixed Y domain and flatten across video",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-10"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-10-heatmap-density.md",
|
||
"refactor/baselines/danmuku-heatmap-density-validation.json",
|
||
"test/danmuku-heatmap.test.js",
|
||
"test/browser/danmuku-heatmap-density.spec.js"
|
||
],
|
||
"compatibleResolution": "Fit dense automatically sampled curves while preserving explicit axes, custom points, option property semantics and lifecycle.",
|
||
"closureCriteria": "Native playback, SVG/screen bounds, gradients and resize verified for uniform/clustered/mixed 16000 rows on both cores; historical custom paths retain exact behavior.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-10-heatmap-density.md",
|
||
"refactor/baselines/danmuku-heatmap-density-validation.json"
|
||
],
|
||
"resolutionRationale": "250 unit tests and 102 native browser cases passed, including source/main/legacy density matrices and main resource regression. No claim of full load or macOS device acceptance."
|
||
},
|
||
{
|
||
"id": "DANMUKU-TIMING-01",
|
||
"title": "Hidden Worker wait is deducted from visible lifetime and can recycle a comment immediately after visible",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-11"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-11-visible-lifetime.md",
|
||
"test/danmuku-scheduler.test.js",
|
||
"test/browser/danmuku-lifetime.spec.js",
|
||
"refactor/baselines/danmuku-lifetime-validation.json"
|
||
],
|
||
"compatibleResolution": "Anchor the lifetime clock to successful placement while preserving speed, Worker geometry, queue ordering and lifecycle cancellation.",
|
||
"closureCriteria": "Controlled three-mode regression and native delayed Worker runs distinguish historical immediate recycling from full candidate visible lifetime; ordinary scheduling regressions remain green.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/danmuku-lifetime-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-11-visible-lifetime.md"
|
||
],
|
||
"resolutionRationale": "Three exact controlled modes and real delayed Worker/native video regression establish full visible lifetime, with the unchanged published defect retained and existing scheduling/pause/cancellation checks green."
|
||
},
|
||
{
|
||
"id": "DANMUKU-SAMPLING-01",
|
||
"title": "Serial asynchronous placement stops native frame eligibility sampling and delays existing visible expiry",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-12"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-12-frame-sampling.md",
|
||
"test/browser/danmuku-timing-diagnostic.spec.js",
|
||
"refactor/baselines/danmuku-frame-sampling-validation.json"
|
||
],
|
||
"compatibleResolution": "Keep original per-frame readys semantics and serial callbacks, buffer actually sampled rows by identity, expire visible rows independently, and cancel all buffered work on lifecycle invalidation.",
|
||
"closureCriteria": "Controlled ordering/expiry/cancellation tests and native media/RAF evidence show sampled rows survive asynchronous waits without parallel callbacks or stale lifecycle emissions.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/danmuku-frame-sampling-validation.json",
|
||
"refactor/changes/2026-09-13-PKG-DANMUKU-12-frame-sampling.md"
|
||
],
|
||
"resolutionRationale": "Controlled red/green tests prove continued observation and expiry with serial callback/Worker ownership, lifecycle clearing and ready priority. Three-format native media/RAF and existing two-core scheduling/lifetime tests pass. CPU-blocked unobserved timestamps and sustained load remain separately tracked."
|
||
},
|
||
{
|
||
"id": "MASK-SCHEDULING-01",
|
||
"title": "Native Mask startup can coincide with a missed narrow Danmuku timestamp window",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"test/browser/danmuku-mask-native.spec.js",
|
||
"refactor/baselines/danmuku-mask-native-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MASK-05-native-checkpoint.md"
|
||
],
|
||
"compatibleResolution": "Retain startup sampling evidence and distinguish it from post-model-ready delivery; investigate actual startup scheduling without silently adding catch-up semantics.",
|
||
"closureCriteria": "Identify the startup scheduling cause and assess a compatible mitigation or explicitly reviewed limitation using actual model/media evidence; post-ready success alone cannot close this risk."
|
||
},
|
||
{
|
||
"id": "JASSUB-DESTROY-01",
|
||
"title": "Repeated destruction or cross-parent setVideo can throw before JASSUB cleanup",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-03",
|
||
"PKG-JASSUB-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-03-registration.md",
|
||
"refactor/baselines/jassub-registration-validation.json",
|
||
"test/jassub-registration.test.js"
|
||
],
|
||
"compatibleResolution": "Use actual resource ownership and tolerate direct instance teardown before host teardown. Task03 fixes host cleanup after direct teardown, reentry and retry/rollback. Direct vendor repetition and cross-parent cleanup remain task07 and this risk stays open.",
|
||
"closureCriteria": "Candidate direct/repeated/host teardown and cross-parent video replacement release container, Worker and listeners without throwing or removing user nodes.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Controlled old-red/candidate-green repeated direct/host teardown and native cross-parent replacement release the actual container, video listeners and Worker once, preserving user nodes."
|
||
},
|
||
{
|
||
"id": "JASSUB-CANVAS-01",
|
||
"title": "Custom canvas registration throws after JASSUB Worker allocation",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-03-registration.md",
|
||
"refactor/baselines/jassub-registration-validation.json",
|
||
"test/jassub-registration.test.js"
|
||
],
|
||
"compatibleResolution": "Guard adapter-created parent styling; retain the supplied canvas and roll back failed registration.",
|
||
"closureCriteria": "Custom canvas registration succeeds and cleanup releases owned work while preserving caller DOM; public instance and option override behavior remain compatible.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-03-registration.md",
|
||
"refactor/baselines/jassub-registration-validation.json",
|
||
"test/jassub-registration.test.js"
|
||
],
|
||
"resolutionRationale": "Adapter no longer assumes a vendor-created parent for caller canvas. Old-artifact red tests and candidate rollback/ownership tests distinguish the fix. Actual main/legacy native Worker/WASM rendering, seek/fullscreen and direct-then-host cleanup pass with caller nodes preserved across three engines and three cores using explicit event-clock mode. Default WebKit frame delivery is a separate open risk."
|
||
},
|
||
{
|
||
"id": "JASSUB-CONSTRUCTION-01",
|
||
"title": "Worker construction failure leaves previously allocated JASSUB DOM and listeners",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Roll back each construction phase and rethrow the original error without assuming new returned an instance.",
|
||
"closureCriteria": "Controlled and native construction failure do not retain owned DOM/listeners/callbacks; original error identity and successful construction remain intact.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Original controlled SecurityError identity survives rollback; actual invalid Worker URL produces native SyntaxError and leaves no owned DOM/subscriptions. Late initialization and application messages are cancelled after destruction."
|
||
},
|
||
{
|
||
"id": "JASSUB-VIDEO-FRAME-01",
|
||
"title": "Old video frame callbacks can drive replacement subtitle time and duplicate chains",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Track video generation and callback ownership across setVideo and destroy.",
|
||
"closureCriteria": "Actually queued old callbacks cannot deliver stale mediaTime or rearm; replacement video owns one loop, with native evidence.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Tests execute callbacks actually removed from a pending queue after setVideo/destroy and reject stale time or rearming. Separate real playback after video replacement renders subtitles and tears down successfully in three browser engines and both main/legacy."
|
||
},
|
||
{
|
||
"id": "JASSUB-RATE-01",
|
||
"title": "Fallback ratechange sends an Event instead of numeric playbackRate",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json"
|
||
],
|
||
"compatibleResolution": "Adapt event subscription to read the current video rate while retaining direct setRate(number).",
|
||
"closureCriteria": "Real ratechange and direct calls send numeric values, preserve timing, and avoid stale listeners after source replacement.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Controlled and actual browser ratechange send the numeric current playbackRate; cross-video listener cleanup and the existing direct setRate contract remain covered."
|
||
},
|
||
{
|
||
"id": "JASSUB-NATIVE-FRAME-01",
|
||
"title": "Windows WebKit default frame-clock path does not produce subtitle demands in actual playback",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-02",
|
||
"PKG-JASSUB-07",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-02-failure-baseline.md",
|
||
"refactor/baselines/jassub-failures-validation.json",
|
||
"refactor/changes/2026-09-15-CI-01-source-webkit.md",
|
||
"refactor/baselines/ci-source-webkit-validation.json"
|
||
],
|
||
"compatibleResolution": "Investigate native frame delivery and establish a compatible capability response; explicit event-clock success is diagnostic only.",
|
||
"closureCriteria": "Default native behavior is verified or an explicit reviewed environment limitation is recorded; no silent global fallback or substitution of diagnostic mode for default acceptance.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Native Windows WebKit zero-counter starvation is reproduced on the published default clock. A narrow media-time fallback only in the polyfill with all-zero quality counters restores default onDemand playback and seek; candidate default and custom-canvas pixel assertions pass. Native RVFC and normally increasing counters retain their paths. Default offscreen and physical devices remain task05."
|
||
},
|
||
{
|
||
"id": "JASSUB-QUERY-01",
|
||
"title": "Subtitle query errors throw before calling the consumer and leave request listeners attached",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-07",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-04-types.md",
|
||
"test/jassub-runtime.test.js"
|
||
],
|
||
"compatibleResolution": "Handle absent worker error payloads, release per-request listeners and timers before invoking user callbacks, and preserve successful synchronous query registration and callback data.",
|
||
"closureCriteria": "Actual vendor timeout and Worker-error paths invoke the consumer exactly once with the original error, leave no request listeners/timers, and successful real-WASM events/styles remain unchanged. Browser error/recovery acceptance remains PKG-JASSUB-05.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-07-vendor.md",
|
||
"refactor/baselines/jassub-vendor-validation.json",
|
||
"test/jassub-vendor-lifecycle.test.js",
|
||
"test/jassub-frame-polyfill.test.js",
|
||
"test/browser/jassub-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Actual wrapper timeout and Worker error invoke once with the original error and clean all request listeners/timers first, including throwing user callbacks. Native CSP plain Event identity is preserved; real WASM queries still succeed. Destroy cancellation settles all pending queries after cleanup; complete error recovery remains task05."
|
||
},
|
||
{
|
||
"id": "JASSUB-OFFSCREEN-01",
|
||
"title": "Default offscreen initialization lets queued resize render before Worker canvas ownership, raising clearRect on false context",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-08",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"test/jassub-offscreen.test.js",
|
||
"test/browser/jassub-native.spec.js"
|
||
],
|
||
"compatibleResolution": "Transfer the initial canvas after Worker readiness but before releasing queued rendering; preserve selected offscreen/default and all worker resources.",
|
||
"closureCriteria": "Same ordering test fails on the pre-fix artifact and passes on candidate; actual default offscreen pixels, seek/layout and teardown pass on Chromium/Firefox and capability fallback on WebKit, with main-thread regressions retained.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-08-offscreen.md",
|
||
"refactor/baselines/jassub-offscreen-validation.json",
|
||
"test/jassub-offscreen.test.js"
|
||
],
|
||
"resolutionRationale": "Controlled queue test reproduces pre-fix canvas-before-transfer order. Candidate transfers before opening readiness and passes actual default offscreen Chromium/Firefox playback/seek/layout; Windows WebKit default capability fallback and explicit main-thread/lifecycle regressions remain green. Full device/hybrid/error recovery remains task05."
|
||
},
|
||
{
|
||
"id": "JASSUB-HYBRID-01",
|
||
"title": "Late hybrid frames mutate the new offscreen canvas or throw; terminal track calls recreate transferred canvases",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-09",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"test/jassub-offscreen.test.js",
|
||
"test/browser/jassub-hybrid.spec.js"
|
||
],
|
||
"compatibleResolution": "Ignore obsolete hybrid render side effects while releasing their bitmaps, and preserve terminal canvas ownership in reattachment.",
|
||
"closureCriteria": "Controlled and held-native-bitmap red/green cases preserve the newly reattached canvas and pending demand; terminal public track calls allocate nothing, normal hybrid and default/main-thread rendering remain valid. Native capability limitations are recorded."
|
||
},
|
||
{
|
||
"id": "JASSUB-FIREFOX-OFFSCREEN-01",
|
||
"title": "Windows Firefox offscreen readback and asynchronous ImageBitmap creation can stall through seek/layout, including a minimal Worker control",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-JASSUB-09",
|
||
"PKG-JASSUB-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-09-hybrid.md",
|
||
"refactor/baselines/jassub-hybrid-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-09-firefox-diagnostics.md",
|
||
"refactor/baselines/jassub-firefox-diagnostics.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-09-display.md",
|
||
"refactor/baselines/jassub-display-validation.json",
|
||
"test/browser/jassub-platform.spec.js",
|
||
"test/browser/jassub-native.spec.js",
|
||
"test/browser/jassub-hybrid.spec.js",
|
||
"refactor/changes/2026-09-15-CI-01-jassub-installed.md",
|
||
"refactor/baselines/ci-jassub-installed-validation.json",
|
||
"refactor/changes/2026-09-15-PKG-JASSUB-09-native-call.md",
|
||
"refactor/baselines/jassub-native-call-validation.json"
|
||
],
|
||
"compatibleResolution": "Isolate native media/compositor/readback and sequence effects without globally disabling default offscreen or deleting assertions. The pre-09 artifact also fails in the same sequence; do not claim the new hybrid guard caused or fixed this separate failure. Single-flight controls also stall; API-entry/return timing locates a captured delay before createImageBitmap returns its Promise, alongside synchronous main-thread canvas readback. A script-free native host has the same ten-second observation despite an eventual-pixel pass. Retain latency evidence; neither core scripts nor concurrent creation are required for that control stall.",
|
||
"closureCriteria": "Identify and verify a compatible fix or a reviewed precise platform boundary with native controls. Preserve known red sequence and successful standalone comparison; candidate playback/fullscreen pixels and lifetime must be justified, not merely rerun to green."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-CANVAS-01",
|
||
"title": "Private thumbnail canvas retains sheet dimensions after completion or cancellation while callbacks retain the element",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-07-canvas.md",
|
||
"refactor/baselines/auto-thumbnail-canvas-validation.json",
|
||
"test/auto-thumbnail-canvas.test.js",
|
||
"test/browser/auto-thumbnail-lifecycle.spec.js"
|
||
],
|
||
"compatibleResolution": "Own width/height reset in the extraction job and guard allocation reentry; retain completed JPEG URLs.",
|
||
"closureCriteria": "Controlled old/new and native retained-callback checks demonstrate terminal zero dimensions, independent cleanup and still-decodable completed JPEGs.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-07-canvas.md",
|
||
"refactor/baselines/auto-thumbnail-canvas-validation.json",
|
||
"test/auto-thumbnail-canvas.test.js",
|
||
"test/browser/auto-thumbnail-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Six controlled regressions fail before and pass after. The frozen main native complete control fails dimensions; candidate main/legacy native lifecycle checks reset the retained canvas and decode final JPEGs after reset. No public options, types, sample positions or caller URLs changed; WebKit early-frame pixels remain separately open."
|
||
},
|
||
{
|
||
"id": "EX-REACT-LIFE-01",
|
||
"title": "React getInstance exception leaks the constructed player",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"EX-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-EX-01-react-consumer.md",
|
||
"refactor/baselines/react-consumer-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-EX-01-react-consumer.md",
|
||
"refactor/baselines/react-consumer-validation.json",
|
||
"refactor/scripts/react-consumer.mjs"
|
||
],
|
||
"compatibleResolution": "The old wrapper leaves one active instance after the React error boundary; the candidate cleans each instance exactly once and propagates the original error in six real browser profiles.",
|
||
"closureCriteria": "Actual installed consumer and original App entry pass without changing the wrapper props, default configuration or effect dependency contract.",
|
||
"resolutionRationale": "The old wrapper leaves one active instance after the React error boundary; the candidate cleans each instance exactly once and propagates the original error in six real browser profiles."
|
||
},
|
||
{
|
||
"id": "EX-REACT-ENTRY-01",
|
||
"title": "React HTML references absent main.jsx instead of the existing TSX entry",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"EX-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-EX-01-react-consumer.md",
|
||
"refactor/baselines/react-consumer-validation.json"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-EX-01-react-consumer.md",
|
||
"refactor/baselines/react-consumer-validation.json",
|
||
"refactor/scripts/react-consumer.mjs"
|
||
],
|
||
"compatibleResolution": "The HTML now loads main.tsx; the unchanged App call builds and loads controlled media in all six installed consumer browser profiles.",
|
||
"closureCriteria": "Actual installed consumer and original App entry pass without changing the wrapper props, default configuration or effect dependency contract.",
|
||
"resolutionRationale": "The HTML now loads main.tsx; the unchanged App call builds and loads controlled media in all six installed consumer browser profiles."
|
||
},
|
||
{
|
||
"id": "SITE-TRANS-DATA-01",
|
||
"title": "Translation deletes English before requests and repairs valid fences destructively; exhausted rate limits return undefined",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-AI-DOCS-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-AI-DOCS-01-documentation-pipeline.md",
|
||
"refactor/baselines/documentation-pipeline-validation.json",
|
||
"test/documentation-pipeline.test.js"
|
||
],
|
||
"compatibleResolution": "Keep CLI paths and translation source scope; make default local, request into isolated drafts, validate and explicitly apply with caught-error rollback. Preserve player public APIs.",
|
||
"closureCriteria": "Frozen old-function tests reproduce deletion, fence damage and undefined 429; candidate tests retain existing English on failed/damaged/stale requests and verify reviewed apply, rollback, cancellation and bounded request/body lifetime.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-AI-DOCS-01-documentation-pipeline.md",
|
||
"refactor/baselines/documentation-pipeline-validation.json",
|
||
"test/documentation-pipeline.test.js"
|
||
],
|
||
"resolutionRationale": "Twelve candidate regressions pass, including actual 13-file Markdown round-trip and local HTTP stalled body. No live translation was applied. Power loss and hostile concurrent filesystem mutation are explicitly outside transaction guarantees."
|
||
},
|
||
{
|
||
"id": "SITE-I18N-DATA-01",
|
||
"title": "Language build deletes existing distribution before compilation succeeds",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-BUILD-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-BUILD-01-staged-builds.md",
|
||
"refactor/baselines/site-build-validation.json",
|
||
"test/site-build.test.js",
|
||
"test/site-build.test.js"
|
||
],
|
||
"compatibleResolution": "Preserve commands, language exports and UI classes while correcting internal failure and generation behavior.",
|
||
"closureCriteria": "Retain old reproduction and candidate filesystem/renderer evidence; verify actual build outputs and relevant consumer/UI contracts.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-BUILD-01-staged-builds.md",
|
||
"refactor/baselines/site-build-validation.json",
|
||
"test/site-build.test.js",
|
||
"test/site-build.test.js"
|
||
],
|
||
"resolutionRationale": "Frozen old function loses prior output on first compile failure; staged candidate keeps both directories intact and recovers caught rename failures, retaining backups on concurrent conflicts."
|
||
},
|
||
{
|
||
"id": "SITE-CODE-GROUP-01",
|
||
"title": "VitePress code-group random IDs make identical site inputs emit different output hashes",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-BUILD-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-BUILD-01-staged-builds.md",
|
||
"refactor/baselines/site-build-validation.json",
|
||
"test/site-build.test.js",
|
||
"test/site-markdown.test.js"
|
||
],
|
||
"compatibleResolution": "Preserve commands, language exports and UI classes while correcting internal failure and generation behavior.",
|
||
"closureCriteria": "Retain old reproduction and candidate filesystem/renderer evidence; verify actual build outputs and relevant consumer/UI contracts.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-BUILD-01-staged-builds.md",
|
||
"refactor/baselines/site-build-validation.json",
|
||
"test/site-build.test.js",
|
||
"test/site-markdown.test.js"
|
||
],
|
||
"resolutionRationale": "Installed renderer reproduces random IDs; wrapper stabilizes page/group/tab identity and label associations. Consecutive full builds have equal tree fingerprints and three browser engines verify actual tab selection and visible blocks."
|
||
},
|
||
{
|
||
"id": "SITE-EDITOR-FAILURE-01",
|
||
"title": "Desktop editor evaluates raw TypeScript and cannot settle FileReader errors or boot with denied storage",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
|
||
"refactor/baselines/site-editor-validation.json",
|
||
"test/site-editor.test.js",
|
||
"test/browser/site-editor.spec.js"
|
||
],
|
||
"compatibleResolution": "Keep existing UI selectors, preference keys, URL and player/plugin APIs; fix internal initialization, failure and TS execution behavior.",
|
||
"closureCriteria": "Retain old failure evidence and verify candidate actual editor interactions plus deterministic generation and strict types.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
|
||
"refactor/baselines/site-editor-validation.json",
|
||
"test/site-editor.test.js",
|
||
"test/browser/site-editor.spec.js"
|
||
],
|
||
"resolutionRationale": "Frozen old-source reproductions and candidate Node/browser tests verify TS emit before execution, settled file errors and storage-denied fallback without changing player APIs."
|
||
},
|
||
{
|
||
"id": "SITE-EDITOR-AMD-01",
|
||
"title": "Late Monaco language AMD initialization races with example dependency loading",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-03"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
|
||
"refactor/baselines/site-editor-validation.json",
|
||
"test/site-editor.test.js",
|
||
"test/browser/site-editor.spec.js"
|
||
],
|
||
"compatibleResolution": "Keep existing UI selectors, preference keys, URL and player/plugin APIs; fix internal initialization, failure and TS execution behavior.",
|
||
"closureCriteria": "Retain old failure evidence and verify candidate actual editor interactions plus deterministic generation and strict types.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-03-desktop-editor.md",
|
||
"refactor/baselines/site-editor-validation.json",
|
||
"test/site-editor.test.js",
|
||
"test/browser/site-editor.spec.js"
|
||
],
|
||
"resolutionRationale": "Initial real WebKit failure retained; await JS/TS language modules before Run and example dependencies. Delayed-module regression passes on all three engines."
|
||
},
|
||
{
|
||
"id": "VTT-CORE-NAME-01",
|
||
"title": "Published VTT 1.0.1 control name conflicts with the core placeholder introduced in 5.1.7",
|
||
"confirmation": "reproduced",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-VTT-THUMB-05",
|
||
"REL-08"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-VTT-THUMB-05-combinations.md",
|
||
"refactor/baselines/vtt-thumbnail-combinations.json",
|
||
"refactor/baselines/vtt-thumbnail-core.json",
|
||
"test/browser/vtt-thumbnail-combinations.spec.js"
|
||
],
|
||
"compatibleResolution": "Preserve current vtt-thumbnail and reserved core control identities; distinguish the actual working 1.0.1/5.1.6 pair from the already failing 5.1.7/5.4.0/candidate pair. Decide the supported historical pairing/migration or a compatible accommodation during release review without hiding duplicate-control failures.",
|
||
"closureCriteria": "Historical working and failing browser pairs remain reproducible; any claimed accommodation preserves reserved-control ownership and duplicate-registration contracts, or an explicit reviewed historical support/migration boundary is recorded.",
|
||
"workspaceState": "Final three-engine suite passes nine assertions of this historical rejection, not nine successful compatibility cells. No production control behavior was changed."
|
||
},
|
||
{
|
||
"id": "SCAFFOLD-OUTPUT-01",
|
||
"title": "Plugin generation overwrites existing examples and links to a different example name",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"MOD-PLUGIN-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-MOD-PLUGIN-01-scaffold.md",
|
||
"refactor/baselines/scaffold-validation.json",
|
||
"test/plugin-scaffold.test.js"
|
||
],
|
||
"compatibleResolution": "Keep valid CLI and package/global/example names; reject existing outputs and generate the README from the actual example name.",
|
||
"closureCriteria": "Reproduce both historical defects and verify candidate collision/rollback behavior and a built typed package.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-MOD-PLUGIN-01-scaffold.md",
|
||
"refactor/baselines/scaffold-validation.json",
|
||
"test/plugin-scaffold.test.js"
|
||
],
|
||
"resolutionRationale": "Frozen old generator reproduces overwrite and mismatched URL. Candidate refuses old or concurrent output, preserves external edits on rollback, generates matching dotted URLs and passes actual three-format package consumers and strict types."
|
||
},
|
||
{
|
||
"id": "DEV-SERVOR-PORT-01",
|
||
"title": "Servor exits the entire dev process with status zero when the requested port is occupied",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"MOD-DEV-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-MOD-02-library-tooling.md",
|
||
"refactor/scripts/servor-port-probe.mjs",
|
||
"refactor/baselines/library-tooling-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve the default dev URL and CLI while reporting startup failures with nonzero status, without stopping another service. Define ownership of HTTP, watch and reload resources.",
|
||
"closureCriteria": "Real occupied-port and repeated startup/shutdown checks pass for the candidate; build, reload and error recovery remain compatible. Separate source-observed resource ownership limitations from reproduced leaks.",
|
||
"workspaceState": "Owned HTTP/watch/SSE session replaces Servor HTTP. Real occupied-port CLI exits1 and leaves original service alive; repeated same-port shutdown/restart, cancellation, automatic reload and compiler recovery pass on Windows. Remote OS validation remains a separate release gate.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-MOD-DEV-01-dev-server.md",
|
||
"refactor/baselines/dev-server-validation.json",
|
||
"test/dev-server.test.js",
|
||
"test/browser/library-development.spec.js"
|
||
],
|
||
"resolutionRationale": "Exact port binding rejects with EADDRINUSE; CLI propagates exit1. Explicit close/done owns HTTP sockets, file pipelines, source/docs watchers, SSE heartbeat and active builds. Eight node tests and six Windows real-browser cases cover the stated defect and lifecycle scope without stopping unrelated services."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-ENCODE-TIMEOUT-01",
|
||
"title": "Pending JPEG encoding has no bounded lifetime after frame readiness finishes",
|
||
"confirmation": "source-observed",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-10"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-AUTO-THUMB-10-encoding.md",
|
||
"refactor/baselines/auto-thumbnail-encoding-validation.json"
|
||
],
|
||
"compatibleResolution": "Preserve normal progressive JPEG publication and prior previews; add an explicit30-second encoding deadline with cancellation and stale callback protection.",
|
||
"closureCriteria": "Withheld callback ownership, timeout/late delivery, completion/restart/destroy and registration/cleanup reentry have regression coverage; native JPEG/resource and built artifact checks pass without waiving pixel/device gates.",
|
||
"workspaceState": "Source inspection and six controlled old failures show no encoding deadline. Dedicated encoder now owns one30-second timer, clears it before publication and releases the job on expiry. This is a bounded-resource policy, not proof of a spontaneous native encoder hang. Initial metadata/network and aggregate budgets remain separate.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/auto-thumbnail-encoding-validation.json",
|
||
"test/auto-thumbnail-encoding.test.js",
|
||
"test/browser/auto-thumbnail-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Nine controlled cases and real native JPEG tests cover held/late callbacks and decoder/canvas disposal. Actual production UMD passes11 Node and9 browser checks; previous preview survives timeout. Very slow encoding can now be discarded explicitly; public options, registration and frame-time formula remain intact."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-MARKUP-01",
|
||
"title": "Semantic cue nodes receive HTML wrappers inside their annotation fields",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-08"
|
||
],
|
||
"evidence": [
|
||
"test/multiple-subtitles-failures.test.js",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-08-entities.md",
|
||
"refactor/baselines/multiple-subtitles-entities-validation.json"
|
||
],
|
||
"compatibleResolution": "Wrap prepared cue nodes with sibling opening/closing nodes, retaining annotations, CSS hooks, nested timestamps and escaped literal text.",
|
||
"closureCriteria": "Nine historical implementations reproduce malformed b attributes and undefined text; candidate tag/text/selection/reset and real published/candidate core display pass.",
|
||
"workspaceState": "Nine frozen implementations serialize malformed b attributes containing an undefined wrapper. Authored merge now wraps nodes outside annotations. Vendor and public types are unchanged.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-08-entities.md",
|
||
"refactor/baselines/multiple-subtitles-entities-validation.json"
|
||
],
|
||
"resolutionRationale": "Historical regressions retain old output; corrected b/c/v/ruby and text cases plus actual b/literal-tag native/HTML display pass. Immutable trees, timestamps and lifecycle tests remain green."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-OFFSET-01",
|
||
"title": "Paused Firefox subtitle offset leaves out-of-time native cues active and captions visible",
|
||
"confirmation": "reproduced",
|
||
"workspaceState": "Native Firefox155 probe confirms stale paused membership. Candidate reinserts original cue objects only when paused membership/order is inconsistent; mode toggling was rejected after tied-caption reversal. Real main and legacy pass current paused positive/negative/reset offsets, disabled tracks and resumed playback in all3 engines. Published cores remain immutable defect observations, and package task05 still owns old-host combination acceptance.",
|
||
"compatibleResolution": "Reduce native timing invalidation and ensure offset updates render the correct active captions without seeking media or changing public timing and event contracts.",
|
||
"closureCriteria": "Candidate paused positive/negative/reset offsets refresh correctly, transitions and lifecycle regressions pass; historical behavior and actual old-core compatibility are separately documented.",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-05",
|
||
"CORE-SUBTITLE-OFFSET-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-05-combinations.md",
|
||
"refactor/baselines/multiple-subtitles-combinations-validation.json",
|
||
"test/browser/multiple-subtitles-combinations.spec.js",
|
||
"refactor/changes/2026-09-14-CORE-SUBTITLE-OFFSET-01-paused.md",
|
||
"refactor/baselines/subtitle-offset-validation.json",
|
||
"test/browser/subtitle-offset-native.spec.js",
|
||
"test/browser/subtitle-offset.spec.js",
|
||
"test/subtitle.test.js"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-CORE-SUBTITLE-OFFSET-01-paused.md",
|
||
"refactor/baselines/subtitle-offset-validation.json"
|
||
],
|
||
"resolutionRationale": "Candidate core fix passes focused native/public/rendered membership, identity/order/time/mode/event and lifecycle checks, with actual main/legacy evidence. Historical Firefox failures are separately asserted and documented; closing this candidate defect does not approve all old-core combinations."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-SWITCH-01",
|
||
"title": "Intermittent WebKit core5.3.0 caption loss after selected-track source switch",
|
||
"confirmation": "reproduced",
|
||
"workspaceState": "Still open after task11: property traces3+9 and passive105 cases pass while confirming early old-core settlement; default untraced63 has another near-zero seek miss on5.3.0/WebKit (time0.0015139, intact1..3 cue, no active cue). No failing native-write trace yet. Opt-in metadata/restoration-seeked control passes27 cases but is not a production/API fix; default and immediate-call probes remain unchanged. Candidate source guarantees pass. Task05 still owns remaining diagnosis and acceptance.",
|
||
"compatibleResolution": "Classify the old-host source/native-seek race separately from caption rendering; preserve immediate-call probes, require candidate first seeks, and wait for real native source completion before independent caption-seek assertions.",
|
||
"closureCriteria": "Root cause classified with targeted evidence, any required fix validated, and changed candidate/old-core combination rerun without hiding the original failure.",
|
||
"status": "open",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-05",
|
||
"PKG-MULTI-SUB-09"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-05-combinations.md",
|
||
"refactor/baselines/multiple-subtitles-combinations-validation.json",
|
||
"test/browser/multiple-subtitles-combinations.spec.js",
|
||
"refactor/changes/2026-09-14-CORE-SUBTITLE-OFFSET-01-paused.md",
|
||
"refactor/baselines/subtitle-offset-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-09-switch-order.md",
|
||
"refactor/baselines/multiple-subtitles-switch-validation.json",
|
||
"test/browser/multiple-subtitles-switch.spec.js",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-10-legacy-captions.md",
|
||
"refactor/baselines/multiple-subtitles-legacy-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-05-seek-diagnostics.md",
|
||
"refactor/baselines/multiple-subtitles-seek-diagnostics.json",
|
||
"test/browser/source-seek-diagnostics.js",
|
||
"test/browser/source-restoration.js"
|
||
],
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-09-switch-order.md",
|
||
"refactor/baselines/multiple-subtitles-switch-validation.json"
|
||
],
|
||
"resolutionRationale": "No-plugin controls reproduce the same miss and a settled seek restores correct old/new captions without changing plugin data. Candidate source code already provides the necessary readiness guard (BASE-LIFE-44/CORE-19 context). This resolves the suspected plugin-switch defect; it does not approve every historical source call or complete package task05."
|
||
},
|
||
{
|
||
"id": "MULTI-SUB-ASS-01",
|
||
"title": "Published core5.1.2 ASS converter loses required VTT line breaks",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-MULTI-SUB-11"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-10-legacy-captions.md",
|
||
"refactor/baselines/multiple-subtitles-legacy-validation.json",
|
||
"refactor/baselines/multiple-subtitles-cores.json",
|
||
"test/browser/multiple-subtitles-legacy.spec.js",
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-11-ass-conversion.md",
|
||
"refactor/baselines/multiple-subtitles-ass-validation.json",
|
||
"test/multiple-subtitles-ass.test.js",
|
||
"test/browser/multiple-subtitles-ass.spec.js"
|
||
],
|
||
"workspaceState": "Task11 verifies actual5.1.2 main/legacy/source hashes and repairs only complete converter output matching collapsed main line breaks. Full plugin315 and actual-format targeted tests pass; source/main/legacy each21 native desktop cases pass across5 cores and3 engines. Both old-host third tracks now use ASS. Original host utils unchanged; valid/custom output and exceptions preserved. Full ASS layout and physical devices are not claimed.",
|
||
"compatibleResolution": "Adapt malformed old conversion in the plugin while preserving valid existing converter output and public API.",
|
||
"closureCriteria": "Frozen actual-output reproduction, compatible conversion fix and real ASS display verified on old/current hosts and shippable formats.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-MULTI-SUB-11-ass-conversion.md",
|
||
"refactor/baselines/multiple-subtitles-ass-validation.json"
|
||
],
|
||
"resolutionRationale": "Frozen main output fails before repair while same-version legacy/source remain correct. Exact-output repair preserves valid/custom output and exception ownership.315 package checks, actual main/legacy unit cases and source/main/legacy each21 native desktop cases prove this specific conversion defect fixed, without claiming full ASS layout, device or source-seek acceptance."
|
||
},
|
||
{
|
||
"id": "JASSUB-RENDER-RESOURCES-01",
|
||
"title": "Main-thread async rendering leaves received ImageBitmaps open when native canvas operations throw",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-JASSUB-10"
|
||
],
|
||
"evidence": [
|
||
"test/jassub-offscreen.test.js",
|
||
"test/browser/jassub-render-failure.spec.js",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-10-render-resources.md",
|
||
"refactor/baselines/jassub-render-validation.json"
|
||
],
|
||
"compatibleResolution": "Release all owned async bitmaps in finally, preserving the original native exception, ordinary draw order and synchronous pixel buffer behavior.",
|
||
"closureCriteria": "Controlled clear/resize/first/later draw failures and actual native Canvas failure release all bitmaps; normal rendering, subsequent subtitle recovery, source/built regressions, provenance and strict types pass.",
|
||
"workspaceState": "Final main/legacy release all owned bitmaps on native drawing failure; normal main-thread subtitle playback and explicit redraw recovery pass on three desktop engines. Firefox offscreen stall remains separate.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/jassub-render-validation.json",
|
||
"refactor/changes/2026-09-14-PKG-JASSUB-10-render-resources.md",
|
||
"test/jassub-offscreen.test.js",
|
||
"test/browser/jassub-render-failure.spec.js"
|
||
],
|
||
"resolutionRationale": "Old exact main fails all four controlled disposal cases and all three native batch-disposal cases. Candidate full suite passes 201 cases; actual main/legacy runtime groups each pass 69 cases and each has 12 native failure/recovery/playback cases. The fix changes only async bitmap release on main-thread render and retains exceptions and synchronous buffers."
|
||
},
|
||
{
|
||
"id": "ENG-PERF-OBS-01",
|
||
"title": "A nominal 350 ms resource observation can record only 349 ms and fail the required minimum",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"ENG-13"
|
||
],
|
||
"evidence": [
|
||
"refactor/baselines/observation-window-validation.json",
|
||
"refactor/changes/2026-09-14-ENG-13-observation-window.md",
|
||
"test/performance-report.test.js"
|
||
],
|
||
"compatibleResolution": "Wait for the remaining measured interval using the original probe timer, applying the same rule to both variants and retaining actual times and all frozen inputs.",
|
||
"closureCriteria": "349 ms remains rejected; simulated early callback is re-armed; native three-engine candidate resource probes meet at least 350 ms with no resource residue; frozen timing loops and existing thresholds remain unchanged.",
|
||
"workspaceState": "The old Firefox report records one 349 ms candidate window. The page adapter now enforces the measured minimum; 54 candidate and 54 published resource windows meet the observation minimum, with strict candidate cleanup passing.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/observation-window-validation.json",
|
||
"refactor/changes/2026-09-14-ENG-13-observation-window.md",
|
||
"test/performance-report.test.js"
|
||
],
|
||
"resolutionRationale": "The fix enforces an existing observation requirement rather than rounding failed values or relaxing a gate. Exact reverse-adaptation tests preserve the frozen body, deterministic clock tests cover early/overshooting/error paths, and the same installed candidate passes the full native paired protocol in all three engines. Performance review signals remain separate."
|
||
},
|
||
{
|
||
"id": "VCONSOLE-LIFECYCLE-01",
|
||
"title": "vConsole delayed log, panel and scroller work outlives its owner",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-07",
|
||
"SITE-05",
|
||
"SITE-VCONSOLE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-SITE-07-vendor-notices.md",
|
||
"refactor/baselines/site-notices-checkpoint.json",
|
||
"scripts/site-vendor/manifest.json",
|
||
"test/browser/site-vendor.spec.js"
|
||
],
|
||
"compatibleResolution": "Reproduce the exact delayed callback from fixed upstream source and preserve logging/global/CSS behavior while preventing work on a removed store; do not remove destruction checks or catch page errors to pass.",
|
||
"closureCriteria": "A deterministic old-build failure and fixed native three-engine logging/destruction checks with no late errors, plus maintainable source/build provenance and required notices.",
|
||
"workspaceState": "Frozen original deterministically fails 12 lifecycle cases across three engines; candidate passes 21 including actual mobile logging/playback. The six pinned replacements fix RAF ownership, panel identity and two scroller resumptions.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-SITE-VCONSOLE-01-lifecycle.md",
|
||
"refactor/baselines/vconsole-lifecycle-validation.json",
|
||
"scripts/site-vendor/vconsole/README.md",
|
||
"test/browser/vconsole-lifecycle.spec.js"
|
||
],
|
||
"resolutionRationale": "Runtime lifecycle regression is fixed and old/native evidence retained. Original notices remain distributed; the distinct missing license body/dependency notices remain open under VENDOR-07 and SITE-07, without treating this runtime fix as clearance."
|
||
},
|
||
{
|
||
"id": "CHAPTER-FULLSCREEN-GEOMETRY-01",
|
||
"title": "Chromium 原生全屏后章节 hover 标题曾出现后又隐藏",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CHAPTER-05",
|
||
"PKG-CHAPTER-HOVER-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-CI-BROWSER-01-scopes.md",
|
||
"refactor/baselines/browser-scope-validation.json",
|
||
"test/browser/chapter-combinations.spec.js"
|
||
],
|
||
"compatibleResolution": "核对原生全屏布局/controls transition 与鼠标坐标的时序;根据实际根因修复测试同步或生产实现,保持旧接口。",
|
||
"closureCriteria": "保留原失败并取得可解释的旧红新绿/稳定真实浏览器证据,不用重试、延时扩大或移除 opacity 断言关闭。",
|
||
"workspaceState": "Shared typed hover helper waits for actionability before coordinate sampling. Production package bytes are unchanged; report-bound old/new core/plugin combinations cover main and legacy on three desktop engines. Physical devices and Chapter-05/06 acceptance remain open.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-CHAPTER-HOVER-01-geometry.md",
|
||
"refactor/baselines/chapter-hover-validation.json",
|
||
"test/browser/chapter-hover.ts",
|
||
"test/browser/chapter-hover.spec.js"
|
||
],
|
||
"resolutionRationale": "The immediate bounding-box read permits stale pointer coordinates while progress transforms move. Initial hit-test control gives 4 failures/2 passes before and 6 passes after waiting for locator stability. WebKit hit tests disagree with the final rectangle, so additional explicit bounds assertions were added: baseline 6 failures, stable main/legacy 6 passes each. Complete main/legacy chapter combination suites retain title, opacity, thumbnails and fullscreen assertions (66 passes each). This closes the identified test synchronization race, not all possible production fullscreen defects or CHAPTER-TIMING-01. Original 224/1 failure remains archived; its exact scheduler cannot be replayed."
|
||
},
|
||
{
|
||
"id": "CANVAS-SUBTITLE-01",
|
||
"title": "Canvas底层video缺初始字幕轨道且普通Canvas挂载不能加载原生字幕",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CANVAS-SUBTITLE-01",
|
||
"PKG-CANVAS-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-CANVAS-SUBTITLE-01-track.md",
|
||
"test/browser/canvas-subtitles.spec.js"
|
||
],
|
||
"compatibleResolution": "适配原生track能力和插入,同时保留普通Canvas操作;不得要求旧核心消费者更改调用。",
|
||
"closureCriteria": "新旧核心三引擎字幕加载/寻址/切换/清理、普通节点与分发回归,有旧红新绿证据。",
|
||
"workspaceState": "Native subtitle bootstrap and track insertion are isolated in subtitles.ts. Old/new core source and installed main/legacy pass real subtitle load/seek/replacement/cleanup and normal Canvas-node checks. Public declaration shape is unchanged.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-CANVAS-SUBTITLE-01-track.md",
|
||
"refactor/baselines/canvas-subtitles-validation.json",
|
||
"test/browser/canvas-subtitles.spec.js"
|
||
],
|
||
"resolutionRationale": "Initial candidate and routing-only controls each fail all six subtitle cases. Bootstrap + insertion adaptation passes; npm 1.1.0 independently fails all six. Expanded native source tests pass 24; installed main and legacy pass 33 each; final six pass after adding baseline selection. Captions also visibly render in the local demo. This fixes subtitle capability/insertion only; broader Canvas integration remains open."
|
||
},
|
||
{
|
||
"id": "DPIP-INSTALLED-PROVENANCE-01",
|
||
"title": "Document PiP测试加载器忽略显式安装map并回退到源码",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-CANVAS-05",
|
||
"CI-01"
|
||
],
|
||
"evidence": [
|
||
"test/package-check.test.js",
|
||
"refactor/baselines/canvas-dpip-validation.json"
|
||
],
|
||
"compatibleResolution": "使用已安装文件及source/build指纹,缺输入拒绝执行;保留独立source模式。",
|
||
"closureCriteria": "缺安装map旧红新绿,实际五包main/legacy原生组合与工作流配置验证。",
|
||
"workspaceState": "Explicit map takes precedence; DPIP frozen/artifact overrides conflict instead of overriding installed provenance. Current CI prepares five packages before browser scopes.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-CANVAS-05-native-pip.md",
|
||
"refactor/baselines/canvas-dpip-validation.json",
|
||
"test/helpers/dpip.js",
|
||
"refactor/scripts/ci-workflow.test.mjs"
|
||
],
|
||
"resolutionRationale": "Old loader test reports missing expected rejection; updated loader rejects missing/stale maps and conflicting modes. Five-package isolated build/pack/install supplies main and legacy native PiP tests with package hashes. Local workflow mutation protects the required DPIP preparation; remote runs remain unverified."
|
||
},
|
||
{
|
||
"id": "DASH-MENU-01",
|
||
"title": "SDK 5.2.1 播放中设置质量选项在点击时变为不可见",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DASH-MENU-01",
|
||
"PKG-DASH-05",
|
||
"REVIEW-02"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-DASH-SEEK-01-buffer-metrics.md",
|
||
"refactor/baselines/dash-seek-recovery-validation.json"
|
||
],
|
||
"compatibleResolution": "SDK自动刷新前捕获本插件拥有的打开子菜单,在两项设置更新后按新selector恢复;显式update、关闭/移除/接管以及嵌套更新保持原边界。守卫SDK身份、revision、销毁与菜单所有权。",
|
||
"closureCriteria": "定位实际隐藏/刷新时序并提供可复现旧红新绿;新旧核心、main/legacy、质量/音轨、SDK刷新与销毁组合验证,不靠force点击或重跑覆盖失败。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-DASH-MENU-01-settings-navigation.md",
|
||
"refactor/baselines/dash-menu-validation.json",
|
||
"test/browser/dash-sdk.spec.js",
|
||
"test/dash-events.test.js"
|
||
],
|
||
"resolutionRationale": "原trace显示设置仍打开但导航退回根面板;真实SDK刷新在四组核心/SDK组合复现相同失败。修复后源码92、main设置32、legacy完整候选92通过,新旧核心/两SDK/两引擎覆盖质量及音轨,原失败与未加force/延长超时的回归均保留。Node446验证三格式及重入/销毁边界;DASH其他SDK/设备/发布风险仍独立开放。"
|
||
},
|
||
{
|
||
"id": "DANMUKU-MASK-LOAD-01",
|
||
"title": "真实Mask模型运行时弹幕存在未采样窗口及串行放置积压",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DANMUKU-MASK-LOAD-01",
|
||
"PKG-DANMUKU-08",
|
||
"PKG-MASK-05"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-14-PKG-DANMUKU-08-combined-load.md",
|
||
"refactor/baselines/danmuku-combined-load-validation.json",
|
||
"test/browser/danmuku-mask-native.spec.js",
|
||
"test/helpers/danmuku-combination-load.js"
|
||
],
|
||
"compatibleResolution": "分析真实模型/绘制/Worker往返成本和未采样、待放置行,保持公共readys与回调顺序、显示寿命及生命周期取消;用独立回归验证兼容修复。",
|
||
"closureCriteria": "原始失败保留并有可解释修复;真实模型下120行完整交付、无活动引用积压,新旧核心和main/legacy以及暂停/seek/hide/destroy回归通过;不降低负载、停模型或扩大等待伪造结果。",
|
||
"workspaceState": "连续播放采样窗口补回CPU跨窗行;允许重叠放置直接复用原轨道函数,防重叠和内部消息API仍使用Worker。真实模型源码18、main39、legacy39通过;其中27个候选模型负载全部120行完整交付/回收,pending/reserved为空。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-14-PKG-DANMUKU-MASK-LOAD-01-scheduling.md",
|
||
"refactor/baselines/danmuku-mask-load-validation.json",
|
||
"test/danmuku-scheduler.test.js",
|
||
"test/browser/danmuku-mask-native.spec.js",
|
||
"test/browser/danmuku-lifetime.spec.js",
|
||
"test/browser/danmuku-timing-diagnostic.spec.js"
|
||
],
|
||
"resolutionRationale": "原5项负载漏显和1项负载前行失败保留;实际模型/SDK/视频和20条每秒输入、等待预算不变。源与两产物共27项模型负载完整交付;两种放置路径寿命、CPU/异步间隙、新旧核心及取消/文档迁移回归通过。Node source/main/legacy各276通过,源码类型、编辑器/消费者及隔离包12组通过。首次旧Worker假设失败和错误ESM宿主调用单独记录;不冒充ESM完整浏览器验收、帧率提升或全部包发布通过。"
|
||
},
|
||
{
|
||
"id": "CONSOLE-SCROLL-01",
|
||
"title": "控制台卸载后仍执行滚动回调",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-CONSOLE-01",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/console-modernization.md",
|
||
"refactor/baselines/site-console-inventory.json",
|
||
"refactor/baselines/site-console-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-baseline.md",
|
||
"test/browser/site-console.spec.js"
|
||
],
|
||
"workspaceState": "Owned TS console lifecycle and error adaptation implemented; frozen historical reproduction and candidate regression remain separate.",
|
||
"compatibleResolution": "Cancel pending scroll work and guard obsolete log updates; verify unmount/recreate without retained DOM work.",
|
||
"closureCriteria": "新候选修复和真实浏览器回归通过,冻结旧版仍可复现;同时验证原控制台接口和资源释放,不把历史缺陷测试通过当作修复。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-CONSOLE-01-typescript.md",
|
||
"refactor/baselines/site-console01-validation.json",
|
||
"test/browser/site-console.spec.js",
|
||
"test/site-console.test.js",
|
||
"scripts/site-vendor/console/README.md"
|
||
],
|
||
"resolutionRationale": "Candidate behavior failed on the original bundle (11 failed/1 passed); final browser/editor matrix 63 passed plus shared parser 3 passed across Chromium/Firefox/WebKit. Units, strict types and generation checks pass. Preserves React17, old component return, raw objects, exact CSS and 100 vendor module bodies. Physical BFCache and complete third-party provenance remain separate."
|
||
},
|
||
{
|
||
"id": "CONSOLE-OWNERSHIP-01",
|
||
"title": "多个控制台的全局 hook 所有权冲突",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-CONSOLE-01",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/console-modernization.md",
|
||
"refactor/baselines/site-console-inventory.json",
|
||
"refactor/baselines/site-console-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-baseline.md",
|
||
"test/browser/site-console.spec.js"
|
||
],
|
||
"workspaceState": "Owned TS console lifecycle and error adaptation implemented; frozen historical reproduction and candidate regression remain separate.",
|
||
"compatibleResolution": "Own shared subscriptions explicitly, preserve unrelated wrappers, and test both unmount orders plus same-container reuse.",
|
||
"closureCriteria": "新候选修复和真实浏览器回归通过,冻结旧版仍可复现;同时验证原控制台接口和资源释放,不把历史缺陷测试通过当作修复。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-CONSOLE-01-typescript.md",
|
||
"refactor/baselines/site-console01-validation.json",
|
||
"test/browser/site-console.spec.js",
|
||
"test/site-console.test.js",
|
||
"scripts/site-vendor/console/README.md"
|
||
],
|
||
"resolutionRationale": "Candidate behavior failed on the original bundle (11 failed/1 passed); final browser/editor matrix 63 passed plus shared parser 3 passed across Chromium/Firefox/WebKit. Units, strict types and generation checks pass. Preserves React17, old component return, raw objects, exact CSS and 100 vendor module bodies. Physical BFCache and complete third-party provenance remain separate."
|
||
},
|
||
{
|
||
"id": "CONSOLE-ERROR-01",
|
||
"title": "Firefox/WebKit 控制台丢失原生 Error 消息",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-CONSOLE-01",
|
||
"SITE-07"
|
||
],
|
||
"evidence": [
|
||
"refactor/console-modernization.md",
|
||
"refactor/baselines/site-console-inventory.json",
|
||
"refactor/baselines/site-console-validation.json",
|
||
"refactor/changes/2026-09-15-SITE-07-console-baseline.md",
|
||
"test/browser/site-console.spec.js"
|
||
],
|
||
"workspaceState": "Owned TS console lifecycle and error adaptation implemented; frozen historical reproduction and candidate regression remain separate.",
|
||
"compatibleResolution": "Preserve error message and stack in the candidate without mutating ordinary log objects; require actual three-engine Error-only rendering tests.",
|
||
"closureCriteria": "新候选修复和真实浏览器回归通过,冻结旧版仍可复现;同时验证原控制台接口和资源释放,不把历史缺陷测试通过当作修复。",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-CONSOLE-01-typescript.md",
|
||
"refactor/baselines/site-console01-validation.json",
|
||
"test/browser/site-console.spec.js",
|
||
"test/site-console.test.js",
|
||
"scripts/site-vendor/console/README.md"
|
||
],
|
||
"resolutionRationale": "Candidate behavior failed on the original bundle (11 failed/1 passed); final browser/editor matrix 63 passed plus shared parser 3 passed across Chromium/Firefox/WebKit. Units, strict types and generation checks pass. Preserves React17, old component return, raw objects, exact CSS and 100 vendor module bodies. Physical BFCache and complete third-party provenance remain separate."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-METADATA-01",
|
||
"title": "Private metadata loading can retain its decoder indefinitely without metadata or media errors",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-12"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-15-PKG-AUTO-THUMB-12-metadata.md",
|
||
"refactor/baselines/auto-thumbnail-metadata-validation.json"
|
||
],
|
||
"compatibleResolution": "Bound only the private metadata phase, dispose through existing ownership, preserve usable previews and public registration timing.",
|
||
"closureCriteria": "Prechange failure and candidate unit/artifact/browser evidence cover stale deadlines, no metadata, cancellation, success and decoder cleanup.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/auto-thumbnail-metadata-validation.json"
|
||
],
|
||
"resolutionRationale": "Seven regressions fail on prechange main; source 189/189, main and legacy 82/82, native main and legacy 36/36 each. Final pending-response tests observe the HTTP server directly. Existing first-frame risk stays open."
|
||
},
|
||
{
|
||
"id": "ASR-MEDIA-01",
|
||
"title": "ASR accepts obsolete recognition after native media error without pause",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-ASR-10",
|
||
"PKG-ASR-05"
|
||
],
|
||
"evidence": [
|
||
"test/asr-media-error.test.js",
|
||
"test/browser/asr-media-error.spec.js",
|
||
"refactor/baselines/asr-media-error-validation.json"
|
||
],
|
||
"compatibleResolution": "Use the existing nonterminal stop path on video:error; preserve direct media ownership and later playback, release capture graphs, invalidate old callbacks and remove the listener on destroy.",
|
||
"closureCriteria": "Prepatch failures and fixed regressions prove pending-result and initialization/close cancellation, plus native errors and recovery on supported old/candidate core inputs; missing device/WebAudio evidence stays in task05.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-PKG-ASR-10-media-error.md",
|
||
"refactor/baselines/asr-media-error-validation.json"
|
||
],
|
||
"resolutionRationale": "Five prepatch unit failures and four native Chromium failures become passing cancellation/recovery checks. Source and actual installed main/legacy pass, including minimum5.3.0 and5.4.0 core controls; default routing and captured cleanup remain intact. WebKit capability skips and broader package acceptance are not waived."
|
||
},
|
||
{
|
||
"id": "THUMB-CLEANUP-01",
|
||
"title": "Thumbnail 清理吞掉 falsy 监听器异常或覆盖第一个异常值",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-TOOL-THUMB-07",
|
||
"PKG-TOOL-THUMB-04"
|
||
],
|
||
"evidence": [
|
||
"test/thumbnail-cleanup-errors.test.js",
|
||
"test/browser/thumbnail-emitter.spec.js",
|
||
"refactor/changes/2026-09-15-PKG-TOOL-THUMB-07-cleanup-errors.md",
|
||
"refactor/baselines/thumbnail-cleanup-errors-validation.json"
|
||
],
|
||
"compatibleResolution": "独立标记是否发生异常,保留首个值并完成其余清理,再原样抛出;普通事件派发遇错停止,重复销毁保持幂等。",
|
||
"closureCriteria": "历史/未修复/修复候选对照、七种falsy原值身份、资源释放与真实DOM验证通过;三格式和隔离安装消费者通过,默认兼容冲突独立保留。",
|
||
"workspaceState": "PKG-TOOL-THUMB-07: before 1 pass/2 fail; source 123 pass, main/legacy 49 each; browser 57 passed reports include 10 explicit Windows WebKit Blob capability controls. Installed candidate positive/negative types and byte identity verified; no public types or defaults changed.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-PKG-TOOL-THUMB-07-cleanup-errors.md",
|
||
"refactor/baselines/thumbnail-cleanup-errors-validation.json"
|
||
],
|
||
"resolutionRationale": "Frozen historical destroy contracts preserve all seven falsy values; the prepatch candidate fails exception propagation and first-value ownership. Fixed source and rebuilt main/legacy pass cleanup/resource and actual browser DOM regressions. Installed artifact and type checks pass; historical defaults and WebKit media capability gaps remain outside this narrowly resolved regression."
|
||
},
|
||
{
|
||
"id": "DASH-CLEANUP-01",
|
||
"title": "DASH 菜单和 SDK 清理吞掉 falsy 异常或丢失首个错误",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-DASH-CLEANUP-01",
|
||
"PKG-DASH-05"
|
||
],
|
||
"evidence": [
|
||
"test/dash-cleanup-errors.test.js",
|
||
"test/browser/dash-control.spec.js",
|
||
"refactor/changes/2026-09-15-PKG-DASH-CLEANUP-01-errors.md",
|
||
"refactor/baselines/dash-cleanup-errors-validation.json"
|
||
],
|
||
"compatibleResolution": "共用独立失败标记的清理调度,保存并传播第一个原始值,同时完成剩余资源释放,保留重入/SDK归属及异步警告策略。",
|
||
"closureCriteria": "七种falsy值首错身份、兄弟资源释放、重入/销毁专项、真实控件回调、三格式安装和真实SDK回归有证据;设备能力缺口单独保留。",
|
||
"workspaceState": "Prepatch: six source failures and four valid Chromium failures; fixed source 167 pass, installed three formats plus source/historical 470 pass. Browser reports distinguish controlled DOM, actual SDK and Windows WebKit MSE skips.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-PKG-DASH-CLEANUP-01-errors.md",
|
||
"refactor/baselines/dash-cleanup-errors-validation.json"
|
||
],
|
||
"resolutionRationale": "Corrected public beforeUnmount input reproduces swallowed values against the prepatch artifact. Separate threw and Object.is assertions cover all seven values. Rebuilt and independently installed artifacts pass lifecycle/DOM/SDK regressions; public declarations are unchanged. This resolves the cleanup defect only, not full package device/release acceptance."
|
||
},
|
||
{
|
||
"id": "HLS-EXAMPLE-01",
|
||
"title": "HLS示例换源累积销毁监听器且原生回退仍安装SDK控制插件",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-HLS-01",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/hls.control.js",
|
||
"test/hls-example.test.js",
|
||
"test/browser/document-hls.spec.js",
|
||
"refactor/changes/2026-09-15-SITE-HLS-01-guides.md",
|
||
"refactor/baselines/hls-docs-validation.json"
|
||
],
|
||
"compatibleResolution": "仅修正示例:固定能力分支决定是否注册插件,局部SDK变量负责替换释放,一个播放器销毁监听器释放当前SDK;旧插件API/错误语义和SDK默认配置不变。",
|
||
"closureCriteria": "原示例可复现重复清理与错误插件注册;修复后受控回归和真实SDK新旧核心播放/换源/销毁通过;原生播放设备范围单独保留。",
|
||
"workspaceState": "Old demo 2 fail/1 pass; corrected regression 3 pass. Real SDK/browser replacement checks 16 pass, Windows WebKit unsupported setup 8 pass, docs navigation 6 pass. Native HLS branch uses a controlled unit host, not a Safari device.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-HLS-01-guides.md",
|
||
"refactor/baselines/hls-docs-validation.json"
|
||
],
|
||
"resolutionRationale": "Actual demo code is used by regression and both runnable guides. Each replaced/final SDK is destroyed once; when Hls.js is unsupported no incompatible control plugin is installed. Local 8082 connected-browser readiness also observed. Separate Firefox native crashes, grouped playback stall and device acceptance remain open."
|
||
},
|
||
{
|
||
"id": "DASH-EXAMPLE-01",
|
||
"title": "DASH示例重复销毁SDK、无MSE仍注册插件且空语言回调抛错",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-DASH-01",
|
||
"EX-03"
|
||
],
|
||
"evidence": [
|
||
"docs/assets/example/dash.control.js",
|
||
"test/dash-example.test.js",
|
||
"test/browser/document-dash.spec.js",
|
||
"refactor/changes/2026-09-15-SITE-DASH-01-guides.md",
|
||
"refactor/baselines/dash-docs-validation.json"
|
||
],
|
||
"compatibleResolution": "示例使用局部SDK所有权、单个最终清理监听器和固定能力分支;音轨语言为空时保留0值并转为字符串ID/Audio回退。插件API和SDK默认初始化设置不变。",
|
||
"closureCriteria": "旧示例回归复现,修复后每实例一次销毁、不支持路径与空语言标签正确,真实SDK两代和新旧核心播放/换源/清理有证据;设备/完整矩阵不因此完成。",
|
||
"workspaceState": "Old demo 3 fail; corrected example regression 3 pass. Browser: eight actual SDK playback/replacement, four unsupported WebKit setup, six bilingual navigation cases pass. Connected local example metadata/menus observed.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-DASH-01-guides.md",
|
||
"refactor/baselines/dash-docs-validation.json"
|
||
],
|
||
"resolutionRationale": "Tests execute the actual example and both guides enforce byte-equivalent code. Replaced and final SDKs each receive one destroy call, unsupported setup creates no SDK or plugin, nullable language formatting retains existing language labels and numeric ID zero. This closes the example defects only; complete package/device/DRM acceptance remains separate."
|
||
},
|
||
{
|
||
"id": "CI-BROWSER-MODE-01",
|
||
"title": "Installed browser validation can inherit rendering substitutions and direct config loading bypasses launcher diagnostic policy",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CI-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-15-CI-01-rendering-policy.md",
|
||
"refactor/baselines/ci-rendering-policy-validation.json",
|
||
"test/browser-validation.test.js"
|
||
],
|
||
"compatibleResolution": "Share environment validation between launcher and installed config; reject active JASSUB fixture modes and subtitle restoration replacement while retaining explicit ad hoc/source diagnostics and inactive values.",
|
||
"closureCriteria": "Old/new negative cases reject substitutions before artifact access through both entries, while standard installed tests execute verified actual tarballs and source diagnostics remain usable.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-CI-01-rendering-policy.md",
|
||
"refactor/baselines/ci-rendering-policy-validation.json"
|
||
],
|
||
"resolutionRationale": "Eleven new regression failures against the old implementation become passing; final eighteen entry tests and seventy-seven CI tests pass. Fresh twenty-package preparation and four actual installed Chromium lifecycle cases verify the normal path. Scope excludes future unreviewed flags and full CI acceptance."
|
||
},
|
||
{
|
||
"id": "AUTO-THUMB-REGISTRATION-01",
|
||
"title": "Delayed direct factory installation on a destroyed host retains subscriptions and can restart hidden decoding",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"PKG-AUTO-THUMB-13"
|
||
],
|
||
"evidence": [
|
||
"test/auto-thumbnail-registration.test.js",
|
||
"test/browser/auto-thumbnail-registration.spec.js",
|
||
"refactor/changes/2026-09-15-PKG-AUTO-THUMB-13-registration.md",
|
||
"refactor/baselines/auto-thumbnail-registration-validation.json"
|
||
],
|
||
"compatibleResolution": "Return the existing asynchronous name result before touching a destroyed host; retain live and structurally compatible hosts without isDestroy.",
|
||
"closureCriteria": "Prechange source and real-core browser failures plus fixed source, rebuilt main/legacy and normal extraction/type regressions; no change to full pixel/device gates.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/auto-thumbnail-registration-validation.json"
|
||
],
|
||
"resolutionRationale": "Two prechange Node failures and both real-core Chromium failures reproduce retained subscriptions and native video creation. Source193, main/legacy88 each and three-engine42 each pass after the entry guard; live/absent-flag hosts retain successful generation. Public types and first-frame/device gates remain unchanged."
|
||
},
|
||
{
|
||
"id": "SITE-HTML-INVENTORY-01",
|
||
"title": "New documentation HTML is missing from historical demo route coverage, failing the complete local CI check",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-ROUTES-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-15-SITE-ROUTES-01-html-inventory.md",
|
||
"refactor/baselines/site-routes-validation.json"
|
||
],
|
||
"compatibleResolution": "Keep BASE-04 immutable and explicitly track introduced pages, route identity and task ownership; preserve omission and deletion checks.",
|
||
"closureCriteria": "Old complete CI failure and final full local CI success with negative coverage tests; historical snapshot unchanged.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/site-routes-validation.json"
|
||
],
|
||
"resolutionRationale": "Nine actual Git additions recorded. Three targeted tests pass with positive controls and invalid metadata cases. Full ci:check passes 2937 runtime, 170 engineering and 619 baseline invocations after the old 617/618 baseline failure; no runtime or browser-acceptance scope expansion."
|
||
},
|
||
{
|
||
"id": "SITE-EDITOR-VAST-01",
|
||
"title": "Monaco browser consumer still assumes the workspace VAST namespace after the approved npm-root restoration",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"SITE-EDITOR-VAST-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-15-SITE-EDITOR-VAST-01-consumer.md",
|
||
"refactor/baselines/editor-vast-consumer-validation.json",
|
||
"refactor/baselines/ci-source-firefox-validation.json",
|
||
"test/browser/editor-declarations.spec.js"
|
||
],
|
||
"compatibleResolution": "Follow the approved published root declaration in the current browser consumer while retaining the frozen workspace generator fixture. Preserve public runtime/root types.",
|
||
"closureCriteria": "Keep original 2503/7006 browser diagnostics; current full declaration set and positive consumer compile, invalid root and workspace-only calls remain rejected, emitted Chapter code runs and destroys in all three engines.",
|
||
"resolutionEvidence": [
|
||
"refactor/changes/2026-09-15-SITE-EDITOR-VAST-01-consumer.md",
|
||
"refactor/baselines/editor-vast-consumer-validation.json",
|
||
"refactor/baselines/ci-source-firefox-validation.json",
|
||
"test/browser/editor-declarations.spec.js"
|
||
],
|
||
"resolutionRationale": "The full Firefox collection exposed an obsolete test contract. The corrected consumer passes in Chromium, Firefox and Windows WebKit with five exact negative diagnostics and zero positive/declaration errors; four generator tests still pass. No production declaration or SDK behavior changed."
|
||
},
|
||
{
|
||
"id": "CI-JASSUB-SOURCE-01",
|
||
"title": "Default native JASSUB source runs select only the published plugin and omit the current source",
|
||
"confirmation": "reproduced",
|
||
"status": "resolved",
|
||
"owners": [
|
||
"CI-JASSUB-SOURCE-01"
|
||
],
|
||
"evidence": [
|
||
"refactor/changes/2026-09-15-CI-JASSUB-SOURCE-01-native-inputs.md",
|
||
"refactor/baselines/jassub-source-selection-validation.json",
|
||
"test/browser/jassub-native.spec.js",
|
||
"test/browser-validation.test.js"
|
||
],
|
||
"compatibleResolution": "Always build/select the current candidate and pair it with the immutable published control unless an explicit diagnostic artifact was selected. Identify candidates by provenance kind rather than a nullable file.",
|
||
"closureCriteria": "Real CLI collection regression, source candidate across three cores and three engines with actual WASM pixels and direct cleanup before host destruction; retain historical failures and installed selection guards.",
|
||
"resolutionEvidence": [
|
||
"refactor/baselines/jassub-source-selection-validation.json"
|
||
],
|
||
"resolutionRationale": "Old collection omits three source cases. Twenty Node checks pass after correction; all nine source browser combinations render, seek and clean workers/canvases before host destruction. Three published WebKit failures remain visible; no production contract changed."
|
||
}
|
||
]
|
||
}
|