Repository navigation
Reuse the shared digest check for steward executor adoption - #8596
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · max
本次评审对应提交 f9c0ee1bf0fb1b29b129bf9b7ff9aee8066a72b0。
动机 / Motivation
使用原会话继续工作的 Steward 用户,以及需要验证接续规则的维护者,会遇到这个路径。Steward 在启动时要把已经采用的执行器接回原会话。原路径内嵌了一份和共享校验完全等价的 SHA-256 规则,导致主干的规则归属检查失败。改用已有的带前缀摘要校验。同一原会话可以接续,格式错误、分配不匹配、待办队列非空和外部操作者变动仍被拒绝。已恢复摘要只有一个定义;真实接续保留原会话、历史消息、已完成 Turn 和待接续请求。本次只归并已存在的校验,不更改会话权限、UI、调度或模型选择,也不声称验证了新的接续场景。
改动思路 / Approach
摘要格式归共享模块,接续决定仍由会话绑定负责。只替换重复判断,保留原状态和拒绝顺序。 两个正向请求和十五个格式、身份及队列负例经同一个 Effect RPC 做了对照;基线与候选的完整结果相同。
具体改动 / Changes
关键代码讲解
以 docs/architecture/rfcs/capable-manager-semantic-handoff-v0.md @ 8e8a60d 为准。§5.14、BINDING-IDENTITY 与 QUIESCENCE 均保留。planConversationBinding 先核对原会话、执行器分配及队列,再让已有的 ENVELOPED_SHA256_PATTERN 检查修订格式。现有接续测试 仍能读回同一会话里的待接续请求和终局,且重跑不会重复发布。
对主干的风险 / Risks
基线 98 项相关 TypeScript 测试中只有摘要归属检查失败;本提交 98 项均通过。真实本地会话的六种接续与拒绝场景在两个提交均通过,故障后的重入也保留原结果。
语义与 CI 对齐
两个正向与十五个负向 Effect RPC 请求结果及拒绝原因逐项一致;typecheck、diff、双语 RFC 检查通过。没有查托管 CI,也没有执行真实模型调用。
我的整体评价 / Verdict
没有阻塞发现。现有摘要归属已归并,原会话接续、身份和权限边界保持。无需附加兼容层或更大重构。检查了原会话与请求读回;本次无前端、Lark 界面或渲染布局改动。独立接续用例使用隔离存储与合成执行器,未验证生产会话。
English verdict: APPROVE. At f9c0ee1, the shared digest check removes the ownership failure and preserves all 17 paired adoption decisions and six real local lifecycle cases.
Steward executor adoption validates the machine configuration revision when it reconciles the original session. The reconciliation path added by #8592 defines its own SHA-256 matcher, so the existing single-owner guard fails on main.
Use the shared enveloped digest matcher for this check. It accepts exactly the same revisions and leaves the executor and session checks unchanged.
Validation: the existing digest ownership guard fails on the current main checkout and passes with this change. The digest and conversation binding suites pass, along with the control-plane TypeScript check.