| F1 | 模型直接调 builtin_node_approval,绕过写工具的参数校验 | 方案 A:WriteGateInterceptor 拦下时记录待批调用(NodeNoteKey.GATED_WRITE,绑定后参数和摘要);ControlBuiltinTools.approval 只接受被拦下、且工具名一致的调用,去掉 arguments 参数;新增错误码 APPROVAL_NOT_GATED(42245) |
| F2 | 用户补参后续跑,已回答的 FOLLOW_UP 断点仍投影在 <repair> 里,诱导模型重复追问 | ReactProjectionFactory.repair() 不再投影 FOLLOW_UP 断点。2026-10-11 R2 后 <repair> 块已删除,等待中的断点改由 <checkpoint> 块投影 |
| F3 | 意图分类空响应直接降级为 UNCERTAIN | DefaultIntentClassifier 空正文重试一次(MAX_ATTEMPTS = 2)。2026-10-12 已撤销:重试解决不了根因,空响应交调度器兜底,根因随 Q8 处理 |
| F4 | 追问问题只在工具参数里,节点历史里没有,续跑时问答断开 | DefaultReActLoop 在节点以 FOLLOW_UP 挂起退出、且模型那步正文为空时,把追问问题补记为本节点 AGENT 消息(appendNodeReply)。已由 F14 的节点动作记录取代 |
| F5 | 拒绝编造值时一律挂 PROVENANCE_REJECT 义务,把提示里要求先调用的查询工具也拦掉 | ParamContractInterceptor.syntheticObligation:契约要求先查证据时挂 CALL_TOOL 义务。2026-10-11 R2 删除补参义务后不再适用:拒绝观测的"下一步"直接给出先调的查询工具 |
| F6 | 契约 from: shared.* 没有任何写入方、每个工具复制整块 args、可选参数配 missing 等 | 按 SKILL_AUTHORING_GUIDE 重写 11001–11004 的 skill_contract(studio 种子 SQL) |
| F7 | 新对话、补参回复等场景偶发"是否交给其他数字员工"(原 Q11) | 意图路由重构,见 INTENT_ROUTING.md:补参在入口按 REPLY 续跑;意图模型按场景判断且不输出 UNCERTAIN;分类失败按场景兜底并记录原因;该文案仅用于待确认写操作 |
| F8 | 写操作被闸门拦下要求确认后,模型反复调用写工具直至停滞失败;申请确认时工具名不一致,提示给的是错误工具名(原 Q5) | 工具结果改为四种结果(SUCCESS/FAILED/REJECTED/DEFERRED),见 TOOL_OBSERVATION.md:待确认计为 DEFERRED,不计无进展;提示写明下一步(调用 builtin_node_approval 及工具名);工具名不一致时返回 APPROVAL_TOOL_MISMATCH(42246)并给出实际被拦下的工具名 |
| F9 | 查询成功后模型反复写非必填产出 builtin_output_set,拒绝只返回"来源校验失败:{key}"(原 Q6),连续无进展失败 | 非成功观测强制"原因。下一步:…",错误码改为 RuntimeErrorCode 枚举,内置工具拒绝改抛 ToolRejectedException;PhaseHint 只按契约必填产出提示。见 TOOL_OBSERVATION.md 第 7 节 |
| F10 | 文章必须有分类,与契约、手册冲突(原 Q3):确认写文章后 CMS 报 category_id 不能为空,模型临时去建分类,又要确认一次 | 定为必须有分类:11002 契约 post_article_save.categoryId 改为必填,缺失时先调 get_article_category_list;手册改为未指定分类时追问选哪个,没有分类时追问是否新建;CMS ArticleServiceImpl.save 新增前校验 spaceId、categoryId,返回 PARAM_REQUIRED 而不是数据库异常 |
| F11 | 已批准的写操作业务失败后,模型自行补救、反复申请确认(原 Q4) | 已批准写操作执行失败时,WriteGateInterceptor.after 把下一步换成向用户说明并追问如何处理,用户不再继续时 node_fail;见 TOOL_OBSERVATION.md 7.3 |
| F12 | RuntimeErrorCode 中约 60 处 {0} 占位符从不被替换(MessageResolver 只认 {0:name}),模型收到"来源校验失败:{0}" | 统一改为 {0:message} / {0:detail} |
| F13 | 已回应的断点在续跑整轮仍被当作"等待中"投影给模型;续跑后再次挂起时漏写 task_resume_record | 节点唤醒时即消费断点(turn.resumed() 保留现场供派发、核实、认定追问字段);去掉 FOLLOW_UP 投影过滤与完成时的 ClearSuspend。见 STATE_SPEC 5.3 |
| F14 | 跨轮重建节点历史有损:工具结果只有 200 字摘要;内置工具调用、被拒或推迟的调用、用户确认都不在历史里 | 节点空间新增 actions 记录无证据动作;证据头新增 detail 保存未成功时的完整说明;重建时成功结果读完整报文。追问问题由 follow_up 动作记录,去掉原 F4 的补记。见 STATE_SPEC 3.3 |
| F15 | 控流动作没有统一的准入依据(原 Q1):模型用 builtin_node_follow_up 口头确认写操作,绕过审批卡 | 三个控流动作由 runtime 裁决:审批须有写闸记录(L12);完成由 FinishPolicy;追问须有依据(ControlBuiltinTools.requireGrounded),否则 FOLLOW_UP_UNGROUNDED;第三节相关提示词补丁已撤。枚举口头确认残留不再单独跟踪 |