说「帮我做生时纠正」只回一句「可在历史对话里接着做」,校正进不去 #103

Open
opened 2026-10-22 23:34:15 +08:00 by Claude · 2 comments
Collaborator

产品 10-22 决定(C):已经采用但没做完核对的校正,不再算「进行中」;用户明说要校正时,直接开一次新的。产品同意本单动表。

现象:在对话里说「请你帮我做一下生时纠正」,只回一句「可在历史对话里接着做。」,没有卡片、链接或按钮,校正进不去。账户的出生时间显示「已采用」。

根因:

  1. consultation-tools.ts 的 finishExplicitRectificationRequest:判定有进行中的 case 后,去查那次的会话 id;查不到就走 refused,只回 RECTIFICATION_DIRECT_RESUME_ELSEWHERE_COPY 这句话,不下发打开指令。查找失败(route.ts)被吞掉,没有日志。
  2. contracts/rectification-entry.ts 的 RESUMABLE_CASE_STATUSES 和 SQL 函数 agentic_rectification_resumable_statuses() 都把 candidate_accepted(已采用)算作可续接,所以已采用的用户一直被挡在旧那次上。

改法:

  • 可续接状态去掉 candidate_accepted:TS 合同和 SQL 函数同步改,新迁移只改函数。已采用的出生时间保持不变,新的校正采用后才覆盖。
  • 删掉「可在历史对话里接着做」这条兜底:查不到会话 id 时照样下发打开指令,交给 /api/rectification/cases/open 续接或新开。常量和 VOICE.md 里的对应口径一起删。
  • 查找失败时记日志,日志不含个人资料。
  • 旧那次的采用后核对题,在原对话里仍然要能答,不能被新开的 case 弄坏。如果数据库有「每人只能有一个未结束 case」一类的约束,任务书里写明怎么处理;拿不准就标需拍板。

验收:

  • 已采用状态下明说要校正 → 开新的校正,有回归测试;
  • 进行中(非已采用)且查不到会话 id → 仍然打开,不再出现那句话;
  • rectification-explicit-entry-20261012.test.ts 改动的断言写「原值 / 新值 / 原因」三栏;
  • SQL 函数改动要真跑 test:db;
  • 补真机清单。

关联:BUG-1306(这条兜底是那时定的)、BUG-1248、BUG-1317。BUG 编号开工时核对。

**产品 10-22 决定(C)**:已经采用但没做完核对的校正,不再算「进行中」;用户明说要校正时,直接开一次新的。产品同意本单动表。 现象:在对话里说「请你帮我做一下生时纠正」,只回一句「可在历史对话里接着做。」,没有卡片、链接或按钮,校正进不去。账户的出生时间显示「已采用」。 根因: 1. `consultation-tools.ts` 的 `finishExplicitRectificationRequest`:判定有进行中的 case 后,去查那次的会话 id;查不到就走 `refused`,只回 `RECTIFICATION_DIRECT_RESUME_ELSEWHERE_COPY` 这句话,不下发打开指令。查找失败(`route.ts`)被吞掉,没有日志。 2. `contracts/rectification-entry.ts` 的 `RESUMABLE_CASE_STATUSES` 和 SQL 函数 `agentic_rectification_resumable_statuses()` 都把 `candidate_accepted`(已采用)算作可续接,所以已采用的用户一直被挡在旧那次上。 改法: - 可续接状态去掉 `candidate_accepted`:TS 合同和 SQL 函数同步改,新迁移只改函数。已采用的出生时间保持不变,新的校正采用后才覆盖。 - 删掉「可在历史对话里接着做」这条兜底:查不到会话 id 时照样下发打开指令,交给 `/api/rectification/cases/open` 续接或新开。常量和 `VOICE.md` 里的对应口径一起删。 - 查找失败时记日志,日志不含个人资料。 - 旧那次的采用后核对题,在原对话里仍然要能答,不能被新开的 case 弄坏。如果数据库有「每人只能有一个未结束 case」一类的约束,任务书里写明怎么处理;拿不准就标需拍板。 验收: - 已采用状态下明说要校正 → 开新的校正,有回归测试; - 进行中(非已采用)且查不到会话 id → 仍然打开,不再出现那句话; - `rectification-explicit-entry-20261012.test.ts` 改动的断言写「原值 / 新值 / 原因」三栏; - SQL 函数改动要真跑 `test:db`; - 补真机清单。 关联:BUG-1306(这条兜底是那时定的)、BUG-1248、BUG-1317。BUG 编号开工时核对。
Claude added the agent/试点agent/待规划 labels 2026-10-22 23:34:18 +08:00
Claude added agent/规划中 and removed agent/待规划 labels 2026-10-23 00:25:30 +08:00
Author
Collaborator

根因(三条)

  1. 找「上次那次校正」的会话时,代码直接去读一张服务端没有权限读的表,必然失败,错误还被悄悄吞掉。所以连真正没做完的校正也接不回去,每次都落到那一句话。
  2. 「已采用」的校正被当成「还在进行中」。采用过时间的人,明说要校正进不去,普通对话里的校正提议也不再出现。
  3. 失败时只给一句话,没有任何能点的出口。

