Files
Jyotisha/docs/tasks/PROGRESS-synastry-staging-fix-20261021.md
T
jesse-uxandCursor 6a761bc51e fix(synastry): show timeline spans and keep old chats on the default model
English reports hid the analysis fold, timeline titles left out the month span, and deleting a pinned model stopped the next consultation turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 16:28:04 +08:00

4.7 KiB
Raw Blame History

进度:婚恋合盘 staging 修复(T3–T6 与红线 3)

  • 任务书:docs/tasks/TASK-synastry-staging-fix-20261021.md
  • 基线:origin/staging 998d07baf(T1、T2 已在这条上,BUG-1399)
  • 分支:codex/synastry-staging-fix-20261021
  • 工作树:.worktrees/synastry-staging-fix-20261021
  • 记录:BUG-1400~1403。重复的第二段 BUG-1397 已删。
  • 未推 staging,未改 .gitea/。真机未做。

做了什么

  • 时间线标题用 timelineHeading:中文「2027 年 9 月 – 2029 年 3 月 阶段名」,英文「Sep 2027 – Mar 2029 Settling」。只有第一段、且起点年月等于本地今天所在月时,起点写「现在」/「Now」。
  • 英文报告恢复收起的分析逻辑,和时间线依据同一套 <details class="synastry-why">。英文摘要是 Analysis,依据行是 Chart / So。正文来自英文那一次生成。
  • 普通咨询钉住的模型版本解析不到时,改用当前默认模型,并把 model_id 写回会话(版本号仍由原触发器钉)。回退 id 与原 id 相同时先清空再写回,否则触发器留着旧版本。没有默认模型时仍是 503「模型暂不可用」。请求若仍带已删 id,不回 409;若改指另一个仍在线的模型,仍是 409「会话模型已经变化」。对话里没有新加提示。合盘追问和生时校正的解析没有改。打开页面时原有的「此前选择的模型已下线,已切换为默认模型。」没有动。
  • 选人页在开关结果回来之前只渲染标题和副标题。开关连不上时说「合盘服务暂时连不上,请稍后再试」。档案失败仍是「星盘档案暂时读不出来」。
  • 红线 3:frontend/tests/database-synastry-full-create.test.ts 用真的自托管客户端走 createSynastryFullReport,到预留成功、任务入队。模型目录打桩,产品和计费走真库。没有手写 Query 桩。

断言变更

测试 原值 新值 原因
synastry-full-report.test.ts 选人页初始状态 [serviceClosed, setServiceClosed] = useState(false) useState<"pending" | "open" | "closed" | "unreachable">("pending") BUG-1403。开关未返回时不再画出选人区
同上,关闭与读档案的顺序 setServiceClosed(true) 在 fetchAccount() 之前 setAccess("closed") 在 fetchAccount() 之前 状态从布尔改成四态,关闭文案不变

测试

检查 结果
tsc --noEmit 0 错
npm run lint 0 error,122 warning,与基线相同
定向:consult-session-model-fallback.test.ts、synastry-full-report.test.ts 19 通过,0 失败,0 cancelled
红线 3 单独跑 通过。本机 Docker 29.8.0。返回 202,报告 generating,任务 queued,预留 reserved,虚构账户点数 100 变为 81
npm run test:db 90 条,通过 74,失败 16,cancelled 0。新建的创建测试在全量里是通过的(ok 73)。16 条失败都是本机 Windows 环境:G:\G:\ 路径被拼两次、WSL 里没有 bash、迁移脚本因此起不来。没有合盘业务断言失败
非库测试(database-* 以外的 tests/*.test.ts(x),串行) 5018 条,通过 4969,失败 49,cancelled 0。失败是同一类环境问题:path.join 吃了 file URL 的 pathname、tsx 解析 tailwind-merge 报错、WSL、shell/Docker。没有本轮新增测试的失败。一次把库测试和全量绑在一起、并发 2 的 npm test 跑到约 3327 条时进程退出,没有汇总行,不把它当成结果
npm run build / 为 Static(路由表 ○ /)。index.html 引用的 /_next/static js/css 逐个 gzip -9:JS 576,261,CSS 70,491,合计 646,752。对照已记录的 643,725,差 +0.47%,在 ±2% 内。测量脚本没有留在仓库里,这个合计是按 index.html 引用的静态文件重算的

隐私扫描 tests/test_repo_privacy_markers.py 没有跑:这个工作树和主检出都没有可用的 .venv。文档里没有真实个人出生资料。

真机复测(产品负责人,执行方未做,不得写成已通过)

部署到 staging 之后:

  1. 婚恋合盘选两个人,点「开始合盘」,应进入等待页,而不是「报告生成暂时不可用」。
  2. 等待页走完,报告揭幕。关系时间线每一段能看出起止年月;若第一段从本月起,起点是「现在」。
  3. 切到 English。各节和时间线都有收起的 Analysis,点开能看到 Chart / So。
  4. 从报告末尾选一节进对话,发出问题,能按这一节问下去。
  5. 另:后台删掉某个非默认的已发布模型后,钉着它的旧咨询对话还能继续,并且改用当前默认模型。没有默认模型时才是「模型暂不可用」。