Files
Jyotisha/docs/tasks/PROGRESS-rectification-collect-vs-offer-consistency-20260905.md
T

7.4 KiB
Raw Blame History

PROGRESS · 采集没问完就出采用卡(2026-09-05)

工作树:.worktrees/rectification-collect-vs-offer-consistency-20260905 分支:codex/rectification-collect-vs-offer-consistency-20260905 基线:origin/staging @ 3edb628c(任务书写的是 1052a027;开工时 staging 已含后续提交,以当时 origin/staging 为准)。未改 .gitea/workflows/**、未动迁移、未升级依赖、未 bump Skill(仍 10.0.14)、未改 page.tsx、未改引擎、未改 BUG-544 隐藏规则。

任务 状态 BUG
剩余带年份采集未完不判可采用;出牌轮才出卡写报告 完成 BUG-550

编号

开工时最大号 BUG-549。本单 BUG-550。未占用预留的 BUG-542。

产品取舍

任务书决策 1采集优先。学业 / 财务 / 搬家 / 健康 / 职业口述没问完(也没拒答)之前,决策保持 collect_evidence:页面只有只读区间、没有可点的卡、Agent 不写验证报告。问完之后一轮内报告 + 卡片一起出,下面不再跟问题。用户说「没有更多」、已采用、已耗尽出口不变。

未走决策记录 3 的否决项(卡先给、问题照问)。那条路要动 BUG-544 藏卡规则、不动决策层;本单按默认走决策层一处改。

未过滤流事件 JSON{"type":"skill.bound"}),见任务书 §7。

实现要点

  • decideFromDossier / decideAfterInferenceChangedatedMethodCollectOpen(collecting.methods) || isRemainingEvidenceCollect(collecting.next_followup)collecting 仍用 sessionOutcome: "collect_evidence"、不带区分卡目录,所以下一问是账本上还没问的带年份采集。
  • decideRectification:分离度够、accepted 之后、确认门之前,若采集仍开且用户未停止 → collect()exhausted 已在上一分支返回,条件里不再写 stopClass?.kind !== "exhausted"tsc 会判无重叠)。
  • 四个消费者不改各自规则:next_user_action 变成 ask_fact_collectionoffer 因 kind 不在 offerSessionKindsoffer_not_allowed;客户端走只读区间;shouldSkipFollowupPersist 行为不变。
  • 既有「可采用 / 出卡 / 采用旁白」夹具把剩余带年份域补覆盖或拒答,避免训练门未开或剩余采集把主题测成采集。

测试

命令 结果
npx tsx --test tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts 904 项;pass 904fail 0
npx tsc --noEmit 0 错
改动文件 eslint --quiet 0 error
npm run lint 0 error73 条既有 warning,不在本单文件
page.tsx 未改

开工对照 BUG-549 进度记录为 898 项。本单新增决策层与端到端用例后为 904。

未做浏览器真人走查。清单:docs/testing/rectification-collect-vs-offer-consistency-20260905.md。旧会话在部署前仍可能先出卡再被采集题挤掉。

验收(Claude2026-09-05,基于 origin/staging @ 3b410c14

结论
5.1 决策层(两处 datedMethodCollectOpen 叠加 + sufficient 分支 accepted 之后、确认门之前的 collect 出口) 通过;exhausted 在上一分支已返回,省略该条件成立
5.1 单测(分离 + 采集开 → collect;userStopped → 原停止出口;accepted → adopt 通过
5.2 端到端(家人拒、财务未问 → 采集 + 持久化财务;补齐 → adopt 且无追问;offer 工具 offer_not_allowed 通过
5.3 记录(BUG-550、CHANGELOG、进度、真人清单) 通过
红线:BUG-544 / 546 / 547 / 549、accepted、userStopped / exhausted 出口 通过(对应用例原样通过,未改客户端 / offer 描述 / Skill / 引擎)
测试 tests/rectification-*.test.ts + agent-voice-copy-contract 904 项 / fail 0(基线 1052a027 898 项)
tsc --noEmit / npm run lint 0 错 / 0 error73 warning 与基线同)
staging 部署 未部署/api/health 仍为 afd14948deploy-staging #1109 / #1112 / #1114 / #1115 全部失败,migrate-staging-database #1110 也失败——bab07187 带迁移 5010000_personal_report_longform_appendices.sqlrun-staging-deploy.sh 检出待迁移即拒绝。日志需登录 Gitea 查看(环境缺口)

既有断言变更(原值 / 新值 / 原因)

执行方在测试里用「旧 / 新」注释说明了大部分改动,此表补齐要求的三栏;原因统一为决策记录 1「剩余带年份采集(学业 / 财务 / 搬家 / 健康 / 职业口述)未问完不判可采用」,夹具未补齐这些域时决策从出牌改为采集。

文件 · 用例 原值 新值
rectification-adopt-narration-20260904 · fourteen-probe case offer_provisional_range / adopt_representative / ready_to_adopt ask_fact_collection / collect_evidence / collect_events
同文件 · adoptDeliveryFacts、three adopt entry points、diagnostics、times out caseDossier() caseDossier({ declinedTopics: EXHAUSTED_COLLECT_TOPICS })(夹具补拒答,断言不变)
rectification-adopt-flow-fix-20260903 · collect-phase nonterminal exit 仅家人拒答 家人 + 学业 / 财务 / 搬家 / 健康 / 职业拒答(夹具补齐,断言不变)
rectification-answer-choice · adoptionDossier / nonterminal exit satisfied / persistNextInterviewIfIdle once 仅家人 skipped 补学业 / 财务 / 搬家 / 健康(/ 职业)拒答(夹具补齐,断言不变)
rectification-collect-stall · separated scores with uncovered relatives notEqual ask_fact_collection equal ask_fact_collection + collect_evidence
同文件 · covering / declining family and occupation still opens adopt notEqual ask_fact_collection 且 ∈ {holdout, ready_to_adopt, offer_provisional_range} equal ask_fact_collection + collect_evidence(用例名已与内容相反,见 P3
rectification-coverage-collect · offers a range with adopt when training is complete canOfferRange true / canAdopt true canOfferRange false / collect_evidence / ask_fact_collection
rectification-provisional-adopt · incident 1a can_adopt true / selection_allowed true / 区间与代表时间 can_adopt false / session_outcome collect_evidence
同文件 · incident 1b can_adopt true / selection_allowed true can_adopt false / collect_evidence
同文件 · incident 1c canRender… true false
同文件 · incident 4 adopt_representative / offer_provisional_range collect_evidence / ask_fact_collection
同文件 · delivery B1 canRenderRectificationSelectionCards true false
同文件 · delivery B2 plan.session_outcome adopt_representativeaction.id adopt_representative collect_evidenceask_method_followup
rectification-range-offer-deadend · live remaining probes with zero active split offer_provisional_range ask_fact_collection + collect_evidence

遗留(不阻塞验收)

  • P3collect-stall「still opens adopt」两条、coverage-collect「offers a range with adopt」、provisional-adopt incident 1a、range-offer-deadend「open provisional adopt」的用例名与新断言相反,下次触碰这些文件时顺手改名。
  • 真人清单 docs/testing/rectification-collect-vs-offer-consistency-20260905.md 待部署后执行;部署前提是先跑通 Migrate Staging Database