docs(rectification): grounding records — BUG-1055..1058, BUG-593 R1 note, changelog, progress, device checklist
T7 of TASK-rectification-grounding-20260927. Skill not bumped (10.0.31 text unchanged, sliced per turn). regenerate_agentic_rectification_turn kept, to be retired in a later brief. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
717a378b08
commit
2efe225863
@@ -9224,6 +9224,7 @@
|
||||
- 根因:结果投影把 `candidates` 换成推断层,但报告仍喂引擎 `indistinguishable_width_minutes` 和 `dasha_agreement`。分盘上升没有按候选分钟给出星座,模型按换升时刻自己算。
|
||||
- 修复:有推断层时报告宽度用 `credible_range` 含两端分钟数;双轨在 active 候选内重算,引擎原值只留 `dasha_agreement_pre_inference` 供审计。顶层宽度改名 `engine_indistinguishable_width_minutes`。报告给出 `sign_by_candidate`,与分歧面板共用换升函数。确认门不改。Skill 10.0.16 要求只抄该表。
|
||||
补正(2026-09-10):代码里**已有** `dasha_agreement_pre_inference`。BUG-638 修的是引擎原值仍按网格分钟判冲突、与报告口径不一致,不是这个字段缺失。
|
||||
补充(2026-09-27,TASK-rectification-grounding-20260927 R1):旁路。`rectification-offer-candidates` 一直把完整投影交给模型(公开 AA 盘约 100KB:`*_pre_inference`、31KB 对照包、探针),compare 返回里 `engine_indistinguishable_width_minutes` 可被引用、验证报告 Markdown 出现两次。现在 offer 与 compare 走同一套给模型的剥离(`offerModelProjection` / `agentVisibleLatestProjection`):不给 `*_pre_inference`、对照包、探针、引擎宽度,报告 Markdown 只留 `skill_verification_report` 一份;offer 100,012 → 28,799 字节,compare 38,026 → 29,698 字节。病例 API 投影与回执指纹不变。测试 `frontend/tests/rectification-grounding-projection-20260927.test.ts`;本条原测试未改。
|
||||
- 验证:`frontend/tests/rectification-delivery-report-facts.test.ts`:推断窗 04:51–04:53、引擎宽 29、双轨 top 为已淘汰分钟时,报告 `width_minutes === 3` 且正文不含 29 / 已淘汰分钟;D10 05:00 换升时 `sign_by_candidate["04:53"].d10 === "巨蟹座"`。`agent-voice-copy-contract` / `skill-registry` 锁 10.0.16 新句。
|
||||
- 防复发:交付轮宽度、双轨、分盘星座必须来自推断层报告字段,不得再把引擎原跨度或换升时刻交给模型自算。
|
||||
- 相关记录:BUG-545、BUG-568、BUG-290、BUG-638
|
||||
@@ -14202,6 +14203,67 @@
|
||||
- 复发自:无
|
||||
- 修复版本:`75a1844c`,随 `cd4dde9d` 部署 staging(run 2964)。
|
||||
|
||||
## BUG-1055 | 生时校正证据轮:服务端范围句被裁句裁掉,旧范围反而落库
|
||||
|
||||
- 状态:resolved(本地修复 `codex/rectification-grounding-20260927`,未推送;待部署 staging 与真机清单)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:`frontend/src/lib/rectification-agentic/v9/agent-run-attempt.ts`(结算段)、`agent-run-finish.ts`(证据轮裁句)、`agent-run-support.ts`(`composeSpokenWithServerFacts`)、新增 `spoken-grounding.ts`;`rectification-record-evidence-batch` 返回;系统提示 `agentic-rectification.ts`。
|
||||
- 用户现象:说一件带年月的事,范围句「范围从 A 变为 B。」在流式时闪出一下又被撤回,落库只剩模型的第一句;模型第一句写了开轮时的旧范围时,旧范围落库。「这次没有重新比较」「候选比较这次没跑成」同样会被裁掉。
|
||||
- 触发条件:证据轮模型正文 ≥ 2 句(加上范围句超过两句即触发「只留首句」),或模型正文带时刻 / 百分比。诊断用真实 `runV9AgentTurn` 复现(两句正文 → 落库只剩首句;首句带旧范围 → 旧范围落库)。
|
||||
- 根因:服务端事实句与模型正文共用「先拼后裁」的管线:attempt 把范围句接到正文末尾并先流式放出,finish 再按 `trimEvidenceTurnBody`(超过两句只留首句)裁剪并 `replace`。batch 工具返回里没有重算后的范围,模型唯一的范围来源是开轮读到的旧值;系统提示还鼓励「有收窄就说进度」。证据轮与交付轮正文没有任何数字校验。
|
||||
- 修复:attempt 不再流式放出事实句,只把结构化事实(比较失败 / 未重算 / 开轮范围 / 结算范围)与当轮数字白名单交给 finish;finish 先对模型正文执行 P3 数字白名单(带时刻、时刻区间或百分比且不等于当轮服务端事实的句子整句丢弃,正则只当门不在句中删词;一句不剩时用 batch 回执复述代替),再按 BUG-606 / BUG-615 裁句,最后接服务端事实句,一次 `replace` 与落库一致。batch 返回 `range_after_rescore`(重算后可信范围、代表分钟、吻合率、`delivers_range_this_turn`),回执指纹仍按旧形状计算。系统提示改为「范围由系统说,除出牌轮外不写时刻和百分比」,出牌三句只在 batch 说本轮交付时写。
|
||||
- 验证:`frontend/tests/rectification-grounding-20260927.test.ts`(9 条:两句正文保住范围句且流式终态 = 落库;三句正文裁成一句范围句完整;首句旧范围整句不落库;编造吻合率被丢、服务端吻合率保留;重算后范围与代表分钟可复述;正文被白名单清空时用 batch 复述;「这次没有重新比较」「候选比较这次没跑成」在多句正文下保留且不被撤回;白名单单元)。前 8 条在未改动基线上全部失败。`rectification-grounding-projection-20260927.test.ts` 锁 batch `range_after_rescore` 与回执指纹不变。BUG-588 原测试(`rectification-probe-replay-loss-20260908.test.ts`)未改、仍通过。
|
||||
- 为什么旧测试没拦住:BUG-588 的回归只用单句正文(「记下了。」「接下来我们继续。」),加上范围句正好两句,不触发裁句;源码合同只锁「先剪问句再接范围句」的顺序,没有一条用多句正文跑真实 `runV9AgentTurn` 看落库。
|
||||
- 防复发:服务端事实句不得早于正文最终态流式放出,也不得再进入任何裁句 / 过滤;证据轮落库正文里的时刻、区间、百分比必须等于当轮服务端事实。新增旁白规则必须用多句正文与带数字正文跑真实 `runV9AgentTurn`。
|
||||
- 相关记录:BUG-588、BUG-594、BUG-606、BUG-615、BUG-585、BUG-1053(同为「写正文的步看不到事实」一族)。
|
||||
- 复发自:BUG-588(证据轮范围句,本次在裁句一侧丢失)。
|
||||
- 修复版本:`codex/rectification-grounding-20260927`(本地提交,未推送)。
|
||||
|
||||
## BUG-1056 | 生时校正「重试(重新生成)」盲写且不校验就落库
|
||||
|
||||
- 状态:resolved(产品 2026-09-27 决定下线入口;本地修复 `codex/rectification-grounding-20260927`,未推送)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:原 `POST /api/rectification/cases/[caseId]/turns/[turnId]/regenerate`、`v9/regenerate-turn.ts`、`getRectificationV9RegenerationAgent`、`createRectificationV9ReadOnlyTools`;校正消息操作栏(`rectification-message-entry.tsx`、`rectification-agentic-chat.tsx`、`rectification-chat-view.ts`、`rectification-surface-state.ts`、`rectification-chat-message-actions.ts`);`ChatMessageActions`。
|
||||
- 用户现象:点校正回答下的「重新生成」,新正文可以写出与卡片不符的范围和吻合率并直接替换旧正文(诊断复现:写出「范围收在 09:00–09:05,吻合率 90%」原样落库,实际范围 08:54–09:24)。
|
||||
- 触发条件:生时校正里点最近一条助手回答的重新生成。
|
||||
- 根因:重新生成走 V5 之前的自由重写:`agent.generate` 只拿旧正文 + read-case(且 read-case 在 9 个候选时已清空对话,见 BUG-1057),Skill 未注入,输出不剪问句、不补范围句、不查数字与禁用词,直接调 `regenerate_agentic_rectification_turn` 落库。
|
||||
- 修复:产品 P1 决定删除入口(多余入口宁可删除也不修):删掉重新生成路由、服务端模块、重新生成 Agent 与只读工具集、客户端重新生成动作与状态、`regenerating` / `canRegenerate` 属性;`ChatMessageActions` 不传 `onRegenerate` 时不画重新生成按钮,普通对话不变。数据库函数 `regenerate_agentic_rectification_turn` 本单不动(AGENTS §7.6 两轮规则),待另开单退役。
|
||||
- 验证:`frontend/tests/rectification-grounding-regenerate-20260927.test.ts`(校正回答只有赞 / 踩 / 复制;普通对话操作条仍有「重新生成回答」;路由与服务端代码已删、`src` 不再引用该函数、迁移里的函数仍在)。既有断言按三栏改写(见 PROGRESS);`rectification-v9-regenerate.test.ts` 整份删除(测的是已删除的接口)。
|
||||
- 防复发:生时校正里任何写入助手正文的新路径都必须经过与主链相同的剪问句、事实句与数字白名单,不得再有只读自由重写。
|
||||
- 相关记录:BUG-1055、BUG-1057、BUG-1053。
|
||||
- 复发自:无。
|
||||
- 修复版本:`codex/rectification-grounding-20260927`(本地提交,未推送)。
|
||||
|
||||
## BUG-1057 | 生时校正 read-case 超 6KB 时先清空对话与证据(候选多时「失忆」)
|
||||
|
||||
- 状态:resolved(本地修复 `codex/rectification-grounding-20260927`,未推送)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:`frontend/src/lib/rectification-agentic/v9/turn-decision.ts`(`projectTurnDecision`、`enforceTurnDecisionBudget`、新增 `modelVisibleInference`);compare / offer 给模型的 `inference_state`。
|
||||
- 用户现象:候选多(约 7 个及以上的常见窗口)时,用户说「那年」「刚才那件事」,助手像没听过前文。
|
||||
- 触发条件:turn-decision 投影超过 6KB。公开 AA 盘 30 分钟窗 9 个候选、2 条短对话即触发(5,639 字节,`truncated: true`,对话与证据摘要都是空数组)。
|
||||
- 根因:模型消息里没有历史(只有 bootstrap + 本轮用户话),read-case 的 `recent_turns` 与 `relevant_evidence_summary` 是唯一对话记忆;预算裁剪却最先砍它们,保留每个约 458 字节的候选定位元数据(窗口序号、偏移、区间明细),`candidate_summary.candidates` 还与 `inference.candidates` 重复。现有测试只断言不超上限。
|
||||
- 修复:给模型看的候选只留 time / score / status / cluster_range(上一轮淘汰与分差改按时刻列出),删去重复的 `candidate_summary.candidates`;超限顺序改为:先去掉 cluster_range → 只留最好的 6 个候选(未淘汰优先,注明省略数)→ 缩短对话与证据 → 最后才清空(`truncated`)。落库的推断状态与回执不变。
|
||||
- 验证:`frontend/tests/rectification-grounding-read-case-20260927.test.ts`(真实引擎 fixture 9 个候选 + 6 条对话:对话 6 条、证据 3 条都在、候选只有四个字段、无重复列表、≤6KB;超限时先砍候选明细再动对话;第一步只去 cluster_range)。体量:9 个候选 2 条对话 5,639 → 3,022 字节(对话 0 → 2 条、证据 0 → 3 条);6 条对话 3,420 字节。
|
||||
- 防复发:read-case 的预算裁剪不得先动 `recent_turns` / `relevant_evidence_summary`;新增投影字段要按候选数量级核算体量。
|
||||
- 相关记录:BUG-1056(重新生成读到的就是被清空的 read-case)、BUG-1055。
|
||||
- 复发自:无。
|
||||
- 修复版本:`codex/rectification-grounding-20260927`(本地提交,未推送)。
|
||||
|
||||
## BUG-1058 | 点选题答案里顺手说了带年月的经历:范围变了没人说
|
||||
|
||||
- 状态:resolved(本地修复 `codex/rectification-grounding-20260927`,未推送;真机清单待走)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:`frontend/src/lib/rectification-agentic/v9/agent-route-typed-message.ts`(点选焦点的 `deferFollowup` 分支)、`agent-route-support.ts`(`RectificationAgentTurnState.rangeBeforeTurn`)、`agent-route-agent-turn.ts`、`agent-run.ts` / `agent-run-attempt.ts`(`rangeBeforeTurn` 选项)。
|
||||
- 用户现象:对着点选题打字「有,2023 年 3 月换了工作」,答题让范围收窄了,但这条回复里没有任何范围句。
|
||||
- 触发条件:分类器判为回答当前点选题且带新的带日期事件(`has_new_dated_event`),走 `deferFollowup` 交给 Agent 轮。
|
||||
- 根因:`applyRectificationChoice` 在 Agent 轮之前已写入答题后的新推断,`deferFollowup` 时它的旁白(含范围句)不落库;随后 Agent 轮 prepare 读到的「开轮范围」已是答题后范围,结算时前后相同,也不写范围句。两边都不说。
|
||||
- 修复:二选一取「把答题前范围交给随后的 Agent 轮」:typed-message 在 `deferFollowup` 时把答题前的 `credible_range` 写进 `turnState.rangeBeforeTurn`,Agent 轮用它做开轮范围。理由:只有一条服务端范围句、走 BUG-1055 的同一条事实句通道(不裁、不撤回),答题与经历两次变化合成一句;不把 `applied.narration` 并入正文,避免同一条消息出现两句范围。
|
||||
- 验证:`frontend/tests/rectification-grounding-route-20260927.test.ts`(真实 `POST /api/rectification/agent` + typed-message + agent-turn + `runV9AgentTurn`,模块替身只替掉答题写入、分类器、Agent 流、计费与出口门):答题收窄、经历不再变 → 落库有且仅有「范围从 04:50–05:10 变为 04:55–05:05。」;经历再收窄 → 一句从答题前算到最终。去掉修复后两条都失败。
|
||||
- 防复发:任何「先确定性写入、再交给 Agent 轮」的路径,都要把写入前的事实传给 Agent 轮,不得让 prepare 读到的状态充当开轮状态。
|
||||
- 相关记录:BUG-588、BUG-569、BUG-1055。
|
||||
- 复发自:无(BUG-588 / BUG-569 同族,新路径)。
|
||||
- 修复版本:`codex/rectification-grounding-20260927`(本地提交,未推送)。
|
||||
|
||||
## BUG-1059 | 调工具那一步没写完的半句过程说明,会粘到下一步正文开头
|
||||
|
||||
- 状态:resolved(已部署 staging:门禁 run 2962 通过,deploy run 2964,`/api/health` gitCommit = `cd4dde9d`;真机清单待产品走)
|
||||
|
||||
Reference in New Issue
Block a user