Skip to content

[codex] 修复 Host Bridge 失联恢复、执行租约与慢文件阻塞 - #778

Merged
kachofugetsu09 merged 1 commit into
mainfrom
codex/host-bridge-reliability
Sep 26, 2026
Merged

kachofugetsu09 merged 1 commit into
mainfrom
codex/host-bridge-reliability

Conversation

@kachofugetsu09

@kachofugetsu09 kachofugetsu09 commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

问题与结果

一次 Host Bridge Probe 超时会结束 Core 的关键任务、关闭已有聊天连接;旧客户端也把一次心跳失败永久记为 lease 失效。恢复连接若继续隐式创建 manager,还可能把旧执行句柄接到空执行表。

本 PR 将运行期 UNAVAILABLE / DEADLINE_EXCEEDED 限定为宿主执行能力降级,Core 保持运行并继续探测。健康探测不持有执行租约;业务首次调用显式 OpenManager,后续续期和业务 RPC 只能使用已存在的 manager。Exec/stdin/文件请求不自动重放。

文件读写、编辑、目录遍历在有界线程中执行;RPC 取消仍等实际磁盘操作结束后才释放文件锁和 manager operation。聊天页读取 AppRuntime 的短命状态,区分宿主降级、状态未知和恢复。

本 PR 只提交评审,未合并、未部署。按维护者要求,评审后再决定合并与部署。

Change intent

  • change_type: fix
  • semantic_delta: breaking(RUN-013 运行期失败范围 + 同 release 私有 OpenManager RPC)
  • capability_owner: mixed(Core 监督、Bridge lease、ShellProcessManager 执行、Web 状态展示)
  • consumer_scope: Host Bridge Shell/File consumers 与 Web 聊天;Native Mobile 本次不增加状态 UI。
  • runtime_patch: required;仅浏览器重连无法阻止 Core 退出,也不能保证执行句柄仍属原 manager。
  • authoritative_state_owner: 既有 MessageLog、ShellProcessManager、Bridge boot/manager lease;AppRuntime monitor 唯一更新连接状态。
  • client_only_alternative: 不可行。
  • concept_gate: required;改变运行监督、lease 生命周期与私有协议。
  • 关联不变量:RUN-013/RUN-015、SH-001~SH-003、ERR-001;外部效果不自动重放。
  • protected_state: 正式 workspace、Session/Message、项目、记忆、插件持久状态与原执行 owner。
  • 允许副作用:本地临时 UDS/目录/受控子进程,Git commit/push/PR。
  • 禁止副作用:生产服务切换、正式数据写入、PR 合并和部署。

改动与恢复

  • agent/host_bridge: typed RPC error、首次 manager 登记、existing-only 续期、运行监控恢复、文件 I/O 排空。
  • bootstrap: AppRuntime 状态、精确只读 HTTP 路由及公开 Web Shell 代理。
  • frontend/chat/src: 实际挂载状态提示,5 秒轮询/超时,恢复清除。
  • docker/debug: 可重跑的真实 UDS/磁盘/进程故障实验与 Chromium 组件实验。
  • 无数据库/schema/迁移变化;Core 与 Bridge 必须同 commit 成对发布/回滚。
  • base: db215d872d56c35cff15129f458d89535ad0cad8;恢复点为该提交及本地 baseline archive。
  • 协议 SHA256: e52e95395496d274c8a1cd572c679e888d3bb2303befff137372a40e64479d80。

本地验证

  • pytest -q tests:44 passed。
  • pyright 主工程与 tests:0 errors。
  • plugin_boundary:通过;R1/R2/R3=0,不等于完整插件独立验收。
  • yoyo 检查、control schema / Host Bridge 协议生成物 --check。
  • npm run typecheck。
  • .venv/bin/python docker/debug/host_bridge_reliability.py:8 组通过。
    1. Probe DEADLINE 不结束 Core 主监督/兄弟任务,公开 Shell → Dashboard UDS 状态降级/恢复。
    2. 真正停止/重建 UDS listener 后连接恢复。
    3. 并发首次请求只登记一次,心跳失联后保留同一 manager。
    4. lease 回收后 NOT_FOUND,不 reopen,不谎报 cleanup 成功。
    5. 真命令执行后丢失响应,文件只增加一次,不自动重发。
    6. 单次业务 INTERNAL 后,同一 manager 仍能执行正常命令。
    7. 慢写期间 Probe 响应、取消后同文件串行和 shutdown 排空、四类实际文件操作。
    8. token/boot fencing 继续拒绝错误身份。
  • node docker/debug/host_bridge_notice.mjs:真实 React/Chromium 验证降级提示、恢复清除、HTTP 错误显示未知、local mode 无提示。
  • 修复前真实 Probe 超时实验复现 monitor 抛错结束;修复后通过。

证据边界与已知风险

  • 非完整在线对话、真实 Android 或生产发布验收;未触碰线上。
  • 浏览器实验的状态由 HTTP fixture 控制;公开 Shell 的真实 UDS 路由另由后端实验验证。
  • 永久磁盘阻塞仍会延迟物理排空,不能把取消当作已回滚。
  • 长期失联过期的 manager 明确失效,需原 owner 结束旧生命周期并新建客户端;健康 Probe 不表示旧命令存活。
  • Standard Tools 同步 skill capture 仍可能执行阻塞的宿主能力查询;本次不改同步 capture 公共合同和资产生命周期。

正交性与概念完整性

  • 架构性变更:yes。
  • Reviewer: 独立 gpt-5.6-terra,reasoning xhigh。
  • 审查 head:c4bf90a6043b28e0608fbd9746c3d88c7402e92d;最终结论:pass,0 must-fix。
  • Gate 五项均通过:概念边界、唯一 owner、变化传播、正常/失败/取消/恢复、删除与检查。独立 reviewer 只读审查,没有冒充重新运行检查。
  • 当前 head 的 44 pytest、8 组 UDS 实验、4 组 Chromium、主 pyright 与前端 typecheck 已复验通过。GitHub CI 在提交时仍运行中。
  • 新状态仅 HostBridgeStatus,由 AppRuntime monitor 独占;不进入 Root/Fiber health,不写持久化 readiness。
  • 正常链:首次 OpenManager → 一次业务 RPC → 心跳续期 → owner shutdown。
  • 失败链:短暂连接故障继续探测;明确 lease/身份丢失阻断;业务效果不重放。
  • 初审两项 must-fix 已修复:补公开 Web Shell 精确代理;单次 INTERNAL/INVALID_ARGUMENT 不永久 poison manager。

工作手册

  • 已更新 RUN-013、ADR 0075、协议设计和 INDEX。
  • 长期语义来自维护者本轮对系统性优化的授权。
  • 已核对 NOW;没有对应的已完成事项需要删除。
  • 正式持久化数据不变;合并与部署留待维护者评审。

@kachofugetsu09
kachofugetsu09 marked this pull request as ready for review September 26, 2026 06:14
@kachofugetsu09
kachofugetsu09 merged commit 10664ae into main Sep 26, 2026
2 checks passed
@kachofugetsu09
kachofugetsu09 deleted the codex/host-bridge-reliability branch September 26, 2026 06:14
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.

1 participant