Repository navigation
Defer unrelated Goal status reads in ordinary steward chat - #8328
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
已绑定 Codex steward 会话的用户发起普通聊天。原来即使问题与 Goal 进展无关,启动模型前也会扫描全部获准 Goal 的 status;现在先交付带缺失标记的目录,只有查询需要实时状态时才通过现有 scoped reader 读取指定 Goal。实际 native tool exchange 和 HTTP File/SQLite 验证显示,普通轮次启动前读取次数从两个 Goal 降为零,明确请求单个 Goal 时才读取该 Goal;越权和授权变化均在读取前拒绝。本 PR 不证明真实模型主动采用 reader 的成功率、用户响应时间或长程收益,也不改变协作任务及原生执行的状态读取和权限。
改动思路 / Approach
保留现有事实和权限 owner,仅调整普通聊天初始读取时机;省掉无关 IO,同时用明确缺失状态与原有 reader 保住后续证据路径。本 PR 只交付普通已绑定 Codex 聊天的目录优先和按需查询,不改变执行/协作/观察路径,也不宣称真实模型采用率已获验证。最小修复应落在现有采集器和初始聊天调用之间:只删除 prompt 内容仍会做无关 IO,另建缓存则会增加陈旧事实和第二份状态。这里保留当前获准 Goal 的目录和已有动态读取工具,用一次调用的参数决定是否先读 Core;目录不再冒充状态快照。事实、范围和前后授权检查仍由现有 reader 负责,恢复后能在原会话的新轮次继续读取。
具体改动 / Changes
以已接受的 docs/reference/protocols/manager-evidence-and-continuity-v0.md 为规范,spec_revision 87a153d4d206fdc9e466ae2ed4bf1381006d235a。映射 §1:Chat 仍观察 Core,不持有第二份状态;§4:未读明确呈现为 omitted/unknown/coverage incomplete,而非没有工作;§6:读取沿用当前 audience/source 范围及前后授权检查。新增文档七行是默认行为披露,并未用新写的文字替代以上既有验收。
关键代码讲解
prepare_turn_context仅在 interactive Codex、已绑定 steward 且不是观察、native request/execution、peer 或 collaboration 时关闭初始状态采集。其他调用继续使用 eager 默认值。build_goal_portfolio的read_status=True默认不变;关闭时保留 registry 和范围事实,明确给出 source gap,避免把没读解释成闲置。manager_index在该目录下改为要求先读 scoped portfolio 再作状态或 attention 判断;保留质量、时间、覆盖和非授权声明。ManagerInspection.read类与已审当前 main 的 AST 相同,仍在 IO 前后检查当前授权。chat_manager_context只转发同一参数,并禁用未采集状态的 details;两组新增调用方回归覆盖 native 工具交换和 HTTP 的 File/SQLite,未加入另一套状态或读取规则。
全 diff 为 7 文件、+135/-7;产品逻辑 4 文件,测试 2 文件,协议披露 1 文件。现有 portfolio/inspection owner 足以承接,不需要新公开 schema、CLI、持久状态或用户确认。
对主干的风险 / Risks
主要风险是模型把目录当成进展。独立 HTTP 测试在 File/SQLite 均确认 attempted=0、complete=false、quality=omitted、progress=unknown、attention unavailable;读取指定 Goal 后取得当前 source,foreign Goal 和撤销授权都在额外 IO 前拒绝,恢复授权后原会话新轮次可再次读取。fixture 本身的进度仍有显式 source gap,因此这里证明 scoped 读取和恢复,没有把 unknown 包装成业务进度已验证。自编 HTTP probe 直接调用实际已注册 handler;真正 Codex tool protocol 由新增 native 回归单独验证。
PASS:新增 native 回归冻结在同一 reviewer harness 后,main 87a153d4d206fdc9e466ae2ed4bf1381006d235a 在启动前已读 alpha/beta,违反独立 no-eager-read oracle;head 上同一用例 1 passed。Manager/portfolio/inspection 现有测试 122 passed;configured mypy 17 文件和 Ruff 全通过。完整两组调用方测试 head 140 passed / 2 failed,main 137 passed / 2 failed。失败均是 test_http_web_handoff_reports_missing_provider_source_without_retargeting[file/sqlite]:预期 original_route_unavailable,实际 initial_delivery_receipt_unavailable;规范化完整失败详情相同,四个 return owner 文件在实际 PR base、main 和 head blob 相同,新读取不变量由独立通过的用例覆盖,故归为既有无关失败,不称整组全绿。
初版独立 probe 对两次新鲜 source 时间戳作了错误的整行相等断言,现保留原始失败并仅允许实际观察到的 /source/observed_at 差异,其他语义字段与 attention 相等;修正后 2 passed。一次缺 tests import path 的启动错误也已保留并用当前 checkout 路径纠正。premerge 6 direct + 4 selected mechanical checks 通过,但总体 merge gate 仍为 quality_receipt_missing。按当前策略未查询、轮询或等待 CI;未运行真实模型或安装版 UI。
语义与 CI 对齐
复用已有 SourceQuality.OMITTED、manager evidence directory 和只读工具词汇;局部 bool 是当前调用的读取策略,不是复制的共享生命周期。行为文字逐条保留 actor、质量/时间/覆盖、不能推断 idle/stopped、非行动授权等条件;仅普通未读目录的答复顺序有意改为先取相关证据。它是模型应遵守的指导,权限拒绝才是机器强制边界。没有将文本变成隐含工作义务。
我的整体评价 / Verdict
APPROVE,仅针对 78b91902cf344d6c08d14d3377e61d1e6723d268。long_horizon 为 preserved:原事实 owner 和新鲜证据路径保留;user_experience 为 accepted_tradeoff:初始目录不再附带进展,需通过既有工具读取相关状态,但无额外用户操作。保留现有事实和权限 owner,仅调整普通聊天初始读取时机;省掉无关 IO,同时用明确缺失状态与原有 reader 保住后续证据路径。本 PR 只交付普通已绑定 Codex 聊天的目录优先和按需查询,不改变执行/协作/观察路径,也不宣称真实模型采用率已获验证。有实际调用、负例和恢复,不是仅增加 serializer;现有 eager 调用和默认语义由回归保护。既有 phase 反馈从状态改为目录来对应实际 IO;未改变布局、viewport、折叠或页面密度,故 visual_review 不适用,安装版界面与真实模型采用仍未测试。真实模型采用率、响应时间和长程收益仍 UNVERIFIED,合并所需 CQR/仓库权限与审批另行判定。本审查不授权 merge。
English verdict: APPROVE at 78b9190; the ordinary bound-chat read policy is scoped and disclosed, with native counterfactual and File/SQLite recovery evidence. Two unchanged return-route failures and the separate merge-readiness hold remain disclosed.
用户问题与交付边界
绑定管家的普通 Codex 对话在提交模型前逐一采集授权 Goal 状态。一个仅需要外部工具的普通问题也会等待这些无关读取。
本改动让这条普通输入路径先获取当前授权目录。需要 Goal 状态时,执行器通过已有 loopx_manager_read 的 portfolio 视图读取相关范围。操作者仍从原 Lark 或 App 会话直接提问。
实现
状态与权限继续由既有 TypeScript owner 管理。Python 改动位于现有 IO 与上下文适配层,没有新增持久状态或协议词表。相关重构把读取方式的选择留在已有 coordination 模块,避免继续扩张 Chat runtime。
验证
耗时与输入成本
在同一合成任务与注册数据上,对比目标 main 与本提交。每侧一个新 Session 和四个同 Session 暖轮,包含 17 个 Goal,其中 9 个已停止,部分来源使用实际 File / SQLite authority。
两侧补读均为 0。实验进程与数据隔离,样本期间存在其它负载。这些数字限定于合成回放,模型、真实 GitHub 工具耗时、p95、费用和正式部署的改善仍待各自验证。
剩余范围
独立评审、正式安装、打包浏览器及真实后续自然对话采用尚未完成。排队准备和上游流断开需要继续沿各自原始证据定位。本 PR 交付的是普通输入前置采集的修复。