docs(tasks): consult plain answer — retire the opener shape, split by person (BUG-1131~1133)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-01 09:04:39 +08:00
co-authored by Claude Opus 5.5
parent a8820f2cf0
commit 8ed83ea6dc
2 changed files with 149 additions and 0 deletions
+1
View File
@@ -393,3 +393,4 @@
- 一轮结束后不删除文件;结论沉淀到 `docs/BUG_HISTORY.md`(Bug)、`CHANGELOG.md`(行为/skill 变化)、`frontend/DESIGN.md`(视觉与交互合同)。
- 任务书里的行号会随代码漂移,定位以符号名为准。
- **实现合入 `staging` 的同一次推送里,必须同时把状态板那一行改掉。** 2026-09-16 的对账发现 10 份早已合入的单仍写着「待领取 / 待验收」,会导致重复派活。
| `TASK-consult-plain-answer-20261001.md` | `PROGRESS-consult-plain-answer-20261001.md` | 普通对话「还是废话」:09-17 四步开场形状(格局名 → 谁推谁修 → 扮演哪个象)逼出谜语,问父母时爸妈被揉成一段;产品授权推翻该形状,改成先答 + 按问题里的对象分段 + 人话自检 + 空宫不单独下结论 + 父母卡标 mother/father(BUG-1131~1133) | **待领取** | 分支 `codex/consult-plain-answer-20261001` |
@@ -0,0 +1,148 @@
# TASK · 普通对话改说人话、按人分段(2026-10-01)
- 基线:`origin/staging` `75166802`
- 分支 / worktree:`codex/consult-plain-answer-20261001` / `.worktrees/consult-plain-answer-20261001`
- 范围:普通对话(本命 / 无出生分钟 / 申报时段三种模式)的回答形状提示词 + 父母数据卡;**生时校正面不动**
- BUG 编号起点:`BUG-1131`(开工时 `grep -o "BUG-1[0-9]\{3\}" docs/BUG_HISTORY.md | sort -u | tail -1` 核对,当前最大 1130)
## 1. 事故实证
产品 10-01 真机(staging,`deepseek-v4-flash`),问「我和父母关系如何,感……」。首轮开场原文(盘上事实不涉隐私,可引):
> 你与父母的关系是「外近内隔」:表面上很近——太阳(父)和月亮(母)都落在你的第 10 宫……推这一段的是月亮大运(2024-02 到 2034-02),情感与母亲那条线被顶到前台;修形式的是罗睺子运(到 2027-01),它让期待错位,体面交给金星子子运去收尾。所以别去应土星的「冷」和计都的「疏」……去扮演月亮的「照看」:4 宫、9 宫都是空宫,感情不靠自动流动,靠你主动接。
真实读者的评价是「还是废话」。对照的 Gemini 回答会分开讲「我和我妈的关系」「我和我爸的关系」「他们怎么对待我」。
逐句对照提示词(按符号定位):
| 现象 | 来源 |
| --- | --- |
| 「外近内隔」自造四字格局名 | `frontend/src/mastra/product-voice.ts` `productConversationVoice` → `OPENER SHAPE` 第 1 步「并把这个反差命名成一个格局(例:外松内紧)」 |
| 「推这一段的是…修形式的是…体面交给…收尾」 | 同处第 2 步「谁在推、谁在修……只负责把结果修得体面」 |
| 「别去应土星的「冷」…去扮演月亮的「照看」」 | 同处第 3 步,以及 `HOPE DISCIPLINE`「指出这段时间可以扮演哪个象」 |
| 爸妈被揉成一段、没有「他们怎么对我」 | 同处「全程无标题,总长 ≤ 400」+ 第 1 步只允许一个反差;`natalSpokenReportContract` 的固定三标题里没有按对象分段的位置 |
| 「4 宫、9 宫都是空宫,感情不靠自动流动」 | 没有任何规则禁止拿空宫下结论(Jyotish 看空宫要看宫主,空宫本身不算弱) |
| 爸、妈的依据混着用 | `frontend/src/lib/consultation-evidence-card.ts` `EVIDENCE_CARD_SPECS.parents` 只给 `houses: [4, 9]`、`planets: ["Sun", "Moon"]`,没有标「母亲 / 父亲」,也没有 Jaimini 母亲代表星 MK |
同一套形状文字还抄在另外 6 处:`natalSpokenReportContract`(同文件)、`frontend/src/mastra/index.ts` 指令第 21 行附近("On the first natal answer of a session")、`frontend/src/mastra/skill-binding.ts` `NATAL_REPORT_SKELETON`、`frontend/src/lib/consultation-thinking-plan.ts`(`natalAnswerShapeInstruction`、骨架说明 `On the first natal answer`、步骤标签「用盘上的反差回答这个问题」「这周可以扮演哪个象」)、`frontend/src/app/api/consult/route.ts` 用户回合指令(搜「先给反差」)、`frontend/docs/VOICE.md` 原则 6、7 和示例表。
## 2. 根因
09-17(`84b293fb`)照一段紫微流年范文定下了四步开场形状:反差格局名 → 谁推谁修 → 扮演哪个象 → 行动。那段范文针对的是「一年事业」这种单一对象、单一时段的问题。现在这个形状对所有领域强制生效。模型按格填空,结果是术语叠术语的谜语。问到多个人时,只给一段 400 字、只容一个反差,所以没地方分开讲每个人。BUG-1070(09-27)只收窄了「反差只写盘上」,没碰形状本身,所以不算复发,是同一形状的另一个后果。
模型偏弱(flash)会放大问题,但不是根因:换 Gemini 走同一提示词,也会被推成同样的形状。
## 3. 决策记录(产品 2026-10-01 授权)
**D1 推翻 09-17 四步开场形状(`84b293fb`)以及 VOICE.md 原则 7、示例表里的「外松内紧」定稿。** 执行方不得以「这是产品拍板的口气定稿」为由保留。BUG-1070(反差只写盘上)、BUG-1073(每件事只说一遍)的**目的**继续有效:不读心、不重复。只是落到新形状里。
**D2 新形状:先答,再按对象分段。**
1. 开场 1–3 句人话,第一句就是结论。不写标题,不起格局名。
2. 问题里点到几个对象(妈妈、爸爸、伴侣、老板……)或几个子问题(关系如何、他们怎么对我、什么时候),开场之后每个各一段,H2 标题用问题里的词(例:`## 你和妈妈`、`## 你和爸爸`、`## 他们怎么对你`)。只有一个对象、一个子问题时不拆,开场后直接接下面第 4 步。
3. 每段先写 1–3 句人话,讲这个人是什么样、你们怎么相处、事情会怎么走;然后在括号里给不超过 2 处盘上依据(宫、宫主、代表星、分盘、大运)。
4. 之后依次是 `## 时间怎么看`(卡里有相关大运或行运才写,没有就省)、`## 这周可以做的一件事`(1–3 条,只出现一次)。
5. 原 `## 盘里支持这个判断的地方` 改名 `## 盘上依据`,放在 `## 时间怎么看` 之前,只写对象段括号里没引过、而判断需要的依据(Raman 六步、Yoga 表照旧放这里,表格与正文二选一);没有新依据就省掉这一节。
6. 首轮总长 ≤ 1,000 字(原 900;多一个对象段要多出约 100 字)。追问轮 ≤ 200 字直接答的规则(BUG-1072)不变。
**D3 人话自检,写进提示词。** 把每句话括号里的内容删掉后,一个完全不懂占星的人仍能看懂它在说什么。禁止:
- 自造格局名、四字概括(「外松内紧」「外近内隔」之类)
- 「推 / 修 / 收尾」这类大运拟人修辞,「去扮演 X 的象」「别去应 X 的象」
- 把星名当形容词主语(「土星的冷」「计都的疏」「月亮的照看」)
- 括号外每段最多 1 个占星术语,首次出现时用白话套住(例:「现在这十年(月亮大运)」)
**D4 推断边界:** 空宫不单独下结论,要看宫主;只用卡上和查得到的事实。与「不读心」同级写进 Never 清单。
**D5 希望纪律保留,换说法。** 保留:不顺就说不顺;允许精确应期时转机说到月份,不允许就说这段时间拿来干什么;禁空话五句。删除:「扮演哪个象」「每个人都有能扮演的象」。改成「每次都要说清这段时间能做什么」。
**D6 父母卡标角色:** `parents` 卡分成 `mother`(4 宫、4 宫主、月亮、MK、D12 4 宫)和 `father`(9 宫、9 宫主、太阳、D12 9 宫;引擎有 PiK 才加,没有不造)。模型直接看到哪条依据属于谁。
**D7 形状说明只定义一处。** 7 处抄写收敛为 `product-voice.ts` 导出的常量,其余位置引用它(英文骨架说明可以一句话指过去),以后改口气只改一处。
## 4. 硬红线
1. 不动生时校正的提示词、lexicon、Skill 报告;不动寒暄豁免(BUG-976/977)与追问轮 200 字规则(BUG-1072)的判定逻辑。
2. 不动 Part B / MEVG / 技法审计表的去向(仍在证据面板,不进正文);不动工具调用流程、数据卡其它领域、`route.ts` 流程代码(只改那一段指令文字)。
3. 降级路线保留语义:申报时段不讲宫位、大运、分盘、月份;无出生分钟只讲公开日历、不点个人大运、不写月份。改的只是形状,不是边界。
4. `frontend/src/app/page.tsx`、`scripts/jyotish_api_server.py` 不增长;不升级依赖;不改数据库。
5. 改既有断言必须写「原值 / 新值 / 原因」三栏;测试总数不低于开工实测。
6. 新的 Good 示例只能用虚构或示意数据,并标「盘上数据是示意」;不得把本次事故截图的原文当示例写进仓库(Bad 示例只能用改写过的短句)。
7. `skills/` 不需要改(形状不在 Skill 里)。若执行中发现需要改,先停下回报,不要顺手 bump 版本。
## 5. 任务分解
### T1 新形状写进 `product-voice.ts`(BUG-1131)
- 删 `OPENER SHAPE` 整段,新写 `ANSWER SHAPE`,按 D2 / D3 / D4。降级路线两条按红线 3 改写成新形状的填法。
- `HOPE DISCIPLINE` 按 D5 改写;PERSONA 不动。
- Good / Bad 示例全部换掉。至少要有:① 父母题按对象分段的完整首轮(下附草稿,执行方可润色,不得改结构);② 单对象事业题(不拆段);③ 是非题、追问轮两个现有示例保留;④ Bad 示例:格局名 + 推修 + 扮演象的改写短句,并写明坏在哪。
- `natalSpokenReportContract` 改为新的标题顺序(对象段 → `盘上依据` → `时间怎么看` → `这周可以做的一件事`),≤ 1,000 字。
- **验收**:`productConversationVoice` 和 `natalSpokenReportContract` 里不再出现「扮演」「格局」「谁在推」「外松内紧」;新增单测钉住:按对象分段规则、人话自检句、禁止清单四项、空宫规则、降级路线两条。
父母题 Good 草稿(盘上数据是示意):
```
你和父母不疏远,但亲近主要落在「为你的前途操心」上,聊心事的时候少。妈妈管得细、操心多;爸爸话少,关心靠做事来表达。
## 你和妈妈
她对你的事很上心,但常把关心说成提醒和安排,所以你们聊工作、聊打算的时候多,聊感受的时候少。(母亲宫主水星落在事业宫;月亮也在事业宫)
## 你和爸爸
他在你心里分量重,是你做事的标杆;他不太会说软话,你们之间更像互相看着对方做事。(太阳在事业宫;9 宫主木星落 12 宫,父亲的心力有一部分在远处或在自己的事上)
## 他们怎么对你
两个人对你都是期望多于宠,要求不少,但出发点是想让你立得住。
## 时间怎么看
现在这十年(月亮大运,到 2034 年 2 月)和妈妈的来往会比以前多,家里的事更容易落到你身上。
## 这周可以做的一件事
- 给妈妈打电话时先问她最近怎样,再说你自己的事。
- 有决定要做时,先听听爸爸的意见,哪怕最后不照做。
```
### T2 同步其余 6 处,收敛为一处定义(D7)
- `index.ts`、`skill-binding.ts` `NATAL_REPORT_SKELETON`、`consultation-thinking-plan.ts`(`natalAnswerShapeInstruction`、骨架说明、`REPORT_HEADING.support` 改为「盘上依据」)、`route.ts` 用户回合指令:删去反差 / 推修 / 扮演字样,改为引用 T1 导出的常量或一句与之一致的英文摘要。
- 思考栏步骤标签:「用盘上的反差回答这个问题」改为「先用一句话回答」;「这周可以扮演哪个象」改为「这周可以做什么」。标题 `OPENER_THINKING_TITLE` 不变。
- **验收**:`git grep -n "扮演\|谁在推\|命名成一个格局\|外松内紧" frontend/src` 为 0 行;新增一条合同测试:同一组标题常量在 contract、thinking-plan、route 用户回合三处一致。
### T3 父母卡标角色(D6,BUG-1132)
- `consultation-evidence-card.ts`:`parents` 规格加 `karakas: ["MK"]`(引擎 `chara_karakas` 里有 MK),并把 4 宫 / 月亮 / MK / D12 4 宫归到 `mother`,9 宫 / 太阳 / D12 9 宫归到 `father`。PiK 只在引擎表里有时才放进 `father`,没有时不写,也不记缺口。
- 数据形状改动要同步卡的类型和渲染(若有),`family`、`children` 不动。
- **验收**:golden fixture(来自真实引擎响应,`frontend/tests` 现有 card fixture 即可)跑出的 parents 段有 `mother` / `father` 两个子对象,字段齐全;缺 MK 时写进 `gaps`。
### T4 空宫规则(D4,BUG-1133)
- 写进 T1 的 Never 清单:「空宫不单独下结论:要说这个宫,就说它的宫主落在哪、什么状态」。
- **验收**:T1 的单测覆盖这一句。
### T5 文档与记录
- `frontend/docs/VOICE.md`:原则 6 按 D5 改,原则 7 按 D2 / D3 重写(注明 2026-10-01 推翻 09-17 形状),示例表里「外松内紧」三行换成新示例。
- `docs/BUG_HISTORY.md`:BUG-1131(形状逼出谜语、多对象被揉成一段)、BUG-1132(父母卡无角色)、BUG-1133(空宫推断无约束);关联 BUG-1070 / 1073,写明「不是复发:1070 只收窄了反差取材,形状本身没改」。
- `CHANGELOG.md` 一条;`docs/tasks/README.md` 索引;`docs/tasks/PROGRESS-consult-plain-answer-20261001.md`。
- `docs/testing/consult-plain-answer-20261001.md` 真机清单(见 T6)。
### T6 效果验证
- **离线**(执行方有模型凭据才做,没有就写成环境缺口):用虚构出生资料,对 4 个问题各跑新、旧提示词一次,原文存进进度记录:①「我和父母关系如何」②「我和我妈关系怎么样」③「我的事业接下来怎么走」④「我和伴侣还能走下去吗」。逐条按 D3 禁止清单打勾。
- **真机清单**(给产品,staging,deepseek-v4-flash 与另一个模型各走一遍):
1. 问「我和父母关系如何,他们怎么对待我」:有 `你和妈妈`、`你和爸爸`、`他们怎么对你` 三段;无格局名、无「推/修/扮演」;没提空宫,或提了也讲了宫主。
2. 把每段括号外的话念给不懂占星的人听,能复述大意。
3. 追问「那我爸呢」:≤ 200 字,直接答,没有标题。
4. 问「我的事业接下来怎么走」:不拆段,开场后直接是依据、时间、行动。
5. 打「你好」:仍是一句寒暄。
6. 未填出生分钟的档案问事业:不点个人大运,不写月份。
## 6. 让步顺序
时间不够时按此顺序保:T1 > T2 > T4 > T3 > T5 > T6 离线部分。T1 + T2 必须同一次交付(只改一处会出现两套形状互相打架)。
## 7. 开工前置命令
```bash
cd /workspace/Jyotisha
git status -sb
git fetch origin --prune
git worktree add -b codex/consult-plain-answer-20261001 .worktrees/consult-plain-answer-20261001 origin/staging
cd .worktrees/consult-plain-answer-20261001/frontend && npm ci
./node_modules/.bin/tsc --noEmit && npm run lint && npm test 2>&1 | tail -20 # 记下测试总数与失败名单作基线
grep -o "BUG-1[0-9]\{3\}" ../docs/BUG_HISTORY.md | sort -u | tail -1
```
交付门:`tsc --noEmit` 0 错;`npm run lint` 0 error;`npm test` 的失败名单与基线逐条一致;`next build` 后 `/` 仍是 Static。推 `codex/consult-plain-answer-20261001` 后回报,由 Claude 验收后再推 staging。