Repository navigation
fix(lark): mirror terminal App failures to the original chat - #8281
loopx-agent wants to merge 1 commit into
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 family, OpenAI, self_reported
Reviewed head 18488a3c9ebd053bdbf4484895046ff72c30b969
动机 / Motivation
用户在已连接飞书的 App 私聊提交任务时,原 Turn 有时会在模型错误、执行器故障或服务重启后失败。旧版把输入同步到飞书,却跳过 App 里的失败记录。用户在原私聊只看到问题,只能回 App 才知道这轮没有完成。新版把与原 Turn 精确匹配的终态提示送回同一个飞书私聊,保留原结束时间。隔离测试验证了历史输入补齐一次失败提示,已有输入没有重复发送。
本次交付是已有授权下的 App 到飞书失败状态同步。继续原业务、其他失败类型的续办、群聊和扩大授权分别由原路径处理。合并及安装后,还需要用真实原 Bot 的送达回执逐条独立读回;隔离通过未证明线上已补齐。
改动思路 / Approach
发现和发送共用一次消息资格规则,既有投递队列负责发送及收据,已有连接规则决定受众;这样无需写回会话或增加消费者。仅补 App 来源、确有终态错误记录的同源私聊投影。 直接转发原始错误会把诊断带出 App,还会把未确认的停止当成最终结果。只在已经有原输入、原 Turn 和终态错误三者的对应证据时生成安全正文。每次发送和恢复之前照常复核原来源与当前授权,失败后的业务执行仍由 Core 原有路径负责。
具体改动 / Changes
关键代码讲解
_web_projection_paths在原私聊授权仍启用时扫描已有记录,发现新资格后重开原投递队列,已核验的输入阶段保持原样。_web_projection_transcript用同一 Session 和 Turn 找到 App 输入;只有终态、精确错误行和结束时间一致才派生失败提示。跳过未确认停止和重复错误,诊断留在 App。_web_projection_messages核对持久原来源、会话与当前绑定后才给出投递正文,输入反馈仍只读取用户输入。_reconcile_web_projection沿原消息 ID、幂等键、来源校验和投递收据继续。已知的旧投递先读回,撤权后停止。
按原 RFC docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md(基线 172d80d630f424b0b44dd513863ba02b5f13d55c)核对:same-private-source 和 stable-projection-receipt 已实现并有测试,live-installed-delivery 留待采用后验收。同步更新中英文契约;生产 36 增 22 删,测试增 79 行,RFC 增 10 行。
对主干的风险 / Risks
主要风险是上次已写入飞书却暂时读不到收据,服务重启后再发同一提示。隔离用例验证恢复沿原 locator 读回,原输入收据不变,总计只新增一次投递;撤权场景没有写入。测试也覆盖正常答复、独立 Session、原反馈、旧停止和重复错误记录。旧版使用同一回归用例等不到失败投递,当前 head 可以读回。默认只作用于已连接的原私聊,继续使用原 Core 生命周期、投递 fence 和 provider 读回。
语义与 CI 对齐
复用已有 Turn 终态、失败类别和 outbox 消息身份。精确 head 的 9 个 App 投影回归及 quick premerge 为 PASS;真实安装和飞书回传为 UNVERIFIED。远端检查由合并门单独处理。
我的整体评价 / Verdict
长期可恢复性和用户体验都有明确增量:原历史可以自然补齐,用户可按原时间辨认失败记录。该变更复用了唯一投递队列,保留原授权和已冻结的回执,影响范围与缺口匹配。现有 App UI、飞书消息布局和交互组件不变;验证范围是私聊正文、时间、消息身份及回执。 实际上线仍需维护者批准和原服务采用,随后逐条验收原私聊收据。
English verdict: APPROVE. The reviewed head mirrors an exact App failure once in the original private chat and verifies the same receipt after recovery; live adoption remains unverified.
已连接飞书的 App 会话会同步用户输入和正常答复,但原 Turn 失败时,飞书只看得到问题。历史扫描也会跳过这些已经存在的失败记录。
App → 飞书复用原会话和投递队列:按原 Turn、终态和精确匹配的错误记录投递一条安全提示,带原结束时间,诊断详情仍留在 App。已投递的输入会保留原回执;重启后先读回旧投递。撤权后停止投递,历史补齐不会重新执行原请求。
验证:旧版复现漏发;新版隔离测试覆盖补发、重启后读回同一回执、撤权、过时错误与重复错误记录。精确提交的 9 项 App 投影回归及 quick premerge 均通过。真实安装和原私聊验收仍待合并后进行。