docs(tasks): add T7 synastry report own route to #85 brief

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
This commit is contained in:
Jesse_Chen
2026-10-21 16:09:41 +08:00
co-authored by Claude Opus 5.5
parent 998d07baf9
commit fac29c0410
@@ -16,6 +16,7 @@
| 4 | 后台删除已发布模型后,绑定这个模型的用户旧对话不能再提问 | `0a5d93ab7` 的 `admin_delete_model_version`;对话按 `chat_sessions.model_id / model_config_version` 解析模型(`app/api/consult/route.ts` 的 `resolveModel` → `resolveSessionLanguageModel`),解析不到就无法继续。`PROGRESS-model-admin-draft-delete-20261020.md` 也写明了这一后果 |
| 5 | 开关读取失败时显示「星盘档案暂时读不出来」(读的是开关不是档案);开关关闭时先闪一下选人页再变「合盘服务暂未开放」 | `components/synastry/synastry-picker.tsx` 的 `load` |
| 6 | `docs/BUG_HISTORY.md` 里 BUG-1397 整段写了两遍 | `006b067e8` |
| 7 | 点「开始合盘」后跳到等待页,侧栏亮的是「我的报告」而不是「婚恋合盘」,浏览器标签标题是「个人报告」 | `components/synastry/synastry-picker.tsx` 创建成功后 `window.location.assign(\`/reports/${id}\`)`,「之前的合盘」也链到 `/reports/:id`;`components/app-sidebar.tsx` 按 `pathname.startsWith(href + "/")` 点亮;`app/(app)/reports/[reportId]/page.tsx` 的 `metadata.title` 写死「个人报告」。#82 任务书 T8 只写「跳到阅读页」,没规定合盘报告的归属——任务书遗漏,不是执行错 |
## 决策记录(产品负责人 2026-10-21)
@@ -23,6 +24,7 @@
| --- | --- |
| K1 | 第 4 条选 **B**:被删模型绑定的旧对话,下一轮**自动改用当前默认模型**继续,不报错;对话里不另行提示(模型名在设置里本来就能看到) |
| K2 | 第 2、3 条按 #82 原定:时间线每段显示起止年月;英文报告同样有「分析逻辑」和时间线依据(英文内容来自英文那一次生成,不翻译中文) |
| K4 | 第 7 条(10-21 产品确认):合盘报告有自己的地址 `/synastry/:reportId`,阅读组件仍复用同一个;侧栏点亮「婚恋合盘」,标签标题「婚恋合盘 · Jyotisha」。旧地址 `/reports/:id` 打开合盘报告时自动转到新地址(`replace`,不留历史),已分享的旧链接继续可用 |
| K3 | 定价 `synastry.full` 19 点维持(已在 staging 生效) |
## 硬红线
@@ -31,7 +33,7 @@
2. 新增一条防复发测试:扫描 `frontend/src` 里对数据库查询构造器调用的方法名(`.eq(` `.gte(` 等,限定在 `from(...)` 链上),断言每个都在 `local-postgres-client-core.ts` 的构造器上有实现。实现方式不限,但要能拦住「桩里有、真客户端没有」。
3. 合盘创建链路必须有一条 `npm run test:db` 真库测试:用真的自托管客户端走 `createSynastryFullReport` 到「预留成功、任务入队」为止(模型与 Python 计算可打桩),**不得用手写 `Query` 桩**。
4. 动表的轮次真跑 `npm run test:db`;改既有断言写三栏;不改 `.gitea/`。
5. 修完推 staging 后,在 PROGRESS 里写明需要产品负责人真机复测的步骤(见 T6);执行方不得写「已通过」。
5. 修完推 staging 后,在 PROGRESS 里写明需要产品负责人真机复测的步骤(见 T6;复测步骤加一条:点「开始合盘」后侧栏仍是「婚恋合盘」);执行方不得写「已通过」。
## 任务分解
@@ -42,6 +44,7 @@
| T3 | 时间线显示起止年月:每段标题行「2027 年 9 月 – 2029 年 3 月 阶段名」,英文「Sep 2027 – Mar 2029」;第一段起点是今天时写「现在」/「Now」 | 渲染测试用名人 golden |
| T4 | 英文报告恢复「分析逻辑」(Analysis)与时间线依据,折叠方式与中文一致;DESIGN.md 补一句 | 渲染测试:英文模式下每个正文节都有折叠块 |
| T5 | K1:对话解析不到绑定的模型时,改用当前默认模型继续,并把会话的 `model_id / model_config_version` 更新成新模型;没有任何可用模型时才报现有的「模型不可用」 | 单测:被删版本的会话下一轮用默认模型;无默认模型时仍报错 |
| T7 | K4:新增 `app/(app)/synastry/[reportId]/page.tsx`(复用 `PersonalReportPage`,标题「婚恋合盘 · Jyotisha」,保留 `?lang=`);选人页「开始合盘」跳转与「之前的合盘」链接改新地址;报告中心列表里合盘卡片直接链新地址;`/reports/:id` 读到的是合盘报告时 `router.replace` 到 `/synastry/:id`(带上 `lang`);新地址打开的若是个人报告则反向转回 `/reports/:id`;合盘报告页左上「‹ 婚恋合盘」返回不变 | 渲染/路由测试:新地址下侧栏「婚恋合盘」为当前项;旧地址合盘报告触发 replace 到新地址且保留 `lang`;个人报告不受影响;DESIGN.md 补一句 |
| T6 | 选人页:开关读取失败显示「合盘服务暂时连不上,请稍后再试」;开关结果回来之前不渲染选人区(只渲染标题和副标题);删掉 BUG_HISTORY 里重复的 BUG-1397 一段;CHANGELOG、PROGRESS(含真机复测步骤:选两人生成一份、等待页、报告揭幕、切英文、从末尾进对话问一节) | 渲染测试;文档齐 |
## 已完成(Claude 直接执行,产品负责人 10-21 授权「P0 你改吧,其余交给执行方」)
@@ -50,7 +53,7 @@ T1、T2 已由 Claude 在 `codex/synastry-gte-fix-20261021` 完成并推 staging
## 让步顺序
T1、T2 最先做,单独一个提交先推 staging(门禁绿、部署后告知产品负责人可以复测生成);T3~T6 随后。
T1、T2 最先做,单独一个提交先推 staging(门禁绿、部署后告知产品负责人可以复测生成);T3~T7 随后。
## 开工前置命令