mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-25 08:01:20 -08:00
test(hls): [PKG-HLS-02] cover released contracts and real SDK playback
This commit is contained in:
1 parent
cbbdc03a7c
commit
33f6d19b77
55 files changed
+8678
-14
No files matched your search
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "PKG-HLS-02",
|
||||
"capturedAt": "2026-09-11T15:36:11.802Z",
|
||||
"metadataUrl": "https://registry.npmjs.org/hls.js/1.5.17",
|
||||
"release": {
|
||||
"name": "hls.js",
|
||||
"version": "1.5.17",
|
||||
"tarball": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.17.tgz",
|
||||
"integrity": "sha512-wA66nnYFvQa1o4DO/BFgLNRKnBTVXpNeldGRBJ2Y0SvFtdwvFKCbqa9zhHoZLoxHhZ+jYsj3aIBkWQQCPNOhMw==",
|
||||
"sha256": "8f9e60001992f59dbfb1dbc397e145743c41bb6dde233ec8a7974013c8a031fe",
|
||||
"files": {
|
||||
"package/package.json": "f2172b9942a23ffb46edd4af815cf1ea161db088e7f63dc518d30e55c95d6ae9",
|
||||
"package/LICENSE": "ca8773cf798c7ed997d4dd7c8e23c348699f8d5b7462636694cc14de6cda12db",
|
||||
"package/dist/hls.min.js": "484054e8cd03d3f6d1781fb7f402bdc318d8a4c527f933a95c624e27cc9a9470",
|
||||
"package/src/hls.ts": "b3d3f797669e89bc8d05d2de2aae243ae110811d6738948f173d789cc1ac1f2d",
|
||||
"package/src/controller/audio-track-controller.ts": "ff34f3cb29b66aa5fcba87758bb20d129b052a053808c150ce779e0ceb1e4626"
|
||||
}
|
||||
},
|
||||
"note": "Test-only pinned integration baseline from the existing example; selected member hashes plus whole archive integrity. No runtime dependency or complete supported version claim."
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,26 @@
|
||||
# PKG-HLS-02:建立 HLS 控制与真实 SDK 基线
|
||||
|
||||
新增发布三格式/源码共用契约、发布特有缺陷观察和四组合真实 Hls.js 测试。
|
||||
测试主机、包读取、浏览器场景和媒体生成分别归属 test/helpers/hls-control.js、既有 load/release
|
||||
工具、test/browser/hls-control.spec.js 与 scripts/generate-hls-fixture.mjs。
|
||||
本任务不改生产源码、公开声明和 dist;模块拆分及类型修正由 HLS-03/04 执行。
|
||||
|
||||
45 项 Node 通过;浏览器 31 项通过、14 项明确跳过。最初 Windows WebKit 14 个失败经诊断
|
||||
确认 MSE 缺失,新增能力/失败清理断言,保留 Safari/MSE 未验收风险。不能用最终退出码 0
|
||||
作为全浏览器或发布放行。见 [测试说明](../hls-validation.md) 与 [冻结证据](../baselines/hls-validation.json)。
|
||||
|
||||
真实 Hls.js 1.5.17、双档位/双音轨和无音轨流覆盖播放、画面、手动/Auto、音轨、pause/seek、
|
||||
失败恢复、切源和销毁;该样本没有复现 id/index 错位。旧版 Auto 标签与空轨道菜单残留有
|
||||
浏览器证据,过期回调有受控证据。类型/异步/公开行为不以模拟对象替代真实播放。
|
||||
|
||||
工具变更:Node 单测加入 Yarn 正式链;SDK 固定归档只供测试,不新增运行时依赖;合法点分
|
||||
包名支持及非法路径拒绝测试;媒体生成器拒绝覆盖,生成文件有版本/命令/hash。初次 .ts
|
||||
媒体后缀被 ESLint 当作 TypeScript,已由生成器改成 .mpegts 并重新生成、重新跑浏览器。
|
||||
|
||||
验证:专项 lint、45 项 Node、31 通过/14 明确跳过的浏览器,以及完整 ci:check(485 单元、
|
||||
11 工程、26 基线,共 522 项;249 个生产 TS 文件严格检查)、计划/风险
|
||||
和 diff 检查。未重复核心全量安装包矩阵。本任务测试源码构建,HLS 安装包验收仍属 06。
|
||||
回退本提交撤回测试/样本/来源与风险记录;生产播放器不变。下步 HLS-03,独立提交。
|
||||
|
||||
CI 仍有既有生成文件 docs/assets/ts/artplayer.d.ts 的 unused eslint-disable warning;没有
|
||||
手改生成声明来消除它。媒体 .m3u8 固定 LF、.mpegts 标记二进制,避免跨平台 checkout 改字节。
|
||||
@@ -44,7 +44,7 @@ Node10 是 TS 模块解析模式名,不代表支持 Node.js 10。现代 es2020
|
||||
| artplayer-plugin-danmuku-mask / 1.1.0 | MediaPipe/TensorFlow 模型、GPU/CPU/WASM、停止/销毁;人物短片 | Yarn 与 model URL 分开;默认 solutionPath 无固定版本,下载/推理/失败待 | PKG-MASK-01/02/05/06 |
|
||||
| artplayer-plugin-dash-control / 1.1.0 | dash.js 实际表示/音轨、自动/手动高亮、切换拓扑;固定 MPD/segments | 本地选择逻辑 Node 测试已有;真实 dash.js/浏览器流待,示例版本见 SDK-02 | PKG-DASH-01/02/05/06、EX-03 |
|
||||
| artplayer-plugin-document-pip / 1.1.0 | Document PiP、节点/样式迁移与退出恢复 | 支持浏览器/版本待确认,真实用户手势与 PiP 窗口待 | PKG-DPIP-01/02/05/06 |
|
||||
| artplayer-plugin-hls-control / 1.1.0 | hls.js 清晰度/音轨自动手动切换;主/子列表与拓扑变化 | 实际 SDK/流未运行,示例版本见 SDK-01;Safari 原生 HLS 与 hls.js 路径分开 | PKG-HLS-01/02/05/06、EX-03 |
|
||||
| artplayer-plugin-hls-control / 1.1.0 | hls.js 清晰度/音轨自动手动切换;主/子列表与拓扑变化 | 1.5.17 在 Chromium/Firefox 本地双档位/音轨基线通过;Windows WebKit 无 MSE,14 播放用例 skipped;Safari/native/worker 仍待验,见 hls-validation.md | PKG-HLS-01/02/05/06、EX-03 |
|
||||
| artplayer-plugin-jassub / 1.1.0 | ASS、worker/WASM/font 加载、切源/销毁;短 ASS+明确来源字体 | 内嵌资源哈希已有;版本对应、跨源/worker 限制、实际渲染待 | PKG-JASSUB-01/02/05/06 |
|
||||
| artplayer-plugin-multiple-subtitles / 1.2.0 | VTT 合并/排序/解析错误、URL 回收;双语言/空/坏 VTT | parser 来源头已观察;特有行为和浏览器字幕待 | PKG-MULTI-SUB-01/02/05/06 |
|
||||
| artplayer-plugin-vast / 1.2.0 | Glomex/Google IMA、广告错误/恢复、重复初始化;供应商测试广告标签 | 依赖版本已记录;实际 IMA 网络/广告流程待,PR 用受控 adapter | PKG-VAST-01/02/05/06 |
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# HLS control 测试与环境边界
|
||||
|
||||
PKG-HLS-02 建立迁移前基线。源码目前仍为 src/index.js,不能把测试任务当作 TS 迁移已完成。
|
||||
来源见 [发布契约](baselines/hls-control-contract.md)、[SDK 固定记录](baselines/hls-sdk.json)、
|
||||
[本轮证据](baselines/hls-validation.json)。
|
||||
|
||||
## 可重跑入口
|
||||
|
||||
- `node --test test/hls-control.test.js`:45 项,源码与发布 main/legacy/ESM 共用正常契约,
|
||||
发布包单独复现旧缺陷;已接入 `yarn test:unit`。
|
||||
- `yarn test:browser hls-control.spec.js`:当前源码与发布插件在旧核心 5.4.0/当前核心上的四组合,
|
||||
加上 SDK 能力检查。通过现有 Playwright 工程入口执行;源码候选构建不写 dist。
|
||||
- `node refactor/scripts/hls-contract.mjs`:HLS 插件发布来源核验。
|
||||
- `node scripts/generate-hls-fixture.mjs <新的输出目录>`:只在需要改变样本时执行;
|
||||
测试使用已提交媒体和 manifest,不要求安装 FFmpeg。详见 test/browser/media/hls/README.md。
|
||||
|
||||
SDK 使用示例原有的 Hls.js 1.5.17,首次从固定 npm URL 下载并验证 SHA-512/SHA-256,
|
||||
代码取归档中的 dist/hls.min.js。SDK 仅在测试浏览器执行,不加生产依赖,不改 Yarn 锁文件。
|
||||
归档读取工具允许合法的点分包名 hls.js,同时测试拒绝路径穿越等非法标识。
|
||||
生成器记录 FFmpeg 版本和参数;媒体源为 testsrc2/sine,不依赖远程影片版权或服务可用性。
|
||||
|
||||
## 已验证的内容
|
||||
|
||||
Node 契约覆盖同步注册/update、媒体身份校验、quality/audio 显示开关、名称/顺序/去重、
|
||||
getName 输入引用与一参/两参调用、SDK 写入→notice→check 顺序、回调/SDK 异常传播、替换实例。
|
||||
这些受控测试不提供 DOM、实际 ABR 或媒体解码证明。
|
||||
|
||||
Chromium 与 Firefox 各 14 项播放/失败组合通过,另各 1 项 SDK 能力检查通过:
|
||||
本地两档位和双音轨、可见画面像素与解码帧、实际播放推进、90P→180P、返回 Auto、French
|
||||
音轨切换完成事件、暂停/seek/继续、503 manifest 失败后恢复、切到无音轨 master、SDK 与核心销毁。
|
||||
选择通过真实鼠标操作控件;属性、画面和 SDK 事件联合断言,不只验证菜单文字。
|
||||
|
||||
旧版真实 Auto 状态下 update 将标签改成当前播放档位;旧版切到无音轨 master 后仍保留音轨控件。
|
||||
旧菜单回调写旧实例、destroy 后公开 update 继续工作在受控测试复现;后者不是浏览器泄漏定量证明。
|
||||
SDK 在当前双音轨样本中将 id 与选择索引对齐,没有把静态 id/index 差异误报为已复现错误。
|
||||
|
||||
## Windows WebKit 缺口必须保留
|
||||
|
||||
首轮完整三引擎 28 通过、14 失败。定向诊断确认 Windows Playwright WebKit 26.6 的
|
||||
MediaSource 和 ManagedMediaSource 均为 undefined,Hls.isSupported() 为 false,实际 SDK
|
||||
报告 manifestIncompatibleCodecsError。新旧核心与插件共同受影响,不是 TS 候选特有回归。
|
||||
|
||||
最终报告为 **31 passed、14 skipped、0 failed**:WebKit 只通过显式能力/失败清理断言;
|
||||
14 个播放场景按这个已经验证的宿主限制跳过。能力测试会在环境变化时失败提醒重新核对,
|
||||
不能把跳过转换为播放通过。最初失败和定向诊断报告的摘要/完整性保留在冻结证据中。
|
||||
Safari/macOS/iOS 的真实 MSE/ManagedMediaSource 与原生 HLS fallback 仍由 PKG-HLS-05、
|
||||
EX-03、REL-09/REVIEW-02 接续,SDK-01/HLS-ENV-01 保持 open。
|
||||
|
||||
本轮 enableWorker=false,流通过 Playwright 本地路由提供。远端网络、SDK worker、分组音轨变更、
|
||||
Safari/native fallback、更多 SDK 版本、安装包及示例页面全部组合不是本轮完成内容。
|
||||
显式安装产物映射暂不接受 HLS 源码回退;HLS-06 必须加入 HLS 包对应映射和隔离 tarball 消费。
|
||||
|
||||
## 后续实施
|
||||
|
||||
PKG-HLS-03 拆出映射、UI 提交/删除、Hls 订阅与生命周期;把上述缺陷变成候选修复断言,
|
||||
保留发布版观察。PKG-HLS-04 迁移自有模块和公开类型,修正可选 option、getName 对象与可选 index,
|
||||
保持旧声明接受范围及分发路径。PKG-HLS-05/06 完成实际 SDK、浏览器、示例及安装包验收。
|
||||
+3
-2
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 215 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 153 / doing 0 / blocked 0 / done 62 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 152 / doing 0 / blocked 0 / done 63 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
| ID | 范围 / 步骤 | 前置依赖 | 交付物 | 验收条件 | 风险 | 状态 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| PKG-HLS-01 | artplayer-plugin-hls-control<br>核对包契约与历史用法 | BASE-05 | quality/audio 配置、getName、update、控件名及 Hls 实例绑定 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | H | done |
|
||||
| PKG-HLS-02 | artplayer-plugin-hls-control<br>建立特有行为与错误测试 | PKG-HLS-01, ENG-03, ENG-05 | Auto/手动实际 level、音轨、去重/过滤和拓扑变化 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | todo |
|
||||
| PKG-HLS-02 | artplayer-plugin-hls-control<br>建立特有行为与错误测试 | PKG-HLS-01, ENG-03, ENG-05 | Auto/手动实际 level、音轨、去重/过滤和拓扑变化 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done |
|
||||
| PKG-HLS-03 | artplayer-plugin-hls-control<br>整理内部职责与资源 | PKG-HLS-02, CORE-11, CORE-14 | 映射计算与 selector 更新/删除、Hls 事件订阅分离 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | todo |
|
||||
| PKG-HLS-04 | artplayer-plugin-hls-control<br>迁移自有源码和公开类型 | PKG-HLS-03, ENG-04, ENG-06, CORE-07 | HLS 能力适配类型、回调上下文和旧 getName 参数 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | todo |
|
||||
| PKG-HLS-05 | artplayer-plugin-hls-control<br>验证新旧核心和组合 | PKG-HLS-04, CORE-22 | 本地多码率 HLS、换成无轨道来源、旧核心和最终核心 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo |
|
||||
@@ -466,3 +466,4 @@
|
||||
- PKG-CHAPTER-03: [记录](changes/2026-09-10-PKG-CHAPTER-03-typescript-modules.md) [记录](baselines/chapter-migration-validation.json)
|
||||
- PKG-CHAPTER-04: [记录](changes/2026-09-10-PKG-CHAPTER-04-public-types.md) [记录](baselines/chapter-types-validation.json)
|
||||
- PKG-HLS-01: [记录](baselines/hls-control-contract.md) [记录](baselines/hls-control-release.json) [记录](changes/2026-09-11-PKG-HLS-01-contract.md)
|
||||
- PKG-HLS-02: [记录](hls-validation.md) [记录](baselines/hls-sdk.json) [记录](baselines/hls-validation.json) [记录](changes/2026-09-11-PKG-HLS-02-tests.md)
|
||||
@@ -1,5 +1,13 @@
|
||||
# 进度与证据
|
||||
|
||||
## 最新完成:PKG-HLS-02 行为与 SDK 基线
|
||||
|
||||
45 项 HLS Node 契约通过,覆盖源码及发布 main/legacy/ESM;完整 CI 522 项、249 个生产 TS 文件通过。真实 Hls.js 1.5.17 与本地双档位/双音轨流验证四组合的解码、实际选择、pause/seek、切源、失败恢复和销毁。
|
||||
|
||||
浏览器结果为 31 passed、14 skipped;Windows WebKit 26.6 没有 MSE/ManagedMediaSource,能力/失败清理通过不能替代其播放矩阵。首轮 14 失败及定向诊断已保留,Safari/native/worker 等缺口仍 open。旧 Auto 标签与空音轨菜单残留有真实 SDK 复现,过期回调有受控证据;HLS-03 将修复这些问题。
|
||||
|
||||
见 [测试说明](hls-validation.md)、[冻结证据](baselines/hls-validation.json) 与 [交付记录](changes/2026-09-11-PKG-HLS-02-tests.md)。63 done、152 todo;本任务独立本地 commit,核实后进入 HLS-03 职责拆分。HLS 生产源码尚未迁移 TS,类型和全发布矩阵继续按 04~06 执行,没有发布放行。
|
||||
|
||||
## 最新完成:PKG-HLS-01 发布契约
|
||||
|
||||
HLS control 1.1.0 的六文件归档、历史源码、声明/README/manifest 与两段主逻辑对照通过。新增独立冻结记录及只读重验工具;保留 BASE-01。空轨道旧菜单、过期回调、Auto 状态、getName 类型及示例清理已映射到后续任务,没有把静态观察写成 SDK 或浏览器通过。
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
| VENDOR-06 | open / 待取证 | monaco-static-assets 来源、版本与许可闭环 | SITE-01, SITE-05 |
|
||||
| VENDOR-07 | open / 待取证 | vconsole 来源、版本与许可闭环 | SITE-01 |
|
||||
| VENDOR-08 | open / 待取证 | console-bundle 来源、版本与许可闭环 | SITE-01 |
|
||||
| SDK-01 | open / 待取证 | hls.js 实际集成验证范围 | PKG-HLS-01, EX-03 |
|
||||
| SDK-01 | open / 源码/产物事实 | hls.js 实际集成验证范围 | PKG-HLS-03, PKG-HLS-05, EX-03 |
|
||||
| SDK-02 | open / 待取证 | dash.js 实际集成验证范围 | PKG-DASH-01, EX-03 |
|
||||
| SDK-03 | open / 待取证 | flv.js 实际集成验证范围 | EX-03 |
|
||||
| SDK-04 | open / 待取证 | mpegts.js 实际集成验证范围 | EX-03 |
|
||||
@@ -120,3 +120,7 @@
|
||||
| BASE-LIFE-47 | resolved / 已复现 | AirPlay methods can call a picker or publish events and notices after destruction | CORE-20 |
|
||||
| BASE-LIFE-48 | resolved / 已复现 | Proxy-time destruction cannot clean a template before its public assignment | CORE-20 |
|
||||
| BASE-LIFE-49 | resolved / 已复现 | Constructor and Player initialization continue after a callback destroys the instance | CORE-20 |
|
||||
| HLS-UI-01 | open / 已复现 | 空轨道和关闭配置仍残留 HLS 菜单 | PKG-HLS-03 |
|
||||
| HLS-LIFE-01 | open / 已复现 | 过期 HLS 选择回调与销毁后 update 仍工作 | PKG-HLS-03 |
|
||||
| HLS-AUTO-01 | open / 已复现 | 真实 ABR 播放的 Auto 标签在 update 后丢失 | PKG-HLS-03, PKG-HLS-05 |
|
||||
| HLS-ENV-01 | open / 已复现 | Windows WebKit 缺失 MSE,HLS 播放矩阵尚缺 Safari 证据 | PKG-HLS-05, REL-09, REVIEW-02 |
|
||||
+72
-3
@@ -603,15 +603,17 @@
|
||||
{
|
||||
"id": "SDK-01",
|
||||
"title": "hls.js 实际集成验证范围",
|
||||
"confirmation": "unverified",
|
||||
"confirmation": "source-observed",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-HLS-01",
|
||||
"PKG-HLS-03",
|
||||
"PKG-HLS-05",
|
||||
"EX-03"
|
||||
],
|
||||
"evidence": [
|
||||
"packages/artplayer-plugin-hls-control/src/index.js",
|
||||
"docs/assets/example/hls.control.js"
|
||||
"docs/assets/example/hls.control.js",
|
||||
"refactor/hls-validation.md"
|
||||
],
|
||||
"compatibleResolution": "Caller supplies art.hls; homepage demo loads hls.js 1.5.17. Preserve quality/audio selectors and old core integration.",
|
||||
"closureCriteria": "固定 SDK/外部资源版本和环境;成功/失败/切换/销毁有真实证据,设备和网络限制逐项记录。"
|
||||
@@ -2520,6 +2522,73 @@
|
||||
"test/initialization.test.js"
|
||||
],
|
||||
"resolutionRationale": "Player installers and outer construction stop after reentrant closure without publishing later plugins or registering the dead instance. Installed normal descriptors/static/subclass behavior and getter/native-write destruction cases pass."
|
||||
},
|
||||
{
|
||||
"id": "HLS-UI-01",
|
||||
"title": "空轨道和关闭配置仍残留 HLS 菜单",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-HLS-03"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/hls-validation.md",
|
||||
"test/hls-control.test.js",
|
||||
"test/browser/hls-control.spec.js"
|
||||
],
|
||||
"compatibleResolution": "使用既有 remove API 清理不再可用的 UI,保留菜单名称及选择语义。",
|
||||
"closureCriteria": "候选空轨道、关闭开关及恢复测试通过。"
|
||||
},
|
||||
{
|
||||
"id": "HLS-LIFE-01",
|
||||
"title": "过期 HLS 选择回调与销毁后 update 仍工作",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-HLS-03"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/hls-validation.md",
|
||||
"test/hls-control.test.js",
|
||||
"test/browser/hls-control.spec.js"
|
||||
],
|
||||
"compatibleResolution": "限制过期实例回调,整理监听器归属,Hls 仍由调用方销毁。",
|
||||
"closureCriteria": "替换、销毁、重入及 SDK 订阅解绑的候选回归通过。"
|
||||
},
|
||||
{
|
||||
"id": "HLS-AUTO-01",
|
||||
"title": "真实 ABR 播放的 Auto 标签在 update 后丢失",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-HLS-03",
|
||||
"PKG-HLS-05"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/hls-validation.md",
|
||||
"test/hls-control.test.js",
|
||||
"test/browser/hls-control.spec.js"
|
||||
],
|
||||
"compatibleResolution": "区分自动策略与实际播放档位,保留手动及 Auto 选择值。",
|
||||
"closureCriteria": "实际 SDK 自动/手动切换和事件同步通过。"
|
||||
},
|
||||
{
|
||||
"id": "HLS-ENV-01",
|
||||
"title": "Windows WebKit 缺失 MSE,HLS 播放矩阵尚缺 Safari 证据",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"owners": [
|
||||
"PKG-HLS-05",
|
||||
"REL-09",
|
||||
"REVIEW-02"
|
||||
],
|
||||
"evidence": [
|
||||
"refactor/hls-validation.md",
|
||||
"test/hls-control.test.js",
|
||||
"test/browser/hls-control.spec.js"
|
||||
],
|
||||
"compatibleResolution": "显式验证宿主不支持,保留 14 skipped,不作为播放通过;补有 MSE 的 Safari/macOS/iOS 环境。",
|
||||
"closureCriteria": "实际 Safari/MSE/native 路径证据齐全,不能仅凭 Windows 能力检查关闭。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -30,7 +30,7 @@ export function readMember(archive, member) {
|
||||
}
|
||||
|
||||
export async function ensureArchive(release) {
|
||||
assert(/^[a-z0-9-]+$/.test(release.name) && /^\d+\.\d+\.\d+$/.test(release.version), 'Invalid release identifier')
|
||||
assert(/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(release.name) && /^\d+\.\d+\.\d+$/.test(release.version), 'Invalid release identifier')
|
||||
const archive = path.join(cacheDir, `${release.name}-${release.version}.tgz`)
|
||||
if (!fs.existsSync(archive)) {
|
||||
const url = new URL(release.tarball)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { test } from 'node:test'
|
||||
import { hash, verifyIntegrity } from './releases.mjs'
|
||||
import { ensureArchive, hash, verifyIntegrity } from './releases.mjs'
|
||||
|
||||
test('release integrity rejects corrupted bytes and inconsistent frozen digests', () => {
|
||||
const bytes = Buffer.from('known release artifact')
|
||||
@@ -9,3 +9,10 @@ test('release integrity rejects corrupted bytes and inconsistent frozen digests'
|
||||
assert.throws(() => verifyIntegrity(Buffer.from('replaced artifact'), release), /Integrity mismatch/)
|
||||
assert.throws(() => verifyIntegrity(bytes, { ...release, sha256: '0'.repeat(64) }), /Archive hash mismatch/)
|
||||
})
|
||||
|
||||
test('release cache rejects unsafe package and version path identifiers before I/O', async () => {
|
||||
for (const name of ['../hls.js', '.hls', 'hls..js', 'hls/js', 'hls\\js', 'hls.js/evil', '-hls'])
|
||||
await assert.rejects(ensureArchive({ name, version: '1.5.17' }), /Invalid release identifier/)
|
||||
for (const version of ['../1.5.17', '1.5.17/evil', 'latest'])
|
||||
await assert.rejects(ensureArchive({ name: 'hls.js', version }), /Invalid release identifier/)
|
||||
})
|
||||
+7
-2
@@ -1804,11 +1804,16 @@
|
||||
"ENG-03",
|
||||
"ENG-05"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "done",
|
||||
"risk": "H",
|
||||
"deliverable": "Auto/手动实际 level、音轨、去重/过滤和拓扑变化",
|
||||
"acceptance": "旧版本行为可重跑,成功/失败/切源/销毁有必要断言",
|
||||
"evidence": []
|
||||
"evidence": [
|
||||
"hls-validation.md",
|
||||
"baselines/hls-sdk.json",
|
||||
"baselines/hls-validation.json",
|
||||
"changes/2026-09-11-PKG-HLS-02-tests.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PKG-HLS-03",
|
||||
|
||||
@@ -1023,7 +1023,8 @@
|
||||
"id": "hls.js",
|
||||
"riskId": "SDK-01",
|
||||
"owners": [
|
||||
"PKG-HLS-01",
|
||||
"PKG-HLS-03",
|
||||
"PKG-HLS-05",
|
||||
"EX-03"
|
||||
],
|
||||
"sourceFiles": [
|
||||
@@ -1031,7 +1032,7 @@
|
||||
"docs/assets/example/hls.control.js"
|
||||
],
|
||||
"contract": "Caller supplies art.hls; homepage demo loads hls.js 1.5.17. Preserve quality/audio selectors and old core integration.",
|
||||
"validationStatus": "Source integration observed; complete real SDK/service/device matrix not yet verified.",
|
||||
"validationStatus": "Hls.js 1.5.17 frozen in refactor/baselines/hls-sdk.json; Chromium/Firefox local playback baseline verified in PKG-HLS-02. Windows WebKit has no MSE; Safari/native/worker/version and installed-package matrices remain open. See refactor/hls-validation.md.",
|
||||
"demoPathsSource": "refactor/baselines/demo-inventory.json"
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user