fix(rectification): resolve typed focus answers deterministically
This commit is contained in:
@@ -6154,3 +6154,19 @@
|
||||
- 相关记录:BUG-366、BUG-367、BUG-398、BUG-401、BUG-402
|
||||
- 复发自:BUG-366(覆盖完成被当成收敛)、BUG-367(结构化选择旁路)、BUG-398(probe freshness)、BUG-401(伪 probe 与过早出卡)、BUG-402(点选后续跑)
|
||||
- 修复版本:10.0.13(未提交)
|
||||
|
||||
## BUG-404 | 区分题未落 active Focus 仍被说出,自由文本否定误入完整 Agent
|
||||
|
||||
- 状态:resolved(修复已验证,待 staging 发布)
|
||||
- 首次发现:2026-08-27
|
||||
- 最近更新:2026-08-27
|
||||
- 影响面:`POST /api/rectification/agent`、active Focus、动态选择题、自由文本回答、候选后验更新
|
||||
- 用户现象:Agent 正文询问候选区分题,但页面没有选择卡;用户随后输入「那段时间没有变化」一类自然语言回答时,系统没有关闭当前问题,而是启动完整 Agent/候选比较长链,最终超时并显示校正暂时不可用。
|
||||
- 触发条件:服务端没有成功持久化对应 active Focus,或 active Focus 已存在但用户没有点击卡片、改用自由文本回答。
|
||||
- 根因:正文问题与 durable Focus 曾是两套真源;自由文本消息没有 active Focus 的轻量结构化意图入口;旧路径还能按 A/B/C/D 位置、focus status 或选项引文猜答案语义。结果是未落库的问题仍可见,而自然语言局部否定无法复用结构化点选 resolver。
|
||||
- 修复:只有 `created` / `already_open` 且 Focus UUID、questionId、`semantic_key`、`candidate_split_hash` 和完整动态选项 schema 一致时才暴露区分题;持久化失败、重复冲突或 schema 非法时同时隐藏卡片和 Agent 可见 follow-up。active Focus 下的自由文本先交给轻量模型输出结构化 intent 与 `answer_class`,模型只分类不改状态;当前问题答案通过动态选项自带的 `answer_class` 反查 option key,并与点击卡片统一调用 `applyRectificationChoice()`。分类不清或模型异常时保留 Focus 并提示点选,不再落回完整 Agent。删除用户语义正则、选项引文解析及 status/位置到答案的推断;动态 schema 不完整时 fail closed,不恢复静态题干或选项 fallback。
|
||||
- 验证:相关回归 `144/144` 通过;`tsc --noEmit` 通过;完整 ESLint 无 error(仅保留仓库既有 warning);完整前端套件遍历发现的旧静态选项/旧提示词断言已改为动态 schema 契约并逐项通过。回归覆盖乱序 option key、自由文本分类、Focus 持久化不变量、卡片身份、点选与文本共用 resolver、非法 schema fail closed、无语义正则及 inference fixture 动态 schema。
|
||||
- 防复发:候选区分题必须以持久化 active Focus 为唯一真源;模型分类结果不能直接写状态;所有答案必须经过动态 `answer_class` 和同一确定性 resolver;不得增加语义词表、正则或 A/B/C/D 位置 fallback;分类失败时保持当前 Focus,不得启动完整 Agent 长链。
|
||||
- 相关记录:BUG-367、BUG-398、BUG-400、BUG-401、BUG-402、BUG-403
|
||||
- 复发自:BUG-367(结构化点选旁路)、BUG-400(正文与卡片题干分离)、BUG-403(局部否定仍依赖 Agent 工具)
|
||||
- 修复版本:10.0.13(待 staging 发布)
|
||||
|
||||
Reference in New Issue
Block a user