Skip to content

fix(chat): withhold ambiguous recovered collaboration requests - #7842

Merged
huangruiteng merged 1 commit into
mainfrom
codex/chat-recovery-duplicate-route-20261101
Nov 2, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/chat-recovery-duplicate-route-20261101

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

原回复丢失后,Chat 会从原路由恢复已提交请求的卡片。同一请求存在重复路由记录时,现有实现会把它投影为多个承诺;既有 ambiguous_route 反例在未修改主干上失败。

按同一 source client 下的 request identity 组织本次读取:重复 identity 的恢复候选保持不可用,其他接收方仍独立显示。下一次观察恢复为无歧义来源后,读回原请求;不写入聊天、不合成回复、不重发交接或结果。

  • Outcome basis: 真实失败的既有来源恢复回归;roadmap R3 / controller-executor C6 的原会话读回边界。
  • Observable before → after: 重复同一请求会重复投影 → 仅撤回该歧义请求;合法双接收方仍为两张卡片,部分歧义时保留另一方,恢复来源后仍为原两请求。
  • Intended base: loopx-project/loopx:main;独立分支实际基线 3cd4465c2d85d7fcbfc12364c15a9b0c3a4ca315。最初观察到的 main 为 a098263f,分支创建时远端 ref 已推进;两版的本 PR owner、测试及所引 RFC 字节相同,验证结果按实际基线记录。
  • 与 fix(collaboration): recover archived linked work in request readback #7836 的归档 linked-Todo 读取及 test(collaboration): keep delivery fixtures on an active source Turn #7835 的 source-store 夹具修复独立;不包含其变更。

Author Declaration

  • Written by: model_agent — OpenAI Codex (GPT-6 family).

Implemented against

  • Specification and revision: docs/architecture/rfcs/loopx-overall-roadmap-v0.md §R3;docs/architecture/rfcs/controller-executor-unified-contract-v0.md §9 / C6;版本 3cd4465c2d85d7fcbfc12364c15a9b0c3a4ca315,以及既有 lost-answer source-identity 回归。
Criterion Disposition Symbol / path Evidence
丢失回复后的承诺必须绑定可核验的原请求 implemented manager_context/presentation.py::project_collaboration 未改主干的 ambiguous_route 失败;候选通过原反例及真实 HTTP 读回
接收方独立、部分结果不能代替整批完成 implemented 同上,按 request identity 保留候选 legacy / exact source-session 两种 profile:合法双接收方→一方歧义→恢复,均保留原 identity 和另一接收方
当前 Goal instance / Session / Client / 受众与返回 authority 保持原 owner implemented 现有 _project_receipt / lifecycle / source-host 检查 完整相邻来源、批量交接和 Chat 测试通过;显式保存回复路径及非私有会话入口保持原逻辑
真实模型执行、反馈采纳、原路结果送达和长程完整成本 out_of_scope 既有 C6/C8 原交付序列 本 PR 只修已有读回;不以卡片、测试或提案认定这些验收完成
  • Self-check: Python 继续承担已有 IO/presentation adapter;TS lifecycle / receipt authority 未改。没有新状态词汇、配置、接口、scheduler、后台执行或第二个权威账本。局部候选归一化使用现有函数内字典,歧义只保存在本次观察内;没有新增无调用方抽象。

Scope And Continuation

本范围完整:已提交请求在原回复缺失时的重复候选处理,保留正常恢复、其他接收方及后续恢复。source 请求与聊天、停止状态和欠结果关系不变。现有发现窗口的边界保持原值,不宣称无限历史资格。独立可回退,无迁移。

完整 controller/executor 交流、安装后自然使用、实际采纳与成果完整成本继续原路线;本 PR 不增加独立后继任务或关闭父级验收。无 merge、安装或发布操作。

Validation

  • Tested revision: b216e4a7e76365d4d31deaa03d2cd5b05869c632(提交前运行使用同一源码)。
  • Run state: finished.
  • Input classes: synthetic, public_fixture.
Check kind Result Public-safe evidence / limitation
regression_parity passed 实际基线 3cd4465c 的既有 ambiguous_route 反例失败;候选完整保留该断言并通过,未改为忽略、去重后伪称来源已核验或跳过
integration passed 针对正常丢回复、来源不匹配、重复、partial batch 和恢复的 15 项通过;随后完整 test_collaboration_goal_instance.py、test_chat_multi_handoff.py、control_plane/test_chat_multi_recipient.py、test_chat_manager_context.py 共 125 项通过
real_entrypoint / real_backend passed 原生 HTTP 读回使用实际 ChatSessionStore / inbox / routes / registry 及真实 TS lifecycle;legacy 与 exact source-session 均覆盖;单测 HTTP helper 的 Host liveness 是固定夹具,未据此宣称真实宿主退出恢复
manual / packaged passed 当前构建的 Chat +隔离 source-session registry / 实际 ChatRuntimeController、store 和 HTTP:同一合成数据 2→1→2 卡片读回;原源记录、聊天及 response=None / failed Turn 不变。1440×1000 和 390×844 实查,窄屏无页面横向溢出。POST 全部拒绝、无模型或外部 provider 调用
static passed Ruff、diff hygiene、staged bilingual RFC diff 检查;diff-scoped semantic advisory 没有支持的新 carrier(其分析范围有限)
packaged passed npm run build:chat,现有 chunk 大小警告保留;最初从仓库根调用缺脚本的设置错误单列,正确目录构建成功
real_entrypoint passed standard loopx canary premerge --from-git-diff --git-diff-base origin/main:diff / bilingual、改动 Python 编译、maintainability 与 semantic catalog canaries 全通过;未选中额外 risk-profile smoke,覆盖依据为上述完整 owning suites 和实际页面旅程
manual failed 首次浏览器恢复检查被过早关闭的自有夹具后端中断,保留该失败;复用同一 Agent-owned TaskSpace,另一个隔离数据集完整重复 2→1→2 并检查原 identity / 源不变后才关闭。该次中断不被改记为通过
real_backend not_run 无 PostgreSQL 实例资格、外部 Lark provider、installed host 或真实模型执行验证;未修改 authority store / provider,不能由本地来源读回推定这些通过

Visual Evidence

  • UI code / layout impact: none;变化是现有卡片的恢复数据。实际桌面和窄屏已检查,原问题、接收方、待采纳及回传关系保持可读;歧义时仅撤回相应卡片。
  • 依 visual-evidence-retention 对未改视图复用既有规范图片,不提交一次性截图包。以下是 3cd4465c 的既有文档示例,说明未改的多接收方布局;不是本次运行截图或 installed 资格。本次合成运行的版本、状态变化和边界见上表。

既有多接收方会话布局

Type of Change

  • Bug fix
  • Test update

LoopX Area

  • Capability or extension — manager-context builtin local adapter

独立 exact-head review、CI 和所需 merge readiness 仍待各自流程;本 PR 不授 merge 权限。

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.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning effort: max

没有发现当前提交的阻塞问题,结论 APPROVE。

动机 / Motivation

用户返回原始对话,查看一次交办中多个接收方各自的待处理承诺。 当原回答丢失且一个请求有重复 route 时,旧版显示重复交办卡;新版只隐藏该歧义请求,另一接收方保持可读,歧义解除后原卡恢复。 同一 HTTP 夹具在基线为 2→3→2 张卡,当前为 2→1→2 张卡;请求、接收方、原会话和 Turn 身份保持,原消息与 route 字节不变。 本 PR 修复已有承诺的展示恢复,不授予新权限,不发送消息,不改写 Chat,也不证明接收方已采用或任务已完成。

改动思路 / Approach

在已有展示适配器内重建请求唯一性,复用原身份验证;持久去重或新生命周期会增加无用状态。 当前边界是原始对话的只读承诺恢复修复;发信、编辑授权、接收方采用、任务验收及父级 R3/C6 仍归各自 owner。 对同一原始请求的候选 route,只有唯一来源才能恢复承诺;重复候选使该请求在当前观察中无效。另一个接收方的请求使用另一键,不会一起被隐藏。下一次读取重新计算,删除歧义源后即可恢复,不增加重新交办或确认轮次。

保持现状会保留实际重复承诺;按整个 Turn 丢弃会伤及独立接收方;first-wins 不能证明来源唯一。当前改动只补上原 reader 缺少的一步聚合,不需要持久去重表、第二套权限、独立 UI 或无关语言重写。

具体改动 / Changes

  • project_collaboration:只在原回答丢失时发现当前来源 route,原 session/client 筛选后按 request_id 聚合;重复项设为本次读取的歧义值,不传给恢复循环。原始响应中的 receipt 优先级不变。
  • _project_receipt:继续核对已提交请求、来源、会话、Turn、接收方和 Goal instance;聚合没有替代该验证。HTTP snapshot 只将卡附于原消息,没有合成答复或改写消息。
  • 完整差异为生产 +11/-2、既有集成测试 +41,合计两文件 +52/-2。新测试覆盖 legacy/exact 两类来源、歧义时保留第二接收方及歧义消除后的恢复;原有错误会话、client、receipt、entry 等反例仍执行。

接受依据为 docs/architecture/rfcs/loopx-overall-roadmap-v0.md,spec_revision=3cd4465c2d85d7fcbfc12364c15a9b0c3a4ca315,criterion_id: R3。R3 对原来源、原会话和独立接收方的要求在这个修复边界 implemented;没有宣称整个 R3/C6 或用户任务完成。

对主干的风险 / Risks

真实 HTTP 对照使用相同合成夹具和 handler/controller/ChatStore/native authority:基线 2→3→2,当前 2→1→2,均为 HTTP200;原消息及原 route 字节不变,恢复卡仍指向原 Session/Turn/接收方。基线退出1、当前退出0,fixture SHA-256=5da53be91725fdea9ac0649b22e7b2543f0e005f93a16450d04186d9e111c193。这是真实旧缺陷的敏感性检查,不是让新 helper 与自己比较。

当前提交四个完整相关模块 125 passed;五个原 damage 场景在基线有 ambiguous_route 一个失败,当前完整模块通过。Ruff 通过;原生 premerge 六项直接检查与两个选中 catalog canary 通过。当前 TypeScript/Vite Chat 构建通过,保留已有 bundle-size warning。没有查询、轮询或等待远端 CI。

我的整体评价 / Verdict

当前构建的原始管家会话中,两张交办卡的目的、接收方及待处理状态可同时辨认;默认折叠、完整展开及歧义解除后的恢复均已实看。 在实际构建、真实只读后端及合成数据上,桌面默认两卡、展开的长重复中英背景及验收内容、歧义重载的一卡、400px 恢复两卡与展开下部均已检查。目的/接收方/当前未知状态位于详情前,正文和第二接收方独立可达;没有从无横向溢出推导整个页面质量。

安装版、真实模型、生产资料排序与请求编辑/取消的完整后端未验证;隔离 source_session 夹具的旁栏状态和控制读取限制仍明确显示。 预览的全部 POST/DELETE 均关闭,故没有发信、确认、取消或模型执行。初始预览缺少 native entry binding,补齐现有 bindings reader 后实际原始管家会话可读;旁栏 source_session 状态限制仍保留,不归因为本 PR。安装、Host/接收方采用、后续有用成果和完整成本均未验证。

当前边界是原始对话的只读承诺恢复修复;发信、编辑授权、接收方采用、任务验收及父级 R3/C6 仍归各自 owner。 CQR、closeout/readiness 与合并授权仍是独立门,本评审不授予合并权。

English verdict: APPROVE at b216e4a — per-request ambiguity no longer invents duplicate commitments or hides an independent recipient; real HTTP and rendered recovery pass within the disclosed synthetic boundary.

@huangruiteng
huangruiteng merged commit b236a34 into main Nov 2, 2026
34 of 42 checks passed
@huangruiteng
huangruiteng deleted the codex/chat-recovery-duplicate-route-20261101 branch November 2, 2026 03:22
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