Coordinator ruling (brief author, 2026-09-26): Aindra -> Indra (因陀罗), Variyana -> Variyan (安逸), Dhanishtha -> Dhanishta (虚宿). Spelling aliases only; the brief's table and its typed test copy are unchanged. BLOCKED item struck through, PROGRESS / checklist / task index updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
11 KiB
11 KiB
PROGRESS · 星盘档案页补样式 + 星历页可读性(2026-09-26)
任务书:docs/tasks/TASK-people-ephemeris-ui-20260926.md。分支 codex/people-ephemeris-ui-20260926,worktree .worktrees/people-ephemeris-ui-20260926。执行方:Claude 子代理(产品授权直接执行)。未推送、未部署。
基线
origin/staging=65260ca7(线上e84d6eb8之后只有文档提交)。- 基线全量(同一台机器、Node v20.19.2):3883 条,61 失败(全是 Node 20 缺
mock.module等环境缺口),27 跳过。 - BUG 编号:开工时
docs/BUG_HISTORY.md最大 BUG-1037,BUG-1038 被并行单预留,本单 BUG-1039。 - 并行单
TASK-new-chat-from-people-20260926的文件(people-home-links.tsx、chat-session-url.ts、home-bootstrap-run.ts、app/(app)/page.tsx)一律未动。people-page.tsx里「和 TA 对话」仍是openPerson(selected.id, "/?newChat=1")一行,跳转目标由那一单改,合并时只会在这一行冲突。
改了什么
| 任务 | 文件 | 内容 |
|---|---|---|
| T1 | frontend/src/components/people/people-page.tsx |
拆出无状态 PeopleArchiveView(同文件导出,便于组件测试);data-view 列表 / 详情切换;手机点人 pushState(?person=<id>),popstate 与「‹ 返回」回列表,刷新详情地址直接打开;列表行、详情卡、时间卡、快捷入口;删除挪进编辑视图底部,确认 / 计数 / 失败句逻辑不变。 |
| T1 | frontend/src/lib/people-archive-view.ts(新) |
头像取色(按 id 取四个元素色)、首字、城市、行 meta、「已校正」判定、岁差中文名。 |
| T1 | frontend/src/app/globals.css |
people-archive* 共 24 个类的规则;@media (max-width: 1023px) 只显示一栏,@media (min-width: 1024px) 两栏。 |
| T2 | frontend/src/lib/panchanga-names-zh.ts(新) |
任务书附表原样 + 三组别名;panchangaNameZh 查不到返回 null。 |
| T2/T3 | frontend/src/lib/ephemeris-view.ts |
panchangaDisplayRows(中文主名 / 梵文副名,查不到记一次 panchanga_name_zh_missing)、panchangaQualityCounts、panchangaComplete、panchangaDaySummary(D7 纯函数)、ephemerisAyanamsaNote(D10)、transitHouseLine(D9);文案常量更新。 |
| T3/T4 | frontend/src/components/ephemeris/ephemeris-page.tsx |
顶栏不再有按钮;五要素总评 + 计数 + 彩色标签;行运行改版(符号、「在」、宫位副行、度°分′);底部提示卡。 |
| T3/T4 | frontend/src/app/globals.css |
.ephemeris-quality(12% 同色底)、.ephemeris-summary、.ephemeris-counts、行运新行式、.ephemeris-ask-card;删掉行运表头和 data-label 堆叠;标签去字距、行距收紧;行星符号颜色复用 .chart-page-planet-glyph 的 --color-planet-* 规则。 |
| T5 | docs/BUG_HISTORY.md、CHANGELOG.md、BLOCKED.md、frontend/DESIGN.md(§15 新增「星盘档案页布局」、§16 重写)、frontend/docs/VOICE.md(总评句式、提示卡、档案页文案)、docs/testing/people-ephemeris-ui-20260926.md |
记录。 |
实现取舍(验收请看)
- 中文名在视图层投影,不改接口。 任务书 T2 写「
panchangaFromEngine输出中文主名与梵文副名」,同时红线 3 写「不改接口」。实际函数名是panchangaFactorsFromEngine,它的输出就是/api/ephemeris的factors字段。为守红线,接口字段一字未改(value仍是引擎名),中文主名 / 梵文副名由panchangaDisplayRows在客户端从panchanga-names-zh.ts查。「未知名记日志」因此在浏览器控制台,每个名字只记一次。 - 星期不出副行。 接口里星期本来就是中文(服务端
VARA_ZH),引擎原名是英文 Sunday,不是梵文;附表也没有星期。原型里的「土星日」不在附表里,没加。 - 对照表与引擎拼写三处不一致 → 已按裁决补别名。 引擎
scripts/muhurta.py输出Aindra、Variyana、Dhanishtha,附表写的是 Indra、Variyan、Dhanishta(真实 golden 2026-09-14 的瑜伽就是Aindra)。首版按任务书只收三组别名,这三个名字照写梵文并挂待裁决;协调方 09-26 以任务书作者身份裁定:在PANCHANGA_NAME_ALIASES补Aindra → Indra、Variyana → Variyan、Dhanishtha → Dhanishta三组拼写别名,指向表内既有条目(因陀罗 / 安逸 / 虚宿),译名不变。测试里「任务书附表第二份抄本」保持原样,另加一条别名断言;原先锁「这三个名字返回 null」的三行断言随裁决删除(原值 null / 新值 因陀罗·安逸·虚宿 / 原因:裁决补别名)。 - D10 的两个边界句。 资料岁差是 Lahiri 时,「和星盘页的 Lahiri 不同」是错的,改写「五要素按 Lahiri 岁差算,和星盘页相同。」;读不到资料岁差时只写「五要素按 Lahiri 岁差算。」已写进 VOICE。岁差名取接口已有的
transits.ayanamsa(即资料设置),名字与设置里一致,不带「(默认)」。 - 没有本命上升时的句子改了。 原句「还没有本命上升,相对本命这一列空着。」里的「列」随表格一起没了,改为「还没有本命上升,先不写落在你的第几宫。」行运逆行保留为副行「· 逆行」(D9 没提,但删掉会丢事实)。
- 「已校正」判定 = 状态 accepted / confirmed 且有校正案例 id。只看状态会把旧资料读回时
readProfile的confirmed兜底(有时间就算 confirmed)误标成已校正。 - 当前人物 vs 正在看的详情。 「当前正在看的人高亮」按顶栏当前人物(
useCurrentSubject)上强调色;桌面右栏打开的那一行只用中性浅底is-open,免得两行都是强调色。 - 桌面五要素仍是五格一行(DESIGN §16 原有),标签在上、名称与标签在下;767px 以下才是原型那种「左标签 · 中名称 · 右标签」行。原型里日期条下的「星期六 · 今天」副标题、迦那副行「· 通常避开」都不在决策里,没做。
- 档案页「还可以保存 N 个人」「本人不能删除」按原型去掉了句末句号(VOICE 已写)。
验证
| 项 | 结果 |
|---|---|
./node_modules/.bin/tsc --noEmit |
0 错 |
npm run lint |
0 error / 127 warning(与既有一致,新文件无 warning) |
全量 npm test(Node 20.19.2) |
3915 条,3827 通过,61 失败,27 跳过。基线 3883 / 61 失败。失败测试名与基线逐条比对:新增 0、消失 0;测试名无消失,新增 32 条(panchanga-names-zh 7、ephemeris-readable-panchanga 13、people-archive-view 12) |
| 定向 | ephemeris-page、ephemeris-readable-panchanga、panchanga-names-zh、people-archive-view、people-archive-regressions、chart-library-other-profile、adopted-birth-date、settings-mvp-contract、secondary-page-entry、viewport-breakpoint-contract、touch-target-contract、dark-theme-contract、design-token-contract 全绿(ephemeris-route 的 6 条失败是基线同名 Node 20 缺口) |
| Python 源码合同 | tests/test_birth_time_journey_contract.py、test_session_management_entrypoints.py、test_supabase_user_data_contract.py、test_daily_and_rectification_entrypoints.py:25 passed(系统 python3 + pytest 9.1.1;本 worktree 无 .venv) |
npm run build -- --webpack |
成功;○ /、○ /people、○ /ephemeris、○ /chart 仍 Static(/reports 为 ƒ,本单未碰) |
首屏 gzip(build-manifest.json rootMainFiles 4 个文件,zlib 默认级别) |
131253 字节,基线 130933,+0.24%(±2% 内;本单只改组件与 CSS,不进 rootMainFiles,差值应是口径 / 构建噪声) |
改动的既有断言(三栏也写在测试文件里):
| 位置 | 原值 | 新值 | 原因 |
|---|---|---|---|
tests/ephemeris-page.test.tsx「the Lahiri note sits under panchanga…」 |
EPHEMERIS_COPY.panchangaLahiriNote(固定句「这一段按 Lahiri 岁差算,和星盘页用的岁差不是同一套。」) |
ephemerisAyanamsaNote("raman")(「五要素按 Lahiri 岁差算,和星盘页的 Raman 不同。」) |
D10 改句式并要求按资料实际岁差填名;位置断言不变 |
tests/ephemeris-page.test.tsx「copy stays factual…」 |
整页 markup 不得含 /运势|适合|不宜|建议|吉祥日/ |
去掉底部提示卡那一句问句后再断同一组词,另断问句只出现一次 | D8 定稿问句「想问这一天适不适合做某件事?」是邀请提问,不是宜忌结论;其余范围不放宽 |
浏览器截图(真实 Chrome 151,非登录态)
方式:本地 next build --webpack + next start,加一个未提交的临时宿主页 /ui-harness-1039:
?screen=people挂真实PeoplePage,只把/api/account、/api/chart-profiles、/api/sessions三个读请求换成虚构数据(本人「示例甲」已校正、「示例乙」Lisbon/Lahiri、「示例丙」成都),列表 → 详情 → 返回走的是组件真实的pushState/popstate。?screen=ephemeris挂真实EphemerisView:行运用真实引擎 golden(2026-09-15),五要素用虚构 Vishti/Purnima 组合以显示完整总评;另一张用真实 golden 五要素。- CDP 驱动(
node --experimental-websocket),设备像素比 2,prefers-color-scheme亮 / 暗。每个宽度同时检查:页面与.secondary-page无横向滚动、可见按钮高度均 ≥ 44px、星历顶栏没有.ephemeris-ask;手机宽度检查点人后 URL 带?person=、history.back()与「‹ 返回」都回到data-view="list"。全部通过(ui-1039/checks.json)。
截图目录 /tmp/claude-1000/-workspace-Jyotisha/725df462-ac7f-4544-90b7-60fba1501ed7/scratchpad/ui-1039/(不在仓库里),宽度 × 主题各一组:
- 档案页:
people-{375,390,1280}-{light,dark}-list.png(列表、当前人物高亮、虚线添加卡)、people-{375,390}-{light,dark}-detail-self.png(本人详情:已校正绿卡、Raman(默认)、三入口、「本人不能删除」)、people-{375,390,1280}-{light,dark}-detail-other.png(他人详情;1280 为两栏)、people-{375,390,1280}-{light,dark}-edit-other.png(编辑视图底部「删除这个人」)。 - 星历:
ephemeris-{375,390,1280}-{light,dark}-top.png(总评、计数、彩色标签、中文主名梵文副名、岁差句、行运行)、ephemeris-{375,390,1280}-{light,dark}-bottom.png(九十天与底部提示卡)、ephemeris-375-light-golden-top.png(真实 golden 五要素:白分初五 / 亢宿 / 分离 / 巴瓦)。
环境缺口(未写成通过)
- Node 22 全量未跑(本机只有 Node 20.19.2),61 条基线失败为同一原因;需协调方在 Linux Node 22 复跑并比对名单。
- 无 Docker:本单不动表,未跑
test:db。 - 无受控登录账号:真实数据、iPhone Safari、左滑返回手势、读屏未验,见
docs/testing/people-ephemeris-ui-20260926.md。 - 未部署;BUG-1039 保持
investigating。