# 更新日志

每个版本的源码可通过仓库中的 `v<版本号>` 标签查看。

## 0.5.1 · 2026-11-10

- HTML 审计在一次运行中按资源路径和算法复用已计算的摘要，页面与发布基线可以独立校验同一个摘要。
- 一次性 SHA-256、SHA-384 和 SHA-512 计算改用已有依赖中的批量实现。单摘要声明的规范化跳过集合和排序。
- 新增 `verify_with_token`，供调用方用已计算的摘要校验多份 SRI 声明。

## 0.5.0 · 2026-11-10

- 新增 `diff-html`，逐页比较两版构建的静态脚本和样式引用，报告新增、移除、SRI 声明变化和 DOM 相对顺序变化。
- 复用 HTML 审计的路径解析，识别等价的本地引用，保留查询参数、片段和重复引用，支持文本和 JSON 报告。
- HTML 扫描跳过带 `disabled` 属性的样式表，避免把初始禁用的样式表报成缺少 SRI。

## 0.4.0 · 2026-11-10

- 新增 `audit-html --baseline`。用独立保管的发布清单核对 HTML 声明和本地文件，报告未登记引用、声明漂移和文件摘要变化。
- 新增 `canonical_metadata`，按最强算法规范化摘要集合，便于比较顺序或重复项不同的 SRI 声明。
- `tag` 与 `audit-html` 使用相同的 WHATWG URL 解析器验证 HTTP(S) 地址，识别无效端口和空主机等输入。
- 从 Git 和 Mooncakes 打包清单中排除本地赛事申报材料。

## 0.3.3 · 2026-11-10

- 清单命令使用 `--root` 时，与 HTML 审计共用可移植路径校验。在读取资源前拒绝控制字符、平台保留字符和 Windows 保留文件名，并保留对中文、空格等合法文件名的支持。

## 0.3.2 · 2026-11-10

- HTML 审计支持本地 `base href` 的根路径和相对路径。子目录页面可以按部署时的资源目录解析脚本和样式表。
- 区分目录形式和文件形式的基准地址，支持 UTF-8 百分号编码和点路径段。远程基准地址和超出部署根目录的路径仍会报告错误。

## 0.3.1 · 2026-11-10

- 多页 HTML 审计在同一次运行中复用相同本地路径和 `integrity` 的校验结果，减少共享脚本和样式表的重复读取与哈希计算。
- 去除 `base href` 首尾的 ASCII 空白，使 `<base href=" / ">` 按部署根目录解析。

## 0.3.0 · 2026-11-10

### 新增

- `audit-html` 检查部署目录中多个 HTML 页面引用的本地脚本和样式表，识别缺失摘要、摘要不匹配及算法强度不足。
- 审计命令提供逐页 JSON 报告和可用于 CI 的退出码，支持相对路径、根路径及 UTF-8 百分号编码的资源 URL。
- `yiwnagmolu/moonsri/audit` 提供可复用的 HTML 引用扫描接口，使用 MoonBit HTML5 解析器处理 DOM 与属性。

## 0.2.3 · 2026-11-10

- 在原始 SRI 字符串上读取各段，减少复制整段文本的开销，并保留含 Unicode 字符的字段。
- 将命令用法和单文件读取错误写入标准错误。构建脚本可单独捕获摘要或 JSON 报告的标准输出。

## 0.2.2 · 2026-11-10

- 清单比较只对新增、删除和变化的条目排序，减少大型清单只有少量差异时的排序开销。结果仍按路径字典序输出。
- 批量校验直接遍历清单，减少保存中间路径和条目的内存开销。使用 `--root` 时，先检查所有相对路径，再读取文件。
- 统一处理有无末尾斜杠的部署根目录，避免在拼接路径时重复添加分隔符。

## 0.2.1 · 2026-11-09

- 解析 SRI 元数据时只提取所需的字段，避免为后续选项和分隔段创建数组。
- 修复命令行将未知子命令后面的参数误当成子命令的问题。无效命令返回退出码 `2`。
- 统一使用 MoonBit 核心库处理非 JavaScript 目标的进程退出，消除 JavaScript 构建中的无用导入警告。

## 0.2.0 · 2026-11-09

### 新增

- `manifest` 批量生成 SRI 清单，支持多个算法、部署根目录和 UTF-8 路径列表。清单读写和比较也可通过 `yiwnagmolu/moonsri/manifest` 子包调用。
- `check-manifest` 校验部署文件，可输出 JSON 报告。单文件和批量校验都支持 `--min-algorithm`。
- `diff-manifest` 按路径列出两份清单中的新增、删除和摘要变化。
- `Hasher` 支持分块计算 SRI 摘要，`verify_bytes_at_least` 可在库内执行最低算法强度校验。
- `tag` 生成带 `integrity` 的脚本和样式表标签。浏览器示例展示摘要匹配时加载成功、摘要不匹配时被拦截。

### 改进

- 校验同一资源时只计算一次最强算法的摘要，再与该算法的各个候选摘要比较。
- JavaScript 命令行在退出前写完报告，避免通过管道读取时截断大份 JSON 输出。
- CI 在 WebAssembly 和 JavaScript 上检查批量清单、算法策略和 HTML 标签输出。

## 0.1.0 · 2026-11-09

### 新增

- 首个可运行版本，提供 SHA-256、SHA-384 和 SHA-512 的 SRI 生成、解析和校验。
- 提供单文件 `generate` 和 `check` 命令、资源示例和双目标 CI。
