fix(session): 隔离跨身份打断并保全消息 - #1348
Conversation
|
CI 与基线更新(2026-09-10):
提交者仍无权重跑上游 Actions。烦请有权限的维护者基于当前证据重跑失败作业或审阅后决定合并;若该失败稳定复现,再作为独立问题定位,不在本 PR 中夹带修改。 |
|
你好 👋 这是 botmux 的自动评审流程。我们已经为这个 PR 建好了评审群:https://applink.feishu.cn/client/chat/open?openChatId=oc_7878b63455923963b5f013dfba8a414d ,评审 bot 会在群里开始 review。 不过你暂时还没被拉进群——我们的自动拉群名单里还没有你的飞书信息。麻烦你把 GitHub 账号和飞书信息补进这份名单文档:https://bytedance.larkoffice.com/wiki/WJ1nwWbtxi89erkNGNbcgkt9nUe ,补好之后后续复审会自动把你拉进群。感谢你的贡献!(本条为自动流程发出,最终评审结论以维护者审阅为准。) |
|
自动评审初步意见(最终以维护者审阅为准): 整体设计扎实——活动轮权威元组(caller/controller/turnId/dispatchAttempt)在 terminal 前不可变、worker 侧在入队前硬性拦截跨身份
本地验证: 再次说明:以上为自动评审初步意见,非阻断,最终以维护者审阅为准。 |
|
复审完成(独立验证,非仅复核首审结论):
结论:0 阻断,技术上可合。 核心安全边界在 worker 闸且测试承重;建议 N1/N2 合并前后尽快处理,N3 在扩大部署前补齐。 |
|
补充 CI 状态说明,便于审核。 当前唯一失败的用例与本 PR 改动无关: 该断言是「进程退出后 FIFO 应已被清理」,失败形态是残留一个 fifo 文件,属拆除时序的不稳定用例。该文件不在本 PR 改动的 27 个文件之内(本 PR 只触及 另外那个失败的 本地在 base / head 两个对照 worktree 上跑了受影响文件的并集(223 个文件):base 4528 通过、head 4530 通过、0 失败。完整基线仍以上游 CI 为准。 我们没有 rerun 权限(403),麻烦维护者重跑一下 |
|
交叉确认完成(独立验证二轮复审结论):
结论:增量安全、零新问题,0 阻断可合不变。 交申晗拍板。 |
|
你好!这个 PR 的评审飞书群已建好(点击加入评审群),但自动流程暂时没能把你拉进群——你的 GitHub 账号还不在我们的自动拉群名单里。 麻烦把 GitHub 账号和飞书信息自行补录到这份名单文档:https://bytedance.larkoffice.com/wiki/WJ1nwWbtxi89erkNGNbcgkt9nUe ,补好后后续复审会自动把你拉进群。评审意见我们仍会同步在本 PR 评论里,不影响评审进行。感谢贡献!(本条为自动流程发送) |
|
交叉确认完成(独立验证三轮复审结论):
结论:纯同步上游、零 PR 语义改动、零新问题,0 阻断可合不变。 交申晗拍板。 |
deepcoldy
left a comment
There was a problem hiding this comment.
三轮双审(首审 + pi 复审 + 两次交叉确认)0 阻断可合:worker 入队前硬拦跨身份(真安全闸,实测承重)+ daemon 预路由/竞态兜底收敛到持久化记录 + ask 送达起算/锁唯一答复人。与最新 master 干净合并;必需 check(build / bun-binary linux·darwin·musl / test 1·2·3)全绿。唯一红的 bun-test 是 ci.yml continue-on-error: true 的非门禁 advisory 腿,两次同 SHA 运行红在不同真机 PTY/tmux 用例(tmux systemd、tmux-storm SIGKILL、child-env node-pty lost read),均不在本 PR 文件、属已知环境 flake。
非阻断跟进(不挡合):N2 cwdSerializationGroup 只写不读(重启后排队独立会话可能提前 fork 共用 cwd,建议优先补)、N1 删 ~115 行零生产者死代码、N3 扩部署前补 daemon 驱动层单测、N4 controller 腿只比 caller、N5 terminal 仅 completed 驱动。
|
自动评审同步(初步意见,最终以维护者审阅为准): 本 PR 功能双审已 0 阻断通过、必需 CI 全绿。不过在评审期间上游 master 又合入了多个提交(最新 冲突只有两处,且都是「两边各加了东西」的机械并集,没有逻辑对立。我已在本地按下面方式解过并验证( 1) export function forkAdoptWorker(
ds: DaemonSession,
opts?: {
restoredFromMetadata?: boolean;
prompt?: string;
turnId?: string;
trustedCaller?: TrustedCaller;
},
): 'accepted' | 'rejected' {
if (ds.session.cliInstanceBinding) throw new Error('External adoption cannot carry a Codex instance binding');
// …函数体不变;本 PR 把 opts.trustedCaller 透传进 init IPC 的那行请保留:
// ...(opts?.trustedCaller ? { trustedCaller: opts.trustedCaller } : {}),(即:返回类型从 2)
把三个 补充两点:
你 rebase/merge 最新 master 并推上来后,我们会复验必需 check 并继续走合并流程,谢谢! |
改动内容
本改动包含用户可见行为变化:跨身份输入不再直接 steer 活动轮,而是进入显式、可恢复的分类流程。
caller与稳定任务控制人controller。raw_input携带由 session owner 派生的稳定 controller;派生逻辑收敛为 daemon/worker 共用的单一实现。为什么改
普通群的 chat-scope 会话可能由多名真人或机器人共用同一 anchor。历史
lastCaller只能说明上一轮是谁发言,不能证明当前在飞轮的控制权;把它当作活动权威可能让另一身份的输入注入正在执行的轮,也可能在并发与超时路径中造成消息丢失。本改动固定以下不变量:
caller/controller/turnId/dispatchAttempt在 terminal 前保持不可变;任何所有权变化只影响下一次 reserve。影响范围
lastCaller、creator 或入站 envelope 实时推导。验证
master(30fdc7f39)后,bun run build(Bun 1.4.2)通过。545 passed / 0 failed。4528 passed / 10 skipped / 0 failed,本分支为4530 passed / 10 skipped / 0 failed。worker-ordinary-im-init-concurrency.integration在当前 base 为 5 项、本分支为 6 项;ask-broker为 53→55,ask-resume-restart为 13→14;两侧均 0 failed。新增的active-turn-authority15 项、cross-principal-interruption-store4 项均通过。acknowledges an OpenCode argv activation token without a dispatch attempt在合入#1335之前的 base(9387fa190)可复现约 8 秒超时;合入#1335后在当前 base 本地为5 passed / 0 failed,已不再复现。test/tmux-pipe-backend-exit.test.ts中lets the process exit with a LIVE backend and no teardown call at all,表现为 FIFO 清理时序失败。git diff --check通过。合并后验证计划