docs(consult): records for answer-the-question — BUG-1070~1073, VOICE/DESIGN, changelog, device checklist, progress
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
9a42333a55
commit
2b435f11d0
@@ -14371,3 +14371,63 @@
|
||||
- 相关记录:BUG-1031、BUG-1062
|
||||
- 复发自:无
|
||||
- 修复版本:待定
|
||||
|
||||
## BUG-1070 | 普通对话替用户和当事人说心思:反差写到人身上、是非题被改写成「你是否需要」
|
||||
|
||||
- 状态:fixed_pending_acceptance(代码与提示词已改、假模型与合同测试通过;真实模型输出待部署后按 `docs/testing/consult-answer-the-question-20260927.md` 复核)
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:普通咨询(本命 / 无出生分钟 / 申报时段共用的口气层 `productConversationVoice`)。
|
||||
- 现象:真机首轮父母题的正文出现「她问的是结果,你要的是被听」「你自己这一端本来也是收着的」;产品转述另一轮「我问是不是 X,他答你是否需要 Y」。用户的感受是「他在揣测我为什么这样问」。
|
||||
- 触发条件:问的是别人(父母、伴侣)或一句是非题;模型按开场形状找「表面 / 底下」的反差。
|
||||
- 根因:三处提示词合力。① OPENER SHAPE 第 1 步「表面 A,底下 B」没有限定 A、B 必须是盘面结构,问人时最省事的反差就是当事人的行为和动机;② PERSONA 段「问题含糊时……写『这句我按『……』理解了,不对你纠正我』」鼓励先改写问题再答,「是不是 X」被改写成「你是否需要 Y」;③ 合同没有任何一条禁止替用户陈述动机 / 需求 / 感受。
|
||||
- 修复(`frontend/src/mastra/product-voice.ts`):反差的 A、B 限定为星 / 宫 / 大运 / 分盘,问人时写那个人在盘上对应的宫位与代表星;删「这句我按『……』理解了」,改成只有两种实质不同读法时才写一句「我按 A 答」、单义问题直接答;新增「不揣测」段(六个禁写短语 + 禁止替用户或当事人陈述动机 / 需求 / 感受)与是非题答法(第一句是 / 不是 / 看情况,第二句盘上依据);合同 Never 段加「不写人要什么,写盘把人放在哪」;Good / Bad 各加一组虚构盘面的是非题样例。`frontend/docs/VOICE.md` 同步。
|
||||
- 验证:`frontend/tests/consultation-voice-contract.test.ts` 新增「the voice answers the sentence asked」用例(六个禁写短语、反差限盘面、是非题答法、样例);原「这句我按『……』理解了」断言按三栏改成 doesNotMatch。tsc 0、lint 0 error。
|
||||
- 防复发:禁写短语与反差限定由 voice 合同测试钉住;真机清单第 2 条检查追问的第一句。
|
||||
- 相关记录:BUG-1071、BUG-1072、BUG-1073;口气定稿 `84b293fb`(TASK-agent-voice)。
|
||||
- 复发自:无
|
||||
- 修复版本:codex/consult-answer-the-question-20260927(待验收推 staging)
|
||||
|
||||
## BUG-1071 | 追问轮重开 400 字开场 + 整套标题:一句是非题得到整份领域解读
|
||||
|
||||
- 状态:fixed_pending_acceptance
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:普通咨询本命路径(agentic 与 grounded 兜底两条),`daily_starlanguage` 入口不受影响。
|
||||
- 现象:会话里第二个问题起(「那我爸呢」「我妈是不是不太在意我」),回答仍是口语开场加四个二级标题的完整解读,重述上一轮已经写过的宫位;用户感受是「太宽泛」。
|
||||
- 触发条件:同一会话已有一轮本命解读后的任何追问。
|
||||
- 根因:`jyotishInstructions`「Call run-jyotish-consultation before answering every turn, including short follow-ups」、`natalSpokenReportContract` 末句「One natal … question still uses the opener-plus-skeleton above」、每轮用户轮的 `natalAnswerShapeInstruction()`「一次写完这四个二级标题」三处都不区分首轮与追问轮。
|
||||
- 修复:`consultation-thinking-plan.ts` 新增 `followUpAnswerShapeInstruction()`(≤ 200 字、第一句答问的那句、是非题先答是 / 不是、最多三处盘面事实、不写二级标题、不写行动清单、不重述上一轮、不解释用户为什么问;明确换领域或要求完整看才回首轮形状)、`hasPriorAssistantAnswer(history)`(存量历史里已有非空 assistant 正文即追问轮,不看问句字面)与 `natalUserTurnShape()`(daily 不变 / 追问 / 首轮);`route.ts` 用户轮按它切指令,grounded 兜底同样切换(同一份 `legacyNatalInstruction`);思考栏与工具上下文带 `followUpTurn`。合同末句改为「首轮用开场 + 骨架,追问轮按用户轮里的指令」。工具仍每轮调用,扣点与结算不变(D7)。
|
||||
- 验证:新文件 `frontend/tests/consult-answer-the-question-20260927.test.ts`:真实 Agent + 记录提示词的假模型 + 公开盘 golden,追问轮 → 写作步的提示词含「这是追问轮 / 不超过 200 字」、不含三标题指令,工具跑 1 次、模型 2 次,无标题短正文(< 160 字)整段放出并结算扣点 1 次;首轮对照用例保持开场 + 三标题。`consultation-thinking-plan.test.ts` 覆盖 `hasPriorAssistantAnswer` / `natalUserTurnShape` 四种情况(空历史、只有用户轮、空白 assistant、有回答;daily 不受历史影响)。
|
||||
- 防复发:D6 硬红线——追问判定只用历史事实,禁正则识别意图(沿用 BUG-976/977);route 合同测试断言 `natalUserTurnShape({ entrypoint: consultEntrypoint, history })` 与 `followUpTurn` 的接线。
|
||||
- 相关记录:BUG-1070、BUG-1073、BUG-1053(答案由看过工具结果的步写)、BUG-976/977(禁正则)。
|
||||
- 复发自:无
|
||||
- 修复版本:codex/consult-answer-the-question-20260927(待验收推 staging)
|
||||
|
||||
## BUG-1072 | 步骤栏第一节写着「先抓住你真正在问的事」
|
||||
|
||||
- 状态:fixed_pending_acceptance
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:普通咨询步骤栏(思考计划第一节 `title`,经 run timeline 显示)。
|
||||
- 现象:用户每轮先看到系统在找他「真正在问的事」,再看到答案换了题(BUG-1070),两者互相印证成「揣测」。
|
||||
- 触发条件:任何本命咨询轮。
|
||||
- 根因:`natalConsultationThinkingPlan` 第一节 `title: "先抓住你真正在问的事"`。
|
||||
- 修复:改为 `OPENER_THINKING_TITLE = "先回答你问的这件事"`;首轮步骤「用盘上的反差回答这个问题」,追问轮步骤「直接回答这句话」。该节没有自己的正文标题,heading 与「盘里支持这个判断的地方」共用(第一个正文 H2 出现即收口)。`frontend/DESIGN.md` 同步。
|
||||
- 验证:`consultation-run-timeline.test.ts`(三栏)、`consultation-thinking-plan.test.ts`、`consultation-agentic-runtime.test.ts`(三栏,改断 title)。
|
||||
- 防复发:合同测试断言 JSON 化的计划里不含「先抓住你真正在问的事」。
|
||||
- 相关记录:BUG-1070、BUG-1071
|
||||
- 复发自:无
|
||||
- 修复版本:codex/consult-answer-the-question-20260927(待验收推 staging)
|
||||
|
||||
## BUG-1073 | 首轮解读同一判断写三遍、三条行动给两遍(约 1,500 字)
|
||||
|
||||
- 状态:fixed_pending_acceptance
|
||||
- 首次发现 / 最近更新:2026-09-27 / 2026-09-27
|
||||
- 影响面:普通咨询本命首轮(agentic 与 grounded 兜底)。
|
||||
- 现象:真机首轮父母题:口语开场(判断 + 三条行动)→ `## 先回答你的问题` 再讲一遍母亲 / 父亲两头 → `## 盘里支持这个判断的地方` 六行表第三次列出 → `## 这周可以做的一件事` 三条行动与开场几乎原句重复。全文约 1,500 字,用户感受是「说了很多没多说什么」。
|
||||
- 触发条件:任何本命首轮。
|
||||
- 根因:2026-09-17 口气定稿(`84b293fb`)把「口语开场(含三条行动)」叠在原有四标题骨架之上,没有从骨架里减掉重合部分:`natalSpokenReportContract` 要求开场后再写 `## 先回答你的问题`,`natalAnswerShapeInstruction()`「先用口语回答问题;然后一次写完这四个二级标题」,开场结尾三条行动与最后一节三条行动是同一份清单。
|
||||
- 修复(产品 2026-09-27 拍板 D8):`REPORT_HEADING` 去掉 `question`,正文只剩「盘里支持这个判断的地方 / 时间怎么看 / 这周可以做的一件事」;开场不带行动,行动只在最后一节出现一次;依据节只写开场没说过的,表格与正文二选一;首轮全文 ≤ 900 字。四处同步:`natalSpokenReportContract`、`natalAnswerShapeInstruction()`、`skill-binding.ts` 的 `NATAL_REPORT_SKELETON`、`index.ts` 的写作句;`route.ts` grounded 兜底两处内联指令合并为一份 `legacyNatalInstruction`;`consultationContinuePrompt` 与 `consultationSpokenHeadingRule("natal")` 的标题清单同步。申报窗口模式的 `## 先回答你的问题` 保留为 `WINDOW_OPEN_HEADING`(不在本单范围)。`shortenAnswerHeading` 的旧缩写保留给历史消息。
|
||||
- 验证:`consultation-thinking-plan.test.ts`(标题表、拆分、进度、续写、指令,三栏)、`consultation-voice-contract.test.ts`(合同三标题、开场无行动、≤ 900 字、只引支撑字段,三栏)、五个用 `## 先回答你的问题` 做正文夹具的测试改成从开场直接到「盘里支持」(三栏)。
|
||||
- 防复发:voice 合同测试 `doesNotMatch(/## 先回答你的问题/)`;`Object.values(REPORT_HEADING).length === 3`。
|
||||
- 相关记录:BUG-1070、BUG-1071、BUG-1072;`84b293fb`。
|
||||
- 复发自:无
|
||||
- 修复版本:codex/consult-answer-the-question-20260927(待验收推 staging)
|
||||
|
||||
Reference in New Issue
Block a user