# moon-ipp 0.1.5 复核

日期：2026-10-26。对 0.1.4 再次检查合法输入、能力与状态解释，以及选项构造到实际网络请求的一致性。

## 发现并修复

| 问题 | 修复与证据 |
| --- | --- |
| 设备声明的自定义纸张名称可以解码，但默认选项和请求构造会拒绝 | `media` 支持 keyword/name；中文名称按 name 发送，标准纸张继续用 keyword。名称仍执行非空、UTF-8 与 255 字节上限。 |
| 冲突布尔值或错误状态类型可能被健康检查取首值并报告就绪 | 接收标志、状态、队列计数严格检查类型与单值；坏数据生成错误诊断，`ready()` 为 false。正常 idle/processing、stopped、未知状态分别保留含义。 |
| unknown/no-value 能力被当成明确不支持 | `supports_operation` 返回 None，格式、份数与分辨率给出能力缺失诊断；明确不支持仍拒绝，错误标签仍报协议错误。 |
| 可选任务属性为 unknown/no-value 时直接报错 | 可选状态、名称、URI、计数保留 None，原因保留空数组；必需正 job-id 不放宽。 |

先添加回归测试，首批三个用例在 0.1.4 实现上 3/3 失败；随后 unknown 能力用例也复现为 `Some(false) != None`。修复后通过。依据：[RFC 8011 media 的联合语法](https://www.rfc-editor.org/rfc/rfc8011.html#section-5.2.11)、[out-of-band 值](https://www.rfc-editor.org/rfc/rfc8011.html#section-5.1.1)、[接收标志](https://www.rfc-editor.org/rfc/rfc8011.html#section-5.4.23)。未将属性名称语法套用到所有合法纸张名称。

## 验证

- 新增独立 Node.js 服务，生成能力响应并直接解析请求 wire 字节，确认中文纸张默认值经预检后以 name 标签提交，任务编号正常返回。该检查不依赖项目自己的 decoder 判断请求。
- 覆盖冲突状态、错误类型、负队列计数、可选未知值、必需身份、未知厂商字段保留和 CLI 自定义纸张。
- 本机严格验证：wasm-gc 77/77、JS 102/102、native 103/103，check/build/fmt、Windows MSVC 兼容探针通过。`moon info` 后公开接口无变化。
- 有效 MoonBit 实现 4,889 行，排除测试、构建脚本、依赖和生成接口，逐文件统计见 `evidence/source-count-0.1.5.json`。

## 远程验证与发布

- 发布源码：`89230583938ba83d2e1b0818cbe321c9e85ffd33`，公开 GitHub main 已推送。
- [CI 40333080812](https://github.com/liyun6666/moon-ipp/actions/runs/40333080812)：Windows/Linux 均成功，分别通过 wasm-gc **77/77**、JS **102/102**、native **103/103**；检查、构建、格式及 MSVC 兼容探针通过。
- 独立 CUPS 全部既有流程和空结束请求通过：PDF/文本字节一致，不支持格式未入队，打印完成和取消状态正确，ipptool 及大 JSON 往返通过。摘要见 [既有场景](evidence/cups-result-0.1.5.json)、[空结束场景](evidence/cups-boundary-result-0.1.5.json)，原始日志在同一 CI 的 artifact。
- `moon publish` 检查打包和解包工程成功，发布返回 HTTP 200。注册表确认 **0.1.5** 未撤回，发布时间 2026-10-26 13:45:56 UTC（北京时间 21:45:56）。[Mooncakes](https://mooncakes.io/docs/liyun6666/moon-ipp)、[GitHub Release](https://github.com/liyun6666/moon-ipp/releases/tag/v0.1.5)。
- 独立工程从注册表下载，JS 严格检查与消费测试 1/1 通过，覆盖公开 API、中文纸张选项及可选未知任务状态；下载包 **46 个代码和构建支持文件**与上述源码一致，无本地路径依赖，见[发布核验](evidence/release-verification-0.1.5.json)。后续文档提交不改变发布代码。

本轮是对已发现缺陷的修复与回归，不是任意输入、设备和未来工具链的零缺陷证明。没有提交飞书表单或修改其他参赛项目。
