9492bae15f
Verified both round-1 briefs against the code rather than the progress notes. Billing 0/1/2/3/6 and rectification 0/1/2/3/6 are in and clean, and neither the confirmation gate nor the sealed holdout was loosened. Two gaps remain. Prompt caching only emits its marker for Anthropic, so on a DeepSeek-class provider it buys observability and no cost reduction, and the membership fair-use numbers are untouched — correctly so, since no real unit cost has been measured yet. The round-2 brief gates those on a staging measurement pass and pulls the per-answer narrowing table forward, since it is the deliverable and depends on nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155nFCgCHtoA7jhSDGmZmMu
7.8 KiB
7.8 KiB
生时校正收敛重构进度(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.txtreferences/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 budgets6cbf1f22 fix(rectification): separate question slots from model prosee8bd3a52 feat(rectification): expose candidate result reports
任务 6:接过上游终止语义
已实现:
- 证据型停止与既有轮次预算并列,任一命中即正常交付区间:
- 带日期、已确认、可评分的主事件少于 3 条;
- 上述事件覆盖 domain 少于 2 个;
- 第一名真实同分;
answer_class=unsure或classified_from=declined达全部探针回答的一半。
34/34/32判定为并列第一;34/33/33仅是分离不足,不是并列第一。- 3 事件 / 2 域的独立交付地板与 4 事件 / 3 域的唯一分钟确认门使用独立常量,未互相覆盖。
- 证据停止与预算停止统一返回正常终态:
nextAction = complete_with_rangesessionOutcome = completed_with_rangeresultStatus = completed_with_range
- 正常终态用户文案明确“区间交付已完成”,并逐字复用固定终止话术;真实 HTTP、provider、工具执行失败仍保留错误语义。
- 新增 label ladder:
blockeduser_history_verification_requiredmanual_pattern_consensussingle_adapter_supportmulti_adapter_consensus
- V9 最新结果投影新增:
rectification_labeltermination_copyevidence_stop_reasonexecuted_methods
decideFromDossier()与decideAfterInferenceChange()共用同一证据计数与用户不确定度语义;draft、无日期、background-only 证据不计入交付地板。- 用户点选停止时保留“已记录你的选择”,固定终止话术只出现一次。
- 自由文本拒答且没有明确选项时写入
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/PostgreSQL34/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。