Skip to content

fix(oncall): 串行接收群成员补充并保留失败确认消息 - #1430

Open
Alan-Paul wants to merge 4 commits into
deepcoldy:masterfrom
Alan-Paul:fix/oncall-group-collaboration
Open

Alan-Paul wants to merge 4 commits into
deepcoldy:masterfrom
Alan-Paul:fix/oncall-group-collaboration

Conversation

@Alan-Paul

@Alan-Paul Alan-Paul commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

启用 XPI 时,自动入群创建的 Oncall 会话把其他有权限成员的补充当作跨发送者打断,要求原发起者逐条确认;关闭 XPI 时,补充又可能直接进入当前回合,不能保证逐条执行。确认卡片又可能把 mention ID 中的下划线转义,发送失败后原消息被移出待确认队列。此 PR 让自动开工的 Oncall 群保留真实发送者,按回合顺序接收补充;确认发送失败时保留原消息并重试。

本 PR 从 #1394 拆出,已同步 master74c303d9e),可独立合入;不包含 Codex 启动门控或延迟 committed 的改动。

行为

  • 仅已绑定 Oncall、由入群自动开工创建的 managed group 命中协作规则。保留 canTalk 权限和同 app 的 trustedCaller 校验;持久化自动开工来源,兼容旧 daemon 生成的 join turn context,显式 false 不被覆盖。
  • daemon 给协作输入加 queueAfterActiveTurn;worker 在上一回合终止前不写入 CLI、不替换身份、不合并输入,也不清除当前 TUI 问题。
  • 串行标志独立于主干默认关闭的 XPI 实验开关。普通未标记输入保留主干开关行为;adopt、schedule_creator 不命中协作规则,durable dispatch 不增加该标志。
  • 飞书确认卡片保留完整用户/机器人 mention;失效或发送异常保留原输入,持久化重试次数和截止时间,用新 ask identity 退避重试。首次失败提示一次,已送达卡片的真实超时保持原处理。
  • 保留主干统一分类解析、机器人分支及 xpiSharedCwd* 协调字段,不恢复旧类型。
flowchart TD
    A[有权限成员的消息] --> B{自动开工的 Oncall 会话}
    B -->|是| C[保留真实发送者并排队]
    C --> D[上一回合结束且 CLI 就绪]
    D --> E[按顺序提交下一条]
    B -->|否| F{主干 XPI 开关}
    F -->|关闭| J[普通投递]
    F -->|开启| G{确认卡片发送结果}
    G -->|失败| H[保留原消息并退避重试]
    G -->|送达| I[等待明确选择或真实超时]
Loading

影响范围与验证边界

共用路径 影响范围 验证
daemon 协作策略、worker/ActiveTurnAuthority、队列 不按 CLI/终端后端区分;只对满足策略且带串行标志的输入启用等待 策略边界、真实 daemon 入口、真实 Codex worker 的 XPI 开/关两组回归
普通跨发送者输入 保留主干 XPI 默认关闭及显式开启语义 开关测试、另一种 CLI(Pi)的普通投递回归
卡片 mention 和确认失败重试 飞书公共确认路径;不按 CLI/后端区分 三处确认流程、失败重试、持久化恢复、真实超时、异步返回时已删除输入不复活
共享 cwd 协调 保留主干类型、租约和回调路径 共享 cwd admission/daemon callbacks 回归

集成覆盖上述具体组合,未对所有 CLI × 后端宣称端到端验证。

验证

  • 独立分支 bun run build 通过;10 个相关测试文件共 173 项通过;Bun 下真实 worker 的 XPI 开/关两组回归 2/2 通过
  • 协作测试使用普通 loaded banner,直接观察 CLI 收到的输入,不依赖 fix(codex): 修复恢复历史后启动队列永久阻塞 #1394 的恢复门控或延迟 committed。仍断言 A 完成前不写 B1、B1 完成前不写 B2、三个输入各提交一次。
  • 拆分前已复现 XPI 关闭时串行等待被绕过;本 PR 保留修复以及开关两种场景的真实 worker 回归。
  • 独立提交 05e385ef2CI 35092362021 9/9 全部通过,含 Node 三个分片及汇总、Bun 全套、build 和三个平台二进制检查。

09-17 复核

当前没有新增评审评论,旧提交 CI 为 9/9。已 rebase 到 74c303d9e 并解决 src/types.ts 的消息类型冲突:同时保留 queueAfterActiveTurn 和主干新增的 readonlyContinuation;其余改动经 range-diff 核对保持一致。

新提交 7f59f3ea8 的 5 个相关测试文件 113/113 通过,包含真实 worker 的 XPI 开/关两组协作场景;tsc --noEmit -p tsconfig.json 通过。新一轮 CI 35197875707 9/9 全部通过,Bun 日志确认 1167/1167 files green, 0 failing

@Alan-Paul
Alan-Paul force-pushed the fix/oncall-group-collaboration branch from 05e385e to 7f59f3e Compare September 17, 2026 08:05
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