Repository navigation
fix(chat): share source observation during stop recovery reads - #8099
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; model=GPT-6 family (Codex); provider=OpenAI; self_reported; exact build and effort unavailable
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
未发现阻塞问题。审查精确版本 cc17db7ad9a9bbbbe3bcbcdf8d8b3b77dee91862,结论为 APPROVE;自审不等于 GitHub 的正式批准或额外合并权限。
动机 / Motivation
打开 Chat 连接设置、查看尚未结束的撤销任务的用户会遇到这个问题。
八个会话只含一项待结算的撤销任务时,原路径重复观察源码八次;修复后该扫描至多观察一次,下一次读取仍能立即看到任务结算。
相同输入下完整设置返回一致,HTTP 回归确认只有源码观察被合并。
本 PR 不修改消息执行、自动重放、授权或答案回传,也不承诺端到端延迟和全部欠答已解决。
原服务完整设置页的尾延迟、安装采用及尚欠消息仍需各自验收。
改动思路 / Approach
不改会继续重复扫描;缓存最终列表会隐藏结算或撤销变化;现有 request scope 已限定源码观察生命周期,因此无需新增缓存与失效策略。 只在现有投影边界复用既有源码观察作用域,没有新增策略、事实源或执行权。 只减少连接设置读取内的重复源码观察,保留原队列和撤销任务投影。 请求作用域只保留一次源码观察,既有 TypeScript queue owner 继续选择队列,文件中的任务状态与授权集合不存进缓存;原接收者负责结算,健康读取不能替它完成工作。作用域退出时通过 finally 清除,后续请求重新观察,因此不需要持久缓存、额外开关或人工刷新。
具体改动 / Changes
本次边界没有独立书面规格,按既有 HTTP 及 canonical Turn 契约核验(spec_basis=no_spec);没有把其他恢复 RFC 的未来目标充当当前承诺。生产代码仅增加导入、装饰器与说明,5行增加、1行删除;测试在原 fixture 增加75行,无新状态、CLI、依赖或迁移。
关键代码讲解
ChatConversationBindings.stop_recoveries仍读取所有 Session 的当前排队/活动 Turn,并排除终态及当前授权绑定。新增装饰器只覆盖这一次逻辑扫描,未更改 pending 计算、异常或排序。effect_runtime_request_scope是已有机制:嵌套调用加入当前请求,退出释放;队列内容没有进入该缓存。相邻LarkPrivateConversations.health已使用此 owner,无第二套失效机制。test_http_stop_recovery_reuses_source_revision_without_reusing_turn_state经真实 HTTP 检查八会话只重复核对一次源码;撤销任务结算后再次 GET 立即消失,仍授权的排队任务保留,binding 与原 Turn 的字节不被读取改变,provider 没有写入。
对主干的风险 / Risks
最强反例是误缓存任务/许可,使待办看起来已经完成或结算后仍残留。因此测试同时检查授权与撤销两种任务,并在两次请求之间改变任务状态。当前精确 head HTTP 回归 PASS;相关 binding、health、撤销与断连136项 PASS,作用域嵌套/关闭等11项 PASS。进程内移除 scope 后同一 HTTP 资源断言实际以8<=1失败,证明回归能发现本问题;固定输入的完整生产投影 base/head 一致,未用删除 pending 字段来降低成本。测试 provider 不调用模型,投影对照固定了 listener 存活观察;这些边界不能证明生产端到端尾延迟。
标准本地检查为6项直接检查及2项所选 canary,源码编译、diff、RFC镜像及词汇检查通过。维护性 ratchet 仍报告 interaction_contract._admitted_interaction_next_cli_actions 的未审大函数;在不可变 base 33b15d037191be7273e39e1e78a01e66b316d732 与当前 head 运行同一命令,失败身份和明细一致且无幅度回归,故保留为既有无关债务,未放宽预算。当前策略 wait_for_ci=false,未查询或等待远端CI。真实 caller 是设置HTTP读取,无新功能开关,default_off_isolation 与新的 actor/authority 命名均不适用;没有自动重放或恢复 grant 的权力变化。
我的整体评价 / Verdict
这是 justified_increment:long_horizon=improved,减少随历史增长的重复工作;user_experience=improved,沿同一入口且新增配置、确认或恢复交互轮数为0。原服务完整设置页的尾延迟、安装采用及尚欠消息仍需各自验收。 只在现有投影边界复用既有源码观察作用域,没有新增策略、事实源或执行权。 只减少连接设置读取内的重复源码观察,保留原队列和撤销任务投影。 可观察语义对照为 equivalent,机制成本与问题成比例,直接复用已有词汇与owner;没有必要再抽象缓存框架。visual_review=not_applicable:只改变 stop_recoveries 的源码观察边界,未改变页面、文本或投影结构;完整返回对照相同。 未验证范围:安装后真实服务尾延迟和全部欠答未由本 PR 证明。
English verdict: APPROVE — the scoped source-observation reuse preserves fresh queue state; installed tail latency and message completion remain separate acceptance work.
连接设置读取需要逐个检查会话中尚未结束的撤销任务。此前每个队列读取都会重复观察同一份 runtime 源码版本,开销随会话数量增长。
为
stop_recoveries复用现有的 request scope,使同一次扫描共享源码观察;每个队列和后续请求仍读取当前 Turn 状态,不缓存执行许可或撤销决定。验证: