feat(chart): 「那一刻的天空」封面 — engine, BFF, canvas painter, chart header entry

T1 scripts/birth_sky.py: real alt/az of the seven visible grahas (swe.calc_ut +
swe.azalt, geometric altitude, azimuth converted from swe's south origin to
north-east) and Yale BSC5 stars V<=4.0 (IAU 1976 precession); phase
day / twilight_morning / twilight_evening / night. Thin POST /api/birth_sky
registration in do_POST (no new handler method, no __new__).

T2 GET /api/birth-sky?subject=: birth truth read server side through
loadSubjectBirth + prepareChartViewProfile; zod contract; no billing, no
writes, no birth data in the response.

T3/T4 lib/birth-sky: sentence table, pure Canvas 2D drawBirthSky (night /
paper palettes from DESIGN tokens, east on the left, serif headline with
1.5 s font wait), PNG export via navigator.share or Blob + a.download.
Chart page prefetches and paints the cover once the chart is ok; the header
button appears only when the PNG is ready. Dialog is a lazy chunk.

T7 DESIGN §17, VOICE, CONTEXT glossary, CHANGELOG, real-device checklist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
Jesse_Chen
2026-09-28 20:27:40 +08:00
co-authored by Claude Opus 5.5
parent d670521f47
commit d277cbd8ad
35 changed files with 2056 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
# 真机清单 · 那一刻的天空(2026-09-28)
对应 `TASK-birth-sky-cover-20260928`。部署到 staging 后照做;每条写「通过 / 不通过 + 截图」。用自己的账号或虚构人物;截图里不要露出别人的出生资料(顶栏出生信息那一行可以裁掉)。
共同判断标准(每台设备都一样):
1. 图是深色卡纸,天顶在圆心、**东在左**、北在上;地平线以上有行星(中文名)和亮星,太阳是赭色空心圆加光晕。
2. 图上**没有**姓名、日期、时刻、经纬度、地名。
3. 主句是四句之一(「星星都在,只是还看不见。」「天快亮了,星星正一颗颗退场。」「天刚暗下来,星星正一颗颗出来。」「那一刻,头顶就是这片天。」),用宋体;下面一行事实句(如「太阳在东,月亮在脚下,火星正悬在东南」),最底「仅供自我探索,不替你做决定。」。
4. 出生时间没做过校正(或没采用)时,事实句下多一行「按你填写的时间」;采用过校正时间的没有这一行。
5. 按钮出现之前不闪任何占位、转圈或错误;弹层打开就是图,没有等待。
## 星盘页入口与保存
| # | 设备 / 浏览器 | 操作 | 期望 | 结果 |
| --- | --- | --- | --- | --- |
| 1 | iPhone Safari | 打开「星盘」,等顶栏右侧出现「那一刻的天空」,点开 | 全屏弹层,一张 3:4 图,下方「保存图片」 | |
| 2 | iPhone Safari | 长按预览图 | 系统菜单有「存储到照片」,存下来的图与预览一致 | |
| 3 | iPhone Safari | 点「保存图片」 | 弹出系统分享面板,有「存储图像」;点它存进相册。取消分享不报错 | |
| 4 | 安卓 Chrome(至少一台国产机) | 点「保存图片」 | 分享面板或直接下载 `jyotisha-sky.png`;文件名里没有人名和日期 | |
| 5 | 桌面 Chrome | 点「保存图片」 | 下载 `jyotisha-sky.png`(1080 × 1440) | |
| 6 | 桌面 Safari | 点「保存图片」 | 分享面板或下载,文件同上 | |
| 7 | 任一 | Esc、点遮罩、点「关闭」 | 都能关,焦点回到按钮 | |
| 8 | 任一 | 顶栏切到一个家人(星盘档案里的人物) | 按钮先消失,数据就绪后再出现;打开是家人出生那一刻的天空 | |
| 9 | 任一 | 用一个出生资料不全的人物打开星盘页 | 没有「那一刻的天空」按钮,也没有提示 | |
| 10 | 桌面 Chrome | DevTools → Network 勾 Offline 后刷新星盘页 | 星盘页照常报它自己的错,顶栏不出现按钮、不出现新错误 | |