Release Manifest
Release Manifest 是公开发行事实的机器可读真源。下载页、Release Notes、更新器、About、诊断信息和支持页面最终都必须从同一份记录读取版本、通道、构建号、Git commit、发行主体与产物哈希。
当前网站公开的是一份独立的 unreleased 准备状态记录,不是签名后的正式发行清单。你可以在发行清单页面查看可读版本,检查准备状态 JSON及其准备状态 Schema,或查看与产品仓库逐字节一致的正式 Release Manifest v1 Schema与latest pointer v1 Schema。
当前状态必须满足
| 字段 | 当前值 | 含义 |
|---|---|---|
state | unreleased | 目标版本尚未发布 |
downloads.enabled | false | 官网不能提供安装包链接 |
artifacts | [] | 没有可验证的公开产物 |
claims.release | [] | 尚未解锁任何发行 Claim |
update.enabled | false | 不是更新器入口 |
security.signatureRequired | false | 当前记录本身不冒充签名发行记录 |
目标版本可以写为 1.0.0,但正式 version、构建号、发布时间、源码 commit、tag 与发行主体必须保持缺失,直到最终字节和责任主体真实存在。不得用 TBD、虚构 URL、全零哈希、假签名主体或未来日期填充未知事实。
正式发布会增加什么
正式 published 记录至少需要:
- 已清权品牌、真实法律发行主体与正式网站;
- 完整版本、构建号、单调递增序列、签名 tag、干净 commit 与 tree;
- 不可变产物 URL、精确大小、SHA-256、系统、架构和最低系统版本;
- macOS Developer ID、Team ID、公证、staple 与 Gatekeeper 证据;
- 最终包内组件 Receipt、SBOM 与 provenance;
- 双语 Release Notes、Known Issues、系统要求、校验说明、隐私、许可、支持与安全入口;
- 存储 schema、已验收升级来源、备份与降级策略;
- RFC 8785 规范化后的 detached JWS 签名。
发布与更新分层
未来正式发行应使用不可变版本清单和单独签名文件;更新通道再通过带签名、序列单调递增的 latest 指针引用它。Manifest 冻结该版本首次发布的初始序列和初始 rollout 快照;pointer 使用独立的控制面序列,并承载当前 rollout 状态与比例。首个引用序列不能小于 Manifest 序列;此后每次续期、扩大灰度、暂停、恢复或撤回都必须使用严格更大的 pointer 序列。同一版本的 cohort seed 保持不变,因此扩大灰度会保留已选中的用户集合。上传顺序必须是:不可变产物 → 不可变 Manifest 与签名 → 最后原子切换更新指针。
当前记录不会进入更新器的公开 latest endpoint。按钮关闭不是视觉状态,而是 Manifest 校验结果。