Files
Jyotisha/docs/tasks/TASK-rectification-tie-break-entry-fix-20260913.md
T
Jesse_ChenandClaude Opus 5 0b7d43e622 docs(tasks): tie-break entry fix brief (BUG-666~668) after accepting 530f260f and ab1ade59
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
2026-09-13 12:10:36 +00:00

5.7 KiB
Raw Blame History

TASK · 参考题入口一次连出两道、问完消失(修复单,2026-09-13)

  • 基线:origin/staging @ ab1ade59(已部署,/api/health deployment.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.md T3(BUG-663)已实现并验收,本单只补它的死角
  • 不改 SCORE_DELTAMIN_ACCEPTANCE_*、确认门;性格题不得回计分池(BUG-629);can_adopt 不得因参考题变化

1. 事故实证(代码走查,ab1ade59

  1. divergence-panel.ts rangeDeliveryForSnapshottieBreakAvailable 只看 window_scan.d9_candidates_differ || d10_candidates_differ(以及原始快照/回执里的同名字段),不看还有没有没问过的 D9/D10 varga_style 对照题
  2. rectification-range-delivery.tsx 只要 delivery.tie_break_available 为真就渲染按钮「再答两道参考题微调排序」。
  3. 点击走 POST /api/rectification/cases/[caseId]/tie-breakrequestTieBreakPersonalitytieBreakPersonalityFollowup;该函数跳过 askedKeys 里已问过的 varga.d9* / varga.d10*。两道都答过后返回 null,路由回 409 tie_break_unavailable,前端 setError("现在没有可答的参考题")——用户点到的是红字报错,不是入口消失。
  4. 每点一次只落一道卡:答完 D9 后 buildMethodFollowupPlan 不带 tieBreakRequested,不会自动接 D10,用户必须再点一次入口。文案写的是「再答两道」。

2. 决策记录(产品负责人 2026-09-13)

点一次连出两道,问完入口消失。 具体:

  1. 点击入口后出 D9 卡;答完自动接 D10 卡;两道答完回到「目前范围」卡,入口不再出现。
  2. 没有可答的 D9/D10 对照题时,入口一开始就不渲染;任何情况下点击不得出现红字报错。
  3. 入口文案保持「再答两道参考题微调排序」不变。
  4. 参考题仍只调排序:tie_break(±1、不淘汰、不改 can_adopt),不得回到计分池。

3. 硬红线

  • 参考题不得在定向补事之前、或未点入口时成为下一问(BUG-663 防复发)。
  • 自动接第二道只在「本次入口触发的这一轮」内生效;不得变成答完任意性格题就继续追问。
  • tie_break_available 必须由「存在未问的 D9/D10 varga_style 题」决定,不得只读 window_scan 标志位。
  • 不得为此把 planner 打进客户端包(BUG-663 实现里已特意避开,沿用服务端投影)。
  • 既有测试总数不降;改断言写「原值 / 新值 / 原因」三栏。

4. 任务分解

  • T1 入口可用性(BUG-666tie_break_available 改为服务端判定「还有未问的 D9/D10 varga_style 对照题且未采用」。GET 快照投影(case-dossier-response.tsrangeDeliveryForSnapshot)与 tie-break 路由用同一判定来源,避免两边漂移。验收:两道都答完后卡下不再有入口;contrast packet 里没有 D9/D10 题时入口不出现;点击路径不再产生 409 tie_break_unavailable 的用户可见报错。
  • T2 一次两道(BUG-667:点入口记一次「参考题轮次」状态(焦点/话题标记即可,不新建表)。答完第一道后自动落第二道 varga_style 焦点;两道答完(或第二道无题)结束该轮,回到范围卡。验收:点一次后依次出现 D9、D10 两张卡,中途不需要再点入口;两道答完后 rounds.kind=tie_breakeliminated_ids 为空、can_adopt 与点击前一致。
  • T3 清理(可让步,BUG-668
    • collection-question-pool.ts isTargetedCollectDeclinedisTargetedCollectYearFollowupsrc/ 已无调用,删除或写明保留理由(留着容易被再次误用为「整池已关」,正是 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_DAYSinclude_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 --noEmit 0 错;npm run lint 0 error;相关套件 fail=0;测试总数 ≥ 基线(ab1ade59 实测 3139,其中 27 项为无 Docker 的数据库/部署套件,与基线逐条一致)。
  • next build/○ Static;首屏 rootMainFiles gzip-9 与 ab1ade59 的 130872 B 相差 ±2% 内。
  • 真机场景 0d 补两条:两道参考题答完后入口消失;全程不出现红字「现在没有可答的参考题」。
  • BUG-666668 入 docs/BUG_HISTORY.md;CHANGELOG 只在用户可见行为变化时写。