fix(rectification): invite-first collect, holdout at 4 events, Skill 10.0.23 (BUG-646–648)

Stop domain-wheel collecting and age-band years in prompts. Ask until the training gate, then discriminate until convergence, then deliver a range plus a concrete follow-up. Reserve holdout only with four dated events.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-11 01:43:02 +08:00
co-authored by Cursor
parent cb04529728
commit dd8f35f7ba
70 changed files with 2576 additions and 1183 deletions
+48
View File
@@ -10036,3 +10036,51 @@
- 相关记录:BUG-644、BUG-626、BUG-627
- 复发自:无
- 修复版本:`a3a51c32`
## BUG-646 | 采集穷尽后无下一问,却显示「没有拿到下一个问题」并说做不了
- 状态:resolved
- 首次发现:2026-09-10
- 最近更新:2026-09-10
- 影响面:`persistExhaustionCollect`、收集问题池、`rectificationQuestionGapState`、Skill 10.0.23
- 用户现象:各领域采集都答完或只有一两件带年月经历时,助手停在门槛句或交付口吻,下面是「没有拿到下一个问题。」,没有结果卡,也没有可继续说的入口。
- 触发条件:训练门仍关且收集池已空;或训练门已开、选择题增益见底。
- 根因:穷尽出口只写「还差 N 件,领域不限」且不落焦点。客户端把「无焦点 + 列表成功」当成问题加载失败。产品不允许「做不了」,也不允许固定题数。
- 修复:训练门关且池空时只写精确缺口句,Case 保持开放,占位「再说一件带年月的事」,客户端进入 `collect_waiting`,不显示「没有拿到下一个问题」。训练门开且增益见底时交付区间卡加一句具体「再补什么」。Skill 升 10.0.23。
- 验证:`rectification-exhaustion-exit-20260906.test.ts``rectification-surface-state.test.ts``rectification-collection-question-pool.test.ts`
- 防复发:训练门关不得出卡、不得出现禁词;无焦点且训练门关不得走 `unavailable`
- 相关记录:BUG-558、BUG-627、BUG-645、BUG-647、BUG-648
- 复发自:BUG-558(关顶不落焦点)
- 修复版本:待提交
## BUG-647 | 恰好三件带月经历时一件被留作 holdout,训练门永远差一件
- 状态:resolved
- 首次发现:2026-09-10
- 最近更新:2026-09-10
- 影响面:`split-holdout.ts``scripts/rectification/case_holdout.py``trainingScoreableGate`、验证报告 Real Case Calibration 行
- 用户现象:按要求给了三件带年月经历,仍到不了选择题,看起来像还差一件。
- 触发条件:带月事件恰好 3 件、2 个种类;旧规则从第 2 件起就留 holdout。
- 根因:`MIN_EVENTS_TO_RESERVE_HOLDOUT=2`,3 件里留 1 件后训练只剩 2,达不到 `MIN_ACCEPTANCE_EVENTS=3`
- 修复:≥4 件才留 1 件 holdout;恰好 3 件全部训练。回执 `holdout.status="not_reserved_min_events"`,报告 Real Case Calibration 写 `not reserved`。确认门与引擎计分不变。
- 验证:`rectification-split-holdout.test.ts``tests/test_candidate_discriminator_contract.py`
- 防复发:3 件必须全进训练;4 件才允许 holdout。
- 相关记录:BUG-646、BUG-648
- 复发自:无
- 修复版本:待提交
## BUG-648 | 开场后按领域轮转盘问,题干年份来自生日而不是用户说过的事
- 状态:resolved
- 首次发现:2026-09-10
- 最近更新:2026-09-10
- 影响面:`collection-question-pool.ts``method-followup.ts``user-copy.ts`、Skill 10.0.23
- 用户现象:刚说完一两件,系统立刻按家人/学业/财务轮着问,题干还带着「2020 年前后」这类不是用户说的年份。
- 触发条件:开场写入第一件带年月经历后,`DATED_COLLECT_ORDER``COLLECT_QUESTION_YEAR_CUE`(年龄段中点)生效。
- 根因:采集顺序按方法覆盖轮转,年份线索来自出生年+典型年龄段。这是上午写进 BUG-642 的口径,产品已撤回。
- 修复:收集池按信息价值排序:邀请「还有吗」→ 用户年份锚定追问 → 无年份通用补问。题干不得出现年龄段年份。邀请拒答不把整个 `other` 列入禁问。
- 验证:`rectification-spoken-collect.test.ts``rectification-collection-question-pool.test.ts``agent-voice-copy-contract.test.ts`
- 防复发:`user-copy.ts` 不得再出现无用户年份的「年前后」;邀请在产出期间必须排第一。
- 相关记录:BUG-642、BUG-546、BUG-641、BUG-646
- 复发自:BUG-642(年份线索口径错误)
- 修复版本:待提交