Skip to content

[阶段 4] 完善服务调用的错误修正与恢复执行 #3664

Description

@louis4li

用户可见结果

父 issue:#3660。依赖 #3663,在 #3661 / #3662 / #3663 已可用的读取、写入和多服务路径上补齐恢复行为。

遇到参数错误、授权失效、限流或超时,系统可以解释停在哪里,按明确规则修正或继续任务,不把失败当成功,也不重复产生副作用。

实施范围

  1. 收敛强类型错误与执行结果分类:参数可修正、需要重新授权、权限不足、限流、暂时不可用、执行失败、结果不确定。
  2. 参数错误允许有限次数修正;缺失业务信息向用户澄清;拒绝权限不通过切换账号、来源或 raw proxy 绕过。
  3. 仅对可安全重试的读取或明确支持幂等的操作重试,遵守下游退避提示、尝试上限和执行期限。
  4. 写操作发送后的连接中断或超时,先按现有回执/下游可查询结果处理;无法确定时明确报告,不自动重复执行。
  5. 重新授权后沿用任务的明确服务身份和操作意图继续,重新验证当前权限,不静默切换账号、skill 最新版或操作定义。
  6. 跨请求恢复事实由既有 actor/分布式机制拥有,内部契约使用 Protobuf;延迟和重试通过事件化 continuation 推进,结果沿同一流式观察主链反馈。

授权缺口恢复边界

默认发现仅展示当前身份可用实例;只有任务所需服务缺失或调用返回明确错误时才进入目标相关诊断。重新授权必须区分应用服务 grant、下游 OAuth scope、资源 ACL 和私有 skill 读取权限,不能把“缺少 skill refs”、所有 403 或节点离线统一解释为需要加权限。

有明确证据时只引导当前任务需要的最小变更;没有证据时报告当前未发现可用连接或原因未核实。不得自动扩大 grant、请求所有服务或借用另一个身份。用户完成所需处理后,重新读取当前实例和已有权限再继续;成功恢复服务权限不代表 skill 读取也自动获得授权。

验收

  • 参数修正有界,反复错误能终止并解释原因。
  • skill 推荐缺失、私有 skill 访问失败和服务权限问题不会混淆;恢复引导只针对已证实的具体缺口。
  • 授权恢复可以继续任务,权限拒绝不会绕过,服务身份保持一致。
  • 限流与暂时故障遵守重试边界,无无限重试或多层重复重试。
  • 写操作“已执行但响应丢失”不会被当作普通失败自动重复提交。
  • 取消、过期及陈旧 continuation 不会继续执行;故障恢复不依赖进程内会话映射。
  • 失败与恢复均可通过对话结果观察,未获证据时不宣称成功。
  • 使用确定性测试覆盖恢复,遵守测试稳定性门禁;更新文档并通过相关 build/test 与架构门禁。

非目标

增加默认逐次人工审批、承诺外部服务永不失败、或对无幂等支持的第三方 API 承诺 exactly-once。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions