The generate button renders in SecondaryPageShell's actions slot, outside the report roots, so while submitting it still got the global 45% fade. A report-owned `report-center-generate` class brings it into the disabled rule; SecondaryPageShell and button.tsx unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
10 KiB
PROGRESS · 岁差 6 种(T6)与「我的报告」按钮配色(T7,BUG-1078)(2026-09-28)
任务书:docs/tasks/TASK-chart-types-and-report-buttons-20260928.md(T6、T7 及其 T8 文档部分)。T1–T5(星盘页)由另一执行方并行,本单未碰 chart-page/*、chart-view-*、use-chart-page.ts、secondary-page-data.ts 与任何 Python。产品 2026-09-28 授权直接执行(Claude fork 子代理)。
- 基线:
origin/staging=5dc977ef - 分支 / 工作树:
codex/ayanamsa-report-buttons-20260928/.worktrees/ayanamsa-report-buttons-20260928(本地提交,未推送) - 环境:Node v22.14.0(
/exec-daemon/node),Linux;无 Docker;有/usr/bin/google-chrome(无头)。
T6 岁差扩到 6 项 — 完成
frontend/src/lib/ayanamsa.ts:AYANAMSA_VALUES=raman, lahiri, kp, true_citra, true_pushya, fagan_bradley;设置项新增 True Citra「以角宿一的实际位置定起点,和 Lahiri 只差约 1 角分。」、Fagan-Bradley「西方恒星占星常用,比 Lahiri 多约 0.9°。」。resolveAyanamsa接受true_chitra→true_citra(与scripts/ayanamsa_utils.py一致)。默认仍 Raman,AYANAMSA_SWITCH_HINT原句保留。- 数字核对(pyswisseph,1950 / 2000 / 2026 年 1 月 1 日):Fagan-Bradley − Lahiri = 0.8832°(恒定);True Citra − Lahiri = −0.0164° / −0.0171° / −0.0174°(约 1 角分)。
- 偏离任务书:标签写 True Citra,不是 True Chitra。 星盘页参数表显示的是引擎的
ayanamsa_display(AYANAMSA_DISPLAY_NAMES['true_citra'] = 'True Citra'),报告的SAFE_AYANAMSA也是 True Citra;设置里写 Chitra 会让同一个值在两处拼法不同。本单不动 chart-view 与 Python,所以统一用引擎拼法。true_chitra仍作为别名接受。 - 任务书遗漏:数据库 CHECK。
profiles.ayanamsa有profiles_ayanamsa_check(20260903010000_profile_ayanamsa.sql)只许旧 4 个值;只改前端会让保存新岁差 500。新增迁移frontend/supabase/migrations/20260928010000_profile_ayanamsa_six.sql:只 drop / add 该 CHECK(放宽,AGENTS §7.6 允许同轮),不动列、默认值、授权、数据。chart_profiles.ayanamsa无 CHECK;人物接口直写类型化列,chart_profiles_fill_typed_from_json的 JSON 兜底(只认旧 4 值)不在写路径上,未改。部署顺序:迁移先于代码(staging 迁移本来就在部署前自动应用)。回滚代码后已存的新值会被旧代码resolveAyanamsa读成 Raman。 - 显示名:
ephemeris-view.tsAYANAMSA_SHORT_NAME补两项(星历页岁差说明句);personal-report-generation.ts已有,未改;星盘页用引擎显示名,无需改 chart-view 文件。人物档案详情取AYANAMSA_OPTIONS的 label,自动跟随。 - 全链路:12 处
resolveAyanamsa/AYANAMSA_VALUES(咨询 route service、报告 worker、星盘 load、人物写入、账户 PATCH zod、mastra workflow zod、校正 payload 等)都从同一枚举取值,无第二份白名单;Python 侧normalize_ayanamsa_name与 CLIchoices=AYANAMSA_MODES已含两值。 - 测试:
-
frontend/tests/ayanamsa.test.ts改既有断言(三栏):位置 原值 新值 原因 测试名 …accepts the four product values…accepts the six product values值从 4 个变 6 个 AYANAMSA_VALUES断言["raman","lahiri","kp","true_pushya"]["raman","lahiri","kp","true_citra","true_pushya","fagan_bradley"]产品 D4 新增一行 — djwhal_khul→raman证明不放出的值仍走回退 另加 2 条:6 值逐一原样返回(含大写 / 连字符写法与
true_chitra别名);设置列表顺序与标签、每个值都在ayanamsa_utils.py里。 -
新增
frontend/tests/ayanamsa-six-paths-20260928.test.ts(7 条):账户 PATCH 接受 6 个、拒绝djwhal_khul / sassanian / fagan / yukteshwar;迁移源文本(只改 CHECK、恰好 6 值);账户行、人物写入与读回、星盘发给引擎的ayanamsa均为true_citra/fagan_bradley;星历说明句;报告显示名。 -
新增
frontend/tests/database-profile-ayanamsa-six.test.ts(1 条,需 Docker,本机跳过):真实库上 6 值可写、3 个非法值被profiles_ayanamsa_check拒绝。
-
T7 我的报告按钮配色(BUG-1078)— 完成(真机欠)
- 根因更正:任务书与 Claude 首轮判断是「深色主题下近黑字」。实测(本地
next buildCSS + 无头 ChromegetComputedStyle)不是:globals.css顶部未分层的button { color: inherit; }压过 Tailwind 分层的text-primary-foreground,实心<button>的字一直是正文色——浅色 #1d1d1f on #a9583e(3.33:1,正是反馈的「黑字配深红底」),深色 #f2f0ea on #d78064(2.57:1)。未分层的button:disabled { opacity: .45 }再把禁用按钮整体淡掉。render={<Link/>}的按钮是<a>,不受影响。这个问题全站所有实心<button>都有,本单按产品决定只修报告范围。 - 修复:
globals.css在分块导出规则之后新增报告作用域段(.report-center-message / .report-center-body / .personal-report-state / .personal-report-reader):实心[data-slot="button"][class~="bg-primary"]自己声明底色与字色(浅色 #fbfaf7 on #a9583e 4.85:1、hover 同原bg-primary/80;深色 #f2f0ea on #8f4a33 5.77:1、hover 混 6% ink 5.1:1);禁用(任何变体)--color-canvas-strong底 +--color-ink-tertiary字、opacity: 1(浅色 4.10:1、深色 3.95:1,禁用态不受 AA 约束);套餐选中态--color-canvas-muted+--color-ink+--color-ink-secondary边(浅色 13.86:1、深色 11.62:1)。深色两条路径(系统偏好 / 固定深色)各一份,写法同 token 块。 - 用
[class~="bg-primary"]而不是.bg-primary:class-name-definition-contract把样式表里每个.name的首段当作项目类族,写.bg-primary会让bg-background/bg-transparent等 Tailwind 工具类被判为「未定义的项目类」——首轮就这样红了 1 条,改成属性选择器后绿。 - 未改:
components/ui/button.tsx、全局button规则、:root与两块深色 token(合同测试锁定)。 - 测试:新增
frontend/tests/report-buttons-scope-20260928.test.ts(5 条,见 BUG-1078 验证段)。 - 样张(本地 build CSS + 与
button.tsx同 class 串的静态页,390px,Chrome 无头),存于执行会话 scratchpadshots/(base-light.png/new-light.png/base-dark.png/new-dark.png,未入库)。计算样式:按钮 基线浅色 新版浅色 基线深色 新版深色 导出选中 (3) 字 29,29,31 / 底 169,88,62 字 251,250,247 / 底 169,88,62 字 242,240,234 / 底 215,128,100 字 242,240,234 / 底 143,74,51 导出选中 (0)(禁用) 同上,opacity 0.45 字 106,105,99 / 底 225,222,214,opacity 1 同上,opacity 0.45 字 156,152,142 / 底 59,58,55,opacity 1 套餐「常用」选中 字 169,88,62 / 底 247,236,229 字 29,29,31 / 底 235,233,227 字 215,128,100 / 底 58,38,32 字 242,240,234 / 底 48,48,45 范围外对照按钮 与基线一致 与基线一致 与基线一致 与基线一致
T8 文档(本单部分)
CHANGELOG.md 一条(Skill 不 bump)、docs/BUG_HISTORY.md BUG-1078(investigating,待推送部署)、frontend/DESIGN.md(岁差一节 6 值;星历说明句名单;报告阅读页按钮一条)、frontend/docs/VOICE.md(星历岁差名单)、docs/testing/ayanamsa-report-buttons-20260928.md(13 条真机清单)、BLOCKED.md(无 Docker / 无登录态)。CONTEXT.md 无新术语,未改。
验证
| 项 | 基线 5dc977ef |
本分支 |
|---|---|---|
tsc --noEmit |
0 | 0 |
npm run lint |
0 error / 127 warning | 0 error / 127 warning |
npm test(Node 22) |
4212 tests / 4158 pass / 24 fail / 30 skip | 见下 |
next build / |
○ Static | ○ Static |
| 首屏脚本 gzip-9(index.html 引用 26 个脚本) | 640,535 | 640,678(+143,+0.02%) |
| 首屏 CSS gzip-9 | 42,850 | 43,173(+323) |
24 条基线失败全部是需要 Docker / 部署环境的 DB 与部署套件,名单见 BLOCKED.md 同类条目;本分支失败名单与基线逐条比对见下。
本分支 npm test(Node 22):4227 tests / 4172 pass / 24 fail / 31 skip / 0 cancelled(退出码 1 同基线)。失败名单与基线 24 条逐条相同(diff 为空)。测试名对比:新增 16 条(含 1 条 docker 跳过的 DB 用例),消失 1 条 = resolveAyanamsa defaults to Raman and accepts the four product values,已改名为 …six product values(见上表三栏)。
隐私标记:python3 -m pytest tests/test_repo_privacy_markers.py -q 通过(本机无 .venv,用系统 Python)。
环境缺口
- 无 Docker:
npm run test:db未跑;新迁移与database-profile-ayanamsa-six.test.ts以门禁 DB job 为准。 - 无受控登录账号:保存新岁差、星盘参数表、报告页按钮只在单元测试与静态样张上验证;真机清单
docs/testing/ayanamsa-report-buttons-20260928.md。 - 未推送、未部署(按指令)。
交给 Claude 的范围外发现
- 全站所有渲染为
<button>的实心Button(报告范围外)都有同一问题:浅色近黑字 on #a9583e(3.33:1)、深色浅字 on #d78064(2.57:1),禁用时再淡到 45%。根因是globals.css未分层的button { color: inherit; }/button:disabled { opacity: .45 }压过 Tailwind 工具类。需要产品决定是否另立单。
追加(Claude 复核后补漏)
- 页头「生成报告」渲染在
SecondaryPageShell的actions槽(personal-report-center.tsx),在报告根类之外,提交中(禁用、「正在创建…」)仍被全局button:disabled { opacity: .45 }淡掉。给该按钮加报告自有类report-center-generate,并入同一条禁用规则;SecondaryPageShell、button.tsx未改。无头 Chrome 计算样式:opacity 1、底 225,222,214、字 106,105,99(浅色)。 report-buttons-scope-20260928.test.ts+1 条(按钮带挂钩类、disabled={submitting}仍在、SecondaryPageShell不含 report 类),禁用规则断言改为含该选择器。复跑:tsc 0;lint 0 error / 127 warning;相关 6 个测试文件 45 / 45 通过、0 cancelled。