diff --git a/refactor/README.md b/refactor/README.md
index 386e59b94..689a8092f 100644
--- a/refactor/README.md
+++ b/refactor/README.md
@@ -37,6 +37,7 @@
| [已实现的开发环境](toolchain-setup.md) | Node/Yarn 固定版本、锁文件、安装命令和实际验证范围 |
| [Bun 隔离安装评估](bun-evaluation.md) | 固定版本对比、传递依赖/资源差异及继续使用 Yarn 的依据 |
| [全包大版本策略](version-policy.md) | 每包分别升级一个 major 的目标清单、兼容要求和版本落地步骤 |
+| [分包版本与迁移方案](version-plan.md) | REL-01冻结的22包目标、registry观察、变更日志范围、依赖与示例计划 |
| [已实现的 CI 入口](ci-setup.md) | Yarn 检查/构建、只读 lint、Pages 隔离及远端待验收状态 |
| [GitHub CI/CD](github-ci-cd.md) | PR/兼容矩阵、构建报告、Pages、npm 发布及远端准入验证 |
| [Pages部署与恢复](pages-deployment.md) | 独立暂存、旧URL/域名预检、只读远端快照与人工切换恢复顺序 |
diff --git a/refactor/baselines/version-registry-2026-09-16.json b/refactor/baselines/version-registry-2026-09-16.json
new file mode 100644
index 000000000..a6b080db6
--- /dev/null
+++ b/refactor/baselines/version-registry-2026-09-16.json
@@ -0,0 +1,1203 @@
+{
+ "schemaVersion": 1,
+ "capturedAt": "2026-09-15T16:19:44.313Z",
+ "registry": "https://registry.npmjs.org",
+ "policy": "Absence is an observation, not name ownership, reservation or publication authorization. Previously used versions cannot be reused even after unpublish.",
+ "observations": [
+ {
+ "name": "artplayer",
+ "target": "6.0.0",
+ "url": "https://registry.npmjs.org/artplayer",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:40.759Z",
+ "responseSha256": "560fa27d689284c6e1743835b765e790613b0b11d7255ea0390eb0017a7e9748",
+ "responseBytes": 380531,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "5.4.0",
+ "beta": "5.3.1-beta.1"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.2",
+ "1.0.3",
+ "1.0.4",
+ "1.0.5",
+ "1.0.6",
+ "1.0.7",
+ "1.0.8",
+ "1.0.9",
+ "3.1.5",
+ "3.1.6",
+ "3.1.7",
+ "3.1.8",
+ "3.1.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.2",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31",
+ "4.0.0",
+ "4.0.1",
+ "4.0.2",
+ "4.0.3",
+ "4.0.4",
+ "4.0.5",
+ "4.0.6",
+ "4.0.7",
+ "4.0.8",
+ "4.0.9",
+ "4.1.0",
+ "4.1.1",
+ "4.1.2",
+ "4.1.3",
+ "4.1.4",
+ "4.2.0",
+ "4.2.1",
+ "4.2.2",
+ "4.2.3",
+ "4.2.5",
+ "4.2.6",
+ "4.2.7",
+ "4.3.0",
+ "4.3.1",
+ "4.3.2",
+ "4.3.3",
+ "4.3.4",
+ "4.3.5",
+ "4.3.6",
+ "4.3.7",
+ "4.3.8",
+ "4.3.9",
+ "4.3.10",
+ "4.3.11",
+ "4.3.12",
+ "4.3.13",
+ "4.3.16",
+ "4.3.17",
+ "4.3.18",
+ "4.3.19",
+ "4.3.20",
+ "4.3.21",
+ "4.3.22",
+ "4.3.23",
+ "4.4.0",
+ "4.4.1",
+ "4.4.2",
+ "4.4.3",
+ "4.4.5",
+ "4.4.6",
+ "4.4.7",
+ "4.5.0",
+ "4.5.1",
+ "4.5.2",
+ "4.5.3",
+ "4.5.4",
+ "4.5.5",
+ "4.5.6",
+ "4.5.7",
+ "4.5.8",
+ "4.5.9",
+ "4.5.10",
+ "4.5.11",
+ "4.5.12",
+ "4.6.0",
+ "4.6.1",
+ "4.6.2",
+ "5.0.0",
+ "5.0.1",
+ "5.0.2",
+ "5.0.3",
+ "5.0.4",
+ "5.0.5",
+ "5.0.6",
+ "5.0.7",
+ "5.0.8",
+ "5.0.9",
+ "5.1.0",
+ "5.1.1",
+ "5.1.2",
+ "5.1.3",
+ "5.1.4",
+ "5.1.5",
+ "5.1.6",
+ "5.1.7",
+ "5.2.0",
+ "5.2.1",
+ "5.2.2",
+ "5.2.3",
+ "5.2.4",
+ "5.2.5",
+ "5.3.0-beta.0",
+ "5.3.0-beta.1",
+ "5.3.0-beta.2",
+ "5.3.0-beta.3",
+ "5.3.0-beta.4",
+ "5.3.0",
+ "5.3.1-beta.0",
+ "5.3.1-beta.1",
+ "5.4.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.2",
+ "1.0.3",
+ "1.0.4",
+ "1.0.5",
+ "1.0.6",
+ "1.0.7",
+ "1.0.8",
+ "1.0.9",
+ "3.1.5",
+ "3.1.6",
+ "3.1.7",
+ "3.1.8",
+ "3.1.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.2",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31",
+ "4.0.0",
+ "4.0.1",
+ "4.0.2",
+ "4.0.3",
+ "4.0.4",
+ "4.0.5",
+ "4.0.6",
+ "4.0.7",
+ "4.0.8",
+ "4.0.9",
+ "4.1.0",
+ "4.1.1",
+ "4.1.2",
+ "4.1.3",
+ "4.1.4",
+ "4.2.0",
+ "4.2.1",
+ "4.2.2",
+ "4.2.3",
+ "4.2.5",
+ "4.2.6",
+ "4.2.7",
+ "4.3.0",
+ "4.3.1",
+ "4.3.2",
+ "4.3.3",
+ "4.3.4",
+ "4.3.5",
+ "4.3.6",
+ "4.3.7",
+ "4.3.8",
+ "4.3.9",
+ "4.3.10",
+ "4.3.11",
+ "4.3.12",
+ "4.3.13",
+ "4.3.16",
+ "4.3.17",
+ "4.3.18",
+ "4.3.19",
+ "4.3.20",
+ "4.3.21",
+ "4.3.22",
+ "4.3.23",
+ "4.4.0",
+ "4.4.1",
+ "4.4.2",
+ "4.4.3",
+ "4.4.5",
+ "4.4.6",
+ "4.4.7",
+ "4.5.0",
+ "4.5.1",
+ "4.5.2",
+ "4.5.3",
+ "4.5.4",
+ "4.5.5",
+ "4.5.6",
+ "4.5.7",
+ "4.5.8",
+ "4.5.9",
+ "4.5.10",
+ "4.5.11",
+ "4.5.12",
+ "4.6.0",
+ "4.6.1",
+ "4.6.2",
+ "5.0.0",
+ "5.0.1",
+ "5.0.2",
+ "5.0.3",
+ "5.0.4",
+ "5.0.5",
+ "5.0.6",
+ "5.0.7",
+ "5.0.8",
+ "5.0.9",
+ "5.1.0",
+ "5.1.1",
+ "5.1.2",
+ "5.1.3",
+ "5.1.4",
+ "5.1.5",
+ "5.1.6",
+ "5.1.7",
+ "5.2.0",
+ "5.2.1",
+ "5.2.2",
+ "5.2.3",
+ "5.2.4",
+ "5.2.5",
+ "5.3.0-beta.0",
+ "5.3.0-beta.1",
+ "5.3.0-beta.2",
+ "5.3.0-beta.3",
+ "5.3.0-beta.4",
+ "5.3.0",
+ "5.3.1-beta.0",
+ "5.3.1-beta.1",
+ "5.4.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-ads",
+ "target": "3.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-ads",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:40.741Z",
+ "responseSha256": "f44f323b7c5705a33ef62f093ac12611b308a04ac9d38620e1fad9f0e4df2854",
+ "responseBytes": 13378,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.0.6"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.2",
+ "1.0.3",
+ "1.0.4",
+ "1.0.6"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.2",
+ "1.0.3",
+ "1.0.4",
+ "1.0.6"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-ambilight",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-ambilight",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:40.049Z",
+ "responseSha256": "bde70a20457ea8a083d056b83e2ce26300d9cb75304f05187350c2b781f130e1",
+ "responseBytes": 4537,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-asr",
+ "target": "3.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-asr",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:40.611Z",
+ "responseSha256": "280de48f746f1eb682b52ec09a09c1ca78876a5061e645412b30c6db898e3c75",
+ "responseBytes": 4715,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "2.1.0"
+ },
+ "activeVersions": [
+ "2.0.0",
+ "2.1.0"
+ ],
+ "historicalVersions": [
+ "2.0.0",
+ "2.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-audio-track",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-audio-track",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.038Z",
+ "responseSha256": "802808f8c7f24d01b562dbc6ef30856451498493b2719e1723097ba069abb26a",
+ "responseBytes": 5015,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-auto-thumbnail",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-auto-thumbnail",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.044Z",
+ "responseSha256": "52f735ef9be271f06f806995635b7b9a6ba1aedea9c1ad2c307a63788cd28986",
+ "responseBytes": 6352,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-chapter",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-chapter",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.048Z",
+ "responseSha256": "d225be1116a9293f3c48047de58bba6bd5cc53ac7237b74943c631e8f54b09ef",
+ "responseBytes": 6068,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-chromecast",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-chromecast",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.055Z",
+ "responseSha256": "357ef2db141c991366e9d1e0f4504a9fa9bb13c9cb99892a6d9e03da48c4d705",
+ "responseBytes": 4572,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-danmuku",
+ "target": "6.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-danmuku",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.565Z",
+ "responseSha256": "6fccd0198b2322827b3271a807b60f73a3e4d6f46aeb5494a86aade409caf1d6",
+ "responseBytes": 193135,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "5.3.0"
+ },
+ "activeVersions": [
+ "3.1.8",
+ "3.1.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.2",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31",
+ "4.1.0",
+ "4.3.0",
+ "4.3.12",
+ "4.3.13",
+ "4.3.14",
+ "4.3.15",
+ "4.3.16",
+ "4.3.17",
+ "4.3.18",
+ "4.3.19",
+ "4.3.21",
+ "4.3.22",
+ "4.3.23",
+ "4.4.0",
+ "4.4.1",
+ "4.4.2",
+ "4.4.3",
+ "4.4.6",
+ "4.4.7",
+ "4.4.8",
+ "4.4.10",
+ "4.4.11",
+ "5.0.0",
+ "5.0.1",
+ "5.1.0",
+ "5.1.1",
+ "5.1.2",
+ "5.1.3",
+ "5.1.4",
+ "5.1.5",
+ "5.1.6",
+ "5.1.7",
+ "5.1.8",
+ "5.2.0",
+ "5.3.0"
+ ],
+ "historicalVersions": [
+ "3.1.8",
+ "3.1.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.2",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31",
+ "4.1.0",
+ "4.3.0",
+ "4.3.12",
+ "4.3.13",
+ "4.3.14",
+ "4.3.15",
+ "4.3.16",
+ "4.3.17",
+ "4.3.18",
+ "4.3.19",
+ "4.3.21",
+ "4.3.22",
+ "4.3.23",
+ "4.4.0",
+ "4.4.1",
+ "4.4.2",
+ "4.4.3",
+ "4.4.6",
+ "4.4.7",
+ "4.4.8",
+ "4.4.10",
+ "4.4.11",
+ "5.0.0",
+ "5.0.1",
+ "5.1.0",
+ "5.1.1",
+ "5.1.2",
+ "5.1.3",
+ "5.1.4",
+ "5.1.5",
+ "5.1.6",
+ "5.1.7",
+ "5.1.8",
+ "5.2.0",
+ "5.3.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-danmuku-mask",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-danmuku-mask",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.971Z",
+ "responseSha256": "b4caa94b8179a6c6e6ff8f96ed7ec09a615df48afadd2cad66409cf176395820",
+ "responseBytes": 5666,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-dash-control",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-dash-control",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.354Z",
+ "responseSha256": "f353e76d4228b6e025c914ca7ff4835e6d2456796f47fa283b9efb5658cf2b99",
+ "responseBytes": 4705,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-document-pip",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-document-pip",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:41.352Z",
+ "responseSha256": "0271814c8d47a0d48e8be529e7b995d72740fad329abc92d6ade266edc31dcab",
+ "responseBytes": 8515,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.0.2",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.0.2",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-hls-control",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-hls-control",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.293Z",
+ "responseSha256": "00aab044106c818a3b52a3cb2a73d816f6c099b7e166f22fa1ebf5d3b9756715",
+ "responseBytes": 6278,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-jassub",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-jassub",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.245Z",
+ "responseSha256": "fb63338f053428378c97f8d125bc5b20a67a41ee7a0363db3e3ecb1c4f5144a7",
+ "responseBytes": 4821,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-multiple-subtitles",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-multiple-subtitles",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.264Z",
+ "responseSha256": "42f87af15439205eb6d3c114039b33a148dd7340d9be5ea859da0bacc02faa26",
+ "responseBytes": 6501,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.2.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0",
+ "1.2.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0",
+ "1.2.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-vast",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-vast",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.264Z",
+ "responseSha256": "d72f3611e950231d8c2dc011b4729f519b0d613d542bcc0ee0657f724c89e9f6",
+ "responseBytes": 2485,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.0.0"
+ },
+ "activeVersions": [
+ "1.0.0"
+ ],
+ "historicalVersions": [
+ "1.0.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-plugin-vtt-thumbnail",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-vtt-thumbnail",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.581Z",
+ "responseSha256": "3c07418004b732ca2af5ada5625a78527a6fc21ee615074d4161b2bcbeecff4d",
+ "responseBytes": 9554,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.0.2",
+ "1.0.3",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.0.1",
+ "1.0.2",
+ "1.0.3",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-proxy-canvas",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-proxy-canvas",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.579Z",
+ "responseSha256": "13c32741fd3b9705d0a28a50e0796d9ddb73c2090e2fd277902bcf440bcc7d81",
+ "responseBytes": 4411,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.1.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-proxy-mediabunny",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-proxy-mediabunny",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:42.812Z",
+ "responseSha256": "bc6ce60d42fc7b6719d060f5be244ce605437f5bcf19e2ea79714e24230d1924",
+ "responseBytes": 5101,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.2.0"
+ },
+ "activeVersions": [
+ "1.0.0",
+ "1.2.0"
+ ],
+ "historicalVersions": [
+ "1.0.0",
+ "1.2.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "npm"
+ },
+ {
+ "name": "artplayer-tool-iframe",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-tool-iframe",
+ "status": 404,
+ "observedAt": "2026-09-15T16:19:42.578Z",
+ "responseSha256": "c8d3eae160a892e32837db3dcae515e843e5383fef52b8141940c8bcf8b6d59f",
+ "responseBytes": 21,
+ "nameState": "not-found",
+ "targetState": "not-observed",
+ "tags": {},
+ "activeVersions": [],
+ "historicalVersions": [],
+ "majorConflicts": [],
+ "ownershipVerified": false,
+ "distribution": "renamed-npm"
+ },
+ {
+ "name": "artplayer-tool-thumbnail",
+ "target": "5.0.0",
+ "url": "https://registry.npmjs.org/artplayer-tool-thumbnail",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:43.110Z",
+ "responseSha256": "1a5bbf4d14852e0dba2ed51351818bddf742a1278b46ef60366a6a544d443bcf",
+ "responseBytes": 2552,
+ "nameState": "unpublished",
+ "targetState": "not-observed",
+ "tags": {},
+ "activeVersions": [],
+ "historicalVersions": [
+ "1.0.6",
+ "1.0.7",
+ "1.0.8",
+ "1.0.9",
+ "3.1.5",
+ "3.1.6",
+ "3.1.7",
+ "3.1.8",
+ "3.1.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.2",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": {
+ "time": "2024-05-26T01:46:10.518Z",
+ "versions": [
+ "1.0.6",
+ "1.0.7",
+ "1.0.8",
+ "1.0.9",
+ "3.1.10",
+ "3.1.12",
+ "3.1.13",
+ "3.1.14",
+ "3.1.15",
+ "3.1.16",
+ "3.1.17",
+ "3.1.18",
+ "3.1.19",
+ "3.1.5",
+ "3.1.6",
+ "3.1.7",
+ "3.1.8",
+ "3.1.9",
+ "3.2.3",
+ "3.2.4",
+ "3.2.5",
+ "3.2.6",
+ "3.3.1",
+ "3.3.2",
+ "3.3.3",
+ "3.4.1",
+ "3.4.2",
+ "3.5.1",
+ "3.5.10",
+ "3.5.11",
+ "3.5.12",
+ "3.5.13",
+ "3.5.14",
+ "3.5.15",
+ "3.5.17",
+ "3.5.18",
+ "3.5.19",
+ "3.5.2",
+ "3.5.20",
+ "3.5.21",
+ "3.5.22",
+ "3.5.23",
+ "3.5.24",
+ "3.5.26",
+ "3.5.27",
+ "3.5.28",
+ "3.5.29",
+ "3.5.30",
+ "3.5.31",
+ "3.5.4",
+ "3.5.5",
+ "3.5.8",
+ "3.5.9"
+ ]
+ },
+ "ownershipVerified": false,
+ "distribution": "recovered-npm"
+ },
+ {
+ "name": "artplayer-vitepress",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-vitepress",
+ "status": 404,
+ "observedAt": "2026-09-15T16:19:43.095Z",
+ "responseSha256": "c8d3eae160a892e32837db3dcae515e843e5383fef52b8141940c8bcf8b6d59f",
+ "responseBytes": 21,
+ "nameState": "not-found",
+ "targetState": "not-observed",
+ "tags": {},
+ "activeVersions": [],
+ "historicalVersions": [],
+ "majorConflicts": [],
+ "ownershipVerified": false,
+ "distribution": "site"
+ },
+ {
+ "name": "artplayer-plugin-iframe",
+ "target": "2.0.0",
+ "url": "https://registry.npmjs.org/artplayer-plugin-iframe",
+ "status": 200,
+ "observedAt": "2026-09-15T16:19:44.313Z",
+ "responseSha256": "f17cc1b990a1fe805919c3a4349bfdbdf2fbd844c4ea2aa94adc23c0d6b31c77",
+ "responseBytes": 3541,
+ "nameState": "published",
+ "targetState": "not-observed",
+ "tags": {
+ "latest": "1.0.0"
+ },
+ "activeVersions": [
+ "1.0.0"
+ ],
+ "historicalVersions": [
+ "1.0.0"
+ ],
+ "majorConflicts": [],
+ "prereleasesInTargetMajor": [],
+ "unpublished": null,
+ "ownershipVerified": false,
+ "distribution": "historical-name-only"
+ }
+ ]
+}
diff --git a/refactor/changes/2026-09-16-REL-01-version-plan.md b/refactor/changes/2026-09-16-REL-01-version-plan.md
new file mode 100644
index 000000000..5f0957789
--- /dev/null
+++ b/refactor/changes/2026-09-16-REL-01-version-plan.md
@@ -0,0 +1,53 @@
+# REL-01 分包版本与差异方案
+
+起点267b21226a11930b1dd89508f326956c1e106928。所有源码/声明决策前置任务已完成,
+包括Thumbnail批准的默认策略;本任务完成22包版本准备方案,不改变manifest,
+不宣称包已通过发布验收,不执行复盘、推送、npm或标签操作。
+
+## 交付
+
+- [version-plan.json](../version-plan.json)冻结每包源版本、下一major目标、分发类别、
+ 变更日志路径/内容范围、声明规则、原依赖字段、维护文档和剩余验收责任。
+ [可读方案](../version-plan.md)说明本地候选和后续版本/标签步骤。
+- [registry快照](../baselines/version-registry-2026-09-16.json)为本次真实只读网络请求,
+ 覆盖22名和Iframe旧名。记录状态、URL、时间、响应SHA256、active/time/unpublished
+ 版本和dist-tags;未观察到目标版本或目标/更高major稳定版占用。
+ Iframe新名404、Thumbnail撤包、VitePress无npm记录分别保留含义与门槛。
+- [version-registry.mjs](../scripts/version-registry.mjs)提供后续刷新入口,只写新的
+ 本地证据文件。并行上限4;未知HTTP/JSON/名称响应不会转成版本可用。
+ 一次初始路径检查因Windows根路径尾部分隔符拒绝执行,未发网络请求/写快照;
+ 根路径规范化后成功完成23次观察,不放宽目录范围与覆盖保护。
+- [version-plan.mjs](../scripts/version-plan.mjs)区分方案一致性和版本已经落实。
+ prepared要求22包目标版本、各包目标CHANGELOG和两套示例依赖,不以静态方案
+ 冒充版本更改;所有检查都不授权发布。
+
+## 冻结决策
+
+本轮本地候选使用用户要求的精确M+1.0.0版本,不增加rc后缀。它是尚未上传的
+tarball。未来经授权公开候选用next,正式推广用latest;next不会隔离明确请求
+该版本的用户,也不是发布权限。已经公开的版本不能覆盖,若需改内容则必须
+新版本与重新验证。其余复盘、设备、回退、许可和远端CI门槛均保留。
+
+22包没有相互声明的workspace依赖;已有外部dependency/peer字段保持,不能
+因core6.0.0增加只接受6的peer限制。React/Vue源示例计划把三个本仓库包依赖改成
+本地file路径以消费未发布版本;冻结历史消费者和隔离tarball测试保留。REL-09
+核验实际安装/类型/构建流程,只维护根yarn.lock。根private包与示例不升版本。
+
+VitePress仍仅站点分发;Iframe旧名与新名的恢复/权限不混淆;Thumbnail历史归档
+缺口不被major升级掩盖。已接受的Ads/VAST/Thumbnail和其他类型差异均要求继续
+记录。公开入口/声明的确切文件沿用现状与逐包维护指南,不统一改成一种导出。
+
+方案内准入观察来自真实release-ledger计算,22包均blocked。它是带时间的规划
+快照,后续当前状态仍由原台账计算;REL-01完成不会自动消除这些阻塞。
+
+## 验证与后续
+
+固定Node24.21.0/Yarn1.22.22。真实registry捕获退出0;5项注册表规则测试通过,
+覆盖已发布/撤包版本不可复用、更高major冲突、404非所有权、错误HTTP/格式、
+请求目的地与返回包名。变更脚本lint通过;version-plan --check通过;
+--prepared正确退出1并指出artplayer仍是5.4.1,没有误报已经完成major升级。
+版本目标同时与初始清单和release-ledger逐包交叉校验。
+
+REL-09落实所有版本、适用示例/依赖/锁和CHANGELOG,单独提交。
+REL-02随后重建目标版本候选并绑定新的证据;旧版本的测试报告只保留作历史依据。
+工具链发布文档同时修正为实施后等待用户指导复盘,消除自动启动的旧表述。
diff --git a/refactor/plan.md b/refactor/plan.md
index 2aa988604..5ca1d68e9 100644
--- a/refactor/plan.md
+++ b/refactor/plan.md
@@ -4,7 +4,7 @@
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 283 项,范围 22 个包及工作区/示例。
-状态:todo 43 / doing 20 / blocked 0 / done 220 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
+状态:todo 42 / doing 20 / blocked 0 / done 221 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
@@ -450,7 +450,7 @@
| ID | 范围 / 步骤 | 前置依赖 | 交付物 | 验收条件 | 风险 | 状态 |
| --- | --- | --- | --- | --- | --- | --- |
| REL-08 | workspace
提前建立逐包发布准入台账 | BASE-08, ENG-07 | 每批包/版本/源码/锁文件/工具/tarball integrity、必需测试/设备证据、限制和回退映射 | 受影响能力缺证据明确阻止对应批次;无关批次可独立准备,旧证据在候选内容变化后失效;站点采用真实构建/URL/资源验收,npm 分发依据历史核实,不从版本清单推断新增发布范围;关联 risks.json 和 third-party.json;受影响 bundle/worker/WASM/font/模型的来源与许可通知缺口必须有审查结论,未决项阻止对应批次 | H | done |
-| REL-01 | workspace
提前确定分包版本与差异方案 | REL-08, CORE-21, SITE-03, PKG-CHAPTER-04, PKG-AMBILIGHT-04, PKG-AUDIO-04, PKG-AUTO-THUMB-04, PKG-VTT-THUMB-04, PKG-HLS-04, PKG-DASH-04, PKG-MULTI-SUB-04, PKG-JASSUB-04, PKG-MASK-04, PKG-ASR-04, PKG-ADS-04, PKG-VAST-04, PKG-CAST-04, PKG-DPIP-04, PKG-CANVAS-04, PKG-IFRAME-04, PKG-TOOL-THUMB-04, PKG-DANMUKU-06, PKG-MB-08, PKG-FACTORY-01 | 每包版本/变更日志/依赖/类型差异方案和独立准入状态;按 version-policy.md 冻结各包下一 major(minor/patch 归零)并核实 registry 占用 | 所有包有方案和剩余门槛,未决项明确阻止相应发布;本步骤不声称已经可发布;全部包有 major 目标,版本冲突明确处理,独立准备任务同步 manifest/锁/依赖/日志;按 BASE-05 区分 21 库与文档站分发,不机械把文档站当库上传 npm | H | todo |
+| REL-01 | workspace
提前确定分包版本与差异方案 | REL-08, CORE-21, SITE-03, PKG-CHAPTER-04, PKG-AMBILIGHT-04, PKG-AUDIO-04, PKG-AUTO-THUMB-04, PKG-VTT-THUMB-04, PKG-HLS-04, PKG-DASH-04, PKG-MULTI-SUB-04, PKG-JASSUB-04, PKG-MASK-04, PKG-ASR-04, PKG-ADS-04, PKG-VAST-04, PKG-CAST-04, PKG-DPIP-04, PKG-CANVAS-04, PKG-IFRAME-04, PKG-TOOL-THUMB-04, PKG-DANMUKU-06, PKG-MB-08, PKG-FACTORY-01 | 每包版本/变更日志/依赖/类型差异方案和独立准入状态;按 version-policy.md 冻结各包下一 major(minor/patch 归零)并核实 registry 占用 | 所有包有方案和剩余门槛,未决项明确阻止相应发布;本步骤不声称已经可发布;全部包有 major 目标,版本冲突明确处理,独立准备任务同步 manifest/锁/依赖/日志;按 BASE-05 区分 21 库与文档站分发,不机械把文档站当库上传 npm | H | done |
| REL-09 | workspace
落实全包下一 major 版本及依赖元数据 | REL-01, DOC-11 | 22 包版本目标落实、适用锁文件/依赖范围/示例/变更日志同步,核实 registry 版本占用 | 版本与 policy 一致,旧核心支持保留;必要拆子任务各自提交,候选构建前完成,不执行 publish | H | todo |
| REL-02 | workspace
生成候选 tarball 并验证新旧组合 | REL-01, CORE-22, ENG-07, REL-09, REL-04 | 各候选本地 tarball/integrity 与新旧核心/插件消费者验证报告,外部门槛单独标注 | 隔离安装和可自动化组合通过;设备结论不伪造,最终发布绑定同一候选内容;在目标 major 版本确定后构建 pack,不在测试后改版本;逐包核验完整回退产物、实际候选版本/integrity、应用导入与冻结锁,重跑对应回退并保留报告;缺失历史分发不准入 | H | todo |
| REL-03 | workspace
完成真机、外部 SDK 与压力验收 | REL-02, EX-03, SITE-06, MOD-05 | Safari/移动/PiP/Cast/IMA/模型/长播放完整报告 | 包集成与全项目真机/SDK/压力结论齐全才完成本汇总;独立批次先建立自己的完整门槛子任务 | H | todo |
@@ -694,6 +694,7 @@
- MOD-DEV-01: [记录](changes/2026-09-14-MOD-DEV-01-dev-server.md) [记录](baselines/dev-server-validation.json)
- MOD-03: [记录](changes/2026-09-14-MOD-03-slider-updates.md) [记录](baselines/slider-updates-validation.json) [记录](changes/2026-09-14-MOD-03-performance-acceptance.md) [记录](baselines/core-performance-validation.json)
- REL-08: [记录](changes/2026-09-14-REL-08-release-ledger.md) [记录](baselines/release-ledger-validation.json) [记录](release-ledger.md) [记录](release-ledger.json)
+- REL-01: [记录](version-plan.md) [记录](version-plan.json) [记录](baselines/version-registry-2026-09-16.json) [记录](changes/2026-09-16-REL-01-version-plan.md)
- REL-04: [记录](changes/2026-09-15-REL-04-consumer-checkpoint.md) [记录](rollback-rehearsal.md) [记录](baselines/rollback-consumer-validation.json) [记录](changes/2026-09-15-REL-04-workflows-checkpoint.md) [记录](rollback-inventory.md) [记录](baselines/rollback-workflows-validation.json) [记录](changes/2026-09-15-REL-04-pages-recovery.md) [记录](baselines/pages-recovery-validation.json) [记录](changes/2026-09-15-REL-04-acceptance.md) [记录](baselines/rollback-acceptance-validation.json)
- PKG-FACTORY-01: [记录](baselines/factory-assignment-gaps.json) [记录](baselines/factory-compatibility-proposals.json) [记录](factory-compatibility-decision.md) [记录](changes/2026-09-12-PKG-FACTORY-01-decision.md) [记录](type-compatibility-policy.md) [记录](baselines/factory-compatibility-validation.json) [记录](changes/2026-09-13-PKG-FACTORY-01-compatible-types.md)
- CORE-25: [记录](changes/2026-09-13-CORE-25-defaults-ssr.md) [记录](baselines/defaults-ssr-validation.json)
diff --git a/refactor/progress.md b/refactor/progress.md
index 26f5bcdaa..1514bee9a 100644
--- a/refactor/progress.md
+++ b/refactor/progress.md
@@ -1,5 +1,16 @@
# 进度与证据
+## REL-01 全包版本方案冻结
+
+22包下一major、变更日志范围、依赖/类型规则、示例计划与剩余准入已写入
+[方案](version-plan.md)。真实registry查询22名及Iframe旧名,未观察到目标或
+更高major稳定版占用;404/撤包不作为名称权限证明。全部包发布准入仍blocked。
+5项registry规则测试、方案校验及lint通过,prepared检查正确拒绝尚未升级的
+manifest。见[记录](changes/2026-09-16-REL-01-version-plan.md)。
+本次没有修改版本号。REL-01 done;221 done、20 doing、42 todo,共283项。
+下一步REL-09落实22包版本、变更日志与本地示例消费,再重建候选。
+完成实施后等待用户指导复盘,不推送、不发布。
+
## PKG-DANMUKU-START-01 首帧漏显修复完成
已解释原安装 WebKit 的首个 readys 在CPU间隔之后才运行的漏显:私有采样窗口
diff --git a/refactor/release-ledger.md b/refactor/release-ledger.md
index ecaaacd09..5ee8d09e4 100644
--- a/refactor/release-ledger.md
+++ b/refactor/release-ledger.md
@@ -24,8 +24,9 @@ REL-08 建立台账及机械校验,不代表任何包已经可以发布。唯
## 分发和版本边界
-每行明确记录独立下一major目标,初始依据是package-inventory.json。正式版本占用、
-预发布标识和变更日志仍由REL-01/09落实;本步不修改任何包版本。
+每行明确记录独立下一major目标,初始依据是package-inventory.json。REL-01已冻结
+[版本方案](version-plan.md)及registry快照:本地候选使用目标正式数字版本,
+实际上传仍需授权、最新占用和名称权限检查。REL-09落实manifest与变更日志。
- 普通npm包使用各自冻结发布记录的name/version/integrity/SHA-256/URL作为历史依据。
core和chapter引用releases.json各自成员;不把工作区版本当作npm版本。
diff --git a/refactor/scripts/version-plan.mjs b/refactor/scripts/version-plan.mjs
new file mode 100644
index 000000000..2ecb2940a
--- /dev/null
+++ b/refactor/scripts/version-plan.mjs
@@ -0,0 +1,52 @@
+import assert from 'node:assert/strict'
+import fs from 'node:fs'
+import path from 'node:path'
+import process from 'node:process'
+import { fileURLToPath } from 'node:url'
+
+const root = path.resolve(fileURLToPath(new URL('../../', import.meta.url)))
+const read = file => JSON.parse(fs.readFileSync(path.join(root, file), 'utf8'))
+const mode = process.argv[2]
+assert(['--check', '--prepared'].includes(mode) && process.argv.length === 3, 'Use --check or --prepared')
+const plan = read('refactor/version-plan.json')
+const ledger = read('refactor/release-ledger.json')
+const inventory = read('refactor/package-inventory.json').packages
+const registry = read(plan.registrySnapshot)
+assert.equal(plan.schemaVersion, 1)
+assert.equal(plan.policy.publicationAuthorized, false)
+assert.equal(plan.policy.siteNpmPublication, false)
+assert.equal(plan.policy.prereleaseSuffix, null)
+assert.deepEqual(plan.packages.map(item => item.name).sort(), ledger.packages.map(item => item.name).sort())
+for (const item of plan.packages) {
+ const original = inventory.find(pkg => pkg.name === item.name)
+ const row = ledger.packages.find(pkg => pkg.name === item.name)
+ const observation = registry.observations.find(pkg => pkg.name === item.name)
+ const manifest = read(`packages/${item.name}/package.json`)
+ assert.equal(item.sourceVersion, original.version)
+ assert.equal(item.targetVersion, row.targetVersion)
+ assert.equal(item.targetVersion, `${Number(original.version.split('.')[0]) + 1}.0.0`)
+ assert.equal(item.distribution, row.distribution)
+ assert.equal(observation.target, item.targetVersion)
+ assert.equal(observation.targetState, 'not-observed', `Target was used: ${item.name}`)
+ assert.deepEqual(observation.majorConflicts, [], `Registry major conflict: ${item.name}`)
+ assert.equal(item.registry.ownershipVerified, false)
+ assert(item.changelog.changes.length && item.maintenanceDocs.length)
+ assert.equal(item.changelog.path, `packages/${item.name}/CHANGELOG.md`)
+ assert.equal(item.changelog.heading, `${item.targetVersion} (unreleased)`)
+ for (const file of item.maintenanceDocs)
+ assert(fs.existsSync(path.join(root, file)), `Missing maintenance guide: ${file}`)
+ for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies', 'peerDependenciesMeta', 'devDependencies'])
+ assert.deepEqual(manifest[field], item.dependencyPolicy.sourceFields[field], `Unplanned dependency change: ${item.name}/${field}`)
+ assert([item.sourceVersion, item.targetVersion].includes(manifest.version), `Unplanned current version: ${item.name}`)
+ if (mode === '--prepared') {
+ assert.equal(manifest.version, item.targetVersion, `Version not prepared: ${item.name}`)
+ assert(fs.readFileSync(path.join(root, item.changelog.path), 'utf8').includes(item.changelog.heading), `Missing target changelog: ${item.name}`)
+ }
+}
+for (const example of plan.examples) {
+ const manifest = read(example.manifest)
+ assert.equal(manifest.private, true)
+ for (const [name, range] of Object.entries(example.dependencies))
+ assert((mode === '--prepared' ? [range.planned] : [range.before, range.planned]).includes(manifest.dependencies[name]), `Example dependency not prepared: ${example.manifest}/${name}`)
+}
+console.log(`Version plan ${mode}: ${plan.packages.length} independent major targets; registry snapshot checked, publication remains unauthorized`)
diff --git a/refactor/scripts/version-registry.mjs b/refactor/scripts/version-registry.mjs
new file mode 100644
index 000000000..f47a73af8
--- /dev/null
+++ b/refactor/scripts/version-registry.mjs
@@ -0,0 +1,79 @@
+import assert from 'node:assert/strict'
+import { createHash } from 'node:crypto'
+import fs from 'node:fs'
+import path from 'node:path'
+import process from 'node:process'
+import { fileURLToPath } from 'node:url'
+
+const root = path.resolve(fileURLToPath(new URL('../../', import.meta.url)))
+const digest = bytes => createHash('sha256').update(bytes).digest('hex')
+
+export function versionObservation(status, metadata, target) {
+ assert(status === 200 || status === 404, `Registry status is not an absence observation: ${status}`)
+ assert(metadata && typeof metadata === 'object' && !Array.isArray(metadata), 'Malformed registry metadata')
+ if (status === 404) {
+ assert(metadata.error === 'Not found', 'Unexpected registry 404 response')
+ return { nameState: 'not-found', targetState: 'not-observed', tags: {}, activeVersions: [], historicalVersions: [], majorConflicts: [], ownershipVerified: false }
+ }
+ assert(typeof metadata.name === 'string', 'Registry metadata has no package name')
+ assert((metadata.versions && typeof metadata.versions === 'object' && !Array.isArray(metadata.versions)) || metadata.time?.unpublished, 'Registry metadata has no versions or unpublish record')
+ const activeVersions = Object.keys(metadata.versions || {})
+ const historicalVersions = [...new Set([
+ ...Object.keys(metadata.time || {}).filter(version => /^\d+\.\d+\.\d+(?:-.+)?$/.test(version)),
+ ...metadata.time?.unpublished?.versions || [],
+ ])]
+ const used = new Set([...activeVersions, ...historicalVersions])
+ const major = Number(target.split('.')[0])
+ return {
+ nameState: metadata.time?.unpublished ? 'unpublished' : 'published',
+ targetState: activeVersions.includes(target) ? 'published' : historicalVersions.includes(target) ? 'previously-used' : 'not-observed',
+ tags: metadata['dist-tags'] || {},
+ activeVersions,
+ historicalVersions,
+ majorConflicts: [...used].filter(version => /^\d+\.\d+\.\d+$/.test(version) && Number(version.split('.')[0]) >= major),
+ prereleasesInTargetMajor: [...used].filter(version => version.startsWith(`${major}.`) && version.includes('-')),
+ unpublished: metadata.time?.unpublished || null,
+ ownershipVerified: false,
+ }
+}
+
+export async function observePackage(name, target, fetcher = fetch) {
+ assert(/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(name), 'Unexpected package name')
+ assert(/^\d+\.0\.0$/.test(target), 'Expected a frozen next-major version')
+ const url = `https://registry.npmjs.org/${name}`
+ const response = await fetcher(url, { headers: { 'accept': 'application/json', 'cache-control': 'no-cache' }, redirect: 'error', signal: AbortSignal.timeout(30000) })
+ const bytes = new Uint8Array(await response.arrayBuffer())
+ const metadata = JSON.parse(new TextDecoder().decode(bytes))
+ if (response.status === 200)
+ assert.equal(metadata.name, name, 'Registry returned a different package')
+ return { name, target, url, status: response.status, observedAt: new Date().toISOString(), responseSha256: digest(bytes), responseBytes: bytes.length, ...versionObservation(response.status, metadata, target) }
+}
+
+async function main() {
+ const [flag, output, ...extra] = process.argv.slice(2)
+ assert(flag === '--capture' && output && !extra.length, 'Use --capture ')
+ const destination = path.resolve(root, output)
+ assert(destination.startsWith(root + path.sep) && !fs.existsSync(destination), 'Snapshot must be a new repository-local file')
+ const ledger = JSON.parse(fs.readFileSync(path.join(root, 'refactor/release-ledger.json'), 'utf8'))
+ const targets = ledger.packages.map(row => ({ name: row.name, target: row.targetVersion, distribution: row.distribution }))
+ targets.push({ name: 'artplayer-plugin-iframe', target: '2.0.0', distribution: 'historical-name-only' })
+ const observations = []
+ for (let index = 0; index < targets.length; index += 4) {
+ const batch = targets.slice(index, index + 4)
+ const results = await Promise.allSettled(batch.map(async item => ({ ...await observePackage(item.name, item.target), distribution: item.distribution })))
+ for (let offset = 0; offset < results.length; offset++) {
+ const result = results[offset]
+ observations.push(result.status === 'fulfilled' ? result.value : { ...batch[offset], error: String(result.reason), targetState: 'unknown' })
+ }
+ }
+ const report = { schemaVersion: 1, capturedAt: new Date().toISOString(), registry: 'https://registry.npmjs.org', policy: 'Absence is an observation, not name ownership, reservation or publication authorization. Previously used versions cannot be reused even after unpublish.', observations }
+ fs.mkdirSync(path.dirname(destination), { recursive: true })
+ fs.writeFileSync(destination, `${JSON.stringify(report, null, 2)}\n`)
+ for (const row of observations)
+ console.log(`${row.name}: ${row.nameState || 'error'}, latest=${row.tags?.latest || '-'}, target=${row.target} ${row.targetState}, major-conflicts=${row.majorConflicts?.length ?? '?'}`)
+ if (observations.some(row => row.error || (!['site', 'historical-name-only'].includes(row.distribution) && (row.targetState !== 'not-observed' || row.majorConflicts.length))))
+ process.exitCode = 1
+}
+
+if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url))
+ await main()
diff --git a/refactor/scripts/version-registry.test.mjs b/refactor/scripts/version-registry.test.mjs
new file mode 100644
index 000000000..9d24701eb
--- /dev/null
+++ b/refactor/scripts/version-registry.test.mjs
@@ -0,0 +1,51 @@
+import assert from 'node:assert/strict'
+// eslint-disable-next-line test/no-import-node-test -- Release version reuse and registry failure boundaries.
+import test from 'node:test'
+import { observePackage, versionObservation } from './version-registry.mjs'
+
+test('Registry version planning rejects active and unpublished version reuse', () => {
+ assert.equal(versionObservation(200, { name: 'test', versions: { '2.0.0': {} } }, '2.0.0').targetState, 'published')
+ const unpublished = versionObservation(200, { name: 'test', time: { unpublished: { versions: ['2.0.0'] } } }, '2.0.0')
+ assert.equal(unpublished.targetState, 'previously-used')
+ assert.deepEqual(unpublished.majorConflicts, ['2.0.0'])
+ assert.equal(versionObservation(200, { name: 'test', versions: {}, time: { '2.0.0': '2025-01-01' } }, '2.0.0').targetState, 'previously-used')
+})
+
+test('A different stable release in the target major prevents silently using an older major plan', () => {
+ const value = versionObservation(200, { name: 'test', versions: { '2.1.0': {}, '3.0.0': {}, '2.0.0-rc.1': {} } }, '2.0.0')
+ assert.equal(value.targetState, 'not-observed')
+ assert.deepEqual(value.majorConflicts, ['2.1.0', '3.0.0'])
+ assert.deepEqual(value.prereleasesInTargetMajor, ['2.0.0-rc.1'])
+})
+
+test('Missing names and empty version histories never establish ownership or reservation', () => {
+ const missing = versionObservation(404, { error: 'Not found' }, '2.0.0')
+ assert.equal(missing.nameState, 'not-found')
+ assert.equal(missing.targetState, 'not-observed')
+ assert.equal(missing.ownershipVerified, false)
+ assert.equal(versionObservation(200, { name: 'test', versions: {} }, '2.0.0').ownershipVerified, false)
+})
+
+test('Registry authentication, throttling, server failures and malformed responses are not availability evidence', () => {
+ for (const status of [401, 403, 429, 500])
+ assert.throws(() => versionObservation(status, { error: 'Not found' }, '2.0.0'), /not an absence/)
+ for (const data of [null, [], {}, { name: 'test' }])
+ assert.throws(() => versionObservation(200, data, '2.0.0'))
+ assert.throws(() => versionObservation(404, { error: 'Forbidden' }, '2.0.0'))
+})
+
+test('Live probe uses only the public registry and verifies response identity', async () => {
+ const urls = []
+ const fetcher = async (url, options) => {
+ urls.push(url)
+ assert.equal(options.redirect, 'error')
+ assert.equal(options.headers.authorization, undefined)
+ return new Response(JSON.stringify({ name: 'artplayer', versions: { '5.4.0': {} } }), { status: 200 })
+ }
+ const result = await observePackage('artplayer', '6.0.0', fetcher)
+ assert.deepEqual(urls, ['https://registry.npmjs.org/artplayer'])
+ assert.equal(result.targetState, 'not-observed')
+ assert.match(result.responseSha256, /^[a-f0-9]{64}$/)
+ await assert.rejects(observePackage('../private', '6.0.0', fetcher), /Unexpected package/)
+ await assert.rejects(observePackage('other', '6.0.0', fetcher), /different package/)
+})
diff --git a/refactor/tasks.json b/refactor/tasks.json
index 37b63f137..fa5f43e79 100644
--- a/refactor/tasks.json
+++ b/refactor/tasks.json
@@ -4960,11 +4960,16 @@
"PKG-MB-08",
"PKG-FACTORY-01"
],
- "status": "todo",
+ "status": "done",
"risk": "H",
"deliverable": "每包版本/变更日志/依赖/类型差异方案和独立准入状态;按 version-policy.md 冻结各包下一 major(minor/patch 归零)并核实 registry 占用",
"acceptance": "所有包有方案和剩余门槛,未决项明确阻止相应发布;本步骤不声称已经可发布;全部包有 major 目标,版本冲突明确处理,独立准备任务同步 manifest/锁/依赖/日志;按 BASE-05 区分 21 库与文档站分发,不机械把文档站当库上传 npm",
- "evidence": []
+ "evidence": [
+ "version-plan.md",
+ "version-plan.json",
+ "baselines/version-registry-2026-09-16.json",
+ "changes/2026-09-16-REL-01-version-plan.md"
+ ]
},
{
"id": "REL-09",
diff --git a/refactor/toolchain-release.md b/refactor/toolchain-release.md
index 9d34904c6..0366b796d 100644
--- a/refactor/toolchain-release.md
+++ b/refactor/toolchain-release.md
@@ -60,7 +60,7 @@ MOD-01 已完成固定版本隔离评估,结论为保留 Yarn。Bun 1.4.2 普
GitHub CI/CD 的优化属于本次重构范围,按 [CI/CD 规范](github-ci-cd.md) 分离 PR 检查、候选准备、Pages 部署与 npm 发布。新增 CI-01 至 CI-04 交付矩阵/报告、部署、分包发布准备及远端准入验收;第三轮复盘需核对这些结果。
-实现完成后必须执行 [三轮全局复盘](release-reviews.md)(REVIEW-01/02/03),分别核对架构兼容、真实环境和最终 npm 候选内容。REL-05 依赖三轮通过;候选反馈修复后的正式发布重新核对受影响证据,不能直接复用旧候选的验收结果。
+实现完成后等待用户指导启动 [三轮全局复盘](release-reviews.md)(REVIEW-01/02/03),不得自动开始;各轮分别核对架构兼容、真实环境和最终 npm 候选内容。REL-05 依赖三轮通过;候选反馈修复后的正式发布重新核对受影响证据,不能直接复用旧候选的验收结果。
1. BASE-01 确定旧核心和插件的支持矩阵,登记 npm tarball integrity。起点 SHA 不能代替消费者产物基线。
2. REL 阶段为每个发生变化的包生成候选 tarball,用隔离消费者验证,无需先公开发布。
diff --git a/refactor/version-plan.json b/refactor/version-plan.json
new file mode 100644
index 000000000..65815308e
--- /dev/null
+++ b/refactor/version-plan.json
@@ -0,0 +1,5212 @@
+{
+ "schemaVersion": 1,
+ "task": "REL-01",
+ "capturedAt": "2026-09-15T16:24:23.645Z",
+ "sourceCommit": "267b21226a11930b1dd89508f326956c1e106928",
+ "registrySnapshot": "refactor/baselines/version-registry-2026-09-16.json",
+ "policy": {
+ "basis": "refactor/version-policy.md",
+ "preparedVersion": "exact next-major stable target",
+ "prereleaseSuffix": null,
+ "localCandidate": "Unpublished target-version tarball, not an npm upload.",
+ "futureCandidateTag": "next",
+ "futureStableTag": "latest",
+ "publicationAuthorized": false,
+ "siteNpmPublication": false,
+ "versionReuse": "Never overwrite or republish any previously used package@version. Any post-publication content fix needs a new version and new evidence."
+ },
+ "sharedGates": [
+ "CI-01",
+ "CI-03",
+ "CI-04",
+ "REL-01",
+ "REL-09",
+ "REL-02",
+ "REL-03",
+ "REL-04",
+ "REVIEW-01",
+ "REVIEW-02",
+ "REVIEW-03"
+ ],
+ "packages": [
+ {
+ "name": "artplayer",
+ "sourceVersion": "5.4.1",
+ "targetVersion": "6.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer",
+ "observedAt": "2026-09-15T16:19:40.759Z",
+ "latest": "5.4.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/releases.json",
+ "selector": "releases.0",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer/CHANGELOG.md",
+ "heading": "6.0.0 (unreleased)",
+ "changes": [
+ "TypeScript subsystems and generated public declarations; preserve root APIs and offer precise /runtime types.",
+ "Lifecycle, source/event ownership, components, subtitles, playback/display and accessibility fixes; historical consumer matrix retained."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {
+ "dependencies": {
+ "option-validator": "^2.0.6"
+ }
+ },
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer.d.ts",
+ "runtimeSubpath": true,
+ "sources": "public/ generates types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer/README.md",
+ "packages/artplayer/ARCHITECTURE.md",
+ "packages/artplayer/types/README.md"
+ ],
+ "remainingPackageTasks": [],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "apple-safari-media",
+ "android-media",
+ "native-fullscreen-pip"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "5.4.1 must be prepared as 6.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-ads",
+ "sourceVersion": "2.1.0",
+ "targetVersion": "3.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-ads",
+ "observedAt": "2026-09-15T16:19:40.741Z",
+ "latest": "1.0.6",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/ads-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-ads/CHANGELOG.md",
+ "heading": "3.0.0 (unreleased)",
+ "changes": [
+ "Typed ad lifecycle and cleanup with preserved published defaults.",
+ "Approved totalDuration type inference correction; migration explanation remains mandatory."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-ads.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-ads/README.md",
+ "packages/artplayer-plugin-ads/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-ADS-05",
+ "PKG-ADS-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "ad-skip-content-restore"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "2.1.0 must be prepared as 3.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ADS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ADS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ADS-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ADS-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-ambilight",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-ambilight",
+ "observedAt": "2026-09-15T16:19:40.049Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/ambilight-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-ambilight/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed rendering and cleanup with legacy factory behavior.",
+ "Published root types retained; precise /runtime entry and older conflicting declaration migration."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-ambilight.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-ambilight/README.md",
+ "packages/artplayer-plugin-ambilight/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-AMBILIGHT-05",
+ "PKG-AMBILIGHT-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "canvas-cors-background"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AMBILIGHT-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AMBILIGHT-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AMBILIGHT-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-asr",
+ "sourceVersion": "2.1.0",
+ "targetVersion": "3.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-asr",
+ "observedAt": "2026-09-15T16:19:40.611Z",
+ "latest": "2.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/asr-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-asr/CHANGELOG.md",
+ "heading": "3.0.0 (unreleased)",
+ "changes": [
+ "Typed recognition, media/audio ownership, fallback routing and explicit capture.",
+ "Preserve capability errors and cleanup; supported devices and WebAudio remain release gates."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-asr.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-asr/README.md",
+ "packages/artplayer-plugin-asr/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-ASR-05",
+ "PKG-ASR-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "audio-context-input-lifecycle"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "2.1.0 must be prepared as 3.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ASR-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ASR-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-11"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ASR-CORS-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-audio-track",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-audio-track",
+ "observedAt": "2026-09-15T16:19:41.038Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/audio-track-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-audio-track/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed dual-media synchronization and owned track listeners.",
+ "Buffer starvation/recovery validation remains open; do not claim a fully green playback matrix."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "types/artplayer-plugin-audio-track.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-audio-track/README.md",
+ "packages/artplayer-plugin-audio-track/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-AUDIO-05",
+ "PKG-AUDIO-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "separate-audio-source-switch"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUDIO-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUDIO-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-SYNC-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-DEMO-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-BUFFER-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-auto-thumbnail",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-auto-thumbnail",
+ "observedAt": "2026-09-15T16:19:41.044Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/auto-thumbnail-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-auto-thumbnail/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Separated metadata, frame capture, encoding and plugin cleanup in TypeScript.",
+ "Native frame readiness/pixel issues remain tracked; migration does not claim all browsers passed."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-auto-thumbnail.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-auto-thumbnail/README.md",
+ "packages/artplayer-plugin-auto-thumbnail/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-AUTO-THUMB-03",
+ "PKG-AUTO-THUMB-05",
+ "PKG-AUTO-THUMB-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "native-first-frame-jpeg"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-03"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-TYPE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-ENCODE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-PIXEL-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-chapter",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-chapter",
+ "observedAt": "2026-09-15T16:19:41.048Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/releases.json",
+ "selector": "releases.1",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-chapter/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed parsing, chapter UI and lifecycle integration.",
+ "Preserve chapter selection/events; remaining restart timing and distribution gates are explicit."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-chapter.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-chapter/README.md",
+ "packages/artplayer-plugin-chapter/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-CHAPTER-05",
+ "PKG-CHAPTER-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "touch-fullscreen-thumbnails"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CHAPTER-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CHAPTER-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "CHAPTER-TIMING-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-chromecast",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-chromecast",
+ "observedAt": "2026-09-15T16:19:41.055Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/chromecast-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-chromecast/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed SDK initialization, session/receiver state and failure ownership.",
+ "Keep old public plugin surface; physical Cast/receiver verification is separate."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-chromecast.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-chromecast/README.md",
+ "packages/artplayer-plugin-chromecast/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-CAST-05",
+ "PKG-CAST-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "cast-receiver-session"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CAST-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CAST-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-06"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-danmuku",
+ "sourceVersion": "5.3.0",
+ "targetVersion": "6.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-danmuku",
+ "observedAt": "2026-09-15T16:19:41.565Z",
+ "latest": "5.3.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/danmuku-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-danmuku/CHANGELOG.md",
+ "heading": "6.0.0 (unreleased)",
+ "changes": [
+ "Typed input, scheduling, Worker placement, renderer, UI and resource ownership.",
+ "Fix issue #958 heatmap density and CPU/async/first-frame scheduling loss; retain root published types with precise /runtime."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-danmuku.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-danmuku/README.md",
+ "packages/artplayer-plugin-danmuku/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-DANMUKU-08",
+ "PKG-DANMUKU-09"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "mask-fullscreen-pip"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "5.3.0 must be prepared as 6.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-08"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DANMUKU-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-danmuku-mask",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-danmuku-mask",
+ "observedAt": "2026-09-15T16:19:41.971Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/danmuku-mask-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-danmuku-mask/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed model/SDK lifecycle, rendering and cancellation.",
+ "Preserve model behavior; combined native load and final SDK/device resource evidence stay explicit."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {
+ "dependencies": {
+ "@mediapipe/selfie_segmentation": "^0.1.1675465747",
+ "@tensorflow-models/body-segmentation": "^1.0.2",
+ "@tensorflow/tfjs-backend-cpu": "^4.21.0",
+ "@tensorflow/tfjs-backend-webgl": "^4.21.0",
+ "@tensorflow/tfjs-converter": "^4.21.0",
+ "@tensorflow/tfjs-core": "^4.21.0"
+ }
+ },
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-danmuku-mask.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-danmuku-mask/README.md",
+ "packages/artplayer-plugin-danmuku-mask/ARCHITECTURE.md",
+ "packages/artplayer-plugin-danmuku-mask/types/README.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-MASK-05",
+ "PKG-MASK-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "real-model-gpu-cleanup"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MASK-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MASK-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-08"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-08"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-LIFETIME-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-MODEL-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-BACKEND-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-DOM-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-NOTICE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DANMUKU-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-SCHEDULING-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-dash-control",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-dash-control",
+ "observedAt": "2026-09-15T16:19:41.354Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/dash-control-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-dash-control/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed SDK 4.x/5.x adapter, selector reconciliation and cleanup.",
+ "Preserve published options/events; distinguish bare-SDK failures from candidate behavior."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-dash-control.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-dash-control/README.md",
+ "packages/artplayer-plugin-dash-control/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-DASH-05",
+ "PKG-DASH-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "real-dash-sdk-tracks"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DASH-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DASH-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-SDK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-DEMO-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-SEEK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-document-pip",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-document-pip",
+ "observedAt": "2026-09-15T16:19:41.352Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/dpip-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-document-pip/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed document/window lifetime and content restoration.",
+ "Preserve existing API and DOM ownership; actual document-PiP/device gates remain."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-document-pip.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-document-pip/README.md",
+ "packages/artplayer-plugin-document-pip/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-DPIP-05",
+ "PKG-DPIP-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "document-pip-native-window"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DPIP-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DPIP-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-PACK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-DOM-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-hls-control",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-hls-control",
+ "observedAt": "2026-09-15T16:19:42.293Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/hls-control-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-hls-control/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed track/quality control and listener/selector lifecycle.",
+ "Preserve supported hls.js combinations and source-topology cleanup; native worker/device gaps remain."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-hls-control.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-hls-control/README.md",
+ "packages/artplayer-plugin-hls-control/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-HLS-SDK-01",
+ "PKG-HLS-05",
+ "PKG-HLS-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "native-hls-and-worker"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-SDK-01"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-CRASH-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-PLAYBACK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-jassub",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-jassub",
+ "observedAt": "2026-09-15T16:19:42.245Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/jassub-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-jassub/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed renderer/Worker/font ownership and native drawing compatibility.",
+ "Preserve root entry and precise /runtime; hybrid late drawing issue remains an explicit blocker."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "types/artplayer-plugin-jassub.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-jassub/README.md",
+ "packages/artplayer-plugin-jassub/ARCHITECTURE.md",
+ "packages/artplayer-plugin-jassub/types/README.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-JASSUB-05",
+ "PKG-JASSUB-06",
+ "PKG-JASSUB-09"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "real-worker-wasm-hybrid"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-09"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "VENDOR-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "VENDOR-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-09"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-TYPE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-HYBRID-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-FIREFOX-OFFSCREEN-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-multiple-subtitles",
+ "sourceVersion": "1.2.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-multiple-subtitles",
+ "observedAt": "2026-09-15T16:19:42.264Z",
+ "latest": "1.2.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/multiple-subtitles-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-multiple-subtitles/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed caption parsing, ASS conversion, merging and load cancellation.",
+ "Retain published root declaration; /runtime describes actual behavior and conflicting older extraction migration."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-multiple-subtitles.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-multiple-subtitles/README.md",
+ "packages/artplayer-plugin-multiple-subtitles/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-MULTI-SUB-05",
+ "PKG-MULTI-SUB-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "subtitle-offset-fullscreen"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.2.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MULTI-SUB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MULTI-SUB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-MERGE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-vast",
+ "sourceVersion": "1.2.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-vast",
+ "observedAt": "2026-09-15T16:19:42.264Z",
+ "latest": "1.0.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/vast-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-vast/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed SDK/loading/disposal and published initialization timing by default.",
+ "Approved workspace-1.2 opt-in timing and /runtime type migration; SDK/network and device evidence remain separate."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {
+ "dependencies": {
+ "@alugha/ima": "2.1.0",
+ "@glomex/vast-ima-player": "^1.21.2"
+ }
+ },
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-vast.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-vast/README.md",
+ "packages/artplayer-plugin-vast/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-VAST-05",
+ "PKG-VAST-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "google-ima-ad-content-restore"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.2.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VAST-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VAST-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-07"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VAST-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VAST-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-plugin-vtt-thumbnail",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-plugin-vtt-thumbnail",
+ "observedAt": "2026-09-15T16:19:42.581Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/vtt-thumbnail-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-plugin-vtt-thumbnail/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed VTT parsing, sprite lifecycle and cleanup.",
+ "Preserve published root types and precise /runtime; document supported old-core combinations and name conflicts."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-plugin-vtt-thumbnail.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-plugin-vtt-thumbnail/README.md",
+ "packages/artplayer-plugin-vtt-thumbnail/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-VTT-THUMB-05",
+ "PKG-VTT-THUMB-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "touch-fullscreen-chapter"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VTT-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VTT-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-CORE-NAME-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-proxy-canvas",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-proxy-canvas",
+ "observedAt": "2026-09-15T16:19:42.579Z",
+ "latest": "1.1.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/canvas-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-proxy-canvas/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed canvas/media shim, source and native subtitle-track ownership.",
+ "Retain published root types with precise /runtime and documented older type conflicts."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-proxy-canvas.d.ts",
+ "runtimeSubpath": true,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-proxy-canvas/README.md",
+ "packages/artplayer-proxy-canvas/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-CANVAS-05",
+ "PKG-CANVAS-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "canvas-subtitle-document-pip"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CANVAS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CANVAS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-proxy-mediabunny",
+ "sourceVersion": "1.2.0",
+ "targetVersion": "2.0.0",
+ "distribution": "npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-proxy-mediabunny",
+ "observedAt": "2026-09-15T16:19:42.812Z",
+ "latest": "1.2.0",
+ "nameState": "published",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/mb-release.json",
+ "selector": "release",
+ "rationale": "Frozen npm tarball provenance; not a new registry availability observation."
+ },
+ "changelog": {
+ "path": "packages/artplayer-proxy-mediabunny/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed engine/shim, input/HLS, audio/video pipelines and track controls.",
+ "Preserve media-like event ordering and published entries; native codec/long-duration/device evidence remains scoped."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {
+ "dependencies": {
+ "mediabunny": "^1.43.1"
+ }
+ },
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-proxy-mediabunny.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-proxy-mediabunny/README.md",
+ "packages/artplayer-proxy-mediabunny/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-MB-09",
+ "PKG-MB-10"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "webcodecs-hls-audio-video"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.2.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-SDK-01"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MB-09"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MB-10"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-10"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-CRASH-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-PLAYBACK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-LICENSE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-CAP-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-tool-iframe",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "renamed-npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-tool-iframe",
+ "observedAt": "2026-09-15T16:19:42.578Z",
+ "latest": null,
+ "nameState": "not-found",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/iframe-release.json",
+ "selector": "release",
+ "publishedName": "artplayer-plugin-iframe",
+ "rationale": "Frozen published predecessor and documented rename commit; candidate keeps current workspace name. Registry target availability still requires REL-01."
+ },
+ "changelog": {
+ "path": "packages/artplayer-tool-iframe/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed cross-frame protocol, navigation generations, origin checks and teardown.",
+ "Preserve the documented migration from artplayer-plugin-iframe; new-name rights and distribution rollback are not inferred from 404."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-tool-iframe.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-tool-iframe/README.md",
+ "packages/artplayer-tool-iframe/ARCHITECTURE.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-IFRAME-05",
+ "PKG-IFRAME-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "cross-origin-bfcache-device"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-IFRAME-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-IFRAME-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-TRUST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-tool-thumbnail",
+ "sourceVersion": "4.4.0",
+ "targetVersion": "5.0.0",
+ "distribution": "recovered-npm",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-tool-thumbnail",
+ "observedAt": "2026-09-15T16:19:43.110Z",
+ "latest": null,
+ "nameState": "unpublished",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/thumbnail-release.json",
+ "selector": "recovered",
+ "rationale": "Recovered CDN/Git bytes only; original registry tarball and complete archive unavailable. Not an intact rollback artifact."
+ },
+ "changelog": {
+ "path": "packages/artplayer-tool-thumbnail/CHANGELOG.md",
+ "heading": "5.0.0 (unreleased)",
+ "changes": [
+ "Typed source/extraction/input/emitter ownership and actual constructor declarations.",
+ "Approved published-3.5 default with workspace-4.4 opt-in; preserve delay/height, event and input policies and historical creat* names."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {},
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": "./types/artplayer-tool-thumbnail.d.ts",
+ "runtimeSubpath": false,
+ "sources": "types/"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-tool-thumbnail/README.md",
+ "packages/artplayer-tool-thumbnail/ARCHITECTURE.md",
+ "packages/artplayer-tool-thumbnail/types/README.md"
+ ],
+ "remainingPackageTasks": [
+ "PKG-TOOL-THUMB-05",
+ "PKG-TOOL-THUMB-06"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "native-file-decode-encode"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "4.4.0 must be prepared as 5.0.0 before final candidate validation"
+ },
+ {
+ "kind": "distribution-history",
+ "detail": "Historical archive unavailable; recovered content is not a complete rollback tarball"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-TOOL-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-TOOL-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "THUMB-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:runtime",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:types",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:combinations",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:browser",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ },
+ {
+ "name": "artplayer-vitepress",
+ "sourceVersion": "1.1.0",
+ "targetVersion": "2.0.0",
+ "distribution": "site",
+ "registry": {
+ "url": "https://registry.npmjs.org/artplayer-vitepress",
+ "observedAt": "2026-09-15T16:19:43.095Z",
+ "latest": null,
+ "nameState": "not-found",
+ "targetState": "not-observed",
+ "ownershipVerified": false
+ },
+ "frozenHistory": {
+ "file": "refactor/baselines/site-provenance.json",
+ "rationale": "Existing docs/site build and URL distribution. No npm publication is inferred."
+ },
+ "changelog": {
+ "path": "packages/artplayer-vitepress/CHANGELOG.md",
+ "heading": "2.0.0 (unreleased)",
+ "changes": [
+ "Typed site/editor/documentation/build modules and local library declaration generation.",
+ "Preserve URLs, examples and editor globals; font provenance, site verification and Pages gates remain. No new npm distribution."
+ ]
+ },
+ "dependencyPolicy": {
+ "action": "preserve existing runtime/dev/optional/peer declarations; do not introduce a new core-major peer restriction",
+ "sourceFields": {
+ "devDependencies": {
+ "flexsearch": "0.8.158",
+ "markdown-it": "14.1.0",
+ "vitepress": "1.6.3",
+ "vitepress-plugin-search": "1.0.4-alpha.22",
+ "vue": "3.5.13"
+ }
+ },
+ "internalWorkspaceDependencies": []
+ },
+ "declarationPolicy": {
+ "action": "preserve existing root and legacy declarations, approved type migrations and module resolution; retain accurate runtime subpath where already provided",
+ "root": null,
+ "runtimeSubpath": false,
+ "sources": "browser/ and build/ source types"
+ },
+ "maintenanceDocs": [
+ "packages/artplayer-vitepress/README.md"
+ ],
+ "remainingPackageTasks": [
+ "SITE-04",
+ "SITE-05",
+ "SITE-06",
+ "SITE-07"
+ ],
+ "remainingRequirements": [
+ "apple-safari-device",
+ "android-chrome-device",
+ "mobile-editor-and-site"
+ ],
+ "readinessObservation": {
+ "status": "blocked",
+ "blockers": [
+ {
+ "kind": "version",
+ "detail": "1.1.0 must be prepared as 2.0.0 before final candidate validation"
+ },
+ {
+ "kind": "candidate",
+ "detail": "No candidate artifact is bound"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-01"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-03"
+ },
+ {
+ "kind": "task",
+ "detail": "CI-04"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CHAPTER-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CHAPTER-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AMBILIGHT-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AMBILIGHT-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUDIO-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUDIO-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-03"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-AUTO-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VTT-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VTT-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-SDK-01"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-HLS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DASH-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DASH-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MULTI-SUB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MULTI-SUB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MASK-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MASK-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ASR-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ASR-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ADS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-ADS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VAST-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-VAST-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CAST-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CAST-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DPIP-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DPIP-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-08"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-DANMUKU-09"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CANVAS-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-CANVAS-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MB-09"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-MB-10"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-IFRAME-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-IFRAME-06"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-TOOL-THUMB-05"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-TOOL-THUMB-06"
+ },
+ {
+ "kind": "task",
+ "detail": "SITE-04"
+ },
+ {
+ "kind": "task",
+ "detail": "SITE-05"
+ },
+ {
+ "kind": "task",
+ "detail": "SITE-06"
+ },
+ {
+ "kind": "task",
+ "detail": "SITE-07"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-09"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REL-03"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-01"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-02"
+ },
+ {
+ "kind": "task",
+ "detail": "REVIEW-03"
+ },
+ {
+ "kind": "task",
+ "detail": "PKG-JASSUB-09"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ENG-PERF-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-DEMO-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SOURCE-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-SITE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VENDOR-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "VENDOR-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "VENDOR-06"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-02"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-03"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-04"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-05"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-06"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-07"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-08"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-09"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-10"
+ },
+ {
+ "kind": "risk",
+ "detail": "SDK-11"
+ },
+ {
+ "kind": "risk",
+ "detail": "BASE-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-ENV-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-CRASH-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "HLS-PLAYBACK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-SYNC-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-DEMO-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUDIO-BUFFER-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "CHAPTER-TIMING-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-SDK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-DEMO-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DASH-SEEK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ADS-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ADS-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VAST-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VAST-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AMBILIGHT-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-PACK-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-DOM-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DPIP-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-LICENSE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MB-CAP-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-TRUST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "IFRAME-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "THUMB-MEDIA-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-TYPE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-ENCODE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "AUTO-THUMB-PIXEL-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-DIST-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-THUMB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-MERGE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-LIFE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-TYPE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-EXPORT-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "ASR-CORS-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-LIFETIME-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-MODEL-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-BACKEND-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-DOM-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-NOTICE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "DANMUKU-SOURCE-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MASK-SCHEDULING-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-HYBRID-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "JASSUB-FIREFOX-OFFSCREEN-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "VTT-CORE-NAME-01"
+ },
+ {
+ "kind": "risk",
+ "detail": "MULTI-SUB-SWITCH-01"
+ },
+ {
+ "kind": "evidence:build",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:site-urls",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:site-assets",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:editor",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:devices",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:licenses",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:rollback",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:remote-ci",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-01",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-02",
+ "detail": "Missing candidate-bound evidence"
+ },
+ {
+ "kind": "evidence:review-03",
+ "detail": "Missing candidate-bound evidence"
+ }
+ ],
+ "publicationAuthorized": false,
+ "capturedAt": "2026-09-15T16:24:23.645Z"
+ }
+ }
+ ],
+ "examples": [
+ {
+ "manifest": "example/react.js/package.json",
+ "private": true,
+ "versionChange": false,
+ "dependencies": {
+ "artplayer": {
+ "before": "^5.3.0-beta.4",
+ "planned": "file:../../packages/artplayer"
+ },
+ "artplayer-plugin-danmuku": {
+ "before": "^5.2.0",
+ "planned": "file:../../packages/artplayer-plugin-danmuku"
+ },
+ "artplayer-plugin-document-pip": {
+ "before": "^1.0.2",
+ "planned": "file:../../packages/artplayer-plugin-document-pip"
+ }
+ }
+ },
+ {
+ "manifest": "example/vue.js/package.json",
+ "private": true,
+ "versionChange": false,
+ "dependencies": {
+ "artplayer": {
+ "before": "^5.3.0-beta.4",
+ "planned": "file:../../packages/artplayer"
+ },
+ "artplayer-plugin-danmuku": {
+ "before": "^5.2.0",
+ "planned": "file:../../packages/artplayer-plugin-danmuku"
+ },
+ "artplayer-plugin-document-pip": {
+ "before": "^1.0.2",
+ "planned": "file:../../packages/artplayer-plugin-document-pip"
+ }
+ }
+ }
+ ],
+ "lockPolicy": "Yarn Classic 1.22.22; root yarn.lock only. Reinstall frozen after preparing metadata; do not create example lockfiles or change external dependency versions incidentally.",
+ "nextTask": "REL-09 implements metadata and changelogs. REL-02 rebuilds final target-version candidates and revalidates; old-version results are historical evidence only."
+}
diff --git a/refactor/version-plan.md b/refactor/version-plan.md
new file mode 100644
index 000000000..93c882f62
--- /dev/null
+++ b/refactor/version-plan.md
@@ -0,0 +1,69 @@
+# 分包版本与迁移方案(REL-01)
+
+2026-09-16 冻结方案。机器源为 [version-plan.json](version-plan.json),目标沿用用户批准的 [大版本政策](version-policy.md)。这是版本准备方案,22包当前均被正式发布台账阻止发布;任务、风险和实际准入继续以 tasks.json、risks.json、release-ledger.json 为准,不手工维护另一份“已经通过”清单。
+
+## 版本和候选编号
+
+REL-09 将22个 workspace manifest 设为各自下一 major 的正式数字版本,minor/patch 归零,不给根 private 管理包或两个 private 示例提升版本。本轮本地候选就是未上传的目标版本 tarball,不加 -rc 后缀;不能将此称为已经发布的预发布版本。
+
+后续经用户授权公开候选时使用 next 标签,正式推广使用 latest;相同版本只能上传一次,标签推广应使用已验证的同一内容。next 标签不是版本隔离或发布授权,明确选择新版本的消费者仍可取得它。若公开后需要改内容,必须准备新版本并重新验证,不能覆盖或撤包后复用原版本。所有实际发布及标签操作仍等待三轮复盘和单独授权。
+
+## 逐包目标与变更日志范围
+
+表中源码版本是冻结快照;npm latest 是本次只读 registry 观察,并非新的兼容性基线。REL-09 为每包维护 CHANGELOG.md 的目标版本 unreleased 条目;每条的具体变更、声明策略、维护文档、依赖字段和剩余门槛见机器源。
+
+| 包 | 源码 → 目标 | npm latest / 状态 | 变更日志要点 |
+| --- | --- | --- | --- |
+| artplayer | 5.4.1 → 6.0.0 | 5.4.0 | TypeScript subsystems and generated public declarations; preserve root APIs and offer precise /runtime types. Lifecycle, source/event ownership, components, subtitles, playback/display and accessibility fixes; historical consumer matrix retained. |
+| artplayer-plugin-ads | 2.1.0 → 3.0.0 | 1.0.6 | Typed ad lifecycle and cleanup with preserved published defaults. Approved totalDuration type inference correction; migration explanation remains mandatory. |
+| artplayer-plugin-ambilight | 1.1.0 → 2.0.0 | 1.1.0 | Typed rendering and cleanup with legacy factory behavior. Published root types retained; precise /runtime entry and older conflicting declaration migration. |
+| artplayer-plugin-asr | 2.1.0 → 3.0.0 | 2.1.0 | Typed recognition, media/audio ownership, fallback routing and explicit capture. Preserve capability errors and cleanup; supported devices and WebAudio remain release gates. |
+| artplayer-plugin-audio-track | 1.1.0 → 2.0.0 | 1.1.0 | Typed dual-media synchronization and owned track listeners. Buffer starvation/recovery validation remains open; do not claim a fully green playback matrix. |
+| artplayer-plugin-auto-thumbnail | 1.1.0 → 2.0.0 | 1.1.0 | Separated metadata, frame capture, encoding and plugin cleanup in TypeScript. Native frame readiness/pixel issues remain tracked; migration does not claim all browsers passed. |
+| artplayer-plugin-chapter | 1.1.0 → 2.0.0 | 1.1.0 | Typed parsing, chapter UI and lifecycle integration. Preserve chapter selection/events; remaining restart timing and distribution gates are explicit. |
+| artplayer-plugin-chromecast | 1.1.0 → 2.0.0 | 1.1.0 | Typed SDK initialization, session/receiver state and failure ownership. Keep old public plugin surface; physical Cast/receiver verification is separate. |
+| artplayer-plugin-danmuku | 5.3.0 → 6.0.0 | 5.3.0 | Typed input, scheduling, Worker placement, renderer, UI and resource ownership. Fix issue #958 heatmap density and CPU/async/first-frame scheduling loss; retain root published types with precise /runtime. |
+| artplayer-plugin-danmuku-mask | 1.1.0 → 2.0.0 | 1.1.0 | Typed model/SDK lifecycle, rendering and cancellation. Preserve model behavior; combined native load and final SDK/device resource evidence stay explicit. |
+| artplayer-plugin-dash-control | 1.1.0 → 2.0.0 | 1.1.0 | Typed SDK 4.x/5.x adapter, selector reconciliation and cleanup. Preserve published options/events; distinguish bare-SDK failures from candidate behavior. |
+| artplayer-plugin-document-pip | 1.1.0 → 2.0.0 | 1.1.0 | Typed document/window lifetime and content restoration. Preserve existing API and DOM ownership; actual document-PiP/device gates remain. |
+| artplayer-plugin-hls-control | 1.1.0 → 2.0.0 | 1.1.0 | Typed track/quality control and listener/selector lifecycle. Preserve supported hls.js combinations and source-topology cleanup; native worker/device gaps remain. |
+| artplayer-plugin-jassub | 1.1.0 → 2.0.0 | 1.1.0 | Typed renderer/Worker/font ownership and native drawing compatibility. Preserve root entry and precise /runtime; hybrid late drawing issue remains an explicit blocker. |
+| artplayer-plugin-multiple-subtitles | 1.2.0 → 2.0.0 | 1.2.0 | Typed caption parsing, ASS conversion, merging and load cancellation. Retain published root declaration; /runtime describes actual behavior and conflicting older extraction migration. |
+| artplayer-plugin-vast | 1.2.0 → 2.0.0 | 1.0.0 | Typed SDK/loading/disposal and published initialization timing by default. Approved workspace-1.2 opt-in timing and /runtime type migration; SDK/network and device evidence remain separate. |
+| artplayer-plugin-vtt-thumbnail | 1.1.0 → 2.0.0 | 1.1.0 | Typed VTT parsing, sprite lifecycle and cleanup. Preserve published root types and precise /runtime; document supported old-core combinations and name conflicts. |
+| artplayer-proxy-canvas | 1.1.0 → 2.0.0 | 1.1.0 | Typed canvas/media shim, source and native subtitle-track ownership. Retain published root types with precise /runtime and documented older type conflicts. |
+| artplayer-proxy-mediabunny | 1.2.0 → 2.0.0 | 1.2.0 | Typed engine/shim, input/HLS, audio/video pipelines and track controls. Preserve media-like event ordering and published entries; native codec/long-duration/device evidence remains scoped. |
+| artplayer-tool-iframe | 1.1.0 → 2.0.0 | not-found | Typed cross-frame protocol, navigation generations, origin checks and teardown. Preserve the documented migration from artplayer-plugin-iframe; new-name rights and distribution rollback are not inferred from 404. |
+| artplayer-tool-thumbnail | 4.4.0 → 5.0.0 | unpublished | Typed source/extraction/input/emitter ownership and actual constructor declarations. Approved published-3.5 default with workspace-4.4 opt-in; preserve delay/height, event and input policies and historical creat* names. |
+| artplayer-vitepress | 1.1.0 → 2.0.0 | not-found | Typed site/editor/documentation/build modules and local library declaration generation. Preserve URLs, examples and editor globals; font provenance, site verification and Pages gates remain. No new npm distribution. |
+
+## 依赖、示例与分发
+
+当前22包没有互相声明的 workspace dependencies/peerDependencies。保留已有外部依赖与版本范围,尤其不因核心升到6而新设只支持6的peer限制;声明中的核心类型引用和实际旧核心支持仍由各包测试验证。VitePress开发依赖、MediaBunny、Mask和VAST运行依赖保持现有范围。
+
+React/Vue示例各有三项已发布版本依赖:core、Danmuku和Document PiP。REL-09 将仓库内示例指向对应本地包(file:../../packages/),使未发布新版本可以真实安装/构建;原始历史消费夹具保留,隔离tarball验证继续替换其测试来源。示例README同步先构建本地包的步骤;只维护根yarn.lock,不生成示例锁文件。新旧框架消费脚本需重新验证路径处理,不能认为修改package.json就已通过。
+
+21个库分别核对原入口、exports/typesVersions、legacy、声明与资源,不机械统一为一种导出形状。核心声明继续从public/生成;已有/runtime入口和已批准的历史类型冲突说明保持。工具Thumbnail保留npm默认和显式workspace模式;VAST保留npm初始化与显式workspace模式;其他已接受的类型差异不借major升级扩大。
+
+artplayer-vitepress升至2.0.0,但仍是站点分发,不新增npm发布。Iframe保留旧发布名artplayer-plugin-iframe的冻结来源和回退关联;新名404不证明名称可由当前账号使用。Thumbnail撤包后的历史归档/CSS/恢复门槛仍需完成,不能恢复上传曾使用过的版本。
+
+## Registry证据与刷新
+
+[2026-09-16只读快照](baselines/version-registry-2026-09-16.json)覆盖22个workspace名及Iframe旧名。所有目标版本均为not-observed,未观察到目标或更高major的稳定版本占用。未观察到占用不等于取得名称权限、保留版本或批准发布;CI-03/04需在实际上传前重新查验并验证发布身份。
+
+查询同时读取versions、time及unpublished历史;网络、权限、限流、服务器和格式错误不能当作不存在。npm规定已使用的name@version即使撤包也不能重复使用,见[npm Unpublish Policy](https://docs.npmjs.com/policies/unpublish/)。
+
+```sh
+node refactor/scripts/version-registry.mjs --capture refactor/.cache/version-registry-.json
+node refactor/scripts/version-plan.mjs --check
+node refactor/scripts/version-plan.mjs --prepared
+```
+
+固定Node24.21.0/Yarn1.22.22。capture只读registry并写新的本地证据,不覆盖旧快照;遇到已使用目标、更高major或未知响应退出1。check验证方案与当前清单;prepared还要求22包目标版本、各包CHANGELOG和两个示例依赖全部落地,目前应失败。它们均不代替严格release:preflight,也不执行publish。
+
+## 实施顺序与失效规则
+
+1. 本任务冻结方案和registry证据,独立提交。
+2. REL-09更新版本、变更日志和适用示例/依赖/锁文件,冻结安装、严格类型和必要构建验证;单独提交。
+3. REL-02重新构建目标版本产物,检查所有入口/资源及新旧消费者并绑定真实候选。旧版本的绿色报告保留为历史证据,不自动适用于新版本产物。
+4. 继续各包组合/分发、设备、CI/CD与站点门槛。完成实施后由用户指导启动复盘,不能自动开展三轮复盘或发布。
diff --git a/refactor/version-policy.md b/refactor/version-policy.md
index 2c05565c3..62bb1a28a 100644
--- a/refactor/version-policy.md
+++ b/refactor/version-policy.md
@@ -4,7 +4,7 @@
## 目标清单
-以下来自源码提交 a9197f59 的 22 个 package.json,是本次规划快照,并非已核实的 npm 最新版本;package-inventory.json 历史基线保持不变。本任务不修改 manifest。
+以下来自源码提交 a9197f59 的 22 个 package.json,是本次规划快照,并非 npm 最新版本;package-inventory.json 历史基线保持不变。REL-01 已在 [分包版本方案](version-plan.md) 冻结目标、迁移/依赖方案和2026-09-16 registry观察;manifest 由 REL-09 更新。
| 包 | 当前源码版本 | 重构正式目标 |
| --- | --- | --- |
@@ -43,4 +43,4 @@
6. 候选版本必须在最终构建/pack/验证前确定,CI-03 校验逐包版本、包内容和发布 tag;不能测试旧版本包后临发布再改版本。版本或依赖变化使相关候选证据失效,必须重跑验证。
7. REVIEW-03 逐包核对目标、声明、入口、版本组合、旧调用及回退产物;release notes 说明本次工程重构采用新 major,但不能笼统声明所有旧 API 已兼容而缺少证据。
-本次决定替代 toolchain-release.md 和 github-ci-cd.md 原先“不自动提升全部 major”的规则。兼容契约与三轮复盘门槛不变;这是版本策略记录,尚未实施升级或发布。
+本次决定替代 toolchain-release.md 和 github-ci-cd.md 原先“不自动提升全部 major”的规则。兼容契约与三轮复盘门槛不变;REL-01已冻结方案,REL-09尚未实施升级,没有发布授权。实施完成后等待用户指导启动复盘。