改什么(用户能感知的)

  • 已采用过时间的人说要校正:直接开一次新的。
  • 真没做完的:接回那次。
  • 万一接不回:也直接开新的,不再出现「可在历史对话里接着做」。
  • 已采用的账户,普通对话里的校正提议卡会重新出现。

风险:不改数据库,不改校正内部的状态流转,扣点规则不变。新校正采用了不同的时间后,旧那次的核对题会变成只读。

验收:新增一条真库测试,证明服务端能拿到会话(当初缺的就是这条防线);Claude 跑全量测试。真实模型是否调用工具,留给真机清单。

任务书:docs/tasks/TASK-rectification-explicit-open-20261023.md
分支:codex/rectification-explicit-open-20261023

<!-- agent:claude plan brief=docs/tasks/TASK-rectification-explicit-open-20261023.md branch=codex/rectification-explicit-open-20261023 base=d72adb575 --> **根因(三条)** 1. 找「上次那次校正」的会话时,代码直接去读一张服务端没有权限读的表,必然失败,错误还被悄悄吞掉。所以连真正没做完的校正也接不回去,每次都落到那一句话。 2. 「已采用」的校正被当成「还在进行中」。采用过时间的人,明说要校正进不去,普通对话里的校正提议也不再出现。 3. 失败时只给一句话,没有任何能点的出口。 **改什么(用户能感知的)** - 已采用过时间的人说要校正:直接开一次新的。 - 真没做完的:接回那次。 - 万一接不回:也直接开新的,不再出现「可在历史对话里接着做」。 - 已采用的账户,普通对话里的校正提议卡会重新出现。 **风险**:不改数据库,不改校正内部的状态流转,扣点规则不变。新校正采用了不同的时间后,旧那次的核对题会变成只读。 **验收**:新增一条真库测试,证明服务端能拿到会话(当初缺的就是这条防线);Claude 跑全量测试。真实模型是否调用工具,留给真机清单。 任务书:`docs/tasks/TASK-rectification-explicit-open-20261023.md` 分支:`codex/rectification-explicit-open-20261023`
Claude added agent/待执行 and removed agent/规划中 labels 2026-10-23 00:31:06 +08:00
Grok added the agent/执行中 label 2026-10-23 01:30:31 +08:00
Collaborator

已经采用过出生时间的人,在对话里说要做生时纠正,会直接开始一次新的核对,不再只回「可在历史对话里接着做。」普通对话里的校正提议卡也会重新出现。

真没做完的校正仍然接着做。这次如果接不回原来那次,也直接新开,不会再停在那一句话上。扣点规则没变,还是开始答第一题时才扣。数据库和校正内部的状态没改。

自测:类型检查通过;lint 没有错误(122 条旧警告没动);相关测试 47 条通过。真库测试证明服务端能拿到没做完那次的会话,直接读表仍然被拒绝。全量真库 91 条里失败 13 条,和这台 Windows 上原有的失败名单一致,没有新增。构建后首页仍是静态页。首屏脚本 gzip 合计 646,232 字节。没有用改动前的代码再构建一次,所以不写增减百分比。

真实模型会不会在你明说时调用工具,本机没有模型钥匙,请按 docs/testing/rectification-explicit-open-20261023.md 看。旧校正在新校正采用了另一个时间之后变成只读,写在清单第 4 步,这次没有做成自动测试。

这条记成 BUG-1421。尚未合并的另外两张单也用了同一个号。若那些先进入测试环境,验收时给本条改号即可。

<!-- agent:grok report branch=codex/rectification-explicit-open-20261023 sha=4a9ad6a1bdfc05a54594a11d942e961784bcc21e --> 已经采用过出生时间的人,在对话里说要做生时纠正,会直接开始一次新的核对,不再只回「可在历史对话里接着做。」普通对话里的校正提议卡也会重新出现。 真没做完的校正仍然接着做。这次如果接不回原来那次,也直接新开,不会再停在那一句话上。扣点规则没变,还是开始答第一题时才扣。数据库和校正内部的状态没改。 自测:类型检查通过;lint 没有错误(122 条旧警告没动);相关测试 47 条通过。真库测试证明服务端能拿到没做完那次的会话,直接读表仍然被拒绝。全量真库 91 条里失败 13 条,和这台 Windows 上原有的失败名单一致,没有新增。构建后首页仍是静态页。首屏脚本 gzip 合计 646,232 字节。没有用改动前的代码再构建一次,所以不写增减百分比。 真实模型会不会在你明说时调用工具,本机没有模型钥匙,请按 docs/testing/rectification-explicit-open-20261023.md 看。旧校正在新校正采用了另一个时间之后变成只读,写在清单第 4 步,这次没有做成自动测试。 这条记成 BUG-1421。尚未合并的另外两张单也用了同一个号。若那些先进入测试环境,验收时给本条改号即可。
Grok added agent/待验收 and removed agent/执行中agent/待执行 labels 2026-10-23 01:56:36 +08:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#103