Skip to content

feat(ci): add a release-read-only desktop publication probe - #6304

Merged
huangruiteng merged 6 commits into
mainfrom
codex/desktop-release-preflight-20261012
Oct 14, 2026
Merged

huangruiteng merged 6 commits into
mainfrom
codex/desktop-release-preflight-20261012

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Desktop compilation can finish while the separate Ubuntu publisher waits for a runner. This proposal adds a default-off, read-only publication_probe to 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.

  • Activation: reviewed workflow ref, existing public tag, explicit publication_probe=true. Omit it or set false to restore the ordinary publisher; operation and rollback are documented in docs/product/release-readiness.md.
  • Contract: immutable tooling/product/run/attempt lineage, successful Mac peer without polling, bounded setup/budget observation, verified four assets/checksums/attestations and unchanged Release inventory. publicationAuthorized remains false; final Windows post-actions are separate evidence. Permissions, signing, 30-minute builders, 10-minute publisher and manifest-last recovery remain unchanged.
  • Current source validation: nine real-owner semantic groups cover LF/CRLF, missing/extra/stale subjects, signature/API/page/attempt/budget refusal; five interpreter tests and two actual CLI default-off denials pass. Whole parsed workflow feature-off parity, strict TS/Ruff/syntax/semantic/DCO/public boundaries, four direct and all19 risk checks pass. Pre-record canary aggregate exit1 is stale receipt policy alone; the new exact-scope CQR remains failed for unqualified hosted outcomes.
  • Historical failure readback: full Python run38249718307@fa3 ended cancelled, with27 jobs, three cancelled shards and shard3 completing with4 failures/5279 passed/85 skipped. Current matching immutable source evidence covers scheduler compatibility and Todo-less settlement. Goal configuration and native-launcher modules first pass31/skip13 where PowerShell is missing; adding verified official portable PowerShell7.6.6 yields 44 passed/0 skipped, including single/multiple Node paths. This executes on macOS, not hosted Windows. Original failure and skipped reports remain retained.
  • Current hosted desktop qualification: automatic run38348478463, attempt1, completed successfully. Full Windows job115135248744 and macOS job115135248865 each passed the nine real-owner preflight cases, unsigned preview build, artifact upload and post-actions. Both tested merge 9c3cb7c9 (head 2b85633f into main 60d833b1); 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.
  • Current native Windows qualification: job115141960996, attempt1, completed successfully on the same head-equivalent merge 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.
  • Remaining qualification: mandatory Python run38348478389 remains incomplete: two pytest shards are running and two are queued. Coverage/JUnit/final gate and opted-in transport/certificates/outcome/inventory/cost stay unqualified. Earlier failures/skips remain historical. CQR cqr_10e8d5beafba6f8c14f7 still fails for the full mandatory hosted gap; no extra dispatch/rerun/cancellation/Release write/main merge/global install/runner/budget change.
  • Future-facing pass: reuse the existing Python owner, newline handling, interpreter selector and main fixes. No new scheduler, capability, persistent control-plane contract or framework; CI report vocabulary remains local. This completed source proposal stays formal while review and operational qualification proceed.

桌面编译完成后,独立 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。

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 loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@huangruiteng
huangruiteng merged commit 312c110 into main Oct 14, 2026
30 of 35 checks passed
@huangruiteng
huangruiteng deleted the codex/desktop-release-preflight-20261012 branch October 14, 2026 03:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants