# 生时校正收敛重构进度(2026-08-31) ## 基线与范围 - Git 根目录:`/Users/jesse/Downloads/Copse/astrology/yinduzhanxing` - 隔离 worktree:`/Users/jesse/Downloads/Copse/astrology/.worktrees/rectification-convergence-impl-20260830` - 分支:`codex/rectification-convergence-impl-20260830` - 最新基线:`origin/staging` @ `f8aea88bc30fccedcd66367283a2623d774fed6a` - 2026-08-31 已重新执行 `git fetch origin --prune`,本地 `HEAD` 与 `origin/staging` 均为上述 SHA,ahead/behind 为 `0/0`。 - 本次提交范围仅为任务 6;任务 7–10 不混入,不部署,不提升 `main`。 ## 任务 0:上游资料与真实会话结论 任务 0 已由最新版任务文档及归档材料补齐: - 上游访谈手册与阈值资料已归档在 `references/upstream/`。 - 两份真实会话记录已归档: - `references/upstream/1993-session-repeated-questions.txt` - `references/upstream/1993-session-correction-rerun.txt` - 上游产品契约是固定节奏后交付候选区间与标签,不把默认目标设为唯一分钟。 - 固定终止话术为: `当前最优结果是候选时间段,而不是已经确认的唯一出生分钟。临时代表时间仅用于下一轮验证与比较。` ### 1993 案例的答案回流事实 - 用户回答确实把 14:30–15:00 收窄到 14:48–14:50;这部分可以声称为回答支持的区间收窄。 - 14:49 来自仓库既有答案/校准资料回流,不是用户回答自动推导出的唯一分钟。 - 上游污染标记包括 `pl9_1993_user_case`、`target_minute = 14:49`、`observed_pl9_1993_case_only` 以及 `scripts/narayana_dasha.py:601-613` 的案例专用 tie-break。 - 本仓本次未引入、未同步上述污染逻辑;没有修改评分权重、sealed holdout 或 confirmation gate blocker。 ## 已完成任务 1–3 - 任务 1:服务端持久化的轮次、有效回答数、平台期预算已接入生产判定;超预算交付区间并结束。 - 任务 2:问题权收归服务端结构化槽位,模型只负责确认/承接正文。 - 任务 3:第 0 轮起可生成候选摘要、报告、下一步与局限说明。 - 对应已在 staging 的提交: - `86ba17ee fix(rectification): enforce persisted convergence budgets` - `6cbf1f22 fix(rectification): separate question slots from model prose` - `e8bd3a52 feat(rectification): expose candidate result reports` ## 任务 6:接过上游终止语义 已实现: 1. 证据型停止与既有轮次预算并列,任一命中即正常交付区间: - 带日期、已确认、可评分的主事件少于 3 条; - 上述事件覆盖 domain 少于 2 个; - 第一名真实同分; - `answer_class=unsure` 或 `classified_from=declined` 达全部探针回答的一半。 2. `34/34/32` 判定为并列第一;`34/33/33` 仅是分离不足,不是并列第一。 3. 3 事件 / 2 域的独立交付地板与 4 事件 / 3 域的唯一分钟确认门使用独立常量,未互相覆盖。 4. 证据停止与预算停止统一返回正常终态: - `nextAction = complete_with_range` - `sessionOutcome = completed_with_range` - `resultStatus = completed_with_range` 5. 正常终态用户文案明确“区间交付已完成”,并逐字复用固定终止话术;真实 HTTP、provider、工具执行失败仍保留错误语义。 6. 新增 label ladder: - `blocked` - `user_history_verification_required` - `manual_pattern_consensus` - `single_adapter_support` - `multi_adapter_consensus` 7. V9 最新结果投影新增: - `rectification_label` - `termination_copy` - `evidence_stop_reason` - `executed_methods` 8. `decideFromDossier()` 与 `decideAfterInferenceChange()` 共用同一证据计数与用户不确定度语义;draft、无日期、background-only 证据不计入交付地板。 9. 用户点选停止时保留“已记录你的选择”,固定终止话术只出现一次。 10. 自由文本拒答且没有明确选项时写入 `classified_from=declined`;带 A/B/C/D 的明确选择仍按选项语义计分,避免把 `C=没有发生` 错记为 `unsure`。 ### 测试调整说明 - `rectification-decision-authority.test.ts`、`rectification-eight-method.test.ts`、`rectification-occupation-coverage-exit.test.ts` 没有改既有断言,只补充或调整与目标断言无关的 incidental fixture,使其满足任务 6 新增的 3/2 交付地板,并让真正并列与窄幅领先各测各的语义。 - `rectification-hidden-e2e.test.ts` 与 `rectification-confirmation-gate.test.ts` 的两组旧文案断言原先明确锁定“尚未完成 / 不是最终校正结果”。任务 6 正是要修复该缺陷,因此按硬红线 9 的例外更新了断言,并在断言上方记录旧值与原因。 ### 明确未做 - 没有实现真正的首轮 3–5 道批量 A/B/C/D 题卡;该交付已经由最新版任务文档单独拆为任务 10。 - 任务 6 只恢复证据停止、正常终态、标签与终止文案,不把连续单卡冒充为批量题卡。 - 没有实现任务 7 的逐条区间归因表、任务 8 的“为什么”入口、任务 9 的中途改窗口重跑、任务 10 的批量出题。 ## 验证 - 开工预检:`python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`:pass。 - 最终任务 6 聚焦回归(含 `rectification-v10-conversation-focus`):`158/158` 通过。 - `./node_modules/.bin/tsc --noEmit`:通过。 - `npm run lint`:通过,`0 errors / 25 warnings`;均为本次修改前已存在的 warning。 - `npm run build`:通过;保留 5 条既有 Turbopack 动态文件追踪 warning。 - `PYTHON=/opt/anaconda3/bin/python3.12 npm run test:db`:串行真实 Docker/PostgreSQL `34/34` 通过。 - `git diff --check`:通过。 - 诊断性并行全量测试运行:`2357/2366` 通过。9 个失败中,8 个是并行 Docker/PostgreSQL 项(fixture slot 超时、连接中断或并发迁移失败);另 1 个是任务 6 引入的明确 `C` 选项被误记为 `unsure`,已在共享 resolve-focus 适配点修复,并由最终 `158/158` 回归覆盖。数据库项随后以官方串行脚本 `test:db` 验证为 `34/34`。 ## 交付状态 - 任务 6 已完成实现与本地强制门禁,等待精确提交。 - 提交前及 push 前均重新同步并核对 `origin/staging`;若远端前进,只安全合并,不 reset/stash/clean。 - 任务 6 将单独快进推送到 `staging`;不手动部署,不提升 `main`。 --- ## 外部核对(2026-08-31,按代码逐条验证,不依据本文件自述) | 任务 | 状态 | 验证依据 | | --- | --- | --- | | 0 上游手册与阈值 | 已完成 | `references/upstream/` 五份归档 | | 1 轮次预算 | 已完成 | `core/rectification-decision.ts:250` `budgetExhausted()`,:263 走 `"exhausted"` | | 2 问题槽 + 删清洗正则 | 已完成 | `v9/spoken-answer.ts` 已整文件删除,101 条正则不再存在 | | 3 停止话术契约 | 已完成 | `scripts/rectification/api_service.py:6,200,214,240` 已恢复并接出 `next_step_codes` | | 6 证据型停止语义 | 已完成 | `core/rectification-decision.ts:114` `evidenceStopReason()`,:148 参与判定 | | 4 标定数据入口 | 未开始 | — | | 5 清理与同步机制 | 未开始 | P2,按任务书本就应等任务 1–3 稳定两周 | | **7 逐条回答归因表** | **未开始** | **P0,且不依赖任何外部数据,应优先于 8/9/10** | | 8 质疑通道 | 未开始 | — | | 9 改窗口重跑 | 未开始 | — | | 10 首轮批量出题 | 未开始 | `src/mastra/agentic-rectification.ts` 中「一次一问」仍在 | 任务 1、2、3、6 的实现与任务书要求一致,未发现踩红线:`convergence-evaluator.ts` 未被改动,`confirmation-gate.ts` 的 blocker 未放宽,sealed holdout 阈值未动,本仓仍未被 1993 案例答案污染(全仓 `pl9_1993` / `target_minute` 无相关命中)。 未完成项转入 `TASK-round2-cost-and-delivery-20260831.md`。