Files
Jyotisha/docs/tasks/PROGRESS-ayanamsa-report-buttons-20260928.md
T
Jesse_ChenandClaude Opus 5.5 873fac8a5b feat(settings,reports): six ayanamsa options; report-scope solid button colours (T6/T7, BUG-1078)
T6: offer True Citra and Fagan-Bradley beside Raman/Lahiri/KP/True Pushya,
engine-supported values only; widen profiles_ayanamsa_check by an additive
migration; ephemeris note names; path tests so no new value falls back to
Raman.

T7: the unlayered `button { color: inherit; }` beats Tailwind's
text-primary-foreground, so solid report buttons showed page ink (light
(light 4.85:1, dark 5.77:1), grey disabled without fade, neutral selected
preset. button.tsx and theme tokens unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-28 15:54:53 +08:00

9.7 KiB
Raw Blame History

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.ts AYANAMSA_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 与 CLI choices=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 build CSS + 无头 Chrome getComputedStyle)不是: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 无头),存于执行会话 scratchpad shots/(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 工具类。需要产品决定是否另立单。