fix(rectification): bind quality cards to the followup probe
Independent Staging Quality Gate / validate (push) Successful in 23m15s
Independent Staging Quality Gate / publish (push) Failing after 36s

Graduation no longer gets the college-experience question, and identical D24 splits only ask once.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-04 23:47:51 +08:00
co-authored by Cursor
parent 73c2a1a51e
commit 40c623edf6
9 changed files with 462 additions and 9 deletions
+32
View File
@@ -8340,3 +8340,35 @@
- 相关记录:BUG-414、BUG-418
- 复发自:无
- 修复版本:待发布
## BUG-540 | 候选区分阶段同一道「上大学」发挥题问两次,第二次绑错证据
- 状态:resolved
- 首次发现:2026-09-04
- 最近更新:2026-09-04
- 影响面:`choice-card.ts::pickProbe``ChoiceCardFollowup.probe_id`
- 用户现象:候选区分阶段连续两张选择卡题干、选项完全相同(「某年某月那次上大学,更接近如愿、将就调剂、发挥失常还是说不清」)。用户两次都作答,第二次答完范围继续收窄。
- 触发条件:学业域已核实入学与毕业两条事件;引擎对两条各发一条 `known_event_quality`;第二张卡的 followup 指向毕业探针。
- 根因:`pickProbe``choice_kind === "event_quality"` 时取池里第一条质量探针就返回,`semantic_key` 匹配写在后面,永远轮不到。`periodFor``eventQuestionPrompt` 都从这条错探针取日期和题干。用户第二次是对着入学题给毕业探针打分。
- 修复:匹配顺序改为 `probe_id``semantic_key` → 无键时才按种类兜底。有键但找不到对应探针时返回 `null`,不出卡,不再退回同种类第一条。`question_id` 在有键时带上该键,避免两张质量卡共用一个 id。
- 验证:同域两条质量探针、followup 指向第二条时,`buildChoiceFrame``question_id`、日期标签、`user_meaning` 全部来自第二条;指向第一条不受影响。有键找不到探针时 `buildChoiceFrame``null``rectification-choice-card` 既有 varga_style / existence 断言仍过。
- 防复发:不得先按 `choice_kind` 取第一条质量探针再匹配 `semantic_key`。有 `probe_id` / `semantic_key` 时不得退回同种类第一条。
- 相关记录:BUG-390、BUG-541
- 复发自:无
- 修复版本:待发布
## BUG-541 | 毕业等学业 kind 套高考发挥题,同切分质量探针占满名额
- 状态:resolved
- 首次发现:2026-09-04
- 最近更新:2026-09-04
- 影响面:`event_probes.py::_quality_distinguish_probes`
- 用户现象:毕业事件也被写成「上大学 / 调剂 / 发挥失常」。即便卡面绑对了,第二道仍不带来新切分信息。
- 触发条件:学业域同时有入学与毕业;两条 `known_event_quality` 的 yes/no 分钟集合相同(同一 D24 星座切分),只有 `semantic_key` / `target_evidence_id` / `candidate_split_hash` 不同。
- 根因:(1) `_quality_user_meaning``QUALITY_DISTINGUISH_OPTIONS["education"]` 只看 `domain == "education"`,不看 `event_kind`。采集线会产生 `education_completion`,模板仍是 BUG-390 的高考发挥题。(2) `candidate_split_hash` 掺了年份,同分组拦不住;`MAX_QUALITY_DISTINGUISH_PROBES = 2` 被两条信息相同的探针占满。
- 修复:质量探针只对 `education_start` / `education_change` / `education_interruption` 发出;`education_completion` 与其它 kind、以及非学业域不发。同域同 yes/no 集合只保留信息增益最高、并列取时间最早的一条;被去掉的不计入名额。不改四选项文案,不改 `candidate_split_hash`,不新造毕业体验模板。
- 验证:入学 + 毕业 → 一条质量探针且 `target_evidence_id` 指向入学。仅毕业 → 零条质量探针;训练门仍开时仍有 dasha 存在性探针。两条可发事件同分组 → 一条;`_select_quality_distinguish_rows` 不同分组 → 两条,第三条不超过上限 2。`test_probe_question_contract` 四选项合同仍过。
- 防复发:学业质量探针必须看 `event_kind`(或 `kind`),不得对 `education_completion` 发。同域同 yes/no 集合不得发第二条。不得改 `QUALITY_DISTINGUISH_OPTIONS` 文案或 `candidate_split_hash` 算法来「修」去重。
- 相关记录:BUG-390、BUG-540
- 复发自:BUG-390(质量探针只对学业发出,但学业内 kind 未收紧)
- 修复版本:待发布