mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-15 17:16:16 -08:00
refactor(chromecast): [PKG-CAST-03] isolate SDK and player lifecycles
This commit is contained in:
1 parent
87cfcf5a6c
commit
b0cfbfe3a0
26 files changed
+2503
-551
No files matched your search
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "PKG-CAST-03",
|
||||
"status": "done",
|
||||
"capturedAt": "2026-09-13T09:12:41.513Z",
|
||||
"frozenSourceCommit": "146b78d5767bba88612184869155a39317794537",
|
||||
"unit": [
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-combined.log",
|
||||
"tests": 128,
|
||||
"sha256": "9ee410f58d5a4f00b574ab8fabab6237e8befcbee7701ee519f2a029d9709eb0",
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-main.log",
|
||||
"tests": 35,
|
||||
"sha256": "31ae3664139c37f89e398364f5ec52d260fa27d6d9fad6a3d15540b23a3be739",
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-legacy.log",
|
||||
"tests": 35,
|
||||
"sha256": "f1488bc634c48d744b32f854686fc7a0ecdf2ccfd638c0ce3f9837bcbc5bdcbf",
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
}
|
||||
],
|
||||
"browsers": [
|
||||
{
|
||||
"name": "source-final",
|
||||
"file": "refactor/.cache/chromecast03-browser-source-final/report.json",
|
||||
"sha256": "d59ba138015444168c11f728831ca9369c096282f62323472edce98f75f728d6",
|
||||
"tests": 45,
|
||||
"failures": 0,
|
||||
"skips": 0,
|
||||
"versions": [
|
||||
"chromium: 153.0.8010.12",
|
||||
"firefox: 155.0",
|
||||
"webkit: 26.6"
|
||||
],
|
||||
"inputSha256": "d973945154aa56dafa4ef0de5425661606cef25f1d363c05120f7764b9e53a94",
|
||||
"sdk": "Controlled SDK; native DOM, actual cores and local video; no real receiver validation."
|
||||
},
|
||||
{
|
||||
"name": "main",
|
||||
"file": "refactor/.cache/chromecast03-browser-main/report.json",
|
||||
"sha256": "23dca701c479232d4fc265a2b7fad657fbfdbded8892be5ff1bc5e34b4b7e963",
|
||||
"tests": 45,
|
||||
"failures": 0,
|
||||
"skips": 0,
|
||||
"versions": [
|
||||
"chromium: 153.0.8010.12",
|
||||
"firefox: 155.0",
|
||||
"webkit: 26.6"
|
||||
],
|
||||
"inputSha256": "80b12b3081086488c9d80f03979c336d4a6fdb44dca298e218dfeaaadb295d00",
|
||||
"sdk": "Controlled SDK; native DOM, actual cores and local video; no real receiver validation."
|
||||
},
|
||||
{
|
||||
"name": "legacy",
|
||||
"file": "refactor/.cache/chromecast03-browser-legacy/report.json",
|
||||
"sha256": "eebeb37f9e83d9a583d630c81a3685cc0a9be3c99c36f71ea02a9808fcc137b3",
|
||||
"tests": 45,
|
||||
"failures": 0,
|
||||
"skips": 0,
|
||||
"versions": [
|
||||
"chromium: 153.0.8010.12",
|
||||
"firefox: 155.0",
|
||||
"webkit: 26.6"
|
||||
],
|
||||
"inputSha256": "b21a30852403914a3bf3defc89aff11f2cc23b044ed68ccf667164b477f04172",
|
||||
"sdk": "Controlled SDK; native DOM, actual cores and local video; no real receiver validation."
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.js",
|
||||
"copied": "docs/compiled/artplayer-plugin-chromecast.js",
|
||||
"sha256": "80b12b3081086488c9d80f03979c336d4a6fdb44dca298e218dfeaaadb295d00",
|
||||
"bytes": 6096,
|
||||
"previousIconRemoved": true
|
||||
},
|
||||
{
|
||||
"file": "packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.legacy.js",
|
||||
"copied": "docs/compiled/artplayer-plugin-chromecast.legacy.js",
|
||||
"sha256": "b21a30852403914a3bf3defc89aff11f2cc23b044ed68ccf667164b477f04172",
|
||||
"bytes": 6633,
|
||||
"previousIconRemoved": true
|
||||
},
|
||||
{
|
||||
"file": "packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.mjs",
|
||||
"copied": "docs/compiled/artplayer-plugin-chromecast.mjs",
|
||||
"sha256": "68d81fcab469f74fe9d9740842d989e10144f7ff28c7ade91ed22adee90f44d7",
|
||||
"bytes": 11546,
|
||||
"previousIconRemoved": true
|
||||
}
|
||||
],
|
||||
"inputs": [
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/cast.svg",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "48470d66b5874569c54d66889b0ec62c33bf809670d4baf2eded2bfa83d6d726"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/controller.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "e61760f082e233da1f4e94ca98c68b4f07357117a66b2b5c448659dd57cb193d"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/index.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "951d8bbaf273c56722d3767a514a3f8a65050122d934612e5c53c8349d1400e7"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/media.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "6c16b3cc7b5c570dbb6ae7a4ff9c1492f8e6a07d07662db2b417ff825b7f0dd1"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/sdk.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "eee5ff443406c400bd54822b71b20e1bb8a9191e15c625eb329cb3207a01902f"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/types.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "9958a32fb20e0ed55b7f0b6d34e02febe67966a972a9055999f5a030d034a178"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/tsconfig.json",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "4e4d4e725a1f49736504f408a1b56abb6a1f1aec9213be890b5db6c7c7a28002"
|
||||
},
|
||||
{
|
||||
"path": "test/browser/chromecast-lifecycle.spec.js",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "8a9b47f899e018cb43d396d58ffc29144c97f5feef753eb9b91df0cf8ecd674e"
|
||||
},
|
||||
{
|
||||
"path": "test/chromecast-runtime.test.js",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "94ce42f8d92f529a7ca93294369f017e6953405a4ea84b3bfbd0bc50f178c67a"
|
||||
}
|
||||
],
|
||||
"priorFailure": {
|
||||
"file": "refactor/.cache/chromecast03-browser-initial/report.json",
|
||||
"sha256": "fa189b92b0d6b0a0812fdb62bc75fa95e0fce14aabfa02d4323e1d5c7cacba37",
|
||||
"expected": 18,
|
||||
"unexpected": 27,
|
||||
"cause": "Production assumed Control.add returns a node; WebKit test misclassified same-origin Blob URLs. Both corrected without deleting assertions."
|
||||
},
|
||||
"focusedRedGreen": [
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-mounted-red.log",
|
||||
"sha256": "fbafc237ac36de524f918310a4aa682106c0fe40604f601b918257b58aa6de72"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-mounted-green.log",
|
||||
"sha256": "9e3452207925efed6e2b7e84d7facd51bad61d1d3f10384e41883de2bdba3ef5"
|
||||
}
|
||||
],
|
||||
"checks": [
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-build.log",
|
||||
"sha256": "538ecc3cd0d78f3b25f25ba3e3263f7f78988ea9126526d959cb42341bc7a495"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-typecheck.log",
|
||||
"sha256": "881cbc6371263597ec45d5af816997f5d93bdda99045a532df8a04a9cbec7c07"
|
||||
},
|
||||
{
|
||||
"file": "refactor/.cache/chromecast03-lint.log",
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"Public declarations still owned by CAST04.",
|
||||
"SDK06/CAST05 real HTTPS sender, Cast SDK, receiver and network playback remain unverified.",
|
||||
"Controlled Windows WebKit is not Safari device evidence.",
|
||||
"Pending loader ownership is shared within one loaded plugin module, not independently loaded copies."
|
||||
],
|
||||
"releaseReady": false
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
# PKG-CAST-03 Chromecast 模块与生命周期修复
|
||||
|
||||
原单文件拆为5个strict TypeScript模块:入口、SDK加载协调、每实例控制器、媒体请求、
|
||||
内部SDK类型。公开npm声明保持原状,精确公开类型留给04;不会因内部TS迁移静默
|
||||
修改历史类型。保留异步注册、控件name/位置/tooltip/HTML hooks、live选项与回调this、
|
||||
原始SessionState getter和旧CommonJS default调用。详细维护边界见
|
||||
[包内架构](../../packages/artplayer-plugin-chromecast/ARCHITECTURE.md)。
|
||||
|
||||
## 已修复行为
|
||||
|
||||
- requestSession成功后重新读取getCurrentSession,不再把完成值当session。
|
||||
- 完整SDK立即复用,同模块多实例共享待加载脚本;保留外部availability回调,失败
|
||||
可重试,最后等待者销毁可释放自有脚本。无SDK就绪信号时30秒超时,定时器可释放。
|
||||
- availability同步安装监听,初始NO_SESSION不吞掉首次请求;请求/媒体期间终态
|
||||
和会话替换取消过时结果。重复及同步重入点击共享同一个操作。
|
||||
- await完整loadMedia链,原始错误只通知一次;DOM点击无人接收Promise时有独立
|
||||
拒绝观察,程序调用仍收到原始拒绝。销毁后没有晚到成功提示或新媒体加载。
|
||||
- 每实例分别维护状态与监听,销毁尝试全部清理,不结束页面共享投屏会话。
|
||||
- 默认图标换为本项目原创几何SVG,保留自定义icon与外层class。旧商业图形仅保留
|
||||
在历史基线,候选源码、三格式dist及docs/compiled均移除该path。
|
||||
|
||||
## 真实浏览器反查出的错误
|
||||
|
||||
首轮源码浏览器45项中18通过、27失败,原始报告和trace保存在
|
||||
`refactor/.cache/chromecast03-browser-initial/`,没有删除失败证据。
|
||||
其中实际Control.add返回undefined,测试替身却返回节点,掩盖了候选图标不变色。
|
||||
修复改用既有mounted回调捕获本控件,候选替身也改为准确回放mounted并返回undefined。
|
||||
改测试后、改源码前的红例保留在`chromecast03-mounted-red.log`;修复后35项绿例在
|
||||
`chromecast03-mounted-green.log`。没有改核心返回值,也没有弱化颜色断言。
|
||||
|
||||
WebKit另有测试边界错误:同源Blob URL被误当外网。测试仅放行与测试baseURL精确
|
||||
同origin的blob,真正外网仍阻断并断言零尝试;没有拦截unhandledrejection来掩盖错误。
|
||||
|
||||
## 验证与未完成范围
|
||||
|
||||
93项冻结历史行为/故障测试和35项候选测试共128通过;最终main、legacy各35项通过,
|
||||
并核对真实mjs及可写default身份。正常Yarn构建更新三格式dist与docs/compiled。
|
||||
共享strict检查覆盖366个生产TS文件;定向lint通过。
|
||||
|
||||
源码、最终main、最终legacy各45项真实浏览器测试通过,共135项、零skip。
|
||||
每组使用真实核心5.3.0、最新已冻结发布核心及候选核心,运行Chromium/Firefox/Windows
|
||||
WebKit;断言实际DOM点击、控件归属、状态颜色、加载/销毁、失败重试与无未处理错误。
|
||||
SDK明确为受控替身,本地视频和控件是真实浏览器对象。Windows WebKit不等于Safari
|
||||
设备支持,以上不证明真实SDK发现设备或接收器播放。
|
||||
|
||||
本任务关闭5项已复现Cast实现风险及候选图标来源风险;SDK-06真实HTTPS sender、
|
||||
接收设备与媒体可达性留给05,公开类型留给04,完整npm分发验收留给06。不同模块副本
|
||||
不共享内部加载注册表;页面其他Cast应用的接收器配置不由本插件协商。所有这些限制
|
||||
已写入包内文档,没有静默判作通过。可追溯哈希、日志和范围见
|
||||
[验证记录](../baselines/chromecast-runtime-validation.json)。独立本地完成提交,不推送或发布。
|
||||
+3
-2
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 228 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 78 / doing 15 / blocked 0 / done 135 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 78 / doing 14 / blocked 0 / done 136 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| PKG-CAST-01 | artplayer-plugin-chromecast<br>核对包契约与历史用法 | BASE-05 | url/sdk/icon/mimeType、loader、会话、全局 SDK 与结果 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | H | done |
|
||||
| PKG-CAST-02 | artplayer-plugin-chromecast<br>建立特有行为与错误测试 | PKG-CAST-01, ENG-03, ENG-05 | SDK 脚本加载失败/重入、无设备/拒绝、重复实例与销毁 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done |
|
||||
| PKG-CAST-03 | artplayer-plugin-chromecast<br>整理内部职责与资源 | PKG-CAST-02, CORE-11, CORE-13 | SDK singleton/实例订阅/会话与控件职责分离 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | doing |
|
||||
| PKG-CAST-03 | artplayer-plugin-chromecast<br>整理内部职责与资源 | PKG-CAST-02, CORE-11, CORE-13 | SDK singleton/实例订阅/会话与控件职责分离 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | done |
|
||||
| PKG-CAST-04 | artplayer-plugin-chromecast<br>迁移自有源码和公开类型 | PKG-CAST-03, ENG-04, ENG-06, CORE-07 | Cast 能力 adapter、全局对象和元数据类型 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | todo |
|
||||
| PKG-CAST-05 | artplayer-plugin-chromecast<br>验证新旧核心和组合 | PKG-CAST-04, CORE-22 | stub 测试之外记录实际 Cast 设备会话、源更新和断开 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo |
|
||||
| PKG-CAST-06 | artplayer-plugin-chromecast<br>验证分发并同步文档 | PKG-CAST-05, ENG-07 | chromecast.js、SDK URL/权限能力及待支持环境说明 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo |
|
||||
@@ -544,6 +544,7 @@
|
||||
- PKG-VAST-03: [记录](changes/2026-09-12-PKG-VAST-03-lifecycle.md) [记录](baselines/vast-lifecycle-validation.json) [记录](vast-compatibility-decision.md)
|
||||
- PKG-CAST-01: [记录](baselines/chromecast-release.json) [记录](baselines/chromecast-contract.md) [记录](baselines/chromecast-contract-validation.json) [记录](changes/2026-09-13-PKG-CAST-01-contracts.md)
|
||||
- PKG-CAST-02: [记录](changes/2026-09-13-PKG-CAST-02-failures.md) [记录](baselines/chromecast-failures-validation.json)
|
||||
- PKG-CAST-03: [记录](changes/2026-09-13-PKG-CAST-03-runtime.md) [记录](baselines/chromecast-runtime-validation.json)
|
||||
- PKG-DPIP-01: [记录](changes/2026-09-12-PKG-DPIP-01-contract.md) [记录](baselines/dpip-release.json) [记录](baselines/dpip-contract.md) [记录](baselines/dpip-contract-validation.json) [记录](dpip-validation.md)
|
||||
- PKG-DPIP-02: [记录](changes/2026-09-12-PKG-DPIP-02-tests.md) [记录](baselines/dpip-behavior-validation.json) [记录](dpip-validation.md)
|
||||
- PKG-DPIP-03: [记录](changes/2026-09-12-PKG-DPIP-03-lifecycle.md) [记录](baselines/dpip-lifecycle-validation.json) [记录](dpip-validation.md)
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# 进度与证据
|
||||
|
||||
## PKG-CAST-03 Chromecast生产重构完成
|
||||
|
||||
5个TS模块与35个候选测试落地,SDK等待/会话返回值/过期结果/实例图标/错误Promise
|
||||
已修复。真实浏览器进一步发现Control.add返回undefined导致图标不变色,已用mounted
|
||||
修复并保留红绿证据。128项历史+候选测试、main/legacy各35项、三形态各45项浏览器
|
||||
全部通过;正常构建和366生产TS strict检查通过。原商业SVG换为原创几何图形。
|
||||
见[变更](changes/2026-09-13-PKG-CAST-03-runtime.md)及[证据](baselines/chromecast-runtime-validation.json)。
|
||||
228项:136 done、14 doing、78 todo。04公开类型、05真实SDK/设备、06分发继续;
|
||||
135浏览器项使用受控SDK,不能当作接收设备投屏通过。没有推送或发布。
|
||||
|
||||
|
||||
## PKG-MULTI-SUB-04 Multiple Subtitles 类型兼容实施完成
|
||||
|
||||
已落实用户批准的最新npm 1.2.0根类型及较早1.0.0/1.1.0迁移规则;/runtime准确
|
||||
|
||||
@@ -214,10 +214,10 @@
|
||||
| ASR-FOREIGN-01 | resolved / 已复现 | Firefox permits parallel native media-element owners instead of selecting capture fallback | PKG-ASR-05, PKG-ASR-09 |
|
||||
| ASR-CORS-01 | open / 已复现 | Default WebAudio binding silences CORS-cross-origin media that otherwise advances normally | PKG-ASR-05 |
|
||||
| ASR-RESTART-01 | resolved / 已复现 | Delayed captured-source restart resumes recognition after a newer pause or stop | PKG-ASR-09 |
|
||||
| VENDOR-10 | open / 源码/产物事实 | Chromecast embeds a Font Awesome Pro path with no established redistribution entitlement | PKG-CAST-03, PKG-CAST-06 |
|
||||
| VENDOR-10 | resolved / 源码/产物事实 | Chromecast embeds a Font Awesome Pro path with no established redistribution entitlement | PKG-CAST-03, PKG-CAST-06 |
|
||||
| CAST-TYPE-01 | open / 源码/产物事实 | Chromecast declarations describe a synchronous name-only registration and omit existing runtime callbacks and query methods | PKG-CAST-04 |
|
||||
| CAST-SDK-01 | open / 已复现 | Cast requestSession completion is incorrectly passed to loadMedia as a session | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-LOADER-01 | open / 已复现 | Cast readiness waits hang or overwrite each other across ready SDKs, repeated clicks and multiple instances | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-LIFE-01 | open / 已复现 | Cast listeners and continuations survive player destruction and update another player icon | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-STATE-01 | open / 已复现 | Cast terminal session states leave the normalized callback and icon connected | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-ERROR-01 | open / 已复现 | Cast media loading rejection escapes on a detached Promise while the click has already fulfilled | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-SDK-01 | resolved / 已复现 | Cast requestSession completion is incorrectly passed to loadMedia as a session | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-LOADER-01 | resolved / 已复现 | Cast readiness waits hang or overwrite each other across ready SDKs, repeated clicks and multiple instances | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-LIFE-01 | resolved / 已复现 | Cast listeners and continuations survive player destruction and update another player icon | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-STATE-01 | resolved / 已复现 | Cast terminal session states leave the normalized callback and icon connected | PKG-CAST-03, PKG-CAST-05 |
|
||||
| CAST-ERROR-01 | resolved / 已复现 | Cast media loading rejection escapes on a detached Promise while the click has already fulfilled | PKG-CAST-03, PKG-CAST-05 |
|
||||
+55
-13
@@ -713,7 +713,7 @@
|
||||
"PKG-CAST-05"
|
||||
],
|
||||
"evidence": [
|
||||
"packages/artplayer-plugin-chromecast/src/index.js"
|
||||
"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/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||||
@@ -4743,7 +4743,7 @@
|
||||
"id": "VENDOR-10",
|
||||
"title": "Chromecast embeds a Font Awesome Pro path with no established redistribution entitlement",
|
||||
"confirmation": "source-observed",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-06"
|
||||
@@ -4753,7 +4753,14 @@
|
||||
"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."
|
||||
"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",
|
||||
@@ -4774,7 +4781,7 @@
|
||||
"id": "CAST-SDK-01",
|
||||
"title": "Cast requestSession completion is incorrectly passed to loadMedia as a session",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-05"
|
||||
@@ -4784,13 +4791,20 @@
|
||||
"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."
|
||||
"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": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-05"
|
||||
@@ -4800,13 +4814,20 @@
|
||||
"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."
|
||||
"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": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-05"
|
||||
@@ -4816,13 +4837,20 @@
|
||||
"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."
|
||||
"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": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-05"
|
||||
@@ -4832,13 +4860,20 @@
|
||||
"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."
|
||||
"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": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-05"
|
||||
@@ -4848,7 +4883,14 @@
|
||||
"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."
|
||||
"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."
|
||||
}
|
||||
]
|
||||
}
|
||||
+5
-2
@@ -3043,11 +3043,14 @@
|
||||
"CORE-11",
|
||||
"CORE-13"
|
||||
],
|
||||
"status": "doing",
|
||||
"status": "done",
|
||||
"risk": "H",
|
||||
"deliverable": "SDK singleton/实例订阅/会话与控件职责分离",
|
||||
"acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过",
|
||||
"evidence": []
|
||||
"evidence": [
|
||||
"changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||||
"baselines/chromecast-runtime-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PKG-CAST-04",
|
||||
|
||||
+14
-10
@@ -1078,30 +1078,32 @@
|
||||
"riskId": "VENDOR-10",
|
||||
"inputs": [
|
||||
"packages/artplayer-plugin-chromecast/src/cast.svg",
|
||||
"packages/artplayer-plugin-chromecast/src/index.js"
|
||||
"packages/artplayer-plugin-chromecast/src/controller.ts"
|
||||
],
|
||||
"owners": [
|
||||
"PKG-CAST-03",
|
||||
"PKG-CAST-06"
|
||||
],
|
||||
"sourceStatus": "Exact SVG path matches the runtime default icon; source notice identifies Font Awesome Pro 6.5.1.",
|
||||
"licenseStatus": "Commercial License notice exists in cast.svg; repository entitlement and redistribution authorization are not established by the package MIT metadata.",
|
||||
"updatePolicy": "Replace with owned artwork or verify permission before release; preserve user-supplied icon support and icon wrapper classes, retain historical archive evidence.",
|
||||
"sourceStatus": "Former commercial SVG removed. Current cast.svg is an original geometric icon authored for this repository during PKG-CAST-03; controller imports that file directly.",
|
||||
"licenseStatus": "Current original repository artwork follows the package MIT license; no entitlement in or relicensing of the removed Font Awesome Pro artwork is asserted.",
|
||||
"updatePolicy": "Keep original artwork and custom icon/wrapper support; review any replacement provenance and verify actual rebuilt/shipped assets. Historical commercial-source evidence remains immutable.",
|
||||
"fingerprints": [
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/cast.svg",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "8c0f9ad82c2d6c70afb70ab5002204c4948dd282fbf52095aed4b07fa8d466d4"
|
||||
"sha256": "48470d66b5874569c54d66889b0ec62c33bf809670d4baf2eded2bfa83d6d726"
|
||||
},
|
||||
{
|
||||
"path": "packages/artplayer-plugin-chromecast/src/index.js",
|
||||
"path": "packages/artplayer-plugin-chromecast/src/controller.ts",
|
||||
"algorithm": "sha256-lf",
|
||||
"sha256": "2ab8967cf7fdbf9fbac8a9afe73713e66047bad7e4d4afc802665ce594fa3274"
|
||||
"sha256": "e61760f082e233da1f4e94ca98c68b4f07357117a66b2b5c448659dd57cb193d"
|
||||
}
|
||||
],
|
||||
"reviewEvidence": [
|
||||
"refactor/baselines/chromecast-release.json",
|
||||
"refactor/changes/2026-09-13-PKG-CAST-01-contracts.md"
|
||||
"refactor/changes/2026-09-13-PKG-CAST-01-contracts.md",
|
||||
"refactor/changes/2026-09-13-PKG-CAST-03-runtime.md",
|
||||
"refactor/baselines/chromecast-runtime-validation.json"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1191,10 +1193,12 @@
|
||||
"PKG-CAST-05"
|
||||
],
|
||||
"sourceFiles": [
|
||||
"packages/artplayer-plugin-chromecast/src/index.js"
|
||||
"packages/artplayer-plugin-chromecast/src/sdk.ts",
|
||||
"packages/artplayer-plugin-chromecast/src/controller.ts",
|
||||
"packages/artplayer-plugin-chromecast/src/media.ts"
|
||||
],
|
||||
"contract": "Default remote cast_sender.js?loadCastFramework=1; sdk URL/options and actual Cast device/session behavior require separate validation.",
|
||||
"validationStatus": "Real 1.0.0/1.1.0 archives and controlled public behavior frozen. Official requestSession completion is not a session; runtime/source gaps proceed through CAST-02/03. No actual SDK bytes, HTTPS sender, receiver, casting or media networking acceptance.",
|
||||
"validationStatus": "Controlled SDK regression and native browser DOM/core tests verified source/main/legacy behavior in CAST03. No actual SDK bytes/version, HTTPS sender, physical receiver, discovery or receiver media networking acceptance; CAST05 remains outstanding.",
|
||||
"demoPathsSource": "refactor/baselines/demo-inventory.json"
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user