fix(rectification): keep range-card tie-break entry honest after D9/D10 answers (BUG-666~668)
Independent Staging Quality Gate / validate (push) Successful in 13m8s
Independent Staging Quality Gate / publish (push) Canceled after 9m59s

Hide the button once both personality cards are answered, persist the second card in the same opt-in round, and freeze Skill 10.0.26.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-13 22:45:31 +08:00
co-authored by Cursor
parent 192845ce2f
commit 9912760104
44 changed files with 1046 additions and 184 deletions
+49 -1
View File
@@ -10321,7 +10321,7 @@
- 修复:卡下可选按钮「再答两道参考题微调排序」。点了才走 `tie_break` 落 D9/D10 `varga_style`(±1、不淘汰、不改 `can_adopt`)。不点不出。
- 验证:`frontend/tests/rectification-targeted-collect-cards-20260913.test.ts` 不点不出;入口文案进 `listUserVisibleCopy()`
- 防复发:性格题不得在定向补事之前或未点入口时成为下一问;`SCORE_DELTA` 与淘汰阈值不得被这条路径改掉。
- 相关记录:BUG-629、BUG-651、BUG-661
- 相关记录:BUG-629、BUG-651、BUG-661、BUG-666、BUG-667
- 复发自:BUG-629(性格题降权后没有可选入口)
- 修复版本:待发布
@@ -10357,6 +10357,54 @@
- 复发自:BUG-653(刷新只复用首轮边界层)
- 修复版本:待发布
## BUG-666 | 参考题入口在两道答完后仍显示,再点报没有可答题
- 状态:resolved
- 首次发现:2026-09-13
- 最近更新:2026-09-13
- 影响面:`rangeDeliveryForSnapshot`、GET `range_delivery.tie_break_available``POST /api/rectification/cases/[caseId]/tie-break`
- 用户现象:「目前范围」卡下「再答两道参考题微调排序」两道都答完后按钮还在;再点出现红字「现在没有可答的参考题」。
- 触发条件:候选 D9/D10 仍不同,但 D9/D10 `varga_style` 都已问过;或从未有可渲染的参考题。
- 根因:入口只看 `window_scan.d9_candidates_differ / d10_candidates_differ`。路由用 `tieBreakPersonalityFollowup` 跳过已问键,两道答完返回空 → 409 `tie_break_unavailable`。前端把 409 写进 `setError`
- 修复:GET 与点击路径共用「还有未问的 D9/D10 `varga_style` 且未采用」。没有剩余题时不画按钮;若仍点到空池,只重拉快照,不把 409 文案写到界面。
- 验证:`frontend/tests/rectification-tie-break-entry-20260913.test.ts`
- 防复发:不得只用 window_scan 决定入口。planner 不得打进客户端包。性格题仍不得自动成为下一问(BUG-663)。
- 相关记录:BUG-663、BUG-667、BUG-629
- 复发自:BUG-663
- 修复版本:待发布
## BUG-667 | 点一次参考题入口只出一道,不会自动接第二道
- 状态:resolved
- 首次发现:2026-09-13
- 最近更新:2026-09-13
- 影响面:`requestTieBreakPersonality``persistNextInterviewAfterChoice``expectedAnswerSchemaFor`
- 用户现象:按钮写「再答两道」,点一下只出 D9;答完回到范围卡,要再点一次才出 D10。
- 触发条件:用户从范围卡点入口,答完第一道 `varga_style`
- 根因:入口只持久化当前下一问。答完后 `buildMethodFollowupPlan``tieBreakRequested`,且 `varga_style` 不算剩余区分题,`can_adopt` 仍为真时跳过下一问持久化。
- 修复:入口落下的焦点 schema 带 `tie_break_round: true`。答完该轮焦点时继续 `tieBreakPersonalityFollowup` 落第二道;没有第二道或两道都问完则结束该轮,回到范围卡。自动接第二道只在这一轮内生效。
- 验证:`frontend/tests/rectification-tie-break-entry-20260913.test.ts`:未问时 D9、问过 D9 后 D10、两道都问过则空;schema 带 round 标记;计分仍 `tie_break`、不淘汰。
- 防复发:不得把任意性格题答完都当成参考题轮次。`can_adopt` 与淘汰阈值不得因参考题改变。
- 相关记录:BUG-666、BUG-663、BUG-629
- 复发自:BUG-663
- 修复版本:待发布
## BUG-668 | 定向补事死辅助函数、Skill 三选项与引擎 mock 签名分叉
- 状态:resolved
- 首次发现:2026-09-13
- 最近更新:2026-09-13
- 影响面:`collection-question-pool.ts``skills/jyotish-birth-time-rectification``scripts/rectification/event_probes.py`
- 用户现象:卡上是四个选项(含「这条先跳过」),Skill 仍写三个。生产代码为迁就测试替身把 `_vim_start_dates` / `_boundary_windows` 拆成两套调用。
- 触发条件:读 Skill 或跑刷新边界;`isTargetedCollectDeclined` / `isTargetedCollectYearFollowup``src/` 调用方。
- 根因:BUG-661 曾用「整池关闭」脚枪,辅助函数留下;Skill 10.0.25 未写入第四选项;刷新参数用空 kwargs 避开旧 mock。
- 修复:删除无调用方的两个导出。Skill 10.0.25 冻结,现行 10.0.26 写「有 / 没有 / 记不清 / 这条先跳过」。`_union_boundary_dates` 一律把 `include_pratyantar``min_days` 传给生产函数,不再为 mock 分叉。
- 验证:源切片确认两个导出已删;Skill 合同锁 10.0.26 文案;`tests/test_rectification_event_probes.py``tests/test_rectification_refresh_r3_r4.py`
- 防复发:Skill 选项数必须与卡一致;生产调用不得为测试替身分叉。10.0.25 仍可 exact-resolve。
- 相关记录:BUG-661、BUG-621、BUG-665
- 复发自:—
- 修复版本:待发布
## BUG-669 | 定向补事快照投影拿不到 choice_card,刷新后卡点不动
- 状态:resolved
@@ -0,0 +1,33 @@
# 进度 · 参考题入口与点一次两道(2026-09-13)
## 范围
- 分支:`codex/rectification-tie-break-entry-fix-20260913`(基于 `origin/staging` @ `192845ce`
- 任务单:`docs/tasks/TASK-rectification-tie-break-entry-fix-20260913.md`
- 产品决策:点一次连出两道,问完入口消失;文案仍是「再答两道参考题微调排序」
- BUG-666:入口与点击路径共用「还有未问的 D9/D10 `varga_style`
- BUG-667:入口焦点带 `tie_break_round`,答完第一道自动落第二道
- BUG-668:删死辅助函数;Skill 10.0.26 写第四选项;引擎调用不再为 mock 分叉
- 不改 `SCORE_DELTA``MIN_ACCEPTANCE_*`、确认门;性格题不得回计分池
## 完成
- T1`tieBreakPersonalityAvailable` 作为 GET `tie_break_available` 与空池判断;`window_scan` 不再单独点亮按钮;409 只重拉快照,不写红字
- T2`expectedAnswerSchemaFor` 写入 `tie_break_round``persistNextInterviewAfterChoice` 在该轮内继续 `tieBreakPersonalityFollowup`,绕过 `can_adopt``varga_style` 的跳过
- T3:删除 `isTargetedCollectDeclined` / `isTargetedCollectYearFollowup`Skill 10.0.25 冻结、10.0.26 现行;`_union_boundary_dates` 一律传 `include_pratyantar``min_days`
- T4`frontend/tests/rectification-tie-break-entry-20260913.test.ts`、场景 0d、BUG-666668、CHANGELOG
## 验收(本机)
- `./node_modules/.bin/tsc --noEmit`0 错
- `npm run lint`0 error120 warning,既有)
- 相关 TAP fail=0`rectification-tie-break-entry-20260913`、定向补事入口、Skill registry / contracts / agent / 版本钉扎套件共 1220+167
- 全量 TAP3148 条,pass 3133fail 15;全部是并行 Docker `database migration failed`,与本改动无关
- `next build --webpack``┌ ○ /`Static);`ƒ /api/rectification/cases/[caseId]/tie-break` 仍在
- `rootMainFiles` gzip-9 合计 **130934 B**(与 `192845ce` 相同,相对 `ab1ade59` 130872 B 为 +0.047%
- 未做登录态真机场景 0d
## 未做
- 未 commit / 未 push
- planner 未打进客户端包(`rangeDeliveryForSnapshot` 只收布尔字段)
+1 -1
View File
@@ -180,7 +180,7 @@
| `TASK-rectification-probe-supply-research-20260913.md` | — | 研究单:六题后引擎在剩余候选上再出带年月题的四种放宽规则,20 例公开 AA 数据离线量收益,有收益才立实现单 | 已合入(离线测量,不改线上) | `b063c668` |
| `TASK-rectification-refresh-r3-r4-20260913.md` | `PROGRESS-rectification-refresh-r3-r4-20260913.md` | 刷新阶段 R3MIN_BOUNDARY_DAYS 45→30+ R4pratyantar 与 D9/D10 上升 Narayana);首轮出题不变。即使放宽仍有 0 题例子,定向补事另线保留(BUG-664/665) | 已实现 `ab1ade59`,已部署;2026-09-13 验收通过(实现单由执行方自拟,无产品决策记录段;收益口径见研究文档) | `codex/rectification-refresh-r3-r4-20260913` |
| `TASK-rectification-tie-break-entry-fix-20260913.md` | | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10(BUG-666668 | 待执行 | `codex/rectification-tie-break-entry-fix-20260913` |
| `TASK-rectification-tie-break-entry-fix-20260913.md` | `PROGRESS-rectification-tie-break-entry-fix-20260913.md` | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10BUG-666668Skill 10.0.26 | 待验收 | `codex/rectification-tie-break-entry-fix-20260913` |
| `TASK-rectification-targeted-card-dead-20260913.md` | `PROGRESS-rectification-targeted-card-dead-20260913.md` | **P0**:定向补事卡在快照投影里拿不到 `choice_card`(承接焦点分支不重建 `choice_frame`),卡片看得见点不动、流程停在采集等待态;模型还会把定向题改写成口述题(BUG-669~671)。先于 tie-break 修复单执行 | 待验收 | `codex/rectification-targeted-card-dead-20260913` |
@@ -61,7 +61,9 @@
- 题干与卡下提示写「现在还剩 HH:MM–HH:MM 里 N 个候选」,不得写「能把 04:51 和 05:06 分开」这类两端钟点
- 四条线都点「没有」后出「目前范围」卡;卡下有「还能再收窄」
- 不点「再答两道参考题微调排序」时不得出现 D9/D10 性格对照卡
- 点了该入口后才出现性格对照卡;答完后头名可变,但 `can_adopt` 不变、没有淘汰
- 点了该入口后才出现性格对照卡;点一次连出两道(先 D9 再 D10);两道答完后入口消失,回到「目前范围」
- 答完后头名可变,但 `can_adopt` 不变、没有淘汰
- 全程不出现红字「现在没有可答的参考题」
- 答完一张定向卡后刷新页面,卡片仍可点
- 整轮不得出现看得见点不动的卡
- 全程不出现「这次给出」「最终」