# PROGRESS · 跳过健康后 holdout 断流 + 出口闸门(2026-09-09) 工作树:`.worktrees/rectification-skipped-health-deadend-20260909` 分支:`codex/rectification-skipped-health-deadend-20260909` 任务书:`docs/tasks/TASK-rectification-skipped-health-deadend-20260909.md` 基线:开工时 `origin/staging` @ `4eea9c10` ## 开工回执 - 目标:BUG-626 跳过的健康线不再进 holdout,`duplicate_focus` 必须留下可见载体;BUG-627 出口闸门不再把穷尽当成已交付;缺口按钮改为服务端修复。 - 编号:BUG-628 已被「没有 / 记不清」按钮占用,本单只用 626/627。 - 决策 1 在基线里已有 `declinedHealth` 特判;本单改成与 occupied 一样把两个别名写入 blocked 集合,并补 skipped `health` 回归。 ## 已完成 - **4.1 / BUG-626**:`holdoutFollowupFor` 用 `declinedForHoldout`。`duplicate_focus` 记 `rectification_focus_duplicate` 并走 `persistExhaustionCollect`;穷尽旁白为空时用 `noCandidatesGate`。`persistExhaustionCollect` 只在 `duplicate_focus` 时落到门槛句,其它 persist 失败仍返回采集旁白,避免证据轮被误标 `terminalNote` 而不裁句。 - **4.2 / BUG-627**:`inspectNonTerminalTurnExit.satisfied` 去掉 `exhausted`,改认活动问题 / 采用 / 确认 / terminalNote host turn / `publicCanAdopt`。无载体时写出门槛 host turn。idle catch 仍调 `ensureNonTerminalTurnExit`。 - **4.3**:`POST /api/rectification/cases/[caseId]/repair-exit`;按钮「接着问」;两次仍无载体显示「暂时接不上,请新建一次校正。」 - **4.4**:BUG-626 / 627、CHANGELOG、本文件、走查第 12 条。 ## 验收命令 在 `frontend/`: - `./node_modules/.bin/tsc --noEmit`:通过 - `npm run lint`:0 error(既有 107 warning) - 定向 `tsx --test`: - `rectification-skipped-health-deadend-20260909.test.ts` - `rectification-collect-direction-20260904.test.ts` - `rectification-exhaustion-exit-20260906.test.ts` - `rectification-surface-contract.test.ts` - `rectification-agentic-entry.test.ts` - `rectification-spoken-collect.test.ts` - `rectification-collect-stall.test.ts` → **195 / 195 通过**(含 `rectification-v9-stream.test.ts`、`rectification-answer-choice.test.ts`) - 全量 `tests/rectification-*.test.ts`(排除 database):**1067 / 1067 通过** - 相关补充:`rectification-server-focus.test.ts`、`rectification-decision-authority.test.ts`、`rectification-covered-domain-recollect-20260908.test.ts` → **39 / 39 通过** 本单状态:**待验收**。未改 Skill 版本、未改采用/确认门、未新增迁移。