fix(rectification): persist refreshed probes only when the engine has new questions (BUG-655)

Empty refreshes were writing inference rows, and GET-selected probe keys could miss inference_state, so persist rejected the next card.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-12 01:51:57 +08:00
co-authored by Cursor
parent 6c9a089620
commit 512be9b76e
6 changed files with 450 additions and 23 deletions
@@ -0,0 +1,35 @@
# 进度 · 刷新只在真有新题时写库,GET 选中探针必须落下(2026-09-12
## 范围
- 分支:`codex/rectification-targeted-collect-persist-20260911`(基于 `origin/staging` @ `6c9a0896`
- 任务单 `TASK-rectification-targeted-collect-persist-20260911.md` 不在本仓 / 远端;按用户补进 T0/T3 的条款执行
- BUG-655:刷新无新题不得写推理账本;并入探针须与已答同名;GET 选中的 key 必须能 stamp 上 `probe_id`
- 不改确认门、`SCORE_DELTA`、Skill 版本
## T0 取证(夹具,不含真实案例 ID)
任务单 §1b 快照文件未找到。用与 0b 相同的虚构第六题后状态取证:
- 未映射进 `inference_state.probes` 时:GET key `family.2018.05.dasha_boundary`persist `invalid_choice_schema`
- 刷新并入后最后一行推理记录:`reason=supersede``candidates=6``candidate_set_id=04:48-05:07:04:48,04:53,04:54,04:59,05:06,05:07``refresh_count=1`
- 并入后 GET 同一 keypersist `created`
## 完成
- 刷新只在映射出可问新题时写库;空题 / 空候选 / `candidate_set_id` 变更都 `rectification_refresh_persist_skipped`
- 并入探针 id 跟已答同一规则:`probe:<semantic_key>` 或带 split hash
- 引擎只给 receipt 探针时也会映射进 `inference_state.probes` 再交给 GET
- BUG-655、CHANGELOG、场景 0b/0c
## 验收(本机,未部署)
- `frontend` `tsc --noEmit` 0 错
- eslint 变更文件 0 error
- `rectification-probe-pool-exhausted-20260911.test.ts` 10 + `rectification-server-focus.test.ts` 20 + `rectification-answer-choice.test.ts` 34**64 / 64**
- Python 未改。`run_quality_gate.py --profile quick`733 passed / 1 failed / 1 skipped。失败项是既有 `test_shadbala_endpoint_returns_ranked_planet_strength``core_sixfold` vs 含 `advanced_evidence`),与本单刷新持久化无关
## 未做
- 未部署后真机按 0c 走一遍
- 任务单原文与 §1b 真机快照未入库,无法查真实 Case 最后一行