Repository navigation
feat(ci): add a release-read-only desktop publication probe - #6304
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…-preflight-20261012 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…flight Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ication Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; xhigh
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
桌面发布维护者在两个平台完成构建后,仍可能等待独立 publisher runner。 以前四资产只能在独立 Ubuntu publisher 中组合核验;现在显式开启只读探针后,可在 Windows builder 剩余预算内先核验资产,探针模式关闭原 publisher。
本地真实 CLI 已走通 capture、record、bundles、admit、verify 与持久报告,并验证 tag、签名失败、摘要和库存拒绝及恢复;没有调用 Release 写操作。 该阶段交付只读源码提案;真实 hosted Windows opt-in、证书成功传输、签名发布、runner 等待和成本收益仍未资格。
改动思路
TypeScript CI provider 负责身份、完整 jobs 观察、预算和流程;磁盘资产及 manifest 规则继续由原 Python owner 决定,GitHub 工具负责证书验证。 当前 PR 交付默认关闭的只读验证路径;正式 writer、双构建最终终态和实际 hosted 采用保持独立。
必须条件是完整来源、资产和预算;可选策略是用 builder 做只读预检。它不等待 Mac,不新增发布 runner 或写入通道;观察不足结束为 held/unavailable,不能用旧成功或本地 green 冒充发布资格。下面表格是源码推导示意。
| 调用 | ordinary publisher | read-only probe |
|---|---|---|
| release / omitted / false | 既有路径 | 不执行 |
| explicit true | 禁用 | 观察 Mac、预算、来源及四资产 |
| eligible report | 不授新权 | Windows 最终 post-actions 仍待确认 |
示意绑定当前审查 head 2b85633fb3ab509fafd237f0829e9ebd504e9b05;源码。
具体改动
规格依据:docs/product/release-readiness.md,变更前固定版本 60d833b13c85135587b725013b247e827663ffb9;以上三个约束使用规格中已有要求,以下标识仅供本次映射:product-tooling:分别验证构建 tooling 与 tagged product,不假定两者相同。 → implemented;complete-assets:核验完整桌面资产集合及 checksum,与已有 manifest owner 一致。 → implemented;publication-boundary:保留既有 writer 权限、backup、完整替换及 manifest-last/readback。 → implemented。未用新增文档自证实现。
关键代码讲解
identity:仅明确 manual opt-in、合法仓库/tag/run/attempt 才准入。admit:完整 jobs、Mac 终态及真实 Setup 时间与剩余预算。verifySubjects:已证明 source 身份、实际字节及原 Python manifest owner。main:真实五阶段 CLI、最终 tag/inventory/budget 重查及无写权报告。
完整5文件 +569/-1:workflow106/-1、TS250、文档74、smoke139。completeJobs读取 attempt 指定完整分页,重复/变化数量拒绝;admit先核当前 Windows 与真实 Setup 时间,再找最新 Mac 终态,后一次失败/未完成不退到旧成功;verifySource校 run/attempt/product/tooling/platform;verifySubjects核真实字节、证书和 Python 四资产 manifest,兼容 LF/CRLF。main最后再检查 tag、库存与预算;报告始终无发布权。新 typed union 只属于 CI provider。原所有 publisher backup、四资产替换、manifest-last 和远端 readback 均已读。
对主干的风险
独立9组原生smoke、真实 Python manifest、完整解析 workflow 的关闭态对等、strict TS/syntax、133项语义与解释器测试、4直接/19风险检查通过。额外12次真实 CLI phase 观察包含错误 tag 拒绝、删除 tag guard 的隔离 mutation 被独立 oracle 检出、合法恢复,及签名失败/篡改摘要/库存改变拒绝后的重新验证。Git、磁盘、Python owner 和 gh 子进程真实执行;API 元数据与成功证书 verifier 明确被合成替换,不能据此认证真正 hosted Windows/密码学成功。初次临时路径别名让 mutation 入口没有运行,已更正 canonical temp path并保留原失败。关闭态没有新必填输入、签名或权限变化;true 模式生产新 CI artifact/attestation,但不写 Release。
语义与 CI 对齐
这是现有发布 provider 下的本地状态 union,无新 Core vocabulary/scheduler/capability owner;已复用当前 main 的资产、解释器和资格修复。没有读、等、重跑 CI。作者记录的 hosted 事实与资格 hold 仍作为未独立核验证据;必须用真正 opt-in、两 build 终态、前后库存和证书 readback 才能宣称 operational 采用或效率改善。
我的整体评价
APPROVE,未发现当前有界源码的阻塞问题。TypeScript CI provider 负责身份、完整 jobs 观察、预算和流程;磁盘资产及 manifest 规则继续由原 Python owner 决定,GitHub 工具负责证书验证。 当前 PR 交付默认关闭的只读验证路径;正式 writer、双构建最终终态和实际 hosted 采用保持独立。 long_horizon 与 user_experience 均 preserved:默认发布和恢复路径保持;选择探针的维护者可得到更早、真实区分 held/unavailable 的本地验证结果。此提案是 justified_increment;实际 hosted 资格由发布维护者在原 checkpoint 继续核验,未派发新 run,也未把 source approval 当作 Windows 或正式发布验收。未来改动继续复用 Python 资产 owner 和同一 CI provider,无需新 scheduler。长期等待和成本正收益仍未实测。
English verdict: APPROVE - head 2b85633; bounded default-off read-only provider preserves ordinary workflow and manifest authority;9 groups, native phased negative/recovery probes,133 tests and risk checks pass. Hosted opt-in/certificate success and operational benefit remain unqualified.
Desktop compilation can finish while the separate Ubuntu publisher waits for a runner. This proposal adds a default-off, read-only
publication_probeto verify the complete asset set on an admitted Windows builder. It disables the ordinary publisher in probe mode, never writes Release assets and grants no publication authority.The existing CRLF identity and test-interpreter repairs are retained. The current head integrates main
60d833b1, including the merged canonical fixtures, qualification invariant repairs, timing reader and PowerShell single-command selection. All five original proposal files and the canonical Python asset owner remain byte-identical; this update reuses those repairs instead of adding another owner.publication_probe=true. Omit it or set false to restore the ordinary publisher; operation and rollback are documented indocs/product/release-readiness.md.publicationAuthorizedremains false; final Windows post-actions are separate evidence. Permissions, signing, 30-minute builders, 10-minute publisher and manifest-last recovery remain unchanged.9c3cb7c9(head2b85633finto main60d833b1); its tree exactly matches this PR head. The two preview artifact digests match the upload logs. Probe capture/attestation/verification and Release publisher were skipped.9c3cb7c9. The five actual Python groups report229 passed/19 skipped; native scheduler/SQLite TypeScript tests report432 passed/0 skipped. Python discovery reports3 passed/2 POSIX-only skips. Frontend rebuild, verification and all post-actions succeed. These are the job’s selected tests, not the entire Windows suite.cqr_10e8d5beafba6f8c14f7still fails for the full mandatory hosted gap; no extra dispatch/rerun/cancellation/Release write/main merge/global install/runner/budget change.桌面编译完成后,独立 Ubuntu publisher 仍可能排队。本提案增加默认关闭的
publication_probe,在已准入 Windows builder 上只读验证四资产与证明;probe 模式禁用原 publisher,不写 Release,publicationAuthorized始终为 false。激活须使用已评审 ref、既有公开 tag 并显式设 true;省略或 false 恢复原 publisher,回退沿既有恢复规则。当前组合接入主干已合并的夹具、不变量、计时及 PowerShell 单命令选择修复;原五文件及 Python 校验 owner 保持原样。九组真实资产/换行/拒绝测试、五项解释器测试、两条实际 CLI 默认关闭拒绝和全工作流关闭态对等通过;4直接/19风险与静态边界检查通过,精确 CQR 因新 head 的 hosted 验证未完成继续失败。
旧 fa3 全量 run 实际终态是 cancelled,三片取消、另一片4项失败,保留其27 jobs和原日志。当前配置/launcher 两整模块在缺 PowerShell 时31通过/13跳过;补入校验过的官方临时 PowerShell 后44通过/0跳过,包含多 Node 路径。macOS 上的实际执行不冒充 hosted Windows;旧失败和跳过均保留。
当前 head 的自动 desktop run38348478463(attempt1)已完整成功:Windows/macOS 两个 job 各通过九组真实 Python owner 预检、无签名预览构建、上传和 job post-actions。实际测试树是 head2b856 合入 main60d 的 merge9c3cb7c9,与 PR head 的整树 SHA 一致;两份预览包 digest 与上传日志匹配。probe capture/attestation/verify 和 Release publisher 全部 skipped,不能算签名发布或手动探针完成。
当前真实 Windows job115141960996(run38348478389 attempt1)已完整成功,日志确认同一 head-equivalent merge9c3。五组 Python 测试229通过/19跳过;原生调度器与 SQLite TypeScript 测试432通过/0跳过;Python 发现3通过/2项 POSIX 专用跳过,前端重建、校验与全部 post-actions 成功。这是该 job 的选定测试,不代表完整 Windows 测试集;此前 macOS44项实际 PowerShell 验证独立保留。
完整 Python run 仍未完成:两片 pytest 执行、两片排队。coverage/JUnit/最终门、真正 opt-in 下载与证书、发布结果/库存/成本仍未验,CQR10e8 继续 hold。旧失败与跳过保留,不改冻结标准或宣称组织级发布最高优先已成立。不额外派发长 CI、不合并/发布/全局安装或调整 runner;正式评审与资格 hold 分开,不因缺评审留 Draft。