Skip to content

fix(collaboration): explain delegation receipt conflicts on demand - #7644

Merged
huangruiteng merged 1 commit into
mainfrom
codex/delegation-receipt-readback-20261029
Oct 29, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/delegation-receipt-readback-20261029

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

原对话回执指向另一条委派时,旧请求会被拒读,界面却只显示“部分记录无法核验”。这次把既有 typed lifecycle 的冲突原因保留到 inventory,并在计数旁原有警示图标中按需展示具体请求、Goal 和 Agent。

  • 只有来源、原路和实例已匹配的 handoff_receipt_conflict 才提供身份诊断,最多 12 条;缺口计数仍反映全部未核验记录。
  • 交办正文、工作与完成状态继续受原读取资格约束;来源授权变化会收回整个读回。取消、修订、恢复与原路返回仍走原有拒绝规则。
  • 刷新重新核验来源,历史文件保持原样。较新一次交办不会据此取消旧委派。旧 backend 未提供诊断字段时,前端仍可读取。
  • 接入已进入 main 的分页界面,复用原有警示图标,不添加常驻说明段落;补充 owner 文档与自修复排查条目。

验证:73 项 File/SQLite 真实 HTTP、权限、修订恢复及 native ingress 回归,12 项 TS lifecycle 测试,control-plane 类型检查、Ruff、前端构建、双语 RFC diff 检查均通过。测试覆盖冲突身份读回、正文/操作拒绝、来源与关闭时授权变化、后续交办、原证明恢复、13 条冲突的展示上限和分页快照一致性。初轮发现测试辅助路径及不支持的查询参数,已修正测试后重跑通过。公共边界扫描通过,仅报告既有非字面量 credential 引用提示;截图另经人工检查。

这是一项可诊断性修复。历史缺失证明的恢复、已安装宿主采用和整段历史读取性能仍需分别验收。此 PR 未做安装或合并,CI 结果以当前 head 为准。

视觉证据来自真实 Ego Lite、打包 Chat 前端及隔离 SQLite/Chat/Inbox:43 条合成委派、2 位接收方、长正文与混合状态;所有 POST 均被 fixture 拒绝。已验证桌面、390px 触控、键盘/Escape/焦点、更多记录、断连重试、来源恢复及可滚动的 12 条诊断。正常 finish 只关闭本次受管页面。

测试代码为 5a0049189b8cd5148550b3b0896531ad60029e39,基线为 5d7f0a61b0b79876801c05e1d26352687f270794。前后图均使用同一候选后端;前图仅使用基线前端,不能作为后端性能或已安装 App 的对照。

原因提示:之前(1716×995) 原因提示:之后(1716×995)
之前 之后

默认界面(1716×995):

默认界面

窄屏触控(390×844):

窄屏诊断

…stics

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; reasoning_effort=max.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

在管家对话查看自己已委派请求的用户,需要知道哪些记录为何无法核验。原对话回执指向另一条委派时,旧列表只给出笼统缺口;新版在原有警示图标内显示已授权请求的具体冲突原因,并继续拒读其内容。同一冻结 HTTP 探针在 base 的 File/SQLite 两侧均因缺少身份诊断失败,在 head 两侧通过;冲突操作仍400、越权来源不返回身份、原凭据恢复后重新读出请求。不修复历史凭据、不推断取消或完成、不接受/启动接收方工作、不新增请求控制权,也不证明已安装用户旅程或长期协作收益。尚存缺口:Historical repair and installed environment remain outside this diagnostic slice; no new follow-up or parent completion is asserted.

改动思路 / Approach

复用既有来源证明与 ContextHelp,只保留结构化拒绝原因即可交付可诊断读回;另建错误台账或请求控制协议没有必要。本 PR 只把既有 typed lifecycle 的冲突原因投影到当前来源可见的 inventory 和原有按需说明;控制与内容拒读保持。

TypeScript先证明请求、原路、来源及实例相符,只有 original_request_inspect 的特定回执冲突才带诊断。Python仍沿既有权限与请求锁读取,保留 typed拒绝,最多投影12条身份;所有未知记录继续计入缺口。API在发送前再次核对权限。前端复用原图标,用户自愿展开时才能看到原因,既无新增默认说明块,也无新增必答或确认轮次。

具体改动 / Changes

完整13文件评审绑定 head 5a00491,实际 merge base 5d7f0a6。包含 runtime/UI、测试、能力文档、按需修复参考和4张视觉资产,未把截图当权限或持久化证明。

