814c924e4a
Keep askable cards after exhaustion, explain each probe, read the adopted credible range in reports and chat, and compare declared periods before the minute grid when the clock is unknown. Co-authored-by: Cursor <cursoragent@cursor.com>
3.3 KiB
3.3 KiB
PROGRESS · 生时校正穷尽出口修复(2026-09-06)
工作树:.worktrees/rectification-convergence-exit-fix-20260906
分支:codex/rectification-convergence-exit-fix-20260906(跟踪 origin/staging)
基线:origin/staging @ b938c76a;工作树文档头 43a26a3c
未改 SKILL.md(仍 10.0.14)、未改引擎、未改任何门槛数值。未重新引入 USER_COLLECT_QUESTION.other 兜底。未把 .venv 加入提交。
本单状态:待验收。BUG-565 / 566 / 567 已实现;BUG-560 保持 blocked 并补根因升级。
| 任务 | 状态 | BUG |
|---|---|---|
| 5.1 单一写入方 | 完成 | BUG-565 |
| 5.2 穷尽态视为已交付 | 完成 | BUG-565 |
| 5.3 穷尽分支不吞题 | 完成 | BUG-566 |
| 5.4 范围小字还原 + 记录 | 完成 | BUG-567;BUG-560 根因升级;docs/BLOCKED.md BLK-001 |
实现要点
persistExhaustionCollect门槛分支不再persistV9DeterministicTurn,只返回{ hostNarration, terminalNote: true, persisted: false }。- 共用
isExhaustedGateState({ remainingCollect, methods, canAdopt, accepted })。inspectNonTerminalTurnExit.satisfied认穷尽态。 - idle 穷尽分支额外要求
nextAction ∈ {offer_provisional_range, complete_with_range, ask_fact_collection}。ask_candidate_discriminator/ask_holdout_validation即使!followup也不落入门槛,落到persistNextInterviewAfterChoice。 finalizeSuccessfulTurnExit:terminalNote且本回合尚未写门槛时写一次(幂等requestId),并跳过ensureNonTerminalTurnExit。agent-run opening/evidence 先写并把askedTurnId传给 finalize。completedMessageResponse带上x-rectification-turn-id。- 点选:
persistApplied在EXHAUSTION_DELIVERY_ACTIONS时仍走persistNextInterviewAfterChoice,把门槛句拼进该回合正文。shouldContinueAfterStructuredChoice对 offer/complete 仍为 false(UI 不等下一问)。 RectificationReadonlyRange回到<p role="status">。口述停止按钮保留。
既有断言改动
| 文件 | 原值 | 新值 | 原因 |
|---|---|---|---|
rectification-exhaustion-exit 源扫描 |
口述停止按钮和范围小字共用 CHOICE_STOP_LABEL / onStop |
仅口述态 .rectification-collect-stop 使用该文案;范围行是 status 句,没有 onStop / <button |
BUG-567 |
| BUG-558 三个形状用例 | 未改断言 | 仍通过;关闭天花板夹具去掉 holdout 事件,避免白名单后 idle 去问 holdout | 白名单后 A4 用例 2 才仍是门槛 |
测试
| 命令 | 结果 |
|---|---|
非 DB tests/rectification-*.test.ts + agent-voice-copy-contract.test.ts |
910 pass / 0 fail(解释层叠上后 917) |
npx tsc --noEmit |
0 错 |
npm run lint |
0 error / 81 warning(既有 warning,未清) |
.venv/bin/python -m pytest tests/test_active_rectification_api.py::test_long_real_conversation_reaches_vedastro_after_local_range_is_narrow |
失败:winning_segment 04:16 / 宽 1 vs 期望 05:07–05:08 / 宽 2。基线 e2f4b55c 同样失败。见 docs/BLOCKED.md BLK-001。 |
排除 rectification-*-database.test.ts。ERR-011:验收命令用 .venv/bin/python -m pytest。未改 page.tsx。
随本分支推 origin/staging。后续 explain-layer / range-reading / unknown-time 叠在同一提交。