Repository navigation
fix(manager): verify subject ownership before preserving handoff routes - #7519
Conversation
…ing a route Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
通过管家把已有主题研究交给负责 Agent 的用户。先前误投的消息可能被继续当作负责人证据;修改后要求先核主题、当前工作和近期交付,再保留或纠正路线,已送达的纠正不重复发送。独立检查确认新指令进入共享 Turn 提示和受管技能更新;离线反例拒绝错误目标、丢失原始引用以及交接同时创建新 Goal。本 PR 交付指令刷新与离线评测切片;不声称模型选人准确率、真实投递、接收者采用或任务完成已验证。真实模型在完整发现、选择、纠正、接收采用和原会话返回上的表现仍待既有发布资格验收。
改动思路 / Approach
复用共享 conversation intent 指令、受管技能刷新和现有 parser/scorer;主题判断仍由管家推理,投递授权与状态变更仍归原 typed owner。当前边界是可实际加载的指令纠偏和可判别离线 oracle,没有新增路由分类器、配置或调度流程。可直接使用原始请求、显式身份与既有授权;真正缺失的意图与权限仍需如实指出。
具体改动 / Changes
- 共享 intent 指令明确主题、项目、用途和落点优先;简称、目录顺序、可用 binding 及旧投递都不能单独证明归属,显式 Goal/Agent 纠正仍优先。
- 修正交接与旧接收者的归属纠正分别看原回执;已送达不重发,不把送达声称为取消、采用或任务完成。原授权边界不变。
- manager context 升到 22,受管技能升到 v5,经现有 reopen/refresh 到达已有会话;自定义 owner 指令和非受管技能保持。九个公开合成场景复用既有评测器,新增 competing_intents 拒绝。
- module line ceiling 从 2005 到 2007:实质增量是有用的指令,未改变 AST statement/decision 预算或调用、费用上限;当前 ratchet 已通过,不通过删义务压行数。
关键代码讲解
- CONVERSATION_INTENT_RESOLUTION_INSTRUCTION:共享的语义决策指令,约束主题归属和误派修正。旧泛化简称规则明确为主题/项目/用途/落点证据;旧投递不再被误认作归属证明。
- manager_workspace:刷新受管技能,同时保留自定义 owner 文本与非受管技能。当前 marker 到 v5,支持已有 v3/v4 升级;已有 Session 的 context version 到22。
- score:发布评测的离线结构 oracle,检查竞争意图。同一输出同时 handoff 与 goal_draft 原先可通过,现在报 competing_intents。
规范依据:docs/product/use-cases/steward/golden-queries.md,不可变 revision b69021498ef7483b1d2b190bc3f4c7bb6675c882。按修改前的契约评审,不用本 PR 改写的规范证明自身:
- GQ03 — deferred:117 项 native tests 与完整 prompt/workspace 对照支持源码增量;完整 GQ03 旅程仍待既有发布验收。。
- GQ07 — deferred:九个离线场景、错误 Goal/丢失引用反例及 v3/v4/custom-owner 读回通过;模型采用和实际返回未验证。。
对主干的风险 / Risks
最强风险是把“保留既有 owner”继续误用为“保留错误投递”,或通过纠正措辞暗中增加取消与状态写入权限。逐条对照已保留显式身份、原始 brief、当前授权、一次必要纠正与不重复发送;这些是模型指导,不是机器已经执行的归属校验。离线 oracle 的通过不能证明真实模型会按规则选择。
PASS:117 项 intake/context/parsing 测试;同一不可变 base 和 head 上的 test_chat_agent.py 各 456 项通过。完整八种提示中六种非 manager 路径逐字相等,两种普通 manager 路径仅替换已审共享常量;v3/v4 受管技能刷新、自定义 AGENTS 和非受管技能读回通过。九个合法合成输出相同,五个 handoff+goal_draft 竞争输出在 base 被误接受、head 被拒绝。作者报告的历史 52 项失败在本次隔离环境未复现;保留该历史,不虚构其根因或改写为已修复。
标准 premerge 的 6 项直接检查、19 项选中检查与 Ruff 均 PASS,零 manual hold。两行 module ceiling 调整保留完整义务,未扩大执行或费用权限;没有运行付费模型评测。未查询、轮询或等待 CI。
语义与 CI 对齐
复用现有 handoff/receipt 状态,只增加本地 managed marker/context revision;引用字符串检查只属于离线 oracle,没有引入生产关键词分类器。指导、机器门禁和实际操作授权保持分开。当前源码切片的独立验证支持结论,CI 状态不替代这些证据。
我的整体评价 / Verdict
未发现阻塞性问题,APPROVE 此精确 head bca5e7ef997a201739498ff92a089604b5503c8b 的 justified increment。long_horizon 与 user_experience 在已验证源码边界内 preserved;当前边界是可实际加载的指令纠偏和可判别离线 oracle,没有新增路由分类器、配置或调度流程。兼容分支保留了实际消费者,更大的 prompt 模块拆分本次延后,继续复用共享常量与既有刷新 owner。不以测试数、回执或该 PR 代替父级整体交付与收益证明。
本次未改变渲染页面;检查的是完整模型输入、受管工作区文件和已有响应解析路径。实际模型理解、线上投递、接收采用和独立用户体验收益未验证。真实模型选择、实际纠正投递和接收采用仍需既有发布资格链验证。批准不授予合并、安装或其它受保护操作权限。
English verdict: APPROVE bca5e7e; the bounded source change is independently validated, with installed/model adoption and full-cost benefit unverified.
角色简称和先前投递可能把请求持续留在错误接收者:即使主题工作、近期交付和后续纠正指向另一位 Agent,旧投递仍可能被误当成负责人证据。本 PR 将这次管家修复提交到公共指令源,而非只保存在单机工作区。
添加 9 个公开合成路由场景,复用现有发布评测器,并拒绝同时交接和创建新 Goal 的竞争输出。离线 oracle 覆盖错误接收者、丢失 brief 引用、重复投递、额外状态操作和冗余确认;这些测试验证指令交付与解析/评分契约,不证明模型已经按规则选择或接收者已经采用。
验证基线:
b69021498ef7483b1d2b190bc3f4c7bb6675c882。test_chat_agent.py同样出现 52 个失败,逐项集合一致,均涉及原有 native provider 校验路径;未将其计为通过。chat_agent.py从 2005 到 2007 行超过继承上限。安装既有锁定 devDependencies 后重跑;仅将该文件的 reviewed line ceiling 同步到 2007。新增两行承载旧投递非归属、纠正不等于撤回两项义务;AST statement/decision-node 数保持 912/500,不压缩掉有用指令,也不提高调用、配额或运行预算。边界:没有界面布局或设置变化,不需要新增截图。未运行发布专用付费模型评测,未安装到运行中的管家,未认领长期可靠性、接收者采用或 RFC 修订完成。更大范围的 prompt 模块拆分本次不引入;复用共享指令源与现有版本刷新即可覆盖两个实际消费者。