docs(tasks): verdicts for 40c623ed/329f8a21/998406ce and family-collect fix brief

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0155nFCgCHtoA7jhSDGmZmMu
This commit is contained in:
Jesse_Chen
2026-09-05 01:54:22 +00:00
parent 998406cee6
commit 309c74249e
2 changed files with 68 additions and 3 deletions
+4 -3
View File
@@ -50,9 +50,10 @@
| `TASK-rectification-collect-direction-20260904.md` | `PROGRESS-rectification-collect-direction-20260904.md` | 可评分事件 2 条时盘外核对抢跑到刚拒答的家人领域,Agent 只能改写成不指向任何领域的泛问;缺第三件带年份的事却先问职业 | 已验收:5.1/5.3/5.4 通过;5.2 顺序错位(任务书责任)见修复单 | `codex/rectification-collect-direction-20260904`BUG-527530 |
| `TASK-rectification-collect-direction-fix-20260904.md` | `PROGRESS-rectification-collect-direction-fix-20260904.md` | dated 补采集分支插在方法轮转之前,新案例第二问被家人抢占感情/事业;`7ee7f825` CSS 与合同测试脱节挡住门禁 | 已验收通过(0be51e65),待 staging 部署核对 | `codex/rectification-collect-direction-fix-20260904`BUG-531532 |
| `TASK-rectification-post-adopt-verify-20260904.md` | `PROGRESS-rectification-post-adopt-verify-20260904.md` | 采用后核对题重复已问题;核对卡「这题跳过」等于整案停止、已采用仍念"选一个先用着"、前端"没有拿到下一个问题";采用旁白承诺的 holdout/OOS 核对与实际计划不同源(原任务书 §4 错误);家庭采集题带年份前缀自相矛盾 | 待验收 | `codex/rectification-post-adopt-verify-20260904`BUG-536539 |
| `TASK-rectification-quality-probe-dedupe-20260904.md` | `PROGRESS-rectification-quality-probe-dedupe-20260904.md` | 候选区分阶段同一道"上大学"题问两次:`pickProbe` 按种类取第一条质量探针无视 `semantic_key`(第二次答案绑到错的证据);引擎对毕业等学业 kind 也套"高考发挥"模板;同域同分组质量探针不去重 | 验收 | `codex/rectification-quality-probe-dedupe-20260904`BUG-540541 |
| — | `PROGRESS-rectification-adopt-card-anchor-20260905.md` | 采用卡钉在历史采集题下,最新旁白没有卡;单分钟交付旁白机器腔 | 验收 | `codex/rectification-quality-probe-dedupe-20260904`BUG-544545 |
| — | `PROGRESS-rectification-family-collect-continue-20260905.md` | 家人答「没有」后直接给结果,未继续收能区分分钟的经历 | 验收 | `codex/rectification-quality-probe-dedupe-20260904`BUG-546 |
| `TASK-rectification-quality-probe-dedupe-20260904.md` | `PROGRESS-rectification-quality-probe-dedupe-20260904.md` | 候选区分阶段同一道"上大学"题问两次:`pickProbe` 按种类取第一条质量探针无视 `semantic_key`(第二次答案绑到错的证据);引擎对毕业等学业 kind 也套"高考发挥"模板;同域同分组质量探针不去重 | 验收通过(浏览器走查欠) | `codex/rectification-quality-probe-dedupe-20260904`BUG-540541 |
| — | `PROGRESS-rectification-adopt-card-anchor-20260905.md` | 采用卡钉在历史采集题下,最新旁白没有卡;单分钟交付旁白机器腔 | 验收通过(浏览器走查欠) | `codex/rectification-quality-probe-dedupe-20260904`BUG-544545 |
| — | `PROGRESS-rectification-family-collect-continue-20260905.md` | 家人答「没有」后直接给结果,未继续收能区分分钟的经历 | 验收未通过(1 项行为回归 + 2 条断言未更新,见修复单) | `codex/rectification-quality-probe-dedupe-20260904`BUG-546 |
| `TASK-rectification-family-collect-continue-fix-20260905.md` | — | `998406ce` 修复单:家人之后的 dated 补采集无条件抢在现成区分卡之前(choice-card A/B 卡用例回归),另两条顺序断言缺三栏说明 | 待执行 | `codex/rectification-family-collect-continue-fix-20260905`BUG-547 起) |
| `TASK-api-not-configured-mislabel-20260904.md` | — | 16 处路由把数据库瞬断(部署切换窗口)兜底翻译成 503「服务尚未配置」;改为仅配置错误用该文案,其余 `service_unavailable`,收敛为共享 helper | 待执行 | `codex/api-not-configured-mislabel-20260904`BUG-542 起) |
| `TASK-rectification-ux-20260902.md` | `PROGRESS-rectification-ux-20260903.md` | 会话面空白假死与交互摩擦 | 已验收 | `d159f08e`(09-03 在新基线重做后合入,BUG-505509 |
@@ -0,0 +1,64 @@
# TASK · 家人拒答后继续采集(BUG-546)的修复单:补采集不得挤掉现成的区分题(2026-09-05)
- 基线:`origin/staging` @ `998406ce`BUG-546 实现)
- 分支:`codex/rectification-family-collect-continue-fix-20260905`
- 验收方:Claude;本单是对 `998406ce` 的验收结论,不是新需求
- BUG 编号起点:**BUG-547**(开工时 `grep -n "^## BUG-5" docs/BUG_HISTORY.md | tail -1` 复核;BUG-542 仍为 `TASK-api-not-configured-mislabel-20260904.md` 预留)
## 1. 验收实证
`998406ce` 上跑 `npx tsx --test tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts`:894 项,**3 失败**;同一命令在前一提交 `329f8a21` 上 0 失败。进度记录列出的套件没有包含这两个文件。
| # | 文件 / 用例 | 期望 | 实际 | 定性 |
| --- | --- | --- | --- | --- |
| A | `rectification-choice-card.test.ts` · `distinguish follow-up copy forbids competing-chart ranking` | 学业/感情/事业/家人/职业/占问全覆盖、精度阶段 `d4_refine`、引擎给了一条搬家 A/B 探针(两候选分钟各一边、增益 0.4)→ 下一问是那张 **A/B 卡** | 下一问变成财务口述采集「可以先问有没有记得住时间的收入变化…」;探针既不在 `deferred_followup` 也不在 `dropped_probes` | **行为回归** |
| B | `rectification-occupation-coverage-exit.test.ts` · `career evidence alone still does not cover occupation` | 下一问 `occupation` | `d2_finance` | 顺序变更,与 BUG-546 决策一致,缺三栏断言说明 |
| C | 同文件 · `training gate open does not mint yearless existence or quality varga cards` | 下一问 `occupation` | `d2_finance` | 同 B |
A 的复现路径不只在测试里:`app/api/rectification/agent/route.ts``decision.nextAction === "ask_candidate_discriminator"` 时调 `buildMethodFollowupPlan` 并把 `plan.next_followup` 写成焦点;现在只要财务 / 搬家 / 健康任一域未覆盖、未拒答,写下去的就是口述采集而不是区分卡,`isRenderableChoiceOpenQuestion` 为假,后续按口述路径走。
## 2. 根因
`method-followup.ts::buildMethodFollowupPlan``if (!next)` 链里,家人之后的分支从
`!meetsAcceptanceEventQuality(evidence) && nextDatedCollectFollowup(...)` 改成了无条件 `nextDatedCollectFollowup(...)`。这条分支排在 `d4_refine` 搬家 A/B 卡(同函数约 L2107)与其后所有 yearless / 精度层卡之前,所以只要 `DATED_COLLECT_ORDER` 里还有未覆盖域,现成的区分探针永远轮不到。
BUG-546 自己写的触发条件是"剩余区分探针被标成 `no_split_among_active`"——也就是**没有**可用区分题的时候。实现把它扩成了"不管有没有区分题都先采集"。
## 3. 决策记录
1. BUG-546 的产品意图保留:家人答「没有」而候选分钟仍分得开时,不得直接给结果,要继续收未问过的带年份域(学业 → 财务 → 搬家 → 健康)。
2. **但现成的区分题优先于口述补采集**。引擎已经算出哪一问能把剩余分钟分开,就先问它;只有当本轮没有任何可渲染的区分卡(`yearlessDiscriminators` 与精度层 / 搬家 A/B 卡都拿不出 `choice_frame`)时,才走 dated 补采集。这与 `Relocation stays out of domain rotation and is only asked at d4_refine` 的原始设计一致,也与 BUG-546 自述的触发条件一致。
3. `isRemainingEvidenceCollect``deferAdoption` / `shouldSkipFollowupPersist` 的豁免保留(否则采集写不进焦点,又回到 BUG-546)。
4. B、C 两条断言允许改为 `d2_finance`,但必须在进度记录写"原值 / 新值 / 原因"。A 不允许改断言。
## 4. 硬红线
- 不动 `DATED_COLLECT_ORDER``exhaustionSpokenCollectFollowup`BUG-520 口径)。
- 不放宽 `meetsAcceptanceEventQuality` 与精确分钟确认门。
- `accepted` 早退路径(采用后只走 `remainingReverseVerifyProbes`)不得受影响;BUG-350 / 463 / 499 / 502 / 518 / 519 / 536539 / 544 的测试原样通过。
- 已在 `998406ce` 里改过的断言(`collect-stall``adopt-narration``provisional-adopt``eight-method``range-offer-deadend``collect-direction`)不得再改回去,除非同样写三栏说明。
## 5. 任务分解
### 5.1 补采集让位于区分题
- 把家人之后的 dated 补采集改成"无可渲染区分卡时才取":最直接的做法是把该 `else if` 移到(或复制到)`d4_refine` 搬家卡与 yearless 卡分支之后、`!occupationCovered` 之前,且仍在 `if (!next)` 链内;或在分支条件里加"本轮 ranked / precision 探针都拿不出 `choice_frame`"的判定。两种取一,进度记录说明为何。
- 验收:`rectification-choice-card.test.ts` A 用例原样通过;新增用例——同样证据集但 **没有** 探针时,下一问是财务采集(证明 BUG-546 意图仍在)。
### 5.2 断言三栏说明
- `rectification-occupation-coverage-exit.test.ts` B、C 改为 `d2_finance`,三栏写进 `PROGRESS-rectification-family-collect-continue-20260905.md`(追加一节,不新开进度文件)。
### 5.3 记录
- `docs/BUG_HISTORY.md`BUG-546 追加"复发/修正"段并新增 BUG-547(现成区分题被口述采集挤掉),关联 BUG-546、BUG-519。
- `CHANGELOG.md` 一条。
## 6. 开工前置命令
```bash
git fetch origin --prune
git worktree add -b codex/rectification-family-collect-continue-fix-20260905 .worktrees/rectification-family-collect-continue-fix-20260905 origin/staging
cd .worktrees/rectification-family-collect-continue-fix-20260905
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
cd frontend && npx tsx --test tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts 2>&1 | grep -E "^# (tests|pass|fail)|^not ok"
```
收尾必须跑同一条命令并达到 fail=0,再 `tsc --noEmit``npm run lint`