feat(home): write the daily card with the Agent and vary the starter heading
The daily starlanguage card claimed to be personal but was a four-card rotation picked by hashing the date and birth place, with the same pool duplicated as a client fallback. It now collects chart, Vimshottari and Narayana dasha, D9/D10 and today's transits, hands that evidence to a dedicated Agent, and keeps the result per account per day in process. A failed generation says so instead of printing generic advice. The starter heading is drawn from a pool on each visit, and the rectification card drops its fine print. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3909,3 +3909,19 @@
|
||||
- 相关记录:BUG-018(首次保存未写入档案状态,同一类真值不一致)、BUG-017(`mode_changed` 的另一入口)
|
||||
- 复发自:无
|
||||
- 修复版本:本地未提交候选
|
||||
|
||||
## BUG-265 | 首页“今日星语”号称个人化,实际是 4 张写死卡片轮换
|
||||
|
||||
- 状态:resolved(本地修复,待提交与发布)
|
||||
- 首次发现:2026-08-17
|
||||
- 最近更新:2026-08-17
|
||||
- 影响面:`/` 首页在出生资料完整时展示的“今日星语”入口卡片。
|
||||
- 用户现象:卡片标题是“今日星语”、位置紧挨生时校正入口,读起来像是基于本人星盘的当日解读,但同一个人换个日期、不同人同一天,看到的往往是同几句话。
|
||||
- 触发条件:任何完成资料的账号打开首页。
|
||||
- 根因:`/api/daily-starlanguage` 从来没有接过模型。顺利时走 `transitBackedCard`,它确实调了 `/api/chart` 与 `/api/transit`,但只把 `total_triggers` 填进一句固定模板,`action` 与 `caution` 是常量;引擎 2.5 秒超时或资料不全就走 `pickCard`,用「日期+生日+省市」的字符码之和对 4 取模选一张写死卡片。`page.tsx` 还把同样的 4 张卡抄了一份作为客户端兜底,因此即便接口整个挂掉,界面也照样显示得像有内容。
|
||||
- 修复:改成 Agent 生成。新增 `getDailyStarlanguageAgent`(`frontend/src/mastra/index.ts`)与纯函数模块 `frontend/src/lib/daily-starlanguage.ts`(证据摘要、模型输出解析、缓存键)。路由先取 `/api/chart`,再并行取 `/api/dasha`(Vimshottari 与 Narayana 双轨)、`/api/varga_full`(D9/D10)、`/api/transit`,把结果压成一份紧凑证据交给 Agent,只接受完整的 `{trend, action, caution}` JSON。生成前要求已登录会话(避免匿名烧 token),按「账号+出生载荷+日期」在进程内缓存当天结果,并用 in-flight Map 合并并发请求。前端与路由里那 4 张写死卡片全部删除。
|
||||
- 验证:新增 `frontend/tests/daily-starlanguage.test.ts` 7 条:证据抽取覆盖 Vimshottari 当前 MD/AD、按今天选中的 Narayana 期、D9/D10、过境触发与功能吉凶星;引擎层缺失时必须显式列进 `missingLayers`;`status: blocked` 的功能吉凶层不得进入证据;未确认的出生时间必须写成硬约束进提示词;模型输出缺字段或过短一律拒收;缓存键不得跨账号、跨资料、跨日期复用。另有源码合同断言鉴权、缓存键、双轨 Dasha 调用与「不留写死卡片」。`tsc`、`eslint` 清洁,`next build` 通过,非数据库套件 1630 条中仅 `rectification-pr4-database` 因本机 Docker 环境失败(与本次无关)。未做的验证:**没有真实跑通一次线上生成**——本机没有 Python 引擎与模型密钥,Agent 实际产出的措辞、耗时与失败率均未观测。
|
||||
- 待跟进:内存缓存随进程重启失效、且多实例不共享;若上线后发现重复生成成本明显,需要改成落库(要新迁移,staging 迁移是手动工作流)。另外 `/api/daily-starlanguage` 现在最长可能跑满 60 秒,首页首屏会看到“正在结合你的星盘写今天的星语”的等待态,是否需要预生成尚未决定。
|
||||
- 防复发:任何号称个人化的界面文案,其数据来源必须能追到当次计算或当次生成;用哈希在固定文案池里取模不是个人化,只是伪装成个人化。降级路径不得复制一份“看起来正常”的内容——生成失败时必须让用户看出没有生成成功,本次改成明确的一句话降级文案而不是通用建议。
|
||||
- 相关记录:BUG-265 无前序同类记录。与 BUG-263 同批,均为首页可见问题。
|
||||
- 修复版本:本地未提交候选
|
||||
|
||||
Reference in New Issue
Block a user