Skip to content

fix(chat): preserve original conversation receipt readback across runtimes - #7639

Merged
huangruiteng merged 2 commits into
mainfrom
codex/semantic-return-readback-20261029
Oct 29, 2026
Merged

huangruiteng merged 2 commits into
mainfrom
codex/semantic-return-readback-20261029

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

修复原会话返回结果的回执读回:当 Chat transcript 与 coordination runtime 分开存储时,正文已经送达,HTTP session snapshot 却从 Chat 根目录查找共享回执,导致送达状态及原请求卡片缺失。

现在 session snapshot 使用现有 coordination_runtime_root,并以原 source_store 核对来源。原会话读回真实回执;复制到其他 Chat host 的同名 session 不会借用该回执。

  • Outcome basis: 可复现的跨 runtime HTTP 读回缺陷;目标分支 main。
  • Observable before → after: 基线的跨 runtime HTTP 测试缺少 return_delivery;候选提交能读回 delivered、原请求身份及分页中的同一返回消息。

Author Declaration

Criterion Disposition Symbol / path Evidence
返回结果保留原会话和请求身份 implemented ChatRequestHandler._session_snapshot、project_chat_session_snapshot 真实 HTTP + File/SQLite,同目录/分离目录及冻结分页
状态来自已有共享回执,读取不执行原工作 implemented project_chat_return_deliveries 丢失回执显示 queued,恢复后同一消息显示 delivered;JSON 状态逐字节不变
其他 Chat host 不借用原来源状态 implemented project_collaboration、既有 is_source_chat_host 复制 session、Chat 本地伪回执、损坏来源 route 的反例

Scope And Continuation

本切片完整覆盖原会话读回错误与来源隔离,沿用现有 typed owner、route 和回执,没有新配置、协议字段、队列或执行入口。Python 改动属于现有 Chat I/O adapter;生命周期和交付决策继续由既有 owner 负责。

普通自然请求的完整执行、已安装客户端的后续采用,以及端到端完整成本仍属于上层集成验收;本 PR 不宣称完成这些验收。代码读回修复可单独审查、回滚,不需要把上层执行机制改动合入本切片。

Validation

  • Tested revision: 149fb9bb7148e3ef7ef380f3793ef04d49e4886b;最后一次代码改动之后仅加入下方公开安全截图。
  • Run state: finished。
  • Input classes: synthetic、public_fixture;公开证据仅使用合成数据。
Check kind Result Evidence / limitation
regression_parity passed 基线 6fa2cf5 的初始跨 runtime HTTP 用例缺少 return_delivery;相同最终 fixture 在基线会误读 Chat 本地伪回执为 verification_required,候选读回共享真实 delivered 回执
real_entrypoint / real_backend passed tests/control_plane/test_chat_collaboration_source_runtime.py 最终 16 个用例;真实 HTTP、ChatRuntimeController、隔离 File/SQLite authority,覆盖来源、分页、错误和恢复;没有执行模型
unit / integration passed 83 个既有 roundtrip 用例;邻接套件初跑 100 pass、29 fail,失败均来自旧 HTTP fixture 缺少既有 controller 字段;补齐 fixture 后原 29 个失败用例全部通过,未删除或放宽原断言
static passed 5 个改动 Python 文件 Ruff、配置内 17 个源码 mypy、TypeScript control-plane typecheck、语义差分 advisory、完整 semantic drift smoke、双语 RFC 检查
integration passed test:conversation-returns,dashboard 完整 typecheck/build/chat bundle;保留既有 bundle 大小提示
static / integration passed 标准 premerge 的 6 项直接检查及 7 项 catalog 检查通过;当前范围 change-quality receipt 有效
manual blocked premerge 整体 ok=false,仅因 3 张 PNG 的 visual_evidence 人工检查项;已逐张查看像素、通用 ICC 元数据及合成来源,仍需在精确 head 审查中记录,未将人工项改记为工具通过
static / manual passed 5 个源码文本公共边界扫描无命中;二进制 PNG 不在文本扫描能力内,显式全文件文本扫描曾因 PNG 非 UTF-8 失败,未作为通过证据
real_entrypoint not_run 没有安装候选版本、重启现用服务、启动真实模型,或宣称生产采用与完整成本验收;本次未查询 CI

读回测试覆盖真实改动入口及两种已有存储后端;未变更 PostgreSQL authority store,不宣称新的数据库迁移或跨后端性能资格。首次 fixture 缺少 brief 的 4 个失败已修正为显式合成 brief,最终矩阵含对应反例。

Frontend / Visual Evidence

  • UI impact: changed,既有送达状态恢复显示;布局与前端代码未改动。
  • Tested revision: 149fb9bb7148e3ef7ef380f3793ef04d49e4886b,当前 dashboard 打包构建连接隔离的真实后端;合成 conversation、provider 和结果。不是 installed readback。
  • Before: 后端三个改动文件与基线 6fa2cf5 一致;使用相同打包 UI。

Before: original returned body without receipt status

  • After, desktop 1512×982:

After: returned body and delivered receipt

  • After, narrow 390×844:

After: narrow original conversation readback

  • Source data: synthetic;本地隔离预览已关闭,无可分享在线预览。
  • Attention / craft review: 首屏以原问题及完整返回正文为主,送达状态附在结果下方;窄屏正文和状态可读,无横向溢出。没有添加说明段落、额外分组卡片或新状态词;其他页面与长列表未作本次视觉资格声明。

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

  • 差分、说明和截图不包含私有状态、原始轨迹、凭据、内部链接或本机路径。
  • 变更限于已有来源的回执读回,保留其他 owner 的工作边界。
  • 没有修改成对 RFC;双语差分检查通过。
  • 已提供当前 head 的桌面前后对比及窄屏截图。
  • 两个提交均有 DCO Signed-off-by。

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 loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@huangruiteng
huangruiteng merged commit 0f57455 into main Oct 29, 2026
17 of 38 checks passed
@huangruiteng
huangruiteng deleted the codex/semantic-return-readback-20261029 branch October 29, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants