fix(rectification): ask a ready discriminator before dated collect

Family coverage still continues dated collection when nothing can split leftover minutes, but an already-built choice card must not be displaced by spoken finance collect.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-05 10:34:24 +08:00
parent 309c74249e
commit cd704a92e7
8 changed files with 232 additions and 70 deletions
+17
View File
@@ -8435,5 +8435,22 @@
- 防复发:训练门已开不得跳过未用的 dated collect。`canAdopt` 不得单独构成跳过财务/搬家/健康/职业采集的理由。不得把 BUG-539「家人没有后采用」读成「未问完的经历域也可以结束」。
- 相关记录:BUG-519、BUG-539、BUG-544
- 复发自:BUG-519(采用早退把未用采集域一并吃掉);BUG-539 把该收口写成非缺陷
- 修复版本:`998406ce`
- 修正:`998406ce` 把家人之后的 dated 补采集做成无条件优先,现成搬家 A/B 卡被财务口述挤掉。见 BUG-547。
## BUG-547 | 现成区分卡被口述补采集挤掉
- 状态:resolved
- 首次发现:2026-09-05
- 最近更新:2026-09-05
- 影响面:`buildMethodFollowupPlan``nextDatedCollectFollowup`、精度层 / yearless 区分卡
- 用户现象:学业、感情、事业、家人都已有带年份经历,引擎已经给出搬家 A/B 探针,下一问却变成财务口述采集。
- 触发条件:经典八法覆盖、精度阶段 `d4_refine`、存在可渲染 `choice_frame` 的搬家探针,同时 `DATED_COLLECT_ORDER` 里还有未覆盖域。
- 根因:BUG-546 把家人之后的 `nextDatedCollectFollowup` 从「训练门未开才走」改成无条件执行,且排在精度层搬家卡和 yearless 卡之前。BUG-546 的触发条件本是「没有可用区分题」,实现扩成了「不管有没有区分题都先采集」。
- 修复:家人之后若 yearless 或精度层能拿出 `choice_frame`,先问那张区分卡;只有本轮没有任何可渲染区分卡时才走 dated 补采集。`isRemainingEvidenceCollect``deferAdoption` 的豁免保留。不放宽精确分钟确认门,不改 `DATED_COLLECT_ORDER`
- 验证:`rectification-choice-card` 搬家 A/B 卡用例原样通过;无探针时仍问财务采集;occupation 顺序断言改为 `d2_finance` 并写三栏说明。
- 防复发:dated 补采集不得抢在可渲染区分卡之前。没有区分卡时仍必须继续收未问过的带年份域(BUG-546)。
- 相关记录:BUG-546、BUG-519
- 复发自:BUG-546
- 修复版本:待发布
@@ -41,3 +41,46 @@
| `page.tsx` | 未改 |
未做浏览器真人走查。清单:`docs/testing/rectification-family-collect-continue-20260905.md`。旧会话在部署前仍会按旧逻辑结束。
## BUG-547 · 现成区分卡优先于口述补采集
工作树:`.worktrees/rectification-family-collect-continue-fix-20260905`
分支:`codex/rectification-family-collect-continue-fix-20260905`
基线:`origin/staging` @ `309c7424`(含 BUG-546 的 `998406ce`)。未改 `.gitea/workflows/**`、未动迁移、未升级依赖、未 bump Skill(仍 10.0.14)、未改 `page.tsx`
| 任务 | 状态 | BUG |
| --- | --- | --- |
| 补采集让位于可渲染区分卡 | 完成 | BUG-547 |
| 无区分卡时仍走 dated 补采集 | 完成 | BUG-546 保留 |
### 编号
开工时最大号 BUG-546。本单 **BUG-547**。未占用预留的 BUG-542。
### 实现取舍
`if (!next)` 链里,家人之后先看 yearless / 精度层能否拿出 `choice_frame`,有卡才问卡;没有卡才 `nextDatedCollectFollowup`。精度层抢在采集前必须训练门已开,避免 `lagna_frame` 借走无关探针、在 holdout 未齐时改成区分题。没有把 dated 分支整段挪到 `d4_refine` 之后,因为精度层在没有探针时也会生成无框 `distinguish` 题,整段后移会把 BUG-546 的八方法财务采集再改回去。
### 断言变更
| 项 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `career evidence alone still does not cover occupation` 下一问 | `occupation` | `d2_finance` | 家人已覆盖且无区分卡,BUG-546 继续收未用带年份域;职业仍 uncovered |
| `training gate open does not mint yearless…` 下一问 | `occupation` | `d2_finance` | yearless 存在/质量卡被丢掉后没有可渲染区分卡,先财务采集 |
`distinguish follow-up copy forbids competing-chart ranking` 未改断言。新增无探针对照:同样证据集、没有搬家探针时下一问仍是财务采集。
### 测试
| 命令 | 结果 |
| --- | --- |
| choice-card + occupation-coverage-exit | 55/55 |
| eight-method + choice-card + occupation | 117/117 |
| collect-stall / collect-direction / provisional-adopt / range-offer / adopt-narration / adopt-flow-fix / eight-method / choice-card / occupation / agent-voice | 192/192 |
| `npx tsx --test tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts` | 895 项;产品失败 0。整包曾出现 1 次 Docker 迁移夹具失败(`v9 agent api migration…`),单测重跑 1/1 通过 |
| `tsc --noEmit` | 0 错 |
| 改动文件 eslint `--quiet` | 0 error |
| `page.tsx` | 未改 |
未做浏览器真人走查。旧会话在部署前仍会按 `998406ce` 把现成区分卡挤掉。
+1 -1
View File
@@ -53,7 +53,7 @@
| `TASK-rectification-quality-probe-dedupe-20260904.md` | `PROGRESS-rectification-quality-probe-dedupe-20260904.md` | 候选区分阶段同一道"上大学"题问两次:`pickProbe` 按种类取第一条质量探针无视 `semantic_key`(第二次答案绑到错的证据);引擎对毕业等学业 kind 也套"高考发挥"模板;同域同分组质量探针不去重 | 已验收通过(浏览器走查欠) | `codex/rectification-quality-probe-dedupe-20260904`BUG-540541 |
| — | `PROGRESS-rectification-adopt-card-anchor-20260905.md` | 采用卡钉在历史采集题下,最新旁白没有卡;单分钟交付旁白机器腔 | 已验收通过(浏览器走查欠) | `codex/rectification-quality-probe-dedupe-20260904`BUG-544545 |
| — | `PROGRESS-rectification-family-collect-continue-20260905.md` | 家人答「没有」后直接给结果,未继续收能区分分钟的经历 | 验收未通过(1 项行为回归 + 2 条断言未更新,见修复单) | `codex/rectification-quality-probe-dedupe-20260904`BUG-546 |
| `TASK-rectification-family-collect-continue-fix-20260905.md` | | `998406ce` 修复单:家人之后的 dated 补采集无条件抢在现成区分卡之前(choice-card A/B 卡用例回归),另两条顺序断言缺三栏说明 | 待执行 | `codex/rectification-family-collect-continue-fix-20260905`BUG-547 |
| `TASK-rectification-family-collect-continue-fix-20260905.md` | `PROGRESS-rectification-family-collect-continue-20260905.md` | `998406ce` 修复单:家人之后的 dated 补采集无条件抢在现成区分卡之前(choice-card A/B 卡用例回归),另两条顺序断言缺三栏说明 | 待验收 | `codex/rectification-family-collect-continue-fix-20260905`BUG-547 |
| `TASK-api-not-configured-mislabel-20260904.md` | — | 16 处路由把数据库瞬断(部署切换窗口)兜底翻译成 503「服务尚未配置」;改为仅配置错误用该文案,其余 `service_unavailable`,收敛为共享 helper | 待执行 | `codex/api-not-configured-mislabel-20260904`BUG-542 起) |
| `TASK-rectification-ux-20260902.md` | `PROGRESS-rectification-ux-20260903.md` | 会话面空白假死与交互摩擦 | 已验收 | `d159f08e`(09-03 在新基线重做后合入,BUG-505509 |
@@ -17,6 +17,15 @@
- ✅ 预期:下一句是还没问过的带年份经历。学业/感情/事业都有了的话,应是「钱的方面,还记得哪年收入明显变过、有过大笔支出,或欠过债吗?」不是采用旁白,也不是「再问下去也分不开」。
- ❌ 失败:直接出现「我按你说的经历认真分析过了,下面是这次的结果。」或时间卡。
## 1b. 已有搬家区分卡时不要改口问钱(P0 · BUG-547)
同一轮里如果已经出现过搬家/离乡的 A/B 卡(「某年前后,有没有明显搬家…」),答完家人「没有」之后:
- ✅ 预期:下一问仍是那张能分开剩余分钟的选择卡,不是财务口述。
- ❌ 失败:改口问「钱的方面,还记得哪年收入明显变过…」。
没有区分卡、只说「没有」时,仍走第 1 条的财务采集。
## 2. 这题还没答时不要出时间卡(P0 · 叠 BUG-544
家人答「没有」后,财务(或下一域)口述题还在: