# TASK · 定向补事改成逐条点选卡 + 文案 + 参考题入口(2026-09-13) - 基线:`origin/staging` @ `4e93ca15`(代码 `5d54d059`,已部署;含 BUG-646~660,Skill 10.0.24) - 分支:`codex/rectification-targeted-collect-cards-20260913`,基于 `origin/staging` - 执行方:coding agent;验收:Claude - BUG 编号起点:**BUG-661**(开工时核对 `docs/BUG_HISTORY.md` 最大号,应为 660) - 决策来源:`TASK-rectification-after-pool-empty-decision-20260913.md`,产品负责人 2026-09-13 拍板:**做 A + D,顺带 C;B 单独研究单**(`TASK-rectification-probe-supply-research-20260913.md`),不与本单混做。 - 不改引擎计分、不改确认门;Skill 若改用户可见流程升 10.0.25(本单预计要升:定向补事的问法变了)。 ## 1. 现状(2026-09-13 真机,5d54d059) 六道带年月题答完 → 刷新 `no_new_probes` → 落下定向补事口述题:「还有4条线能把 04:51 和 05:06 分开:哪年结婚或订婚、哪年收入明显变过、哪年搬家、家里哪年添丁。记得哪件说哪件,年月大概就行。」范围 04:48–05:07,5 簇,头名 32%。流程正确但体感死板:一道开放题堆四条线,没有可点的东西;「04:51 和 05:06」是范围两端而不是剩余候选的说明。 ## 2. 决策记录(产品负责人 2026-09-13) 1. **A**:定向补事拆成一次一条的点选卡。每条线先问「有没有」(有 / 没有 / 记不清),答「有」再口述年月;答「没有」记为该线近年无事(**不计分**,只用于不再问);答「记不清」同「没有」处理但话题状态记 skipped;所有线都问完仍无新事 → 出「目前范围」卡(现有 S3)。 2. **D**:题干与卡下提示说清「现在还剩 04:48–05:07 里 N 个候选,能把它们分开的是这几条线」;不再写「04:51 和 05:06」这类范围端点。 3. **C**:「目前范围」卡下加入口「再答两道参考题微调排序」,点了才出 D9 / D10 性格卡,按 BUG-629 的 `tie_break`(±1、不淘汰、不改 `can_adopt`)。不点不出。 4. 「没有」的信息价值:不计分、不淘汰、不进引擎;只在账本话题里记 `collect:targeted:` declined,防复问;与 BUG-629「无年月否定不参与打分」一致。 5. 四条线都「没有」后直接出卡:接受(现有行为)。 ## 3. 硬红线 - 不改 `SCORE_DELTA`、`MIN_ACCEPTANCE_*`、收敛门;性格题不得回到计分池(BUG-629 防复发)。 - 每条线只问一次;「有」之后的年月追问只问一次,答不出则该线记 skipped。 - 焦点落库走服务端(`persistServerOwnedFocus`),`target_kind` 走 BUG-656 的映射;不得再出现「决策有题、库里无题」(BUG-652 / 657 不变量测试照跑)。 - 文案禁词照旧(领域、任何领域、做不了、材料不够、还差 N 件、才会变、这次给出、最终)。 - 既有测试总数不降;改断言写原值 / 新值 / 原因;记录只用脱敏领域 + 年月。 ## 4. 任务分解 - **T1 逐条点选(BUG-661)**:`collection-question-pool.ts` `targetedCollectPool` 改为按 `remainingLayers → REMAINING_LAYER_DOMAIN` 逐条产出 `{domain, existence_prompt, year_prompt}`,排除已覆盖 / 已 declined / 已 skipped 的线;`method-followup.ts` `targetedCollectFollowup` 产出带 `choice_frame` 的 `collect:targeted:`(选项 A 有 / B 没有 / C 记不清,`scoring:false`);`answer-choice.ts` 处理:A → 落 `collect:targeted::year` 口述焦点(题干「大概哪年几月?」);B → 话题 declined、下一条;C → 话题 skipped、下一条;口述年月 → 走现有 batch 写证据 → 引擎重算 → 回到 S2。验收:§1 序列六题答完后出第一条卡「结过婚或订过婚吗?」;答 B → 下一条卡;答 A → 「大概哪年几月?」;答「2022 年 5 月」→ 账本多一条 relationship 事件、引擎重算、出现新的带年月题或范围句变化;四条都 B → 「目前范围」卡;全程不出现「没有拿到下一个问题」。 - **T2 文案(BUG-662)**:`rangeNarrowHint` / 定向卡题干 / 时间轴行:「现在还剩 04:48–05:07 里 5 个候选,能把它们分开的是这几条线:…」;卡下提示「还能再收窄:如果记得…」保留。`agent-voice-copy-contract` 加禁词「能把 HH:MM 和 HH:MM 分开」(正则)。验收:文案合同测试。 - **T3 参考题入口(BUG-663)**:`rectification-range-delivery.tsx` 卡下入口「再答两道参考题微调排序」→ 点击调用 `set-focus` 落 D9 / D10 `varga_style` 卡(复用 BUG-629 `tie_break` 路径);答完刷新卡,`can_adopt` 不变。验收:不点不出;点后出 D9 卡、答后 `rounds.kind=tie_break`、头名可变但无淘汰。 - **T4 Skill 10.0.25 + 记录**:SKILL.md 与 `references/conversation-strategy.md` 里「定向补事」改为逐条点选;registry;`case-status.ts`;部署后先验 10.0.24 历史可打开(BUG-621);BUG-661~663 入历史;CHANGELOG;PROGRESS;`docs/testing/rectification-scenarios-20260907.md` 加场景 0d。 ## 5. 让步顺序 T3 可拆下一单;T1 + T2 不可省。 ## 6. 开工前置命令 ```bash git fetch origin --prune git worktree add -b codex/rectification-targeted-collect-cards-20260913 .worktrees/rectification-targeted-collect-cards-20260913 origin/staging grep -o "^## BUG-[0-9]*" docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1 # 应为 660 cd frontend && npm test -- tests/rectification-collection-question-pool.test.ts tests/rectification-probe-pool-exhausted-20260911.test.ts tests/rectification-replay-20260911.test.ts tests/rectification-yearless-probe-downgrade-20260909.test.ts tests/agent-voice-copy-contract.test.ts ``` ## 7. 验收口径 - 前端 `tsc --noEmit` 0 错、`npm run lint` 0 error、相关套件 fail=0、测试总数 ≥ 基线;`next build` 后 `/` 仍 Static、首屏 gzip ±2%。 - Skill 升版后 `skill-registry.test.ts` 通过,旧版本哈希不变。 - 部署后真机按 §4 T1 验收序列走一遍。