Accepted the targeted-collect cards round and the refresh R3/R4 round; the range-card tie-break entry keeps showing after D9/D10 are answered and errors on click. Product decision: one click asks both cards, then the entry goes away. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0193vBv6w5MV2cifdTUu9H5P
5.7 KiB
5.7 KiB
TASK · 参考题入口一次连出两道、问完消失(修复单,2026-09-13)
- 基线:
origin/staging@ab1ade59(已部署,/api/healthdeployment.gitCommit = ab1ade59) - 分支:
codex/rectification-tie-break-entry-fix-20260913,基于origin/staging - 执行方:coding agent;验收:Claude
- BUG 编号起点:BUG-666(开工时核对
docs/BUG_HISTORY.md最大号,应为 665) - 上游单:
TASK-rectification-targeted-collect-cards-20260913.mdT3(BUG-663)已实现并验收,本单只补它的死角 - 不改
SCORE_DELTA、MIN_ACCEPTANCE_*、确认门;性格题不得回计分池(BUG-629);can_adopt不得因参考题变化
1. 事故实证(代码走查,ab1ade59)
divergence-panel.tsrangeDeliveryForSnapshot里tieBreakAvailable只看window_scan.d9_candidates_differ || d10_candidates_differ(以及原始快照/回执里的同名字段),不看还有没有没问过的 D9/D10varga_style对照题。rectification-range-delivery.tsx只要delivery.tie_break_available为真就渲染按钮「再答两道参考题微调排序」。- 点击走
POST /api/rectification/cases/[caseId]/tie-break→requestTieBreakPersonality→tieBreakPersonalityFollowup;该函数跳过askedKeys里已问过的varga.d9*/varga.d10*。两道都答过后返回null,路由回409 tie_break_unavailable,前端setError("现在没有可答的参考题")——用户点到的是红字报错,不是入口消失。 - 每点一次只落一道卡:答完 D9 后
buildMethodFollowupPlan不带tieBreakRequested,不会自动接 D10,用户必须再点一次入口。文案写的是「再答两道」。
2. 决策记录(产品负责人 2026-09-13)
点一次连出两道,问完入口消失。 具体:
- 点击入口后出 D9 卡;答完自动接 D10 卡;两道答完回到「目前范围」卡,入口不再出现。
- 没有可答的 D9/D10 对照题时,入口一开始就不渲染;任何情况下点击不得出现红字报错。
- 入口文案保持「再答两道参考题微调排序」不变。
- 参考题仍只调排序:
tie_break(±1、不淘汰、不改can_adopt),不得回到计分池。
3. 硬红线
- 参考题不得在定向补事之前、或未点入口时成为下一问(BUG-663 防复发)。
- 自动接第二道只在「本次入口触发的这一轮」内生效;不得变成答完任意性格题就继续追问。
tie_break_available必须由「存在未问的 D9/D10varga_style题」决定,不得只读window_scan标志位。- 不得为此把 planner 打进客户端包(BUG-663 实现里已特意避开,沿用服务端投影)。
- 既有测试总数不降;改断言写「原值 / 新值 / 原因」三栏。
4. 任务分解
- T1 入口可用性(BUG-666):
tie_break_available改为服务端判定「还有未问的 D9/D10varga_style对照题且未采用」。GET 快照投影(case-dossier-response.ts→rangeDeliveryForSnapshot)与tie-break路由用同一判定来源,避免两边漂移。验收:两道都答完后卡下不再有入口;contrast packet 里没有 D9/D10 题时入口不出现;点击路径不再产生409 tie_break_unavailable的用户可见报错。 - T2 一次两道(BUG-667):点入口记一次「参考题轮次」状态(焦点/话题标记即可,不新建表)。答完第一道后自动落第二道
varga_style焦点;两道答完(或第二道无题)结束该轮,回到范围卡。验收:点一次后依次出现 D9、D10 两张卡,中途不需要再点入口;两道答完后rounds.kind=tie_break、eliminated_ids为空、can_adopt与点击前一致。 - T3 清理(可让步,BUG-668):
collection-question-pool.tsisTargetedCollectDeclined、isTargetedCollectYearFollowup在src/已无调用,删除或写明保留理由(留着容易被再次误用为「整池已关」,正是 BUG-661 的老根因)。skills/.../SKILL.md定向补事写「有 / 没有 / 记不清」三项,实际卡片是四项(卡片合同serverOwnedChoiceCopy要求四个互不相同的标签,第四项是「这条先跳过」)。把 Skill 口径与卡片对齐。若改 Skill 正文则升 10.0.26 并按 BUG-621 验历史可打开。scripts/rectification/event_probes.py里为兼容旧 mock 写的条件传参(window_kw = {} if threshold == MIN_BOUNDARY_DAYS、include_pratyantar两分支各调一次_vim_start_dates)改成统一签名,同步更新 mock。业务代码不为测试替身让步。
5. 让步顺序
T1 不可省;T2 次之;T3 可拆下一单。若 T2 当轮做不完,至少让入口在无题时消失(T1),不得留报错死角。
6. 开工前置命令
git fetch origin --prune
git worktree add -b codex/rectification-tie-break-entry-fix-20260913 .worktrees/rectification-tie-break-entry-fix-20260913 origin/staging
grep -o "^## BUG-[0-9]*" docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1 # 应为 665
cd frontend && npm test -- tests/rectification-targeted-collect-cards-20260913.test.ts tests/rectification-range-delivery-20260907.test.ts tests/agent-voice-copy-contract.test.ts
7. 验收口径
tsc --noEmit0 错;npm run lint0 error;相关套件 fail=0;测试总数 ≥ 基线(ab1ade59实测 3139,其中 27 项为无 Docker 的数据库/部署套件,与基线逐条一致)。next build后/仍○ Static;首屏rootMainFilesgzip-9 与ab1ade59的 130872 B 相差 ±2% 内。- 真机场景 0d 补两条:两道参考题答完后入口消失;全程不出现红字「现在没有可答的参考题」。
- BUG-666~668 入
docs/BUG_HISTORY.md;CHANGELOG 只在用户可见行为变化时写。