fix(consult): 降级正文过 Pass 4,去重并停止空跑 compose(BUG-959/960/961)
降级交付复用 releasePass4Sentences;每次 attempt 清空 uncontractedText;成功降级后跳过 compose。
This commit is contained in:
@@ -12600,6 +12600,54 @@
|
||||
- 复发自:无
|
||||
- 修复版本:—
|
||||
|
||||
## BUG-959 | 降级正文绕过 Pass 4,保证性结论原样送达
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-18
|
||||
- 最近更新:2026-09-18
|
||||
- 影响面:`stream-agent-response.ts` 合同未绿时的降级交付
|
||||
- 用户现象:没跑完星盘计算时,模型自己写的「我保证你一定会升职」一类句子会进正文。
|
||||
- 触发条件:`requireTool: true`、零次成功计算、有非空正文、`pass4Mode` 为有盘模式。
|
||||
- 根因:BUG-956 的降级分支直接 `send(uncontractedText)`,没有走 `releasePass4Sentences` / `classifyPass4`。降级正文恰恰是没有任何计算依据时写的,保证句和个人盘断言最容易出现在这里。
|
||||
- 修复:降级正文复用 `releasePass4Sentences` 按句过门,`reject` 整句丢弃,`observe` 照记。`CONTRACT_DEGRADED_NOTE` 是服务端文案,不过 Pass 4,贴在末尾。全部句子被丢弃时:`general_no_birth_time` 发拒绝句再附说明;其余模式维持 `runtime_contract_incomplete`,不发只有降级说明的空回答。不在句内改写。
|
||||
- 验证:假流降级 + `verified_chart` + 保证句与安全句 → 保证句不出现在任何 `answer.delta`,回执同时有 `contract-degraded` 与 `pass4-reject:guarantee`;全丢不发 note-only;一般模式全丢发拒绝句 + 说明。
|
||||
- 防复发:降级路径必须复用 `releasePass4Sentences`,不得另写分句或句内替换。Pass 4 是门不是刀。
|
||||
- 关联记录:BUG-956、BUG-948、BUG-950、BUG-951
|
||||
- 复发自:BUG-956(降级路径漏接 Pass 4)
|
||||
- 修复版本:`ae2e46a6`
|
||||
|
||||
## BUG-960 | 两次 attempt 的正文被拼起来一起送出
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-18
|
||||
- 最近更新:2026-09-18
|
||||
- 影响面:`stream-agent-response.ts` `uncontractedText`
|
||||
- 用户现象:合同重试后降级交付把第一稿和重试稿拼成一段,同一轮内容说两遍。
|
||||
- 触发条件:第一次 attempt 写过字,合同仍红,retry 再写一段不同的字。
|
||||
- 根因:`uncontractedText += text` 只在 `contractReady()` 为真时清零。合同一直红就一路累加,attempt 之间没有边界。
|
||||
- 修复:每次 `consumeAttempt` 开始时清空 `uncontractedText`。降级只交付最后一次 attempt 的正文。
|
||||
- 验证:假流 attempt1「第一段。」、attempt2「第二段。」、无工具成功 → 降级正文含第二段、不含第一段。
|
||||
- 防复发:未绿缓冲按 attempt 隔离,不得跨 attempt 累加。
|
||||
- 关联记录:BUG-956、BUG-959
|
||||
- 复发自:BUG-956
|
||||
- 修复版本:`ae2e46a6`
|
||||
|
||||
## BUG-961 | 降级之后还会空跑一轮 compose
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-18
|
||||
- 最近更新:2026-09-18
|
||||
- 影响面:`stream-agent-response.ts` 降级后的收口
|
||||
- 用户现象:无(用户看不到 compose 产出)。本命形状的事件序列里出现 `phase.started{phase:"compose"}`,白花一次模型调用与一段墙钟。
|
||||
- 触发条件:降级交付成功,且该路径传入了 `composeAnswer`(本命线)。
|
||||
- 根因:降级分支执行后流程继续走到 `publishFindings` / `composeOnce`。
|
||||
- 修复:成功降级后设 `deliveredDegraded`,跳过 Pass 2 / Pass 3 / compose / answer-retry,直接 `run.completed`。全丢的非一般模式在 compose 之前抛 `runtime_contract_incomplete`。
|
||||
- 验证:降级路径 `composeAnswer` 调用次数为 0,事件无 `phase.started{phase:"compose"}`。
|
||||
- 防复发:降级是终态交付,不得再进 compose。
|
||||
- 关联记录:BUG-956、BUG-959
|
||||
- 复发自:BUG-956
|
||||
- 修复版本:`ae2e46a6`
|
||||
|
||||
## BUG-958 | 窗口指令「必须调工具」与「不得给应期」未写清,模型可能跳过计算或拒答
|
||||
|
||||
- 状态:resolved
|
||||
|
||||
Reference in New Issue
Block a user