fix(rectification): out-of-window event dates no longer fail every rescore; future dates refused at intake; corrections revise without a focus (BUG-1178, BUG-1179)
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
8e978cabc4
commit
3bbe65a215
@@ -15777,3 +15777,33 @@
|
||||
- 复发自:无
|
||||
- 修复版本:`codex/rectification-post-adopt-verify-20261001`。
|
||||
|
||||
## BUG-1178 | 一件未来日期或「今年」的经历让之后每次重新比较都失败,校正一直追问、不出时间卡
|
||||
|
||||
- 状态:resolved(2026-10-02 Claude 直接执行;真引擎 + 真库验证)
|
||||
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
|
||||
- 影响面:`v9/engine-client.ts::engineRequestBody`(score / diagnostics / block_scan / vedastro-validate 共用)、`mastra/rectification-v9-tools.ts`(record-evidence-batch、propose-evidence)、`v9/agent-run-support.ts` / `agent-run-attempt.ts` / `host-fallback.ts`(回复补句)、`user-copy.ts`。所有生时校正用户。
|
||||
- 用户现象(staging 真机测试者):第一件经历把年份打成「2028 年借出一笔钱」,之后每轮回复都是「记下了:…这次没有重新比较,稍后再比一次。」,范围不动、不出时间卡,测试者「都不想回答了」。
|
||||
- 触发条件:账本里有任何一件开始日期晚于今天的经历;或任何「今年 / 这个月」的经历(年 / 月精度的结束日 12-31 / 月底晚于今天);或完全在出生前的经历。
|
||||
- 根因:引擎 `scripts/rectification/contracts.py` 要求每件经历的日期都在 [出生日, 今天] 内,否则整个请求 400(`events[i] dates must be between birth_date and today`)。前端证据入口与数据库都不校验日期上限,未来年份照常记下且确认;之后每次重算都把它带上,整次失败,回复走 rescoreSkipped 文案。本机真引擎实测:2028 年、今年(年精度)、本月(月精度)都 400,去年 200。
|
||||
- 修复:(1) `boundEngineEventDates`:发给引擎前丢掉开始晚于上限(UTC 昨天,避免两端时钟差)或结束早于出生日的经历,其余裁进窗口;全部被丢则按既有 `no_scorable_evidence` 处理。已在账本里的未来经历不再挡住比较,该测试者的 Case 下一轮即可恢复。(2) 入口:record-evidence-batch 与 propose-evidence 对开始日期晚于今天(UTC)的项不写库,返回 `future_date`;回复由服务端追加「有一件事的日期在今天之后,这件先不算;如果年份打错了,直接告诉我正确的年份就行。」(3) 顺带修 batch 结果编号:已写入行的 `index` 改为模型原始条目序号(此前是写入序号,被拒条目在前时「记下了」复述会读错位置)。
|
||||
- 验证:`frontend/tests/rectification-event-date-bounds-20261002.test.ts`(裁剪六种日期、请求体只带裁剪后事件且全部被丢时报 no_scorable_evidence、入口判定、batch 中 2099 项不写库且其余条目序号与复述正确、回复补句只出现一次;去掉裁剪时请求体用例红)。真引擎 + 本机 PG17:虚构案例账本中加入 2028 年与今年的经历后重算成功(修前引擎 400)。
|
||||
- 防复发:任何发给引擎的事件都经 `engineRequestBody`;新增事件入口须做日期上限校验。旧版 `mastra/rectification-tools.ts`(仅 legacy session 引用)未改,记入进度。
|
||||
- 相关记录:BUG-1084(打字事件不计分研究)、BUG-1179。
|
||||
- 复发自:无
|
||||
- 修复版本:`codex/rectification-post-adopt-verify-20261001`。
|
||||
|
||||
## BUG-1179 | 用户说「刚才年份打错了」改不了:更正工具要求问题焦点,Agent 也拿不到经历编号
|
||||
|
||||
- 状态:resolved(2026-10-02 Claude 直接执行;产品 10-02 选 A;真库验证;真实模型调用为环境缺口)
|
||||
- 首次发现 / 最近更新:2026-10-02 / 2026-10-02
|
||||
- 影响面:`mastra/rectification-v9-tools.ts::rectification-revise-evidence`、`v9/turn-decision.ts`(`relevant_evidence_summary`)、`mastra/agentic-rectification.ts`(提示规则)。
|
||||
- 用户现象:测试者问「回答错了这个能返回吗」,产品答「目前不能」。实际上已有 `rectification-revise-evidence`,但用不上。
|
||||
- 根因:(1) 工具 schema 强制 `focusId`,而随口更正一件打字经历时没有对应的问题焦点;(2) 修订后的新记录是 pending,要第二次调用确认才生效、才重算;(3) Agent 的经历摘要不带 `evidence_id`,无从指定改哪条;(4) 提示词没有「更正走修订、不要新记一条」的规则。
|
||||
- 决策记录:产品 10-02 选 A——先做「改经历」:用户说出正确年份即改正并重新比较;「撤回上一道选择题」不做(选项 B 未选)。推翻 08-14 v10 运行时「修订必须绑定问题焦点」的约束,改由「quote 必须落在本轮用户原话里」(与新事件同一校验)保证改动来自用户本人。
|
||||
- 修复:`focusId` 改为可选;有焦点走 `revise_..._v10`,无焦点走 `revise_agentic_rectification_evidence`(真库确认 service_role 可调用);随后在同一调用里 `confirm_..._v10` 确认新修订并重算,返回 rescore / range_after_rescore;quote 未落在本轮用户消息里→`quote_mismatch` 不写;更正后的日期仍在未来→`future_date` 不写。经历摘要带 `evidence_id` 并排除已被替代的记录;提示规则:用户更正之前说过的事走修订工具。
|
||||
- 验证:`frontend/tests/rectification-v9-evidence.test.ts` 新增「无焦点更正:修订→确认、未落原话不写、未来日期不写」;三条既有合同用例按三栏改写(schema 允许省略 focusId 但仍须 evidenceId;修订后多一次确认)。本机 PG17:无焦点修订 + 确认后旧记录 superseded、新记录 confirmed。真实模型是否按新规则调用修订工具:本机无模型凭据,留待 staging 真机(`docs/testing/rectification-event-dates-20261002.md`)。
|
||||
- 防复发:经历的任何改动必须带本轮用户原话;修订后立即生效,不得停在 pending 等第二次调用。
|
||||
- 相关记录:BUG-1178。
|
||||
- 复发自:无
|
||||
- 修复版本:`codex/rectification-post-adopt-verify-20261001`。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user