关键代码讲解

  1. withOriginalRequestDiagnostic 只给已通过前序来源/路由证明、随后因回执冲突而拒绝的 inspect增加一个 reason。return admission/settlement不获得这项放宽,原拒绝 kind/code保持。
  2. CollaborationLifecycleRejected 是原 ValueError 的子类,保存结构化决定;既有捕获和错误文字仍成立,无须从字符串猜测原因。
  3. read_conversation_requests 在已验证来源和请求锁内收集最多12条诊断,继续拒读内容。coverage进入既有 snapshot digest;13条冲突仍报告13条缺口,分页不会把未列出的诊断当作不存在。
  4. ConversationRequests 的警示说明 展示缺口数、原因及完整标识;Zod对旧后端缺少 diagnostics 的响应补空数组。ContextHelp的换行、滚动及触控尺寸保持既有实现。

规格依据是 loopx/capabilities/manager_context/README.md 在 5d7f0a6 的原文,并对照同版本 design.md 的按需说明和 populated-page review:

  • “Current binding and Goal visibility”:implemented;读前、读后核对当前来源与权限,改变关闭权限时整份响应400且不泄露身份。
  • “does not mark reads, accept work, start an Agent or certify an overall outcome.”:implemented;诊断不更新原文件,冲突时 revise/cancel/recover仍400,接收方和结果回传权威未改。
  • “Unreadable/missing sources and incomplete scans”:implemented;保留完整缺口数、扫描不完整状态和有界诊断,未把0条可读记录当作任务完成。

对主干的风险 / Risks

最危险的是为了可诊断而泄漏另一来源的请求身份,或允许用户操作未经核验的原请求。独立冻结探针通过真实 HTTP分别运行 File和SQLite:base两侧均只在“诊断身份缺失”的断言失败;head两侧通过完整冲突、内容拒读、控制400、变更来源不返回身份、源文件字节不变、恢复原始凭据后重新读出请求的检查。另有22个 inventory、6个control、12个TS用例通过,覆盖关闭权限变化、后续新委派不取消旧请求及13条缺口/12条详情的分页边界。全control-plane typecheck、Ruff及真实 packaged Chat build通过,未查询或等待CI。

标准premerge的19项自动选择为0 failures,但原始退出码是1、状态 manual_review_required,原因是4张PNG不能由文本扫描替代隐私审查。我逐张检查了实际像素、文件元数据和合成来源:没有私人消息、路径、凭据或内部上下文;PNG无文字/EXIF附件,窄屏额外的ICC仅为Google Display P3色彩配置。该人工检查已经完成,不能把原始退出码写成自动通过。build仍有既有大chunk提示,未因此改动无关打包行为。

语义与 CI 对齐

这是对既有拒绝词汇的窄扩展,不是新增持久化状态或通用生命周期协议。诊断由现有证明推导,默认缺失不表示不存在请求;按需修复参考不自动加载成全局策略,也不产生执行许可。当前授权与未授权主体、同容器后续请求、越权尝试和恢复读回均已对照,通用控制规则没有产品/业务关键词分类。

我的整体评价 / Verdict

APPROVE。长程协作的原始承诺、来源权威和独立请求关系保持;用户体验改善且没有额外必需交互。默认列表由请求、状态和时间主导;新增原因只在原有图标展开,完整标识在窄屏可换行,详情未挤入默认列表。此diff未改变响应式布局或CSS;额外检查了窄屏展开,未重拍窄屏默认状态。检查了43条合成请求、两个接收方及混合状态的1716×995默认/展开/前后截图和390×844展开截图,并核对exact-head资产与未变组件;当前源码重新打包通过。

未重复作者浏览器交互或已安装环境;12条诊断的计数/分页由真实HTTP用例验证,截图只覆盖1条展开的实际排版。没有材料问题需要由截图推断为已通过。当前范围与现有owner匹配,有界诊断和原有说明组件已经是更小的可用解法;合并、安装和更广泛协作收益仍分别验证。

English verdict: APPROVE at 5a0049189b8cd5148550b3b0896531ad60029e39. Real File/SQLite HTTP counterfactuals preserve source isolation, refusal and recovery while exposing the bounded conflict explanation. Automated checks and manual image privacy inspection are distinguished; installed adoption is not claimed.

@huangruiteng
huangruiteng merged commit 3267f91 into main Oct 29, 2026
23 of 41 checks passed
@huangruiteng
huangruiteng deleted the codex/delegation-receipt-readback-20261029 branch October 29, 2026 09:04
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