# PROGRESS · P1 星历页(2026-09-15) - 执行分支:`codex/ephemeris-page-20260915` - 工作树:`.worktrees/ephemeris-page-20260915` - 任务书基线:`2d7698ea`(其后纯文档)。本机开工 `HEAD` = `origin/staging` = `4cacea8e` ## 开工前置 | 项 | 结果 | | --- | --- | | 分支 | `codex/ephemeris-page-20260915` 跟踪 `origin/staging` | | `frontend/src/app/page.tsx` 行数 | 1951 行量级(本机按换行计 1952,未改此文件) | | `tsc --noEmit` | 0 错(改前) | | `npm run lint` | 0 error(改前;既有 warning 未动) | | 本机 | Windows;任务书 Linux 路径已按 `frontend/` 改 | ## 做了什么 任务 1:BFF `frontend/src/app/api/ephemeris/route.ts`。登录校验、`consumeUserRequestRateLimit("ephemeris")`、出生资料只从服务端自有资料读。上游 `/api/panchanga_range`、`/api/chart`(本命上升 + 目标日正午行运)、`/api/ephemeris_events`。后者失败该字段 `unavailable`,整页仍 200。不 import 计费与 mastra。窄合同 `ephemeris-contract.ts`。 任务 2:独立 route `/ephemeris`。日期条 / 五要素 / 当日行运 / 未来九十天 / 「带这天去提问」。手机五要素一张卡五行。无 spinner。让步:九十天先落 `unavailable`;提问先预填草稿再回 `/`。 任务 3:五要素下标注 Lahiri 与星盘页岁差不同;行运段不加。BUG-707 `investigating`。开工时 staging 尚无 BUG-703,未让号。 未改:`page.tsx`、`app-sidebar.tsx`、`scripts/**`、数据库。Skill 未 bump。 ## 推送 合入顺序 qizheng → chart-page → 本单。前序未合入前不抢推 staging。 ## 测试数字 | | `test(` 声明 | `npm test` 实测 | | --- | ---: | ---: | | 基线 `origin/staging` @ `4cacea8e` | 3221 | 本机未在改前跑全量;改后全量 3061 条(pass 2894 / fail 153 / skipped 14)。失败清单是 Windows CRLF、无 Docker、SKILL symlink 一类既有缺口,**没有**本单 ephemeris 用例。 | | 改后 | 3233(+11 本单新文件 +1 `viewport-breakpoint-contract`) | 定向 19/19 pass | 定向: | 套件 | 结果 | | --- | --- | | `ephemeris-route.test.ts` | 5 pass(401、无本命仍有五要素、events 降级、zod、禁计费/mastra) | | `ephemeris-page.test.tsx` | 6 pass(换日、unavailable、Lahiri 标注位置、手机五要素、无运势文案) | | `viewport-breakpoint-contract` | 5 pass | | `class-name-definition-contract` | pass | | `./node_modules/.bin/tsc --noEmit` | 0 错 | | `npm run lint` | **0 error** / 120 warning(既有,未动) | 本机 `npx next build` 在收集 `/api/consult` 时因 Windows `SKILL.md` symlink `EPERM` 失败(与既有环境缺口相同),**不能**据此声称 `/` 仍为 `○ Static` 或量首屏 gzip。留给 Gitea 门禁。浏览器 / 真机项见 `docs/testing/ephemeris-page-20260915.md`,不得写成通过。 ## 既有断言三栏 本单没有改任何既有断言的期望值。`viewport-breakpoint-contract` 只**追加**一条星历页 767 切点测试。 ## 偏离 - 「带这天去提问」未新建会话,只预填 `composer-draft` 并跳 `/`(任务书让步 3)。 - 未来九十天本轮只交付 `unavailable`(让步 2)。 - 本机无 Chrome / 无登录态,浏览器项见 `docs/testing/ephemeris-page-20260915.md`,不得写成通过。 - 合入顺序 qizheng → chart-page → 本单。开工后 `origin/staging` 仅快进一篇文档到 `3e58e85f`,两份前序代码单仍未合入,**不推 staging**。