fix(home): serve today's starlanguage from daily guidance
Independent Staging Quality Gate / validate (push) Failing after 8m9s
Independent Staging Quality Gate / publish (push) Has been skipped

The homepage was waiting on a full chart plus four extra engines, so the card timed out and showed the failure copy on every visit.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-19 15:32:48 +08:00
parent e635c40224
commit 8db716ca36
10 changed files with 234 additions and 91 deletions
+21 -5
View File
@@ -4218,19 +4218,19 @@
## BUG-283 | 今日星语每次进入首页都停在“没能生成”
- 状态:resolved(本地修复,待提交与发布)
- 状态:regressed
- 首次发现:2026-08-18
- 最近更新:2026-08-18
- 最近更新:2026-08-19
- 影响面:`/` 首页“今日星语”卡片、`POST /api/daily-starlanguage`、进程内缓存与浏览器当日缓存
- 用户现象:资料完整的账号每次打开首页,卡片都显示“今天的星语没能生成,稍后再回来看看;这里不会用通用文案顶替。”,没有当日内容。
- 触发条件:出生时间可用于个人星盘的账号进入首页。冷路径或换实例后必现。
- 根因:BUG-265 把卡片改成同步等待 Agent,失败就不展示内容;BUG-269 修好了请求守卫,但首页仍把 30–45 秒的模型生成当作首屏依赖。进程内缓存不跨实例、不跨重启,JSON 解析或超时失败后客户端只剩失败文案。再进入等于再走一条冷路径。
- 修复:星盘、双轨 Dasha、分盘和过境算完后,立刻用这份证据拼一张个人卡片返回,不再等待模型。Agent 改为后台润色,成功才覆盖缓存。首页按账号+资料指纹把当天卡片写入 localStorage,刷新先显示已有内容;只有星盘算不出来才落到失败文案。日期改用出生时区日历日,不再用 UTC。
- 验证:`frontend/tests/daily-starlanguage.test.ts` 覆盖证据卡片因盘而异、未确认出生时间不用上升宫、请求路径不阻塞 Agent、失败不覆盖已缓存卡片。
- 防复发:首页入口卡片不得把 LLM 生成当作首屏成功条件。禁止用固定四句文案池顶替;也禁止在生成失败时让整张卡空白。
- 相关记录:BUG-265、BUG-269
- 防复发:首页入口卡片不得把 LLM 生成当作首屏成功条件。禁止用固定四句文案池顶替;也禁止在生成失败时让整张卡空白。这条防复发没有挡住请求路径继续等待完整 `/api/chart` 加四层附加计算,复发见 BUG-299。
- 相关记录:BUG-265、BUG-269、BUG-299
- 复发自:BUG-265(诚实降级正确,但把模型生成当成了首页可用性)
- 修复版本:待提交
- 修复版本:`9d8b91ac`staging,已被 BUG-299 覆盖)
## BUG-284 | 技能激活的 77% 是 1592 条无说明的文件名,方法论从未进入任何一次 web 回答(referenceReads 恒为 0
@@ -4474,3 +4474,19 @@
- 相关记录:BUG-011、BUG-287
- 复发自:BUG-011
- 修复版本:待提交
## BUG-299 | 今日星语首屏仍失败:证据卡还在等完整星盘
- 状态:resolved
- 首次发现:2026-08-19
- 最近更新:2026-08-19
- 影响面:`/` 首页“今日星语”卡片、`POST /api/daily-starlanguage``/api/daily_guidance`
- 用户现象:资料完整的账号一进首页就看到“今天的星语没能生成。点这里从今日问起;不会用通用文案顶替。”,没有当日内容。
- 触发条件:出生时间可用于个人星盘的账号打开首页。冷路径必现。
- 根因:BUG-283 不再等模型,但首屏仍串行调用完整 `/api/chart`(含 VedAstro 总览、Shadbala、瑜伽等)再并行等 Vimshottari、Narayana、D9/D10、过境,最坏约 40 秒,超过路由 `maxDuration = 30`。超时后客户端只剩失败文案。失败文案还写了“点这里”,而整张卡本来就是点击热区。仓库里已有轻量 `/api/daily_guidance`(本命盘 + 今日月亮过境宫 + 当前大运),首页没用。
- 修复:首屏只调 `/api/daily_guidance`。卡片按今日月亮过境宫与当前大运拼句,不用四句通用文案池,也不用本命月亮宫冒充今日。Agent 润色仍在后台。失败态改成“今天的星语还没写出来。”,行动改为“从今日问起”。引擎超时 8 秒,路由上限 20 秒。
- 验证:`frontend/tests/daily-starlanguage.test.ts` 锁定 `/api/daily_guidance`、禁止首屏 `/api/chart`、今日过境宫与本命月宫区分、失败文案不含“点这里”;`tests/test_daily_guidance_service.py` 锁定结构化宫位/大运且不同日期会变。
- 防复发:首页日签不得把完整 `/api/chart` 或四层附加计算当作首屏成功条件。失败文案不得写“点这里”,也不得解释内部“不用通用文案”政策。
- 相关记录:BUG-265、BUG-269、BUG-283
- 复发自:BUG-283(不再等模型,但仍把完整排盘当首页可用性)
- 修复版本:待提交