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
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
856dab6c55
commit
873fac8a5b
@@ -14497,3 +14497,17 @@
|
||||
- 相关记录:BUG-320(Bhava 进换升表);`TASK-chart-types-and-report-buttons-20260928` T5。
|
||||
- 复发自:无
|
||||
- 修复版本:本地 `c35e0195`(未推送)。
|
||||
## BUG-1078 | 我的报告:实心按钮标签继承正文色(浅色黑字深红底、深色浅字浅珊瑚底),禁用态半透明
|
||||
|
||||
- 状态:investigating(修复已在本地分支 `codex/ayanamsa-report-buttons-20260928` 提交,未推送、未部署;真机未走)
|
||||
- 首次发现 / 最近更新:2026-09-28 / 2026-09-28
|
||||
- 影响面:「我的报告」列表(`.report-center-*`)、阅读页与分块导出对话框(`.personal-report-reader`、`.report-export-*`)、报告 loading / 状态 / error / not-found(`.personal-report-state`)上渲染为 `<button>` 的实心 `Button`(「导出选中」「继续等待」等)与所有禁用按钮。**同样的根因作用于全站所有渲染为 `<button>` 的实心 `Button`**,本单按产品决定只修报告范围,其它页面未修(见防复发)。
|
||||
- 现象:产品转述真机反馈:导出按钮黑字配深红色背景,看着不舒服。
|
||||
- 触发条件:浅色主题打开分块导出,「导出选中」是近黑字 #1d1d1f 在 #a9583e 上(3.33:1);深色主题是 #f2f0ea 在 #d78064 上(2.57:1)。未勾选时按钮再被整体淡到 45%。套餐选中态用 `--color-action-soft`,深色下是 #3a2620 深红褐。
|
||||
- 根因:`globals.css` 顶部未分层的 `button { color: inherit; }` 与 `button:disabled { opacity: .45; }` 压过 Tailwind v4 放在 `@layer utilities` 里的 `text-primary-foreground` 与 `disabled:opacity-50`(未分层声明总是赢分层声明,与选择器权重无关)。所以 `variant="default"` 的 `<button>` 标签颜色一直是继承的正文色,而不是设计的 `--color-on-dark`。`<Button render={<Link/>}>` 渲染为 `<a>`,不受影响,所以「去登录」这类链接按钮一直是对的。实证:本地 `next build` 产出的 CSS + 无头 Chrome 取 `getComputedStyle`,基线「导出选中 (3)」浅色 `color: rgb(29, 29, 31)`、深色 `rgb(242, 240, 234)`(样张与数值见 PROGRESS)。任务书起初判断为「深色主题下近黑字」,按实测更正。
|
||||
- 修复(产品 2026-09-28 拍板:只改我的报告,不改全站):`globals.css` 新增一段只挂在四个报告根类下的按钮规则,实心按钮(`[data-slot="button"][class~="bg-primary"]`)自己声明底色与标签色:浅色 #fbfaf7 on #a9583e(4.85:1,hover 同原 `bg-primary/80`);深色 `--color-ink` #f2f0ea on `--color-action-on-dark` #8f4a33(5.77:1),hover 混 6% ink(5.1:1)。禁用态(任何变体)= `--color-canvas-strong` 底 + `--color-ink-tertiary` 字、`opacity: 1`。套餐选中态改 `--color-canvas-muted` 底 + `--color-ink` 字 + `--color-ink-secondary` 边。`button.tsx`、全局 `button` 规则与全部主题 token 未改。
|
||||
- 验证:`frontend/tests/report-buttons-scope-20260928.test.ts`(5 条):`button.tsx` 变体 / 禁用淡出 / `data-slot` 原样;三处主题块相关 token 原值;所有 `[data-slot="button"]` 覆盖规则都以报告作用域开头、两条深色路径各一处、样式表不定义 `.bg-primary`;前后对比度(前 < 4.5、后 ≥ 4.5)且覆盖规则自己设 `color`;套餐选中态不再用 action-soft。`class-name-definition-contract`、`dark-theme-contract`、`design-token-contract`、`report-export-drawer` 仍绿。无头 Chrome 计算样式:新版浅色「导出选中 (3)」`rgb(251, 250, 247)` on `rgb(169, 88, 62)`,深色 `rgb(242, 240, 234)` on `rgb(143, 74, 51)`;禁用 opacity 1;报告范围外对照按钮与基线一致。
|
||||
- 防复发:报告页按钮颜色只在这段作用域规则里改。全站其它实心 `<button>` 仍有同一问题(浅色 3.33:1、深色 2.57:1):要修应另立单,在全局 `button { color: inherit; }` 或 `Button` 组件层面解决,并逐页截图;不要把这段报告作用域规则挪成全局。
|
||||
- 相关记录:BUG-738(action 两档对比度)、BUG-1018 / 1019(分块导出);`TASK-chart-types-and-report-buttons-20260928` T7。
|
||||
- 复发自:无
|
||||
- 修复版本:待推送
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
# 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 工具类。需要产品决定是否另立单。
|
||||
@@ -0,0 +1,22 @@
|
||||
# 真机清单 · 岁差 6 种与「我的报告」按钮配色(2026-09-28)
|
||||
|
||||
对应 `TASK-chart-types-and-report-buttons-20260928` T6 / T7、BUG-1078。部署到 staging 后照做;每条写「通过 / 不通过 + 截图」。用自己的账号或虚构人物,不要截别人的出生资料。
|
||||
|
||||
## 岁差
|
||||
|
||||
1. 设置 → 星盘资料(本人):岁差一共 6 项,顺序是 Raman(默认)、Lahiri、KP、True Citra、True Pushya、Fagan-Bradley。没有 Djwhal Khul、Sassanian。
|
||||
2. 选 True Citra 保存,不报错;刷新页面仍是 True Citra。
|
||||
3. 打开星盘页:参数表「岁差」一行写 True Citra。
|
||||
4. 打开星历页:五要素卡下的一行写「五要素按 Lahiri 岁差算,和星盘页的 True Citra 不同。」
|
||||
5. 换成 Fagan-Bradley 重复 2–4;星盘页的行星度数应比 Lahiri 时小约 0.9°(同一颗星对比即可)。
|
||||
6. 星盘档案里给一个虚构人物选 Fagan-Bradley 保存,详情页岁差一行写 Fagan-Bradley。
|
||||
7. 选回 Raman,确认一切恢复。生时校正仍按 Raman(设置里那行提示照旧)。
|
||||
|
||||
## 我的报告按钮(手机深色、浅色各走一遍)
|
||||
|
||||
8. 浅色(产品反馈就是这种):打开一份报告 → 右上导出 → 分块导出。还没勾选时「导出选中 (0)」是浅灰底灰字;勾选一块后是陶土底**白字**,不再是黑字深红底。
|
||||
9. 深色:同一步骤。未勾选是深灰底灰字;勾选后是深陶土底白字,看得清、不刺眼。
|
||||
10. 点「全部分盘」等套餐:选中那一个是中性灰底 + 白字 + 细边,不是深红褐底。
|
||||
11. 报告列表未登录态「去登录」、报告生成超时页「继续等待」:深色下同样是深陶土底白字。
|
||||
12. 两种主题各再看一遍 10–11。
|
||||
13. 对照:首页、星盘页、设置里的实心按钮本单不改,它们仍是旧样子(同一问题另立单)。
|
||||
Reference in New Issue
Block a user