fix(rectification): keep choice stems visible and align overlay adopt with the engine
Walkthrough polish: fail-closed empty D9 prompts, stop asserting the next question is on screen, vary same-domain collect copy, switch to reverse-verify after adopt, and let coverage route interview without blocking can_adopt. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7378,3 +7378,81 @@
|
||||
- 相关记录:BUG-464(消息按需加载引入的首屏消息等待,流式轮已把当前会话消息前移到揭幕前)、BUG-470(effect 内 setState 规则)
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-480 | 第一道 D9 选择卡只有 A-D、没有题干
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-02
|
||||
- 最近更新:2026-09-02
|
||||
- 影响面:`persistServerOwnedFocus`、`persistPlanFocus`、`finalizeSuccessfulTurnExit`、选择题 `choice_frame.prompt`
|
||||
- 用户现象:走查第一道 D9 相处方式卡只有 A–D,题干不在卡片上,也不在 turn 历史里。后续点选题走 answer_choice 路径则正常。
|
||||
- 触发条件:message/agent 路径首次为 `distinguish_candidates` 建 focus;`serverOwnedChoiceCopy` 因空 prompt/period 返回 null,或 turn-exit 只在 idle 新建 focus 时写题干 turn。
|
||||
- 根因:copy 为 null 时仍可能留下不可渲染 choice;agent `persistPlanFocus` 没有 spoken collect 回退;turn-exit 在 agent 已建 focus 时跳过题干持久化。
|
||||
- 修复:copy 为 null 的区分题 fail-closed,回退为 `spokenCollectFallbackFollowup`,不建空题干 choice。agent 路径同样回退。turn-exit 只要当前问题有 prompt 就按既有结构规则写题干 turn。D9 `varga_style` 优先接上探针问句。不改 Python 引擎,不 bump Skill。
|
||||
- 验证:`rectification-walkthrough-polish` D9 不变量与 unwired 回退;`rectification-server-focus`;`agent-voice-copy-contract`。未做登录后的真实页面点选。
|
||||
- 防复发:任何可渲染 `choice_card` 必须有非空 prompt;不得再把空 prompt 的 choice focus 当成功创建。agent 与 idle 创建链都要走同一 fail-closed。
|
||||
- 相关记录:BUG-460、BUG-461、BUG-469、BUG-471
|
||||
- 复发自:BUG-471(可见 legend 修好后,空 prompt 创建链仍会丢题干)
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-481 | 正文说「界面上有下一问」时问题槽还是空的
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-02
|
||||
- 最近更新:2026-09-02
|
||||
- 影响面:`agentic-rectification` 指令、`VOICE.md`、流结束后 `loadCaseSnapshot`
|
||||
- 用户现象:助手说界面上已有下一问,用户当下看不到题干。题干 turn 在流结束后的 turn-exit 才写入。
|
||||
- 触发条件:Agent 正文断言界面当前状态;前端在 `done` 后才刷新 case 快照。
|
||||
- 根因:指令允许「过渡到界面上的下一步」;模型把尚未刷新的槽位说成已经出现。
|
||||
- 修复:指令改为中性过渡(「接下来我们继续」),明确禁止断言界面当前状态。时序沿用已有 `await loadCaseSnapshot()`,不新增 `question.ready` 事件。
|
||||
- 验证:`agent-voice-copy-contract`;`rectification-walkthrough-polish` 指令合同。未做登录后的真实页面点选。
|
||||
- 防复发:正文不得写「界面上有/出现了下一问」。题干真源仍是服务端问题槽。
|
||||
- 相关记录:BUG-441、BUG-449、BUG-471
|
||||
- 复发自:BUG-471(直播看不到题干时,模型仍被要求过渡到「界面上的下一步」)
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-482 | 同域采集问句逐字复读
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-02
|
||||
- 最近更新:2026-09-02
|
||||
- 影响面:`USER_COLLECT_QUESTION_RETRY`、`spokenFollowupForUser`、`buildMethodFollowupPlan`
|
||||
- 用户现象:「感情这边,还记得哪年认真在一起、分开,或结婚吗?」在历史里逐字出现两次。第一次用工作事件回答后重问正确,但措辞完全一样。
|
||||
- 触发条件:该域 collect focus 已关闭且未被拒答,覆盖仍未完成,下一问再次采集同一域。
|
||||
- 根因:采集 copy 每域只有一句;没有用结构化「已问过」状态切换第二措辞。
|
||||
- 修复:每域增加 retry 变体。`closedCollectFocuses` 里该域 collect 已建立且 status 不是 declined 时设 `collect_retry`。不做正文字符串匹配。
|
||||
- 验证:`rectification-walkthrough-polish` 同域 retry;`agent-voice-copy-contract` 可见文案词表。未做登录后的真实页面点选。
|
||||
- 防复发:同域重问必须换第二措辞;判定只用 focus 结构化状态,不读正文。
|
||||
- 相关记录:BUG-028、BUG-087
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-483 | 采用后仍挂着采用前的采集题,没有切入前事核对
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-02
|
||||
- 最近更新:2026-09-02
|
||||
- 影响面:`persistNextInterviewIfIdle`、accept 路由、`.rectification-question-slot` 渲染位置
|
||||
- 用户现象:采用 04:53 成功后,当前问题仍是采用前的财务采集,显示在候选卡下方、脱离对话流。预期是最多两件前事核对。
|
||||
- 触发条件:accept RPC 成功,active focus 仍是 collect;idle 见任何 activeFocus 就直接返回。
|
||||
- 根因:`buildMethodFollowupPlan` 在 accepted 时会出 reverse_verify,但 idle 被旧 collect 挡住;accept 成功后也不替换 focus。问题槽是消息列表的兄弟节点。
|
||||
- 修复:`accepted_time` 存在且当前 focus 不是 reverse_verify/oos 时,先 skipped 关闭再 persist 下一问。accept 成功后调用同一 idle。问题槽改到最新一条消息内、候选卡之后。GET 不作为主变更路径。
|
||||
- 验证:`rectification-walkthrough-polish` 采用后不变量;`rectification-eight-method` reverse_verify;`rectification-spoken-collect` 槽位合同。未做登录后的真实页面点选。
|
||||
- 防复发:`accepted_time` 非空时 `current_question` 不得仍是采用前 collect。问题槽必须留在对话流内。
|
||||
- 相关记录:BUG-117、BUG-120
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-484 | overlay `can_adopt` 与引擎出牌/采用不一致
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-02
|
||||
- 最近更新:2026-09-02
|
||||
- 影响面:`deliveryCapability`、GET overlay `can_adopt`、offer/accept 可执行性
|
||||
- 用户现象:职业从未被问,overlay 判 `can_adopt:false`,但 offer 工具与引擎 `accept_allowed=true` 仍出牌且采用成功。
|
||||
- 触发条件:blocking coverage 未齐(含 occupation 路由缺口),引擎 ceiling 已放行采用。
|
||||
- 根因:`deliveryCapability` 把 `methodCoverageAll` 和训练门绑进 `locallySelectable`。BUG-472 已把 occupation 移出 blocking 集合,其余 coverage 仍挡 overlay 采用。
|
||||
- 修复:方案 1(对齐引擎)。coverage 从采用门移除,只保留为问询路由优先级。训练门 3/2、`keep_collecting` 证据下限、引擎 ceiling、确认门不变。`canAdopt` 为真且 nextAction 已是出牌/采用时,仍持久化 `deferred_followup` 里的剩余区分题与未覆盖 blocking collect;点选回执不得用采用口播覆盖已写入的下一题题干。职业/财务/已覆盖层的耗尽采集在出牌态仍跳过。不 bump Skill 10.0.14;「职业挡出牌」的 skill 文本偏差记在本条,下次 skill 版本再改。
|
||||
- 验证:`rectification-walkthrough-polish` overlay 与引擎对齐;`rectification-occupation-coverage-exit`;`rectification-decide-next-action`;`rectification-range-offer-deadend`;`rectification-answer-choice` 点选后仍持久化下一张带年区分卡与家人采集;`rectification-decision-authority` 非终态出口仍等待家人采集写入。`./node_modules/.bin/tsc --noEmit` 与四组测试见当轮记录。未做登录后的真实页面点选。
|
||||
- 防复发:overlay `can_adopt` 必须与 offer/accept 实际可执行性一致。不得把 coverage 重新写回采用门。不得放宽确认门。不得因为 `canAdopt` 就跳过剩余区分题或未覆盖的 dasha/D9/D10/家人采集。点选回执在下一题已写入时不得改写成采用口播。
|
||||
- 相关记录:BUG-453、BUG-463、BUG-472
|
||||
- 复发自:BUG-472(occupation 移出 blocking 后,deliveryCapability 仍用 coverageComplete 挡采用)
|
||||
- 修复版本:待发布
|
||||
|
||||
Reference in New Issue
Block a user