Files
Jyotisha/docs/tasks/TASK-rectification-conversation-economy-20260909.md
T

74 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` L225245)、`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:4505: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 runreceipt 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 的领先/落后子句;模板只有"已记录,范围没变。"或"已记录,范围收到 AB。"(范围变宽时写"变为")。`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)"
```
## 验收(Claude2026-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`)。真实环境走查欠:开场一次报三件后不被逐个追问;点「没有」瞬时回执。