Compare commits

...
Author SHA1 Message Date
4702757974 docs(tasks): reject synastry report chat until dasha wording is checked
A wrong antardasha or English mahadasha date still passes the follow-up checker, and the home onboarding source contract was left behind.

Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 00:30:15 +08:00
3 changed files with 125 additions and 1 deletions
@@ -0,0 +1,26 @@
# 进度:合盘报告追问(2026-10-19)
执行方回报在分支 `codex/synastry-report-chat-20261018` 的 `3956519f33ca398b64f38166d043030e17105cf8`。功能提交没有进 staging。执行记录的原文在那枚提交里。
## 验收(2026-10-20)
结论:未通过。修复单 `docs/tasks/TASK-synastry-report-chat-fix-20261020.md`。
被验 SHA 基于 `origin/staging` `123295135`,可以快进。本轮只把修复单推上 staging,没有推功能提交。
| 检查 | 结果 | 数字 |
| --- | --- | --- |
| 祖先关系 | 通过 | `123295135` 是 `3956519f3` 的祖先 |
| tsc | 通过 | 0 错 |
| lint | 通过 | 0 error,122 warning |
| 定向测试 | 通过 | 80 通过,0 失败,0 取消 |
| 数据库新测试 | 通过 | `database-synastry-report-chat.test.ts` 1 通过 |
| Home 护栏 | 通过 | useState 33 / useRef 37 / 1340 行 |
| 计费函数差异 | 通过 | 四份函数相对上一版只改了会话类型条件 |
| 大运核对 | 未通过 | 小运和英文 mahadasha / antardasha 写错年份仍判通过 |
| 首页源码合同 | 未通过 | `onboardingFormActive` 的原文断言没有跟着改 |
| 全量 npm test | 退出码 1 | 约 15 分钟,42 条 not ok。要修的是首页源码合同那 1 条。其余是双盘符、另一工作树的浏览器依赖、Windows 已知的备份和权限失败,以及两条不在本次 diff 里的回答计时。两条数据库迁移失败时错误输出是空的,并行起了很多 Postgres;合盘追问的数据库测试单独跑是通过的 |
| 全库 test:db | 环境未整包重跑 | 新测试已单独通过;Grok 回报的新测试也是通过,没有多出来的失败名 |
| 模型 / 浏览器 | 环境缺口 | 无模型凭据、无登录态。功能未进 staging,真人清单先不跑 |
普通单人对话的提示、证据卡和工具不在这次 diff 里。`scripts/jyotish_api_server.py` 和 `.gitea/` 没改。
+2 -1
View File
@@ -507,4 +507,5 @@
| `TASK-full-reading-module-parity-20261018.md` | #81 | full-reading 补齐上游 5 个模块(西占层文件没搬致永远 blocked、Navamsha / Niryaana 用我们自己的实现填键、Lagna Vargottamamsa / Pushkara / Punarphoo)(BUG-1375 起) | 待执行(可与 #78 并行) | `codex/full-reading-module-parity-20261018` |
| `TASK-niryaana-shoola-pvr-20261018.md` | `PROGRESS-niryaana-shoola-pvr-20261018.md` | #84 Niryaana Shoola 改 PVR 口径(我们的表与 Shoola 逐行相同;推翻 BUG-1283 所选 profile;占星师 7a773d13) | 待验收 | `codex/niryaana-shoola-pvr-20261018` |
| `TASK-synastry-full-report-20261018.md` | #82 | 婚恋合盘:选人页 + 完整合盘报告(关系画像九节:结论+折叠的分析逻辑+关系时间线+技术依据摘要;英文按需;计费键 synastry.full) | 排队(等 #78、#79、#81) | `codex/synastry-full-report-20261018`;动表 |
| `TASK-synastry-report-chat-20261018.md` | #83 | 从合盘报告某一节进入对话问依据(绑定报告与节、对话里可用术语、只依据已存计算结果并逐条核对、计费照普通对话) | 排队(等 #82) | `codex/synastry-report-chat-20261018`;动表 |
| `TASK-synastry-report-chat-20261018.md` | `PROGRESS-synastry-report-chat-20261018.md` | 从合盘报告某一节进入对话问依据(绑定报告与节、对话里可用术语、只依据已存计算结果并逐条核对、计费照普通对话) | 验收未通过 | `codex/synastry-report-chat-20261018` @ `3956519f3`;动表 |
| `TASK-synastry-report-chat-fix-20261020.md` | #83 | 大运核对要认报告里的「小运」和英文 mahadasha / antardasha;预填文案只留一句 | 待执行 | 同一分支继续 |
@@ -0,0 +1,97 @@
# 修复单:合盘追问的大运核对要认报告里真正写下的句子(2026-10-20)
- 被验提交:`3956519f33ca398b64f38166d043030e17105cf8`(`codex/synastry-report-chat-20261018`)
- 原任务书:`docs/tasks/TASK-synastry-report-chat-20261018.md`
- 结论:未通过。不要推 staging。在同一分支上继续提交。
- 不新增 BUG 编号:功能还没进 staging,这是验收未通过项,不是线上复发。
## 验收里已经通过的,不要重做
| 项 | 结果 |
| --- | --- |
| T1 会话绑定 | 通过。别人的报告被拒、非法节被拒、删报告后会话还在且只读。本轮单独跑 `tests/database-synastry-report-chat.test.ts`:1 通过,0 失败 |
| T2 入口 | 通过。点节只建会话并预填,不调用 `/api/consult` |
| T4 侧栏与选择器 | 通过。标题、两边都能看见、锁定、删除后「这份合盘已删除」 |
| T5 文档 | 基本齐。文案有一句要改,见下面第 2 条 |
| 计费函数 | 通过。四份替换相对上一版只多了「合盘追问且报告还在」这一个条件,普通对话的签名没变 |
| `tsc --noEmit` | 0 错 |
| `npm run lint` | 0 error(122 warning,原有) |
| 定向测试 | 80 通过,0 失败(合盘追问、报告阅读页、会话写入、侧栏、计费列、容量列、输入框、Home 护栏) |
| Home 状态 | `useState` 33(上限 36)、`useRef` 37(上限 37)、`page.tsx` 1340 行 |
| 越界 | 没有改 `scripts/jyotish_api_server.py`、没有改单人对话的提示和工具、没有改 `.gitea/`、没有升级依赖 |
| 分支 | `origin/staging` `123295135` 是 `3956519f3` 的祖先,可以快进。本轮不推这枚功能提交 |
全量 `npm test` 的数字写在 `docs/tasks/PROGRESS-synastry-report-chat-20261018.md` 末尾。全库 `npm run test:db` 本轮没有整包重跑;新测试已单独通过。
## 1. 未通过:时间线的大运起止,写错了也能通过核对
产品要求(G8):回答里每一段大运和起止,都要能在本轮读到的材料里找到。对不上就重写一次,仍对不上就用固定答复。
报告自己写下的时间线句子在 `frontend/src/lib/synastry-full-timeline.ts` 的 `basisLine`:
- 中文大运:`土星大运 1903-01 至 1922-01`
- 中文小运(次级运):`土星小运 1903-01 至 1922-01`
- 英文:`Saturn mahadasha 1903-01 to 1922-01`、`Venus antardasha 1905-03 to 1907-11`
核对器 `frontend/src/lib/synastry-chat-fact-check.ts` 只认「大运」和「子运」,不认「小运」,也不认英文的 `mahadasha` / `antardasha` 和 `to`。
在 `3956519f3` 上实测(材料里是正确起止,回答里把年份改掉):
| 回答 | 核对结果 |
| --- | --- |
| `土星小运 1999-01 至 2001-01` | `ok: true`(错的,放行了) |
| `金星大运 1999-01 至 2001-01` | `ok: false`(对的,拦住了) |
| `金星大运 1903-01 至 1922-01` | `ok: true`(对的) |
| `Saturn mahadasha 1999-01 to 2001-01` | `ok: true`(错的,放行了) |
| `Venus antardasha 1999-03 to 2001-11` | `ok: true`(错的,放行了) |
现有单测把名人备注塞进节正文,只覆盖了「金星在 7 宫」和「土星大运」写错一年。时间线节和英文报告走的是上面这套句子,所以测不到这个洞。
### 修法
- 核对要认报告实际写下的四种句子:中文「大运」「小运」,英文 `mahadasha`、`antardasha`(中间是 `to`,月份是 `YYYY-MM`)。
- 已经能拦住的「大运」和宫位、星座、相位不要改松。
- 不要改时间线生成器的用词,核对去对齐它。
- 不要改单人对话的提示、工具和证据卡。
### 验收
用 `buildTimelineSegments` 生成的 `basis` 做材料,不要再手写一句塞进正文来代替:
1. 原样引用中文「小运」起止:通过。
2. 小运的年份改一年:失败。
3. 原样引用英文 `mahadasha` 起止:通过。
4. 英文大运的年份改一年:失败。
5. 连续两稿都对不上:用户看到的仍是「这一点在这份合盘里没有算到,我不能确定」。
6. 原来的名人三条(全对 / 编造「金星在 7 宫」/ 大运写错一年)仍然分别是通过、失败、失败。
## 2. 未通过:改了首页句子,源码合同没跟着改
`frontend/tests/birth-time-consultation-consent.test.ts` 仍要求首页里有这句原文:
`const onboardingFormActive = !profileComplete && onboardingStep !== "name"`
`3956519f3` 把它改成了 `!synastryChat && !profileComplete && onboardingStep !== "name"`。全量测试里这条失败。进度记录的断言三栏没有这一条。
普通对话的引导表单行为不能变。合盘追问可以跳过这张表。把合同改成同时认出这两种写法,并在进度里补上原值、新值、原因。不要删掉这条测试。
## 3. 文案:预填问题只留一句
`frontend/docs/VOICE.md` 里同一段写了两遍预填问题。第一句把节名写成了「这一段」,和代码不符。代码里的中文是:
`合盘报告里「节名」这一段,在我们两人的盘里依据是什么?`
只留这一句,英文说明留一句。不要再写「这一段」这一段。
## 开工
```bash
git fetch origin --prune
git merge origin/staging
```
合并进来的只是这份修复单和进度记录。冲突若只在文档里,自己解决。然后只改核对、对应测试和 `VOICE.md`。
自测:`tsc --noEmit`、`npm run lint`、`tests/synastry-report-chat.test.ts`、`tests/birth-time-consultation-consent.test.ts`。不要为凑数改别的断言。
全量 `npm test` 里还有 `G:\G:\` 双盘符,以及两条回答计时(`answer_truncated` 收到 `empty_answer`)。那两条测的是单人对话代理,相关文件不在这次 diff 里,本单不要顺手改。双盘符是这台机器的已知问题。