Skip to content

release(windows): 交付 Microsoft Store 包与开箱即用单 EXE #123

Description

@Qiyuanqiii

Parent: #37
Supersedes the production-trust remainder deferred from #57.
Final product qualification inherited from #140 / #181 / #182 / PR #183.

目标 / Outcome

本 Issue 只定义 两个面向 Windows 用户的正式成品。校验和、SBOM、NOTICE、attestation 和测试报告是伴随证据,不算第三个产品。

成品 最终入口 用户体验 分发渠道
Microsoft Store 成品 TraverseBoard_<version>_x64.msix(若 Partner Center 流程需要,可再封装为 .msixupload 在 Store 中安装、升级、卸载 Microsoft Store
开箱即用 EXE TraverseBoard.exe 下载后直接双击;不解压、不运行脚本、不输入命令或启动参数 GitHub Release / 官网直链

两条渠道必须来自同一个 source commit、同一版本和同一份 Windows x64 应用二进制。Store 重新签名或外层封装不得破坏这条来源绑定。

Start-Prayu-Operator-Preview.cmd 不是正式产品入口。它只可作为历史兼容或内部测试夹具保留,不得继续出现在最终下载引导、主 Release 下载项或验收截图中。--safe-view 可以保留为诊断入口,但普通用户不需要知道或使用它。

背景 / Context

当前 GitHub Release 同时暴露 portable ZIP、TraverseBoard.exe 以及若干证据文件;ZIP 内仍包含名称抽象的 Start-Prayu-Operator-Preview.cmd。虽然该脚本只是转调 TraverseBoard.exe,但它会让用户误以为还需要“启动预览器”或运行开发脚本。

当前 MSIX 也仍是开发候选:manifest 使用占位的 Name="PrayuDesktop"Publisher="CN=Prayu",且可执行包 Identity 尚未完整绑定 Partner Center 的产品身份与 x64 架构。因此普通 ZIP 不能提交 Store,现有 MSIX 也不能直接视为 Store 成品。

成品 A:Microsoft Store 包

  • 在 Partner Center 保留正式产品名,复制并固定平台给出的:
    • Package/Identity/Name
    • Package/Identity/Publisher
    • Package/Properties/PublisherDisplayName
  • manifest 使用精确 Store identity,并为包含可执行代码的包声明 ProcessorArchitecture="x64"
  • 固定 DisplayName、图标、隐私政策、年龄分级、Store listing 和升级 identity。
  • 保留 runFullTrust 时,提交清楚、最小化且与实际行为一致的受限能力说明;不得把它描述成管理员提权。
  • Store 提交采用 Partner Center 接受的 MSIX 成品,由 Microsoft 在认证后重新签名;不要求将可导出 PFX 放入仓库或普通 GitHub Secret。
  • 安装后从开始菜单直接进入与 EXE 相同的安全默认控制面;首次运行完成必要配置,不要求用户打开终端。
  • 验证安装、同 identity 升级、降级拒绝、repair、卸载、重装和用户数据保留。

成品 B:开箱即用的单 EXE

  • GitHub Release 的主下载项直接提供 TraverseBoard.exe,不是安装器壳、ZIP 或脚本入口。
  • 用户下载后双击即进入安全默认控制面和首次使用向导:
    • 不要求先解压;
    • 不要求运行 .cmd / .ps1
    • 不要求输入参数、设置工作目录或手动启动后端;
    • 不弹出无意义的控制台窗口;
    • 不默认开启 Full Access、Debug、Full CDP、后台 Worker 或持久终端。
  • 前端资源、产品图标以及项目自带的运行组件随 EXE 一起交付;不得要求用户从仓库另取文件。
  • 在受支持的干净 Windows 10/11 环境双击启动。若系统缺少 WebView2 等不可内嵌的系统前置条件,必须显示明确、可操作的本机提示,不得白屏或静默退出。
  • Store 外正式 EXE 使用受保护的公开受信任 Authenticode 签名和 RFC 3161 时间戳。若只能发布未签名候选,必须明确标为 prerelease/unknown-publisher 候选,不得宣称完成正式信任发行。
  • LICENSE/NOTICE、SBOM、SHA-256、release metadata 和 provenance 可作为同一 Release 的伴随文件或应用内法律信息提供,但不得改变“下载一个 EXE 即可启动”的体验。

Release 与验证合同

  • 面向用户只宣传上述两个产品:
    1. Microsoft Store 安装;
    2. 直接下载 TraverseBoard.exe
  • portable ZIP 可以暂时作为 CI 的可复现验证容器或兼容产物,但:
    • 不算正式的第三种产品;
    • 不再作为普通用户推荐入口;
    • Release gate 应迁移为直接验证 EXE 与 Store 包;
    • Start-Prayu-Operator-Preview.cmd 不得成为任何正式验收的启动步骤。
  • 两个成品及所有伴随证据绑定同一 source commit、版本、候选 SHA-256、SBOM 和 artifact attestation。
  • Store 包内应用 EXE 与直接下载 EXE 必须可证明来自同一构建输入;如签名造成字节差异,应同时记录签名前 payload hash 与签后 artifact hash。
  • 签名、时间戳、identity、证据聚合或认证前置检查失败时,正式发布 fail closed。

#140 延后的最终产品资格

在品牌与 Store identity 冻结后,对同一最终候选执行 #182 / PR #183Prepare → InjectConcurrentEdit → Collect 流程:

  • Go、Node.js、Python、Rust 完成真实失败、搜索/读取、两轮受审修改、诊断重试、真实通过和可验证交付。
  • Local Sandbox 与 Docker network=none 覆盖适用矩阵;不可用时只允许显式 Approval fallback,不得静默切换 Full Access。
  • 覆盖 Windows 10/11、100%/200% DPI、中文 IME、键盘/焦点/accessible name,以及中文、空格、长路径、CRLF、dirty、untracked、binary 和并发用户编辑。
  • Desktop、CLI、HTTP、Handoff 与最终回复指向同一 Diff、verification Jobs、Artifacts、Checkpoint 和 receipt。
  • 产品报告、安全报告、签名链、SBOM、attestation 与发布文件绑定同一候选;缺失、过期、部分通过、skip 或 waiver 均不得聚合成正式通过。

验收条件 / Acceptance criteria

双产物合同

  • Release 与中英文文档只把 Store 包和单 EXE 列为两个正式 Windows 产品。
  • Start-Prayu-Operator-Preview.cmd 已退出普通用户下载、文档和正式验收路径。
  • portable ZIP 已降为内部验证/兼容产物,或在 Release gate 完成迁移后移除。
  • 两个成品与证据可追溯到同一 source commit 和版本。

Microsoft Store

  • 正式名称、图标、Partner Center identity、listing、隐私政策与启动能力合同已冻结。
  • MSIX manifest 精确匹配 Partner Center identity,并声明 x64 architecture。
  • Partner Center 接受上传包,runFullTrust 说明通过认证审查。
  • Store 安装、启动、升级、repair、卸载和重装矩阵通过。
  • Store 包由 Microsoft 认证并重新签名;仓库和普通 CI Secret 中不存在可导出正式私钥。

直接 EXE

  • 用户在干净的受支持 Windows 10/11 环境下载一个 TraverseBoard.exe 后可直接双击进入首次使用向导。
  • 无脚本、解压、命令行、手工后端启动或额外项目文件要求。
  • 缺少系统前置条件时提供明确可操作提示,不白屏、不静默失败。
  • 正式直发 EXE 的 Authenticode 签名、RFC 3161 时间戳、SHA-256、commit、SBOM 与 attestation 可独立验证。
  • SmartScreen/Defender、签名或时间戳服务失败时,不把候选提升为正式受信任发行。

最终资格

  • 同一最终候选完成四语言 × Local/Docker 的真实产品闭环并生成通过的 standard_code_product_e2e.v1
  • Windows 10/11 × DPI × 中文 IME × 路径/并发编辑 × 关键可访问性矩阵具有候选 hash 绑定证据。
  • GitHub Release 与 Store listing 的中英文说明一致,不混淆自签测试、内部 ZIP、直接 EXE 与 Store 成品。

非目标 / Non-goals

  • 不把 Start-Prayu-Operator-Preview.cmd 包装成最终用户体验。
  • 不把 portable ZIP、证据 JSON 或校验文件宣传成第三个产品。
  • 不复用 build(windows): 签名 MSIX 安装、升级、卸载与发布证明 #57 的短期 CN=Prayu 自签测试证书。
  • 不为了单 EXE 再增加 MSI/EXE 安装器;本 Issue 的直发路线就是可直接运行的 TraverseBoard.exe
  • 不在品牌或 Partner Center identity 尚未确定时硬编码占位 Publisher。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    desktopDesktop client and Windows distributionenhancementNew feature or requestgithub_actionsPull requests that update GitHub Actions codesecuritySecurity boundary or high-risk capability高难度

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions