Repository navigation
fix(chat): avoid duplicate steward inventory identity probes - #7655
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.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
使用已绑定管家会话查看原始请求清单的用户,会在每次打开和翻页时经过 provider 身份核验。旧路径在同一个授权检查点重复核验同一 provider;新路径在每个检查点只核验一次,并在读取结束前再次检查当前授权。重复外部观察会增加打开清单的等待,但直接缓存权限会让已撤销的授权继续泄露内容。本轮确认完整 HTTP 清单仍能翻页和搜索,读取期间的撤权仍会阻止内容返回,同时单次清单读取的 provider 观察由四次降为两次。本 PR 不增加委派、消息发送、请求接纳或模型执行权限,也不宣称端到端延迟、File 尾延迟或长程任务收益已经达标。
改动思路 / Approach
复用同一次新鲜 Core 选择来校验 Session 与 Goal 可见性,同时保留读取前后两个独立检查点,比缓存授权或移除收尾检查更符合原边界。本次边界是既有请求清单入口的局部读取优化,保留自定义 resolver 和旧 manager 路由的语义,不新增用户配置或独立控制面。只有仍使用创建时那个 manager resolver 的原生绑定路径可以复用已验证选择;resolver 被替换时回到原有路径,空授权列表也不会被当作“没有结果”而回退扩权。这是每个检查点内去重,后一个检查点仍重新读取 provider、binding、Session 和证据范围。
具体改动 / Changes
完整审阅四文件 diff(+218/-20),head 61f109d18e3507e6273205950a4d6be6a22c678e,不可变修改前基线 9dcdc0bacd455a8cf6f6146f052ffc4df0f5d04a。依据修改前的 loopx/capabilities/manager_context/README.md,revision 9dcdc0bacd455a8cf6f6146f052ffc4df0f5d04a,核对原始会话来源、读取前后当前授权以及只读不接纳请求三个要求。原文没有编号,以下是审阅标签:INV-SOURCE、INV-RECHECK、INV-NO-EFFECT;对应要求均已通过实际调用验证,不用本 PR 新增说明反向定义验收。
关键代码讲解
bound_steward_inventory_scope先核对 resolver 对象身份,再取得一次新鲜绑定选择,并调用现有runtime_context校验管家 Session 的 channel/Goal;返回该选择的 Goal 列表。它没有跨请求缓存,也没有把保存的 Session 文本变成授权。_request_inventory_scope仅在上面的原生路径得到有效列表时复用它;自定义 resolver、私有会话、选定 Goal workspace 和证据范围判断仍保留。_request_inventory_read的收尾检查继续覆盖每个实际观察到的原始来源。manager_source_scope_resolver从原 Chat server 闭包移出既有路由,继续区分当前来源 registry、协调 runtime 和 executor runtime。原生绑定仍由 conversation bindings 所有,旧 manager 仍调用已有授权函数,没有另建权限规则。
本地验证:七组相关测试 214 PASS,既有清单 caller suite 在 base/head 分别 22 PASS。冻结同一组撤权场景,两边均 12 PASS;捕获完整响应和错误正文,仅归一化生成的身份、digest 与时间后,12 组结果一致。独立次数约束能检出旧重复读取:base 6 FAIL / 3 PASS,head 9 PASS,没有通过放宽撤权条件制造通过。
对主干的风险
没有发现阻塞问题。 最危险的回归是去重时遗漏读取期间撤权,或错误使用另一个 resolver 的结果。已执行读取前/读取中 binding、provider、scope 撤销,覆盖拒绝正文和不返回行;真实 HTTP 的 File/SQLite 场景分别读出 43 个长问题、两名接收者和 Todo 链接,翻页、搜索、撤权后恢复均成立,源 JSON 和模型调用记录不变。
既有 caller 测试另覆盖重开会话、其他 audience 不可见、13 条记录超过 12 条展示页、取消/历史、损坏来源的 partial coverage,以及收尾 scope 改变后整批拒绝。Ruff 与标准 premerge 通过:6 direct、6 catalog、8 risk、1 public-boundary,0 manual hold。没有查询、轮询或等待 CI。作者报告过的 File 尾延迟未在本轮重新定量资格化,不能据此承诺整体延迟改善。
语义与边界
复用现有 Core 会话和 Goal scope 类型,不新增生命周期词汇或依据 prose/substring 分类。README 说明的是新鲜检查的执行方式,没有删去授权、来源隔离或只读义务;固定字段、消息、诊断和副作用保持原契约。该改动不是 default-off 功能;自定义 resolver 回退是兼容路径,已与基线对照,不能把它误说成一个新的功能开关。
我的整体评价
本 head APPROVE,局部成本下降与权限保持都有独立证据,规模和现有 owner 匹配。普通用户继续在同一清单入口查看结果,无需新增设置、确认或重新提供已知信息。检查了 chat_server 和 request_control_api 的实际调用及全部四文件差异,没有渲染层、文案入口或前端布局变化。本轮未渲染无变化的页面;可视化测试不能替代已执行的接口授权和来源隔离验证。本结论只覆盖该精确 head 的读取行为,不代替后续真实延迟测量、安装采用或其他 PR 的验收,也不授权合并。
English verdict: APPROVE at 61f109d: one fresh provider observation per opening/closing checkpoint preserves authorization, full responses, historical-source isolation and read-only behavior; 214 related tests and 22 existing inventory caller tests pass.
Goal And Delivered Outcome
原生绑定管家读取委派列表时,读前、读后都分别为会话验证和 Goal 可见范围重复观察同一个 provider。带网络的身份验证因此每个请求执行四次。现在每个检查点复用一次已验证的 Core 选择,合计两次,保留返回内容前的重新验证。
main;现有锁读取优化见 perf(collaboration): batch guarded inventory observations #7630。Author Declaration
loopx/capabilities/manager_context/README.md,9dcdc0bacd455a8cf6f6146f052ffc4df0f5d04a的 original-conversation inventory 合同。bound_steward_inventory_scope/RequestControlMixinmanager_source_scope_resolverScope And Continuation
完成本次重复身份观察修复及默认来源路由的等价迁移。原生安装态的完整延迟、其它读取成本继续沿既有工作验收;历史回执拒绝沿已有诊断 owner 处理。此提案独立于 #7630 的生命周期锁优化。
Validation
对照使用 43 条请求、2 个接收者、842 个 Turn(约 50 MB)、32 个 Core Todo、11 条关联。provider 每次读固定模拟 100 ms 延迟;每种查询每模式 2 个样本。以下为各查询的中位数,用于检验重复观察的固定成本:
File 刷新的复用样本为 453 / 3153 ms,长尾异常保留,尚未归因。 宿主其它负载未隔离,样本不构成尾延迟资格;不把固定 provider 延迟实验解释为安装态性能提升。
Quick 预合并的 6 项直接检查、3 项 canary 和公开边界扫描通过;合并门仍缺 exact-scope change-quality receipt。维护者评审、CI 和合并权限分别确认,本提案不宣告合并就绪。
Frontend / Visual Evidence
Type of Change / LoopX Area
Technical Direction / Shared-authority RFC fixture impact
既有只读来源合同的 host IO 修复。权威存储实现和切换合同无变动;PostgreSQL 存储资格不在本次范围。无 RFC 成熟度或整体验收晋级声明。
Boundary Checklist