Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0193vBv6w5MV2cifdTUu9H5P
10 KiB
10 KiB
TASK · 生时校正对话精简:开场讲清做法并一次收多件、采集题「没有 / 记不清」按钮、每轮只留一句话(2026-09-09)
- 基线:
origin/staging@aa499da1(代码头724a1215;时间轴已上线) - 分支:
codex/rectification-conversation-economy-20260909,基于origin/staging;与codex/rectification-timeline-fix-20260909(BUG-602/603,只改rectification-timeline-scale.ts/rectification-candidate-result.ts/ 时间轴测试)无文件重叠,可并行 - 执行方:coding agent;验收:Claude
- 涉及文件:
frontend/src/lib/rectification-agentic/v9/agent-run.ts(buildOpeningBriefL225–245)、skills/jyotish-birth-time-rectification/SKILL.md§4 L52 与证据轮正文口径、references/conversation-strategy.md(bump 10.0.19)、frontend/src/components/rectification-agentic-chat.tsx(composer-wrap采集题按钮;vargaSentence渲染 L1577/1637)、frontend/src/components/chat-message-content.tsxL115、frontend/src/components/agent-activity-status.tsxL93、frontend/src/lib/rectification-agentic/v9/choice-action.ts::composeChoiceNarrationL99、v9/probe-explain.tsL220、v9/answer-choice.ts(拒答路径 L999collectDeclinedAck、跳过路径)、frontend/src/lib/rectification-agentic/user-copy.ts、frontend/DESIGN.md、frontend/docs/VOICE.md - BUG 编号起点:BUG-604(602/603 已由时间轴修复单占用)
- 优先级:P1(产品负责人 2026-09-09 拍板;三条一起做)
1. 决策记录(产品 2026-09-09 口头决定;标 ★ 的推翻既有口径,执行方按本节为准)
- 开场三句讲做法 + 一次收多件。 ★ 推翻
agent-run.tsL243 opening brief 的"不要要求一次说完、不要举大学/工作/搬家的例子",也推翻 SKILL.md L52"不得固定复述完整流程、领域清单"。理由:重算按轮计费不按事件,一条消息报三件只跑一次 compare(≈22s),分三轮跑三次;列领域不列年份不构成引导。 - 采集题上方两个 44px 按钮:「没有」「记不清」。 「没有」= 打字"没有"的既有拒答路径(
declined,不调模型,瞬时收口);「记不清」=skipped,本次不再问该领域,采用后核对阶段仍可碰。不做带骨架的示例条(产品明确不要)。 - 每轮只留一句话。 (a) "本轮对照了 …" 方法句从正文移除,进"已完成 N 步"的活动记录展开区(凭证数据不变);(b) 点选题旁白去掉"X 这段领先,Y 这段落后",改为"已记录,范围没变。"或"已记录,范围收到 A–B。";(c) 证据轮正文只准一句复述:"记下了:2016 年 9 月入学、2020 年 6 月毕业。"(年-月 + 事件短语,不评价价值,不写"对校正很有帮助"),范围句照旧由服务端接在后面。
- 不学竞品把年份预填进回答条;不动采用门、确认门、各道门槛;不动
page.tsx;不动use-conversation-scroll-anchor.ts。
2. 任务分解
2.1 BUG-604 开场(决策 1)
buildOpeningBrief改为给模型三个事实:当前搜索窗口(candidate_range,如 04:45–05:15)与来源(intake 声明的不确定档)、做法三句的要点、六类领域清单(升学、第一份工作、搬家、恋爱结婚、家里的大事、生病受伤)。正文模板由 Skill 规定为:一句窗口与做法、一句"最后给区间和代表分钟,不给精确到秒"、一句"想到几件说几件,有大概年月就行"+ 六类;仍不得写具体年份、不得要求先准备材料。首题spokenPrompt保持采集题身份(collect:other:*),题干改为"先说你最容易想起的一两件,年月大概就行"。- 批量写入:
rectification-record-evidence-batch已支持多事件;确认一条消息含 3 件不同领域事件时 batch 一次写入、compare 只跑一次、后续逐领域采集只问缺口(nextDatedCollectFollowup已按hasConfirmedDomain跳过)。 - 只报一件也必须走通(产品 2026-09-09 追问)。 邀请是降低门槛,不是要求。用户开场只说一件事时,流程与今天完全一致:batch 写一条、compare 一次、下一问是既有的逐领域采集题(
nextDatedCollectFollowup顺序不变);不得插入"还有吗 / 还能想起别的吗"这种追问轮,也不得因为只报了一件就重复开场邀请。逐领域采集题的题干末尾可以带一次"想到别的也可以一起说"(服务端固定句,只在第一道逐领域采集题上出现一次)。 - 验收:opening 落库正文 ≤ 4 句、含六类中至少五类、不含年份;mock 一条单事件消息 → compare 一次、下一问为逐领域采集题、正文不含"还有吗 / 别的吗";mock 一条三事件消息 → receipt 里 compare 一次、
evidence三条、下一问不再是这三个领域;agent-voice-copy-contract收新句。SKILL.md L52 改口径,conversation-strategy.mdOpeningPolicy 同步,Skill 10.0.19 快照与 registry。
2.2 BUG-605 「没有 / 记不清」(决策 2)
collect_spoken焦点激活且未 busy 时,composer-wrap内输入框上方渲染两个按钮(44px,次要样式,与被删的「先这样」不同类名,不得复用rectification-step-state)。「没有」POST 与打字"没有"相同的请求(复用applyRectificationChoice/拒答分支,collectDeclinedAck原句);「记不清」走resolve-focus status=skipped的服务端路径,回执"记下了,这题先放着。"(新文案对照 VOICE.md)。- 服务端:
skipped的领域进入declinedSkippedTopics后,本会话nextDatedCollectFollowup/ holdout 不再问它(与 declined 同待遇),采用后的remainingReverseVerifyProbes可用。 - 验收:
rectification-spoken-collect.test.ts扩——两个按钮只在 collect_spoken 出现;点「没有」后焦点declined、无 agent run(receipt phases 空);点「记不清」后焦点skipped,下一问不再是该领域;agent-voice-copy-contract收新句。
2.3 BUG-606 降噪(决策 3)
- (a)
chat-message-content.tsxL115 不再渲染vargaSentence;agent-activity-status.tsx在展开的活动行里保留它(折叠态不显示)。rectification-varga-style-copy.test.ts等三栏。 - (b)
composeChoiceNarration:去掉probe-explain.tsL220 的领先/落后子句;模板只有"已记录,范围没变。"或"已记录,范围收到 A–B。"(范围变宽时写"变为")。rectification-answer-choice*.test.ts三栏,agent-voice-copy-contract把"领先""落后"加进机器词表(仅对用户可见旁白)。 - (c) Skill 证据轮口径:正文一句复述,格式"记下了:年 月 事件短语(、…)。",不得加评价句;
agent-run的stripQuestionSentences之后再加一道守卫:证据轮正文超过 2 句时只保留首句(服务端裁剪,不靠提示词)。验收:mock 模型写三句 → 落库一句 + 范围句;真实 Case 回放正文不含"很有帮助/很有价值/很有分量/特别有用"。
2.4 记录
docs/BUG_HISTORY.mdBUG-604(关联 BUG-488 开场口径、BUG-558)、BUG-605(关联 BUG-546 家人"没有"收口)、BUG-606(关联 BUG-545、BUG-585 剪问句);CHANGELOG.md(Skill 10.0.19);frontend/DESIGN.md(采集题按钮、方法句位置);frontend/docs/VOICE.md;PROGRESS-…;docs/testing/rectification-scenarios-20260907.md加"开场一次报三件后不再被逐个追问这三个领域;每轮正文一句"。
3. 让步顺序
2.3 (b)(c) 与 2.2 最先(改动小、立刻可见);2.1 必做;2.3 (a) 必做;2.4 不可省。
4. 开工前置命令
git fetch origin --prune
git worktree add -b codex/rectification-conversation-economy-20260909 .worktrees/rectification-conversation-economy-20260909 origin/staging
cd .worktrees/rectification-conversation-economy-20260909
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
cd frontend && ./node_modules/.bin/tsc --noEmit; npm run lint 2>&1 | tail -1
ls tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts tests/skill-registry.test.ts | grep -v database | xargs npx tsx --test 2>&1 | grep -E "^# (tests|pass|fail)"
验收(Claude,2026-09-09,origin/staging @ 04ad3325;staging 当时部署 fa293b31)
| 门 | 结果 |
|---|---|
| tsc | 0 错 |
| lint | 0 error / 108 warning |
| 前端 rectification + consultation + session + voice + skill-registry(非 DB) | 1347 / 0 |
| Python v5_services + event_probes + growth contract | 72 passed / 0 failed |
| 项 | 结论 |
|---|---|
| BUG-604 开场 | 通过。brief 给窗口/来源/做法/六类;isAcceptableOpeningBody(≤4 句、≥5 类、无年份)不合格即换 openingSpokenBody 模板;单事件补丁 1453fb16:无追问轮、第一道逐领域题干一次性接「想到别的也可以一起说」 |
| BUG-605 「没有 / 记不清」 | 通过。route L499 精确匹配短路为 declined / skipped,completedMessageResponse 直接返回,不进 agent;skipped 本会话不再采集、reverse-verify 仍可碰 |
| BUG-606 降噪 | 通过。气泡不再画方法句;点选旁白只剩「已记录,范围没变 / 收到 / 变为」;证据轮 trimEvidenceTurnBody 在剪问句之后、范围句之前,超过两句留首句 |
| Skill 10.0.19 | 通过。快照与 registry 哈希一致 |
两条备注(不阻断):
- 开场合格判定要求六类词里逐字命中五个,模型改写后大概率不合格 → 几乎总是落到固定模板。结果反而更稳定,接受;若日后想让模型措辞,放宽为同义命中。
trimEvidenceTurnBody只在超过两句时裁剪;恰好两句且第二句是评价句时,只删短语会留下残句(如「这类节点。」)。P3,下次顺手:两句时若第二句命中评价词表则整句删。
结论:通过(实现 aa7ccb30 + 1453fb16)。真实环境走查欠:开场一次报三件后不被逐个追问;点「没有」瞬时回执。