Repository navigation
fix(chat): preserve original conversation receipt readback across runtimes - #7639
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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; effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
没有发现当前范围内的阻塞性问题。使用原 Chat 会话等待已委派工作结果的用户,尤其是 Chat 与协调 runtime 分开存储的安装。
结果正文已送回原会话,但旧 HTTP 读取 Chat 根目录,可能缺少送达状态,也可能显示本地副本的错误状态;改后从共享协调回执读回。
候选真实 HTTP 返回同一原消息的 delivered 状态和原请求身份,分页保留身份,来源或回执恢复不重做原工作。
本 PR 不安装候选、不启动真实模型、不更改执行授权,也不宣称完整自然请求执行与完整成本验收。
上层普通自然请求的真实执行、已安装客户端采用及完整成本仍需现有集成验收继续验证。
改动思路 / Approach
读取已有共享回执并复用现有来源匹配即可解决问题;另建状态副本、配置或决策 owner 会扩大成本,均不需要。
当前 PR 仅修复原会话回执投影、来源隔离及其真实 HTTP 回归;执行、生命周期决策、安装和完整成本验收沿用原 owner。
公开入口仍是 session GET:controller 提供既有协调目录,实际 Chat store 继续提供 transcript,现有回执 owner 提供送达事实。两个投影都先匹配冻结的原来源;缺失或损坏回执不授予新权限,也不触发执行。原问题到可用结果仍是一轮交流,修复不增加配置、确认、复制标识或额外页面。做不到来源匹配时,正文保留,不能把其他 Chat 的同名会话当成原来源。
| 相同输入、真实 HTTP | 基线行为 | 当前 head |
|---|---|---|
| 分离目录,协调回执 delivered,Chat 本地副本 verification_required | 读取本地副本,独立 delivered 断言失败 | 读取协调回执,原正文/请求及分页身份一致 |
| 复制原会话到其他 Chat host | 仅会话和 Turn ID 不足以证明来源 | 不附加借来的状态或请求卡片 |
| 原回执缺失或 route 损坏,再恢复 | 现有 owner 的未知/错误语义需要保留 | queued 或无可验证元数据;恢复后同一消息 delivered,不重做工作 |
此表是已执行用例的文字对比,没有另画未验证的流程图。来源匹配复用 is_source_chat_host,没有新建缓存、路径配置或第二套交付分类。可选 source_store 保留已存在的直接 helper 调用;生产 session 投影始终传入真实 store,不能据其可选性推断 HTTP 绕过。
具体改动 / Changes
接受规格为 loopx/capabilities/manager_context/README.md#a-delegation-returns-automatically,不可变修订 6fa2cf5a2c8d0a036678d2376218d9c18c921409。逐条核对:original-conversation-return(结论回到原会话)已实现;one-exchange(状态查询只是可选检查)已实现;receiver-owns-work(读取不改接收者工作)保持。这些标签对应规格原文的三项要求,不代表新的 RFC 里程碑。自动返回和真实执行的上层验收仍按前述范围保留。
关键代码讲解
ChatRequestHandler._session_snapshot把既有coordination_runtime_root交给投影,而 transcript 仍由当前真实 Chat store 读取。它纠正了生产 HTTP 与此前纯 helper 测试之间的接线差异。project_chat_return_deliveries在查找原结果回执时复用来源匹配,再使用原有reply_status;没有产生新回执、改变正文或合成执行完成状态。没有返回消息的分支保持原行为。project_collaboration对已有 receipt 及丢失 answer 的 route 恢复都检查实际来源,然后沿用原 Goal-instance/lifecycle 判断。共享目录切换后的来源隔离因此覆盖两个实际显示分支。
差分是现有生产代码 +13/-6、测试新增153行及三张公开安全截图。旧 HTTP fixture 只补上真实 controller 已有字段,没有删除原断言。新测试使用真实 HTTP、controller、File/SQLite authority 与真实 report/drain;模型和原始内容使用合成 fixture。它们不能证明真实模型采用或已安装客户端完成升级。
对主干的风险 / Risks
最强风险是“改对目录,却借用其他来源”:只要复制 session/Turn ID 或放入看似可信的本地回执,单纯一行 root 修复就可能显示错误事实。当前 exact head 用冻结来源匹配挡住该情况,并保留原文、现有历史 Goal-instance 与错误恢复语义。没有修改权限、排队、调度、持久化格式或执行入口;该修复没有 opt-in/default-off 声明,不能用所谓关闭特性来跳过共享路径验证。
PASS:最终16个 HTTP 用例覆盖同目录/分离目录 × File/SQLite,包含复制来源、伪回执、冻结分页、回执及 route 恢复。相同最终 fixture 在 6fa2cf5a2c8d0a036678d2376218d9c18c921409 的隔离源码归档按预期失败于 verification_required 与 delivered 不符,候选相同用例通过。较早无伪回执 fixture 失败于缺少 return_delivery,与本次更强反例分别保留。归档首次遗漏 example 模块导致收集错误,补齐后才取得真实 HTTP 反例;未把环境错误当作产品观察。
PASS:83个原 roundtrip 用例;邻接初跑100 pass/29 fail,补齐旧 controller fixture 后原29个失败全部通过,原断言保留。首次新 fixture 缺 brief 的4个失败由显式合成 brief 纠正,最终矩阵仍检验独立来源与送达断言。配置内 mypy、Ruff、TypeScript typecheck、conversation-returns、dashboard完整构建通过。标准 premerge 的6项直接检查、7项 catalog 及文本边界扫描均通过,整体仍是 manual_review_required,三项 PNG 人工项未被改记为工具通过。
逐张检查了三张 PNG 的像素、来源及元数据:均为合成会话,只有通用 ICC profile,无本机路径、私有消息或账户材料。显式把 PNG 交给文本扫描曾因非 UTF-8 失败;最终五个源码文本扫描通过,图片依据本次实际审查,不能拿文本扫描代替。未查询 CI、未安装候选、未重启现用服务,也没有据此取得受保护运行时的合并授权。
语义与 CI 对齐
本次复用既有 provenance、delivery 和 lifecycle vocabulary,没有新 core 状态词或第二个决策 owner。差分 advisory 未发现支持范围内的新载体,但其动态分析局限保留;完整语义 smoke 与双语 RFC 检查通过。没有删短 Agent 指令、变更义务强度、放宽预算或把历史失败重新标为通过。当前 CI 策略为不咨询远端,审查结论依据本地真实路径和精确提交。
我的整体评价 / Verdict
对完整原会话任务,这是 justified_increment:真实读回错误已在可回滚的小边界解决,上层自然执行和安装采用仍有明确验收归属。long_horizon 判定 preserved:恢复与后续分页不丢承诺、不复制结果、不重做工作;user_experience 判定 improved:原问题、结果及正确状态在同一入口可见,无新增必要交互。
桌面前后对比和窄屏均已检查整页:原问题、返回正文及结果下方状态清楚,状态读回恢复且没有新增说明、卡片或导航步骤。
未覆盖真实模型执行、安装后采用、其他页面的长列表或全局密度;本次只恢复既有单条回执显示,未改变这些页面布局。
整体设计比例合适:现有来源 owner 已足够,保留必要直接调用兼容,不增加框架。主干残余风险是尚未做候选安装与真实模型端到端采用验证,以及既有共享历史扫描成本未在本 PR 重新作全局性能资格声明;这些不冒充本切片的通过证据。三项图片人工审查已在本审查给出结果,native premerge 的原始 hold 状态仍保留。head 149fb9bb7148e3ef7ef380f3793ef04d49e4886b 已按提交核对;APPROVE 是本次源码提案的审查结论,正式发布为作者 COMMENTED,不是 GitHub 自批准或合并权限。
English verdict: APPROVE — 149fb9b; canonical receipt readback and original-host isolation verified through matched baseline/head HTTP and File/SQLite regressions. Candidate installation and full model adoption remain outside this approval; CI was not consulted.
Goal And Delivered Outcome
修复原会话返回结果的回执读回:当 Chat transcript 与 coordination runtime 分开存储时,正文已经送达,HTTP session snapshot 却从 Chat 根目录查找共享回执,导致送达状态及原请求卡片缺失。
现在 session snapshot 使用现有
coordination_runtime_root,并以原source_store核对来源。原会话读回真实回执;复制到其他 Chat host 的同名 session 不会借用该回执。main。return_delivery;候选提交能读回delivered、原请求身份及分页中的同一返回消息。Author Declaration
source_chat_observation.is_source_chat_host来源判定。ChatRequestHandler._session_snapshot、project_chat_session_snapshotproject_chat_return_deliveriesproject_collaboration、既有is_source_chat_hostScope And Continuation
本切片完整覆盖原会话读回错误与来源隔离,沿用现有 typed owner、route 和回执,没有新配置、协议字段、队列或执行入口。Python 改动属于现有 Chat I/O adapter;生命周期和交付决策继续由既有 owner 负责。
普通自然请求的完整执行、已安装客户端的后续采用,以及端到端完整成本仍属于上层集成验收;本 PR 不宣称完成这些验收。代码读回修复可单独审查、回滚,不需要把上层执行机制改动合入本切片。
Validation
149fb9bb7148e3ef7ef380f3793ef04d49e4886b;最后一次代码改动之后仅加入下方公开安全截图。6fa2cf5的初始跨 runtime HTTP 用例缺少return_delivery;相同最终 fixture 在基线会误读 Chat 本地伪回执为 verification_required,候选读回共享真实 delivered 回执tests/control_plane/test_chat_collaboration_source_runtime.py最终 16 个用例;真实 HTTP、ChatRuntimeController、隔离 File/SQLite authority,覆盖来源、分页、错误和恢复;没有执行模型test:conversation-returns,dashboard 完整 typecheck/build/chat bundle;保留既有 bundle 大小提示ok=false,仅因 3 张 PNG 的visual_evidence人工检查项;已逐张查看像素、通用 ICC 元数据及合成来源,仍需在精确 head 审查中记录,未将人工项改记为工具通过读回测试覆盖真实改动入口及两种已有存储后端;未变更 PostgreSQL authority store,不宣称新的数据库迁移或跨后端性能资格。首次 fixture 缺少 brief 的 4 个失败已修正为显式合成 brief,最终矩阵含对应反例。
Frontend / Visual Evidence
149fb9bb7148e3ef7ef380f3793ef04d49e4886b,当前 dashboard 打包构建连接隔离的真实后端;合成 conversation、provider 和结果。不是 installed readback。6fa2cf5一致;使用相同打包 UI。Type / Area / Technical Direction
Bug fix、focused regression tests、public visual evidence;既有 manager-context capability 与 Chat host integration。复用 control-plane 既有来源事实,未创建第二个决策 owner。
Shared-authority / TypeScript migration milestone claim: N/A;没有迁移或 promotion。
Boundary Checklist
Signed-off-by。