docs(consult): plain answer records — VOICE, BUG-1132~1134, progress, device checklist
Independent Staging Quality Gate / validate (push) Failing after 13m27s
Independent Staging Quality Gate / publish (push) Skipped

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:48:51 +08:00
co-authored by Claude Opus 5.5
parent 2ec2762dcf
commit 44cdd9c9b9
6 changed files with 161 additions and 10 deletions
+8
View File
@@ -1,5 +1,13 @@
# 印度占星 Skill 更新日志
## 2026-10-01 — 普通对话改说人话:先给结论,问到几个人就分几段讲(未部署)
- 回答第一句就是结论;问「我和父母关系如何」这类问题,会分开写「你和妈妈」「你和爸爸」「他们怎么对你」,每段先用大白话讲,盘上依据放在括号里。
- 不再出现「外松内紧」式的四字格局名、「谁在推谁在修」「去扮演某颗星的象」这类说法;不再拿「空宫」直接下结论。
- 取消字数上限,讲清楚为准;同一件事仍只说一遍,追问仍是直接答、不重讲整份。正文固定小节「盘里支持这个判断的地方」改名「盘上依据」,没有新依据时省掉。
- 父母资料卡标明哪些依据属于母亲、哪些属于父亲(含母亲代表星 MK)。生时校正不受影响。Skill 版本不 bump。
## 2026-09-30 — 生时校正改为先回答「用哪张盘解读」(实施中,未发布)
- 新产品案例按持久领域交付目标盘上升星座与可信档位;分钟范围放次行。婚恋D1+D9、事业D1+D10,综合/报告/其它D1+D9+D10。窗口过宽或扫描不可用时如实说明,不推荐不能判定的分盘。
+43
View File
@@ -15182,6 +15182,49 @@
- 复发自:无(新迁移引入,未部署)
- 修复版本:`codex/rectification-varga-resolution-fix-20261001`(未部署)。
## BUG-1132 | 普通对话回答像谜语:四步开场形状逼出格局名、大运拟人、扮演象,问父母时爸妈揉成一段
- 状态:resolved(代码 + 合同测试;未部署,真机待产品)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:普通对话(本命 / 无出生分钟 / 申报时段)的回答形状提示词:`frontend/src/mastra/product-voice.ts`(`productConversationVoice`、`natalSpokenReportContract`)、`frontend/src/mastra/index.ts`、`frontend/src/mastra/skill-binding.ts`、`frontend/src/lib/consultation-thinking-plan.ts`、`frontend/src/app/api/consult/route.ts`(旧路径用户回合)。生时校正不受影响。
- 现象:产品真机(staging,deepseek-v4-flash)问「我和父母关系如何」,开场是自造四字格局名、「推这一段的是某某大运,修形式的是某某子运」「别去应某星的冷,去扮演某星的照看」,爸妈揉在一段里,没有分开讲和妈妈、和爸爸、他们怎么对我;读者评价「还是废话」。
- 触发条件:任何本命首轮回答,问到多个对象时最明显。
- 根因:2026-09-17(`84b293fb`)定的四步开场形状(反差并命名格局 → 谁在推谁在修 → 别去应 X 的象去扮演 Y 的象 → 行动,≤ 400 字无标题)来自一段单对象、单时段的流年范文,被强制用在所有问题上;模型逐格填空。≤ 400 字、只容一个反差,问多个人时没有位置分开讲。同一形状文字抄在 7 处。不是 BUG-1070 复发:1070 只把反差的取材收窄到盘上,形状本身没改。
- 修复:产品 10-01 授权推翻四步形状(TASK-consult-plain-answer-20261001 D1–D3、D5、D7、D8)。新 ANSWER SHAPE:开场一到三句人话、第一句是结论;问题里点到几个人或子问题就分几段(H2 用问题里的词,父母必分妈妈 / 爸爸);每段先人话、括号里给依据;固定标题 `## 盘上依据`(原「盘里支持这个判断的地方」,可省)→ `## 时间怎么看`(可省)→ `## 这周可以做的一件事`。人话自检:删掉括号后不懂占星的人也能看懂;禁格局名、大运拟人与角色修辞、星名当形容词的主人。希望纪律去「扮演象」。取消开场 400 / 首轮 900 / 追问 200 字上限,讲清楚为准,保留「只说一遍」与追问不重开骨架。形状只在 `consultation-thinking-plan.ts` 定义一处(`NATAL_ANSWER_SHAPE_SUMMARY`、`natalAnswerShapeBody()`),其余位置引用。思考栏开场节改为在任意 H2 出现时完成、被省略的节在后面标题出现时完成。
- 验证:`consultation-voice-contract`、`consultation-thinking-plan`、`consult-answer-the-question-20260927`、`consultation-entrypoint` 合同测试改断言(三栏见 PROGRESS)并新增「形状只定义一处」「开场节在对象段标题处完成」两条;`git grep "扮演\|谁在推\|命名成一个格局\|外松内紧" -- frontend/src` 0 行;tsc 0、lint 0 error、npm test 失败名单与基线一致、build `/` Static。真实模型输出:本机无模型凭据,留待部署后按 `docs/testing/consult-plain-answer-20261001.md`。
- 防复发:回答形状只在一处定义,合同测试锁定摘要、合同、用户轮、思考栏一致且不含旧修辞与字数上限;新口吻样例必须是「多对象分段」与「单对象不拆段」各一,且通过人话自检。
- 相关记录:BUG-1070、BUG-1071、BUG-1072、BUG-1073、BUG-1133、BUG-1134
- 复发自:无(推翻 2026-09-17 产品定稿的形状)
- 修复版本:分支 `codex/consult-plain-answer-20261001`(未部署)
## BUG-1133 | 父母数据卡不分母亲、父亲,模型混用依据
- 状态:resolved(代码 + golden 测试;未部署)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:`frontend/src/lib/consultation-evidence-card.ts` `EVIDENCE_CARD_SPECS.parents`。
- 现象:父母题回答把太阳、月亮、4 宫、9 宫放在一句里讲,分不清哪条说妈妈、哪条说爸爸。
- 触发条件:任何 parents 领域回答。
- 根因:parents 卡只给 `houses: [4, 9]` 与 `planets: ["Sun", "Moon"]`,没有标注角色,也没有 Jaimini 母亲代表星 MK。
- 修复:parents 规格加 `karakas: ["MK"]` 与 `roles`;卡上 `roles.mother`(4 宫、宫主、月亮、MK、D12 第 4 宫星座与落星)、`roles.father`(9 宫、宫主、太阳、D12 第 9 宫);PiK 只在引擎表里有时才加(当前引擎 7 karaka 方案没有 PiK,不造、不记缺口);「母亲 / 父亲」标签进 `EVIDENCE_CARD_LABELS`;Agent 指令说明 roles 的用法。
- 验证:`consult-evidence-card-20260927.test.ts` 新增两条:golden 三张盘逐字段核对 roles(宫主取自本节、MK 存在、D12 宫位按 D12 上升推算、无缺口);删掉 MK 时记 `parents.karaka.MK` 缺口。原有「每个卡值都是引擎值」与体量上限测试照常通过。
- 防复发:说多个人的领域,卡上必须写明每条依据属于谁。
- 相关记录:BUG-1132
- 修复版本:分支 `codex/consult-plain-answer-20261001`(未部署)
## BUG-1134 | 回答拿空宫直接下结论(「4 宫、9 宫空宫,感情不靠自动流动」)
- 状态:resolved(提示词 + 合同测试;未部署,真机待产品)
- 首次发现 / 最近更新:2026-10-01 / 2026-10-01
- 影响面:普通对话提示词。
- 现象:回答把「空宫」当成结论依据。Jyotish 判宫看宫主,空宫本身不说明弱。
- 触发条件:问题宫没有落星时。
- 根因:没有任何规则约束空宫推断。
- 修复:共享口吻「推断边界:空宫不单独下结论——要说这个宫,就说它的宫主落在哪、什么状态」;本命合同 Never 一条;中文用户轮与英文形状摘要各一句。
- 验证:`consultation-voice-contract.test.ts`、`consultation-thinking-plan.test.ts` 锁定这几句。真实模型输出待部署后真机第 1 步。
- 防复发:同上合同测试。
- 相关记录:BUG-1132
- 修复版本:分支 `codex/consult-plain-answer-20261001`(未部署)
## BUG-1140 | staging 镜像打包失败:`frontend/scripts` 下的研究脚本引用了 `frontend/tests` 的夹具
- 状态:resolved(修复已推 staging;以门禁 publish 通过与 `/api/health` 部署版本为最终证据)
@@ -0,0 +1,86 @@
# PROGRESS · 普通对话说人话、按人分段(2026-10-01)
- 任务书:`docs/tasks/TASK-consult-plain-answer-20261001.md`(origin/staging `00420f89`,含 D8 不限字数)
- 执行:Claude fork 子代理(直接执行模式,产品授权)
- 分支 / worktree:`codex/consult-plain-answer-20261001` / `.worktrees/consult-plain-answer-20261001`,基线 `00420f89`
- BUG 编号:开工核对 `docs/BUG_HISTORY.md` 最大 BUG-1131;staging 上另一份任务书预留 1135~1139;本单用 1132~1134
## 基线与交付门(Node 22.14,`/exec-daemon/node`)
| 项 | 基线 `00420f89` | 本分支 |
| --- | --- | --- |
| `tsc --noEmit` | 0 错 | 0 错 |
| `npm run lint` | 0 error / 126 warning | 0 error / 126 warning |
| `npm test` 总数 | 4,809(pass 4,744 / fail 24 / skip 41) | 4,813(pass 4,748 / fail 24 / skip 41) |
| 失败名单 | 24 条(全是数据库 / 部署脚本类,无 Docker) | 与基线逐条一致(`diff` 无差) |
| `next build` | `/` ○ Static | `/` ○ Static |
| `.next/static` 全部 js 逐个 gzip 合计 | 1,632,304 B | 1,632,341 B(+37 B,+0.002%) |
## 实现
| 任务 | 落点 |
| --- | --- |
| T1 新形状(BUG-1132) | `frontend/src/mastra/product-voice.ts`:删 `OPENER SHAPE`,新写 `ANSWER SHAPE`(先答 → 按对象分段 → 每段人话 + 括号依据 → 行动;人话自检与四条禁止;推断边界;降级路线两条);`HOPE DISCIPLINE` 去「扮演象」;Good 换成父母题按对象分段、单对象事业题不拆段;新增格局名 Bad(改写示意,非事故原文);顾问报告 Bad 理由改写;`natalSpokenReportContract` 改为对象段 → `## 盘上依据`(可省)→ `## 时间怎么看`(可省)→ `## 这周可以做的一件事`,不设字数上限,Never 加空宫与格局名两条 |
| T2 收敛一处(D7) | `frontend/src/lib/consultation-thinking-plan.ts` 新增 `NATAL_ANSWER_SHAPE_SUMMARY`(英文唯一摘要)与 `natalAnswerShapeBody()`(中文用户轮唯一定义);`REPORT_HEADING.support` 改「盘上依据」;`product-voice.ts`、`index.ts`、`skill-binding.ts`、`consultationSpokenHeadingRule("natal")` 引用摘要;`route.ts` 旧路径用户回合引用 `natalAnswerShapeBody()`;思考栏「用盘上的反差回答这个问题」→「先用一句话回答」,「这周可以扮演哪个象」→「这周可以做什么」;续写提示先补未写完的对象段 |
| T2 附带 | `applyThinkingSectionProgress`:开场节在出现任何 H2 时完成(对象段标题不是固定标题);某节标题出现后,它前面被省略的节一并算完成(`盘上依据` 可省)。原逻辑下开场节要等到「盘上依据」出现才完成,而它现在可能不出现 |
| T3 父母卡(BUG-1133) | `frontend/src/lib/consultation-evidence-card.ts`:`parents` 规格加 `karakas: ["MK"]` 与 `roles`;卡上 `roles.mother`(4 宫、宫主、月亮、MK、D12 第 4 宫星座与落星)/`roles.father`(9 宫、宫主、太阳、D12 第 9 宫);PiK 只在引擎表里有时才进(golden 三张盘都是 7 karaka,无 PiK,不记缺口);MK 值只在 `section.karakas` 存一份,角色里写代号;「母亲 / 父亲」进 `EVIDENCE_CARD_LABELS`。`index.ts` 数据卡说明加一句 roles 的用法 |
| T4 空宫(BUG-1134) | 共享口吻「推断边界」一行 + 合同 Never 一条 + 中文用户轮与英文摘要各一句 |
| T5 文档 | `frontend/docs/VOICE.md` 原则 6、7、口语层形状、首轮 / 追问说明与示例表;`CHANGELOG.md`;`docs/BUG_HISTORY.md` BUG-1132~1134;`docs/tasks/README.md`;真机清单 `docs/testing/consult-plain-answer-20261001.md` |
`git grep -n "扮演\|谁在推\|命名成一个格局\|外松内紧" -- frontend/src` → 0 行。普通对话提示词(`product-voice.ts`、`index.ts` 本命 / general / window、`skill-binding.ts`、`consultation-thinking-plan.ts` 本命与追问、`route.ts`)里没有字数上限。
## 改动的既有断言(原值 / 新值 / 原因)
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `consultation-voice-contract.test.ts` | `open with the OPENER SHAPE above, heading-free` | `follow the ANSWER SHAPE above. ${NATAL_ANSWER_SHAPE_SUMMARY}` | D1/D7 |
| 同上 | 有「别去应 X 的象,去扮演 Y 的象」「Spoken-layer total ≤ 400」 | 不得出现「扮演」「≤ 400」;须有「不设字数上限,讲清楚为准」 | D1/D8 |
| 同上 | binding 有「after a 3-6 sentence spoken reply」 | binding 有「as the evidence of the product's answer shape … ${NATAL_ANSWER_SHAPE_SUMMARY}」 | D2/D7 |
| 同上 | 合同里「## 盘里支持这个判断的地方, then ## 时间怎么看, then …」 | 对象段规则 + `${REPORT_HEADING.*}` 三标题顺序且「盘上依据」可省 | D2/D7 |
| 同上 | 「The opener carries no action list」 | 「开场不写标题、不写行动」 | 合同引用唯一定义 |
| 同上 | 「First-turn total ≤ 900」 | 不得含 900;「There is no length cap」 | D8 |
| 同上 | 「only what the opener did not already say」 | 「only what the opener and the sections did not already cite」 | D2 |
| 同上 | mastra「each thing said once, first-turn total ≤ 900 characters」 | mastra 引用摘要,不含 ≤900 / ≤400 / 反差 / 扮演 | D7/D8 |
| 同上 | binding「no action list in the opener」「the actions, once」 | binding 不含反差 / 扮演 / ≤400;「the actions appear once」 | D7(语义由摘要携带) |
| 同上 | route「先用不超过 400 字口语…」「别去应 X 的象…」 | route 引用 `natalAnswerShapeBody()`,不含扮演 / 400 / 900 字 | D1/D7/D8 |
| 同上 | 整条 test「the opener is a shape — 反差…」 | 同位置改为「the answer is a shape — conclusion first…」,锁新形状各条 | D1–D4/D8 |
| 同上 | 「不是每个人都有转机,但每个人都有能扮演的象」 | 「…每个人这段时间都有能做的事」+「每次都要说清这段时间能做什么」 | D5 |
| 同上 | 整条 test「the pinned Good example carries the new shape…」(外松内紧定稿) | 「the pinned Good examples split by person…」:父母分段 Good、单对象 Good、格局名 Bad;顾问报告 Bad 理由改「没有盘上依据」 | D1/D2 |
| 同上 | 「A 和 B 都必须是盘上的结构」「反差写那个人…不写心思」 | 「问的是别人时,写那个人在你盘上对应的宫位与代表星说明了什么,不写那个人的心思」 | D1(BUG-1070 目的保留) |
| 同上 | 「本命解读里这三条不写在开场…」「…行动就写在开场结尾」 | 「本命解读里只写在最后一节…出现一次」「…行动就写在回答结尾」 | D2 |
| `consultation-thinking-plan.test.ts` | 步骤标签「用盘上的反差回答这个问题」 | 「先用一句话回答」 | D1/T2 |
| 同上 | `natal` 含「这三个二级标题」 | 含对象分段规则与「然后依次写:」 | D2 |
| 同上 | `natal` 含「全文不超过 900 字」 | 含「不限字数,讲清楚为准」,且无「不超过 N 字」 | D8 |
| 同上 | `natal` 含「反差只写盘上的结构」 | 含人话自检与空宫规则,且无反差 / 扮演 / 谁在推 | D1/D3/D4 |
| 同上 | 追问含「不超过 200 字」 | 含「讲清楚为准,不限字数」,且无「不超过 N 字」 | D8 |
| `consult-answer-the-question-20260927.test.ts` | 写作提示含「不超过 200 字」 | 含「讲清楚为准,不限字数」,且无「不超过 N 字」 | D8 |
| 同上 | 首轮开场步骤标签「用盘上的反差回答这个问题」 | 「先用一句话回答」 | D1/T2 |
| `consultation-entrypoint.test.ts` | route 含「先用不超过 400 字口语直接回答下面的问题…」 | route 含 `natalAnswerShapeBody()…resolvedQuestion.modelQuestion` | D7/D8 |
| `consult-evidence-card-20260927.test.ts` | 「每个卡值都是引擎值」白名单 = `EVIDENCE_CARD_LABELS` 两条 | 同一来源多「母亲」「父亲」两条,断言代码不变 | D6 |
新增测试 4 条:开场节在对象段标题处完成、被省略的节在后面标题出现时完成;形状只定义一处(摘要、合同、用户轮、思考栏标题与摘要一致,均无字数上限与旧修辞);父母卡 roles 逐字段对 golden 三张盘(宫主取自本节、MK、无 PiK 不记缺口、D12 宫位按 D12 上升推算);缺 MK 记缺口。测试总数 4,809 → 4,813。
## T6 效果验证
**模型离线对比:环境缺口。** 本机 `frontend/.env*` 只有 `.example`,环境变量里没有任何模型 key,无法用新旧提示词各跑一次。四个问题(父母 / 只问妈妈 / 事业 / 伴侣)的新旧对比留到部署 staging 后按真机清单走。
**长度副作用核对(只核对,未改任何上限):**
| 项 | 代码里的值 | 位置 |
| --- | --- | --- |
| 回答输出上限 | 16,384 token;回答步开 provider 思考时上限 = 16,384 + 8,192(思考)= 24,576 | `frontend/src/lib/agent-generation-settings.ts` `AGENT_ANSWER_OUTPUT_TOKENS` / `AGENT_THINKING_OUTPUT_TOKENS`;`consultation-tools.ts` 回答步 `thinking: "enabled"` |
| 答题时钟 | 70 s(工具阶段 110 s 另算,合计 180 s) | `frontend/src/mastra/consultation-tools.ts` `CONSULTATION_ANSWER_TIMEOUT_MS`;续写与重试共用同一个钟,钟到就中止并按未写完处理 |
| 时钟依据(代码注释里的实测) | 默认模型约 90–100 token/s(含首字延迟)→ 70 s 约 6,300–7,000 token;吞吐减半时约 3,000 token | 同上注释,引 `PROGRESS-report-writer-failure-20260902` |
估算:中文正文按每字约 0.7–1.5 token 计,1,500–2,500 字 ≈ 1,100–3,750 token,远低于 16,384 的输出上限,**不会被 token 上限截断**。时钟方面:思考 token 也吃这 70 s;正常吞吐下 2,500 字正文 + 1,000–2,000 思考 token ≈ 2,100–5,750 token,放得下;**吞吐掉到一半(约 45 token/s)时,2,000 字以上的回答加上思考就可能撞上 70 s**,结果是最后一节写不完。所以风险只在「慢模型 / 高峰期 + 很长的回答」,已写进真机清单第 7 步,请产品遇到截断时报来;是否调钟由 Claude 与产品决定,本单未动。
## 偏离与未做
- 今日入口(`dailyAnswerShapeInstruction` / `consultationSpokenHeadingRule("daily")` 的「≤ 400」「每句 ≤ 30 字」)与 `index.ts` 今日星语短句、个人报告 headline 的字数限制**没动**:它们不是普通对话的回答形状,任务书 D8 列举的也只是开场 / 首轮 / 追问。如需一起放开另开单。
- `chat-answer-split.ts` 仍把旧标题「盘里支持这个判断的地方」缩写成「盘上依据」:历史会话里存的是旧标题,保留兼容;新回答直接就是「盘上依据」。
- 纯寒暄豁免那句仍叫「不要套开场形状」(未改字,三处测试依赖这句原文,语义仍对)。
- `skills/` 未改,Skill 版本不 bump。
## 变基复跑
推分支前 `origin/staging` 前进到 `c304cf3a`(BUG-1140 构建修复 + 新增 `runtime-sources-no-test-imports` 测试 2 条)。本分支变基到其上后复跑:tsc 0;lint 0 error / 126 warning;`npm test` 4,815(pass 4,750 / fail 24 / skip 41),失败名单与基线逐条一致;`next build` `/` ○ Static。`docs/BUG_HISTORY.md` 冲突按编号顺序合并(1132~1134 在 1140 之前)。
+1 -1
View File
@@ -395,4 +395,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-1132~1134) | **待领取** | 分支 `codex/consult-plain-answer-20261001` |
| `TASK-consult-plain-answer-20261001.md` | `PROGRESS-consult-plain-answer-20261001.md` | 普通对话「还是废话」:09-17 四步开场形状(格局名 → 谁推谁修 → 扮演哪个象)逼出谜语,问父母时爸妈被揉成一段;产品授权推翻该形状,改成先答 + 按问题里的对象分段 + 人话自检 + 空宫不单独下结论 + 父母卡标 mother/father(BUG-1132~1134) | **已实现,待 Claude 验收**(fork 子代理直接执行);未推 staging、未部署;模型对比为环境缺口,真机清单 `docs/testing/consult-plain-answer-20261001.md` | 分支 `codex/consult-plain-answer-20261001` |
@@ -0,0 +1,13 @@
# 真机清单 · 普通对话说人话、按人分段(2026-10-01)
对应任务书 `docs/tasks/TASK-consult-plain-answer-20261001.md`(BUG-1132~1134)。在 staging 上,用自己的账号走;`deepseek-v4-flash` 走一遍,再换一个模型走一遍。每一步只看结果对不对,不用看代码。
| 步 | 怎么做 | 通过标准 |
| --- | --- | --- |
| 1 | 新开对话,问「我和父母关系如何,他们怎么对待我」 | 开场第一句就是结论;下面有「你和妈妈」「你和爸爸」「他们怎么对你」三段(标题用词可以略有不同,但妈妈、爸爸必须分开);没有「外X内Y」这类四字格局名,没有「推这一段的是……」「修形式的是……」「去扮演……」;没提空宫,或提了也讲了这个宫的宫主落在哪 |
| 2 | 把第 1 步每段括号外的话念给一个不懂占星的人听 | 他能复述大意 |
| 3 | 同一对话里追问「那我爸呢」 | 第一句就答,只讲爸爸,不把整份解读重讲一遍,没有标题(长短不限) |
| 4 | 新开对话,问「我的事业接下来怎么走」 | 不拆成多个人的段落,开场后直接是依据、时间、这周可以做的事 |
| 5 | 新开对话,打「你好」 | 只回一句寒暄 |
| 6 | 用没填出生分钟的人物档案问事业 | 不点个人大运,不写月份 |
| 7 | 第 1 步的回答如果明显被截断(最后一节没写完就停了) | 记下时间和模型名报给 Claude——这是取消字数上限后要盯的风险(见进度记录「长度副作用核对」) |
+10 -9
View File
@@ -241,8 +241,8 @@ Jyotisha 的可见文案是产品的一部分。正确性红线(真实性、
3. **解释为什么问,一句就够。** 不问审讯式清单。
4. **同一约束换着说。** 边界句必须在交付/采用轮完整出现一次;中间轮不要逐字复读法务稿。
5. **口语化但不轻佻。** 短句、具体事实、少套话。
6. **希望纪律。** 占星结果是客观的,表达是主观的。不顺就说不顺,但每次都要让人知道这段时间可以拿来干什么。盘上确有转机、且 `answer_policy.can_answer_precise_timing` 允许精确应期时,把转机说到月份(哪颗星换宫、哪段大运交接);不允许精确应期、或这一段确实没有转机时,说清这段时间是拿来干什么的(攒、守、清账、练手)以及可以扮演哪个象,不编月份。不是每个人都有转机,但每个人都有能扮演的象。不写「一切都会好」「相信自己」「加油」「你值得更好的」「宇宙自有安排」。
7. **开场形状。** 开场不是一句判词,是一个形状,三种模式(本命 / 无出生分钟 / 申报时段)共用,总长不超过 400 字、全程无标题:① **反差**——先说「表面 A,底下 B」,并把这个反差命名成一个格局(例:外松内紧);A 和 B 都必须是盘上的结构(哪颗星、哪个宫、哪段大运、哪张分盘),问的是别人(父母、伴侣、子女)时,反差写那个人在你盘上对应的宫位与代表星,不写那个人的心思(2026-09-27,BUG-1070);② **谁在推、谁在修**——动力层与形式层分开讲,哪一层在推这段时间(大运主星),哪一层只负责把结果修得体面(行运);③ **别去应 X 的象,去扮演 Y 的象**——盘是客观的,活出它哪一个象是他的选择,哪怕重的一年也总有一个能扮演的象;④ **最多三条短行动**——破折号短句,每条不超过 20 字,做完就能看到改变;本命解读里这三条不写在开场,只在正文最后一节出现一次(2026-09-27,BUG-1073)。术语当场用引号里的白话套住:土星的「磨」、木星的「享受」、土星的「守」。<br>降级路线(形状照给,只换填法):**申报时段**第 ② 步只讲窗口内稳定的那一层(行星落座、公开日历),上升、宫位、大运、分盘不进这一步,也不写月份;**无出生分钟**第 ② 步只讲公开日历这一天在推什么,不点个人大运、不写月份。两条路线第 ③ 步都照给,无出生分钟时能扮演的象取自公开日历,不取自个人盘。
6. **希望纪律。** 占星结果是客观的,表达是主观的。不顺就说不顺,但每次都要说清这段时间能做什么。盘上确有转机、且 `answer_policy.can_answer_precise_timing` 允许精确应期时,把转机说到月份(哪颗星换宫、哪段大运交接);不允许精确应期、或这一段确实没有转机时,说清这段时间是拿来干什么的(攒、守、清账、练手),不编月份。不是每个人都有转机,但每个人这段时间都有能做的事。不写「一切都会好」「相信自己」「加油」「你值得更好的」「宇宙自有安排」。(2026-10-01 起不再用「扮演哪个象」的说法,TASK-consult-plain-answer-20261001 D5。)
7. **回答形状:先答,再按对象分段(2026-10-01,BUG-1132,推翻 2026-09-17 的四步开场形状)。** 三种模式(本命 / 无出生分钟 / 申报时段)共用,**不设字数上限,讲清楚为准**,同一件事只说一遍。① **先答**——开场一到三句人话,第一句就是结论,不写标题、不写行动,不给这件事起名字;② **按对象分段**——问题里点到几个人或几个子问题(妈妈、爸爸、他们怎么对我、什么时候),开场之后每个各写一段,二级标题用问题里的词(`## 你和妈妈`、`## 你和爸爸`、`## 他们怎么对你`);问父母时妈妈和爸爸分开写;只问一个人或一件事时不拆段;③ **每段先人话、后依据**——先讲清楚这个人是什么样、你们怎么相处、事情会怎么走,再在括号里给撑住这段判断的盘上依据(宫、宫主、代表星、分盘、大运);问的是别人时写那个人在你盘上对应的宫位与代表星说明了什么,不写那个人的心思(BUG-1070 的目的保留);④ **行动**——一到三条破折号短句,本命解读里只在最后一节出现一次。<br>**人话自检**:把每句话括号里的内容删掉,一个完全不懂占星的人仍能看懂。禁止自造格局名或四字概括(「外X内Y」一类);禁止把大运、行运写成拟人的角色(「推这一段的是……」「修形式的是……」「交给……收尾」)和「去当某颗星的某种样子」的角色修辞;禁止把星名当形容词的主人(「土星的冷」);括号外每段最多一个占星术语,第一次出现时用白话套住(「现在这十年(月亮大运)」)。**推断边界**:空宫不单独下结论,要说它的宫主落在哪、什么状态(BUG-1134)。<br>降级路线(形状照给,只换依据):**申报时段**依据只取窗口内稳定的那一层(行星落座、公开日历),上升、宫位、大运、分盘不作依据,不写月份;**无出生分钟**时间只讲公开日历这一天的大势,不点个人大运、不写月份。<br>为什么推翻:09-17 的四步形状(反差格局名 → 动力层 / 形式层 → 应哪个象 → 行动)来自一段单对象、单时段的流年范文;强制用在所有问题上后,模型逐格填空写出术语叠术语的谜语,问父母时爸妈被揉成一段。
## 好 / 坏对照
@@ -303,7 +303,7 @@ Jyotisha 的可见文案是产品的一部分。正确性红线(真实性、
| (校正会话上普通输入框仍可打字) | 正在打开生时校正… | 校正会话上普通输入框只有禁用态。打开失败时按钮写「重新打开生时校正」。 |
| 9月14日 · 生时校正 / 生时校正 · 9月14日 / 生时校正 · 09:35(创建钟点) | 生时校正 · 05:07 / 生时校正 · 05:00–05:15 / 生时校正 | 校正标题写结果:已确认优先于已采用,写 `生时校正 · HH:MM`;否则当前范围写 `生时校正 · HH:MM–HH:MM`(间隔号,不是连字符);都没有则只写「生时校正」。今日节奏仍是 `今日节奏 · M月D日`。同日不再用墙钟去重。副标题仍是最后活动时间。旧标题按结果批量改;手改过的名字不动。 |
| 这么晚还醒着,{名字}。直接说说最在意的问题吧。 | 还没睡呀,{名字} | 开场只一行、不追问、不写场景;提问交给输入框占位符 |
| 你更适合把已经积累的专业能力做成长期事业,而不是频繁换赛道。眼下更值得把现有工作做深,而不是立刻另起一摊。 | 今年你的事业是「外松内紧」:表面上木星走到你的事业宫,机会、人缘都在,看着轻松;底下土星压着你的工作宫,做事的规矩和身体的负担在收紧。推动这一年的是土星,不是木星,木星只负责把结果修得体面。所以别去应木星的「享受」,也别去应土星的「磨」,去扮演土星的「守」:把规矩立起来,别人松你不松。<br>- 上半年别接口头承诺,只接写下来的。<br>- 6 月前身体的小毛病别拖。<br>- 9 月木星换宫之后再谈升职,之前谈是白谈。 | 坏的那句像顾问报告:没有反差,没说谁在推谁在修,没有可扮演的象。好的那段是拍板的口气定稿(盘上数据是示意):反差 → 谁推谁修 → 扮演哪个象 → 最多三条短行动。 |
| 你更适合把已经积累的专业能力做成长期事业,而不是频繁换赛道。眼下更值得把现有工作做深,而不是立刻另起一摊。 | 今年工作上机会不少,但真正决定你走多远的是规矩和身体,不是人缘。<br>## 盘上依据<br>木星今年走过你的事业宫,机会和帮你的人都在(木星行运 10 宫);同时土星压在你的工作宫,事情多、要求严,身体也容易被拖累(土星行运 6 宫)。<br>## 时间怎么看<br>9 月木星换宫之前,机会多但不稳;之后再谈升职更有把握。 | 坏的那句像顾问报告:只有结论,没有盘上依据。好的那段先答、再给依据和时间,每句删掉括号后都看得懂(盘上数据是示意)。 |
| (用户说「你在说什么鬼」)抱歉让你困惑了,我再解释一下:从星盘来看,您的事业宫…… | 说直接点:这份工作还值得留,但你得换个位置,不是换公司。哪句没看懂,指给我。 | 追问轮不重开一遍报告,也不道歉铺垫。一句白话结论 + 一句把球踢回去。 |
## 服务端探针 → Agent 题干
@@ -386,21 +386,22 @@ Jyotisha 的可见文案是产品的一部分。正确性红线(真实性、
本命类回答默认只展开口语层。从第一个 H2 起的骨架仍完整写出、入库、可复制,但折在「完整分析」里。折叠是可见性,不是省略。
口语层没有标题,总量不超过 400 字。形状见上面第七条原则:反差(盘上的) → 谁在推谁在修 → 别去应 X 的象、去扮演 Y 的象。句子必须是完整句子,不得写成名词短语枚举。
开场没有标题,不设字数上限。形状见上面第七条原则:先答 → 按对象分段(每段先人话、括号里给依据)→ `## 盘上依据`(可省)→ `## 时间怎么看`(可省)→ `## 这周可以做的一件事`。句子必须是完整句子,不得写成名词短语枚举。
**首轮只说一遍(2026-09-27,BUG-1073,产品拍板 D8)。** 开场就是回答,正文不再从「先回答你的问题」重来。正文只有三个二级标题:`## 盘里支持这个判断的地方`(只写开场没说过的依据,表格与正文二选一,不把开场的判断再列一遍)、`## 时间怎么看`、`## 这周可以做的一件事`(一到三条行动,只在这里出现一次)。首轮全文不超过 900 字。此前一份约 1,500 字的父母解读把同一个判断说了三遍、三条行动给了两遍,用户读到的是「说了很多没多说什么」。
**首轮只说一遍(2026-09-27,BUG-1073,产品拍板 D8;2026-10-01 BUG-1132 改)。** 开场就是回答,正文不再从「先回答你的问题」重来。开场之后先是按对象分的段,再接三个固定标题:`## 盘上依据`(原名「盘里支持这个判断的地方」;只写上面没引过、判断又需要的依据,表格与正文二选一,没有就省掉)、`## 时间怎么看`(没有相关大运或行运就省掉)、`## 这周可以做的一件事`(一到三条行动,只在这里出现一次)。2026-10-01 起不再限首轮 900 字,讲清楚为准,但同一个判断仍只说一遍。此前一份约 1,500 字的父母解读把同一个判断说了三遍、三条行动给了两遍,用户读到的是「说了很多没多说什么」。
**追问轮直接回答(2026-09-27,BUG-1071,D3)。** 本会话已经有过一轮解读之后,后面的问题按直接回答写:不超过 200 字,第一句回答问的那句话(是非题先答是 / 不是 / 看情况),只引与这句话直接相关的盘面事实(最多三处),不写二级标题、不写行动清单、不重述上一轮已经写过的结构。只有用户明确换了领域或要求「完整看一下」才回到口语开场 + 三标题。「追问轮」由服务端按「本会话已有回答」判定,不用正则猜用户意图(BUG-976/977 口径)。
**追问轮直接回答(2026-09-27,BUG-1071,D3;2026-10-01 取消字数上限)。** 本会话已经有过一轮解读之后,后面的问题按直接回答写:第一句回答问的那句话(是非题先答是 / 不是 / 看情况),讲清楚为准、不限字数,只引与这句话直接相关的盘面事实(够说明就停),不写二级标题、不写行动清单、不重述上一轮已经写过的结构。只有用户明确换了领域或要求「完整看一下」才回到完整形状。「追问轮」由服务端按「本会话已有回答」判定,不用正则猜用户意图(BUG-976/977 口径)。
| 坏 | 好 | 为什么 |
|---|---|---|
| (用户问「我妈是不是不太在意我」)你其实要的是被听见,她给的是安排;你是否需要的是一种被看见的方式…… | 不是。4 宫主水星逆行落 10 宫,她把心力投在你的前途上——不是不在意,是不会用你想要的方式在意。 | 是非题第一句答是 / 不是;依据是宫位,不是读心;不把问题改写成需求。 |
| (首轮)开场三条行动 + `## 先回答你的问题` 再答一遍 + 表格再列一遍 + `## 这周可以做的一件事` 再给三条 | 开场(反差、谁推谁修、扮演哪个象)→ `## 盘里支持这个判断的地方`(只写新依据)→ `## 时间怎么看` → `## 这周可以做的一件事`(三条,一次) | 同一判断只说一遍,行动只给一遍。 |
| (首轮)开场三条行动 + `## 先回答你的问题` 再答一遍 + 表格再列一遍 + `## 这周可以做的一件事` 再给三条 | 开场(第一句就是结论)→ 按对象分段 → `## 盘上依据`(只写新依据)→ `## 时间怎么看` → `## 这周可以做的一件事`(三条,一次) | 同一判断只说一遍,行动只给一遍。 |
| (问「我和父母关系如何」)你和父母是「外热内冷」:推着这段关系的是金星大运,土星子运负责收尾;别去应火星的「硬」,去当金星的「和」。(改写示意) | 你和父母不疏远,但亲近主要落在「为你的前途操心」上。<br>## 你和妈妈<br>她对你的事很上心,但常把关心说成提醒和安排。(4 宫母亲宫的宫主落在 10 宫事业宫)<br>## 你和爸爸<br>……<br>## 他们怎么对你<br>…… | 坏的那句自造格局名、大运写成角色、星名当形容词,爸妈揉成一段,不懂占星的人一句也看不懂(BUG-1132)。
| 坏 | 好 | 为什么 |
|---|---|---|
| 你的事业宫在第十宫,D10 上升与本命一致。当前大运土星、副运木星,从度数上看今明两年有岗位变动的窗口。下面进入统一参数与原始结构。 | 今年你的事业是「外松内紧」:机会都在明面上,底下是规矩和身体在收紧。推这一年的是土星,木星只负责把结果修得体面。别去应土星的「磨」,去扮演它的「守」。<br>- 上半年只接写下来的承诺。 | 先回人问的方向,再按形状展开;度数留在骨架里。要点不是公文枚举。 |
| 事业、财富、变动窗口、土星大运 | 推这一年的是土星,木星只负责把结果修得体面。 | 句子是完整句子,不是公文枚举。 |
| 你的事业宫在第十宫,D10 上升与本命一致。当前大运土星、副运木星,从度数上看今明两年有岗位变动的窗口。下面进入统一参数与原始结构。 | 今年工作上机会不少,但真正决定你走多远的是规矩和身体,不是人缘。<br>- 口头答应的事,补一份书面确认。 | 先回人问的方向,再按形状展开;度数留在依据里。要点不是公文枚举。 |
| 事业、财富、变动窗口、土星大运 | 现在这十年(土星大运)偏向慢慢攒、靠规矩立住。 | 句子是完整句子,不是公文枚举;术语第一次出现用白话套住。 |
## 今日星语句库(2026-09-30,BUG-1109)