Skip to content

fix(release): 加固 RC5 HFS Provider 预检与暂停恢复 - #273

Merged
BlueSkyXN merged 1 commit into
mainfrom
codex/rc5-hfs-provider-preflight
Jul 30, 2026
Merged

BlueSkyXN merged 1 commit into
mainfrom
codex/rc5-hfs-provider-preflight

Conversation

@BlueSkyXN

Copy link
Copy Markdown
Owner

结果与边界

在任何 HF Space settings mutation 之前,对配置中唯一显式启用的 LLM Search Provider 执行 single-attempt live gate;为已经 containment 的 PAUSED transaction 增加 owner-only、Action-only 的前向恢复入口。

本 PR 只提交代码、测试、文档与 GitHub Actions contract;尚未执行真实 HFS recovery、Secret 更新、tag 或 Release 发布。远端恢复与正式 v2.0.0rc5 发布必须在本 PR exact-head checks 全绿并合并后,由两个独立的新 Actions run 完成。

问题

上一轮 RC5 发布的本地/构建/资产门禁通过,但 selected DeepSeek Provider live smoke 返回上游 RPM 429。直接在运行时隐藏切换到另一个模型会破坏 operator control;同时,Space Secret write-only 使 mutation 后失败不能安全自动回滚到“旧代码 + 旧 settings”。

原恢复设计的审查还发现:runner environment 越权解析、runtime assembly 异常泄露、settings-only paused 拓扑缺失、recovery retry 不闭包、双 restart timeout、release/recovery publish 竞态,以及 candidate helper 在 trust gate 前导入等问题。

主要变更

  • 新增 scripts/hf_space_llm_preflight.py:隔离 runner environment,只允许受管 credential reference;使用 production runtime assembly 对 exact selected Provider 发起一次请求,不 retry、不换模型,错误输出脱敏。
  • 新增 recover-hf-space.yml:要求 attempt 1、repository owner、current main、RC5 version、目标 tag/Release absent,并验证 failed release/recovery provenance。
  • 在 mutation marker 前上传 immutable transaction intent;结合 primary/retry containment jobs 与 live paused topology,覆盖 settings-only、direct-parent wrapper-advanced 和 failed recovery retry。历史失败 run 仅接受一次性 exact legacy contract。
  • Recovery 直接执行一次 factory_reboot=True 并等待 exact repo/runtime SHA;任一步失败继续自动 pause。
  • 外部 deploy/publish run 与 recovery 共享完整 caller transaction concurrency;纯 evidence run 保留 per-candidate group。
  • Reusable HFS workflow 独立验证 attempt、owner、GitHub current main、candidate/verifier/workflow SHA;所有 candidate execution job 都在该 gate 下游且 checkout 不持久化凭据。
  • 增加 deterministic transition、trust ordering、rate-limit/single-attempt、credential-canary 和 workflow contract 测试,并同步发布/HFS 文档。

兼容性与非目标

  • 不更改 OpenAPI、SDK、公共 API、Provider catalog 或 package version。
  • 不引入 DeepSeek→Doubao runtime fallback;Provider 选择仍由受管配置显式决定。
  • Recovery 没有 contents: write、tag、Release 或 attestation 权限;成功恢复 runtime 也不能替代正式 central release run。
  • 不修改 branch protection、ruleset、tag signing、Release immutable policy,也不发布 PyPI。

验证

  • python3 -m pytest tests/ -q --tb=short2799 passed, 2 skipped(另有 2 个既有 websockets deprecation warnings)
  • 定向 recovery/preflight/workflow/provider suite:72 passed
  • python3 -m ruff check src tests scripts:PASS
  • python3 -m ruff format --check src tests scripts913 files already formatted
  • actionlint(3 个变更 workflow):PASS
  • sdk-contractserver-contractprovider-runtime:PASS
  • generated docs、Markdown links、legacy-term gate:PASS(legacy gate 仅有既有 allow-listed review warnings)
  • Python 3.10 AST parse:4/4 新 Python 文件通过
  • git diff --check:PASS
  • staged diff gitleaks:no leaks found
  • 只读 live contract:已知 failed run、primary containment、publish skipped、当前 paused wrapper/direct parent/source pins、RC5 tag/Release absent 均与一次性 legacy contract 匹配

Review focus

  1. Recovery helper import 是否始终位于 owner/current-main/version trust gates 之后。
  2. Mutation marker 前 intent artifact、双 containment 路径和两种 paused topology 是否保持 fail-closed。
  3. Shared concurrency 是否完整覆盖外部 HFS evidence、assemble 与 publish,同时不阻塞纯 evidence build。
  4. Preflight 是否保持 exact Provider、single attempt、最小环境与 credential-safe error surface。

@BlueSkyXN
BlueSkyXN merged commit b53ec3c into main Jul 30, 2026
38 checks passed
@BlueSkyXN
BlueSkyXN deleted the codex/rc5-hfs-provider-preflight branch July 30, 2026 17:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant