Repository navigation
fix(chat): withhold ambiguous recovered collaboration requests - #7842
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.
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.
Goal And Delivered Outcome
原回复丢失后,Chat 会从原路由恢复已提交请求的卡片。同一请求存在重复路由记录时,现有实现会把它投影为多个承诺;既有
ambiguous_route反例在未修改主干上失败。按同一 source client 下的 request identity 组织本次读取:重复 identity 的恢复候选保持不可用,其他接收方仍独立显示。下一次观察恢复为无歧义来源后,读回原请求;不写入聊天、不合成回复、不重发交接或结果。
loopx-project/loopx:main;独立分支实际基线3cd4465c2d85d7fcbfc12364c15a9b0c3a4ca315。最初观察到的 main 为a098263f,分支创建时远端 ref 已推进;两版的本 PR owner、测试及所引 RFC 字节相同,验证结果按实际基线记录。Author Declaration
Implemented against
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 回归。manager_context/presentation.py::project_collaborationambiguous_route失败;候选通过原反例及真实 HTTP 读回_project_receipt/ lifecycle / source-host 检查Scope And Continuation
本范围完整:已提交请求在原回复缺失时的重复候选处理,保留正常恢复、其他接收方及后续恢复。source 请求与聊天、停止状态和欠结果关系不变。现有发现窗口的边界保持原值,不宣称无限历史资格。独立可回退,无迁移。
完整 controller/executor 交流、安装后自然使用、实际采纳与成果完整成本继续原路线;本 PR 不增加独立后继任务或关闭父级验收。无 merge、安装或发布操作。
Validation
b216e4a7e76365d4d31deaa03d2cd5b05869c632(提交前运行使用同一源码)。3cd4465c的既有ambiguous_route反例失败;候选完整保留该断言并通过,未改为忽略、去重后伪称来源已核验或跳过test_collaboration_goal_instance.py、test_chat_multi_handoff.py、control_plane/test_chat_multi_recipient.py、test_chat_manager_context.py共 125 项通过response=None/ failed Turn 不变。1440×1000 和 390×844 实查,窄屏无页面横向溢出。POST 全部拒绝、无模型或外部 provider 调用npm run build:chat,现有 chunk 大小警告保留;最初从仓库根调用缺脚本的设置错误单列,正确目录构建成功loopx canary premerge --from-git-diff --git-diff-base origin/main:diff / bilingual、改动 Python 编译、maintainability 与 semantic catalog canaries 全通过;未选中额外 risk-profile smoke,覆盖依据为上述完整 owning suites 和实际页面旅程Visual Evidence
3cd4465c的既有文档示例,说明未改的多接收方布局;不是本次运行截图或 installed 资格。本次合成运行的版本、状态变化和边界见上表。Type of Change
LoopX Area
独立 exact-head review、CI 和所需 merge readiness 仍待各自流程;本 PR 不授 merge 权限。