Skip to content

fix(chat): resume unsubmitted native handoffs with one bounded format review - #7863

Merged
loopx-agent merged 3 commits into
mainfrom
codex/native-metadata-review-20261102
Nov 2, 2026
Merged

loopx-agent merged 3 commits into
mainfrom
codex/native-metadata-review-20261102

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

When an original native answer is restored after a Core transport failure, malformed delegation metadata can remain pending with no automatic next step. This change lets the original private steward queue reserve one text-only format review, preserving the original source, recipients, brief context, failure notice and recovered prose.

The invocation disables native tools and hooks. Current source/grant/native evidence and queue checks precede admission and publication; changed recipients, added actions, new input, stop, revocation and unknown native completion hold the request. The normal handoff and original reply owners provide actual receipts. Failed or partial reviews remain pending without another business retry.

Validation: 16 synthetic HTTP/provider journeys cover two recipients, crash correlation, duplicate scans, changed targets/briefs, extra actions, revocation, stop, uncertain sends and native tool/completion faults. A receiver conclusion also returns through the original private source without another model Send. The same journey tests on the base produce 13 expected failures and 3 hold controls. Python syntax and 49 TypeScript checks pass. Broader native/Lark regressions passed 529 checks before the final owner extraction. The final extraction passed 24 owner checks; the exact head passed TypeScript typecheck and 6 direct plus 11 selected premerge checks. Installed behavior remains to be verified after normal adoption.

Scope: native Chat recovery and existing Lark reply path; paired RFCs updated. No new queue, consumer, source grant or standalone setting. Ordinary requests retain their current execution policy. Recovered prose and handoff receipts do not establish completed receiver business.

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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 (Codex) | OpenAI | self_reported

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

动机 / Motivation

私聊管家的用户在原生执行已结束、Core 却记录传输失败时,会收到补回的正文,但其中格式错误的委派仍可能没有提交。 此前正文恢复后就停止跟进;现在原回复 worker 可以在原队列预约一次禁用工具的格式复核,再返回实际委派回执。 合成 HTTP/provider 路径验证了两个原接收者各收到一条原来源请求,接收者结论沿原私聊回传;没有再次执行原业务请求。 本次不重放未知效果、不代接收者完成业务,也不证明所有积压已办结或真实部署已经通过验收。 真实模型复核和真实 provider 回执仍须在正常采用后单独验收;其他错误动作与保护门继续保持待办。

改动思路 / Approach

资格判断留在既有 typed owner,模型/轨迹 IO 留在 native owner,投递和回传复用原 Inbox;没有第二队列或新的权限模型。 当前 PR 只完成已恢复原生正文中原委派的一次受限格式复核和真实回执返回,不代表接收者业务或全部积压闭环。 这比静默包装 brief 更可审查:原文本必须完整保留在 context,目标与顺序也不能变化;比重试原请求更窄,因为这次原生调用强制禁用工具和用户 hooks。预约写入既有 request journal,并使用原来源的稳定 client identity。崩溃后只修复同一个队列 Turn 的关联,不重新解释已经发生的业务效果。对普通请求,这些格式说明和新的回复阶段都不会出现。

具体改动 / Changes

以修改前的 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md 为依据,spec_revision 为 111519af76e56141c56eb7a27443da59def775b9。段落映射如下:original-source-correlation 核验原 binding、source 和 Turn;immutable-original-failure 保留原失败、事件与已送正文;no-unknown-business-replay 禁工具且不重做业务;original-inbox-readback 沿原 Inbox 与 provider 回执返回。四项在当前 head 均 implemented;新增 RFC 段落只披露本次扩展,不充当修改前的独立规范。

关键代码讲解

  • planNativeMetadataReview 在原答复确实已恢复并送达之后,验证原始 envelope 的 hash、目标集合、当前 source 和空闲队列。资格与保留欠办仍归 typed owner,Python 没有另造一个重试判断器。
  • execute_turn 保持普通 adapter 调用,只收窄持久预约的格式复核;它再次核对原证明,隐藏未经验证的模型正文,并在整个目标/原 context 校验通过后返回可提交的 metadata。
  • AntigravityAdapter.start_turn 对此次 Send 禁用 native tools/hooks;观察到工具、混合 execution 或非正常结束时不承认结果。原 profile 和 thread 保留,后续普通调用不继承这个收窄标记。
  • reconcile_request 区分旧恢复正文与新队列 Turn,沿原回复 worker 返回实际回执。接收者结论单独回到原私聊,已读、原文中的送达声称和 Todo 状态均不能替代该结论。

对主干的风险 / Risks

没有发现阻塞性问题。最强反例是“复核看似合法,却换了目标、夹带被解析器丢弃的动作,或原生实际调用了工具”。这些反例分别注入并通过:整个 metadata batch 在投递前校验,错误场景没有 Inbox entry;未知 Send 仍欠办,重复扫描也不会变成业务重试。原 Turn、事件、失败通知和已回正文都做了保留比较。两条已验证委派回执不等于两项接收者业务完成。

PASS:当前 owner 24 项(16 个复核场景与 8 个原正文恢复场景)、49 项 TypeScript 检查、TypeScript typecheck、6 个 direct 与 11 个 selected premerge 检查。完整原生/Lark 回归在最终 owner 抽取前通过 529 项;最终移动的调用边界另由当前 24 项覆盖。相同 fixture 在基线出现 13 个预期失败、3 个等待控制通过;typed 基线为 1 个预期失败、48 个控制通过。初次模块上限失败通过把执行移回 native owner 解决,没有提高限额;缺失开发依赖通过锁文件安装解决。CI 按当前合同不查询、不等待。

语义与 CI 对齐

本次扩展既有 recovery journal 的局部 metadata variant,复用原 brief schema、source/recipient request identity 和 provider intent。diff advisory 的分析范围已说明,完整 semantic-vocabulary 检查通过。新字段是预约事实或当时证明的冻结快照;队列与欠办视图仍从 canonical 状态推导。PR #7856 是原生正文采用的已合并前置;#7859 修改引用消息摘取,不能替代这条续办链路。真实模型输出及真实 provider 投递仍是采用后的独立验收范围。

我的整体评价 / Verdict

这是 justified_increment:long_horizon 与 user_experience 在合成真实调用边界上 improved,分别体现在欠办可继续但不会无限业务重试,以及实际回执/接收者结论沿原对话返回。资格判断留在既有 typed owner,模型/轨迹 IO 留在 native owner,投递和回传复用原 Inbox;没有第二队列或新的权限模型。 当前 PR 只完成已恢复原生正文中原委派的一次受限格式复核和真实回执返回,不代表接收者业务或全部积压闭环。 兼容性保留对应实际旧 journal/消息/回执;已合并重复原生 proof 读取,并将执行从大 runtime 模块移回 native owner。当前范围与所解决的持久欠办相称,没有把 provider 可用、包已安装或格式校验通过写成业务完成。后续真实模型拒绝或权限变化应保持原 gate,不可增加权限来追求“自动完成”。

English verdict: APPROVE — head af5b882; no blocking finding. Bounded original-source format review and no-replay/return invariants pass local checks; live model/provider adoption remains a separate validation boundary.

@loopx-agent
loopx-agent merged commit 8a9e116 into main Nov 2, 2026
9 of 12 checks passed
@loopx-agent
loopx-agent deleted the codex/native-metadata-review-20261102 branch November 2, 2026 01:10
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.

1 participant