Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0193vBv6w5MV2cifdTUu9H5P
74 lines
10 KiB
Markdown
74 lines
10 KiB
Markdown
# 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`(`buildOpeningBrief` L225–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.tsx` L115、`frontend/src/components/agent-activity-status.tsx` L93、`frontend/src/lib/rectification-agentic/v9/choice-action.ts::composeChoiceNarration` L99、`v9/probe-explain.ts` L220、`v9/answer-choice.ts`(拒答路径 L999 `collectDeclinedAck`、跳过路径)、`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 口头决定;标 ★ 的推翻既有口径,执行方按本节为准)
|
||
|
||
1. **开场三句讲做法 + 一次收多件。** ★ 推翻 `agent-run.ts` L243 opening brief 的"不要要求一次说完、不要举大学/工作/搬家的例子",也推翻 SKILL.md L52"不得固定复述完整流程、领域清单"。理由:重算按轮计费不按事件,一条消息报三件只跑一次 compare(≈22s),分三轮跑三次;列领域不列年份不构成引导。
|
||
2. **采集题上方两个 44px 按钮:「没有」「记不清」。** 「没有」= 打字"没有"的既有拒答路径(`declined`,不调模型,瞬时收口);「记不清」= `skipped`,本次不再问该领域,采用后核对阶段仍可碰。**不做**带骨架的示例条(产品明确不要)。
|
||
3. **每轮只留一句话。** (a) "本轮对照了 …" 方法句从正文移除,进"已完成 N 步"的活动记录展开区(凭证数据不变);(b) 点选题旁白去掉"X 这段领先,Y 这段落后",改为"已记录,范围没变。"或"已记录,范围收到 A–B。";(c) 证据轮正文只准一句复述:"记下了:2016 年 9 月入学、2020 年 6 月毕业。"(年-月 + 事件短语,不评价价值,不写"对校正很有帮助"),范围句照旧由服务端接在后面。
|
||
4. 不学竞品把年份预填进回答条;不动采用门、确认门、各道门槛;不动 `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.md` OpeningPolicy 同步,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.tsx` L115 不再渲染 `vargaSentence`;`agent-activity-status.tsx` 在展开的活动行里保留它(折叠态不显示)。`rectification-varga-style-copy.test.ts` 等三栏。
|
||
- (b) `composeChoiceNarration`:去掉 `probe-explain.ts` L220 的领先/落后子句;模板只有"已记录,范围没变。"或"已记录,范围收到 A–B。"(范围变宽时写"变为")。`rectification-answer-choice*.test.ts` 三栏,`agent-voice-copy-contract` 把"领先""落后"加进机器词表(仅对用户可见旁白)。
|
||
- (c) Skill 证据轮口径:正文一句复述,格式"记下了:年 月 事件短语(、…)。",不得加评价句;`agent-run` 的 `stripQuestionSentences` 之后再加一道守卫:证据轮正文超过 2 句时只保留首句(服务端裁剪,不靠提示词)。验收:mock 模型写三句 → 落库一句 + 范围句;真实 Case 回放正文不含"很有帮助/很有价值/很有分量/特别有用"。
|
||
|
||
### 2.4 记录
|
||
- `docs/BUG_HISTORY.md` BUG-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. 开工前置命令
|
||
|
||
```bash
|
||
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 哈希一致 |
|
||
|
||
两条备注(不阻断):
|
||
1. 开场合格判定要求六类词里逐字命中五个,模型改写后大概率不合格 → 几乎总是落到固定模板。结果反而更稳定,接受;若日后想让模型措辞,放宽为同义命中。
|
||
2. `trimEvidenceTurnBody` 只在超过两句时裁剪;恰好两句且第二句是评价句时,只删短语会留下残句(如「这类节点。」)。P3,下次顺手:两句时若第二句命中评价词表则整句删。
|
||
|
||
结论:通过(实现 `aa7ccb30` + `1453fb16`)。真实环境走查欠:开场一次报三件后不被逐个追问;点「没有」瞬时回执。
|