docs(tasks): brief for chart dasha and western tab redesign

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-24 14:57:59 +08:00
co-authored by Claude Opus 5.5
parent e0db23f47a
commit b975617603
2 changed files with 76 additions and 0 deletions
+1
View File
@@ -199,6 +199,7 @@
| 任务书 | 进度 | 主题 | 状态 | 落点 |
| --- | --- | --- | --- | --- |
| `TASK-chart-dasha-western-redesign-20260924.md` | — | **大运 / 西洋盘改版**(原型 https://claude.ai/artifact/DYovEPMqD1xwNgna5xVTre ,产品 09-24 全部同意,相位线常显):大运「现在」卡 + 时间条 + 默认折叠(原 81/144 行平铺);西洋盘 520 三圈、行星避让 + 引线、宫号居宫中、ASC/MC 盘内、行星位置表、点选过滤相位。排在 chart-ephemeris-fixes T1 之后 | 待领取 | — |
| `TASK-chart-ephemeris-fixes-20260924.md` | — | **Chara 0 年大运崩溃 + 星历切日期旧数据 + 星盘无资料空状态(BUG-1023/1024/1025)**:mapper 0/0 → `RangeError`(约 7.8% 星盘,产品定照实显示 0 年、不改引擎);BUG-966 删掉重置致日期与数据分叉(回归);无资料只有一句话,加「去填写出生资料」+ `?settings=chart` 深链(T3 排在 home-slow-network 之后)。大运 / 西洋版式重做不在本单 | 待领取 | — |
| `TASK-chart-page-skeleton-wait-20260924.md` | `PROGRESS-chart-page-skeleton-wait-20260924.md` | **星盘页骨架盘等待态 + 三个「永远还没拿到」死角**:「这一张盘还没拿到。」只代表 `view === null`,是唯一等待态,失败各有句子;但客户端无超时(A)、401 跳转前(B)、分盘层失败 / 429 后 `ChartVedicTab` 只看 `!selected` 不看 pending(C)三条路都让这句永远挂着。**产品 09-24 拍板推翻 09-18 方案一(BUG-966)**:星盘页盘位用骨架盘 + 呼吸动效(复用 `VedicChartSvg` 空模型,不复制几何;`prefers-reduced-motion` 静止),范围只限星盘页会出盘轮的位置,首页 / 侧栏 / 星历 / 报告的「不放骨架」合同不动;`AGENTS.md` §6 与 `DESIGN.md` §9 / §15 追加例外。三死角出口:客户端 25s 超时 → `timedOut` 句、401 先写失败体、按层失败态 `layerFailures`(429 独立档,BUG-715/723)。BUG-1016 / 1017 | 已验收(Claude 09-24:红线全绿、+46 测试、失败名单同基线、四路由标记与 gzip 同基线;BUG-1016/1017 resolved) | `1420471a`(staging 已部署);真机清单欠 |
| `TASK-smalltalk-test-stdout-mock-20260921.md` | `PROGRESS-smalltalk-test-stdout-mock-20260921.md` | **测试基础设施(BUG-995)**:`consultation-smalltalk.test.ts` 为验证「SDK 不得把私密文本写进日志」,用 `t.mock.method(process.stdout/stderr, "write", …)` 全局接管标准输出——而 `node:test` 的 TAP 报告也走 `process.stdout`,于是运行器自己的 `# Subtest:` / `ok` 行被吞进测试的 `logs` 数组。实测四次全量:`default Mastra adapter` 四条用例只上报 4 / 2 / 1 / 1 条(`Subtest` 声明本身就少,不是 grep 锚点问题),`# tests` 因此 ±3 抖;单跑该文件 33 条静态展开只报 30 条,仅循环最后一个 `provider_error` 稳定可见。**更要紧**:注入必失败探针后,`invalid_schema` / `bad_json` 只剩一行 `not ok 1 - <文件绝对路径>`,**没有用例名、没有断言消息**(退出码仍是 1,门禁不会漏掉失败,不夸大)。定位 BUG-987 时靠的就是从门禁日志 grep `not ok` 抓用例名,红在这三条上那条路会断。**决策**:mock 改为记录后**透传给原始 `write`**(保留隐私断言,不换报告通道,不改 `npm test` 脚本);F3 把「比用例名列表 diff、不比 `# tests` 总数」写进 `frontend/AGENTS.md`。全仓只此一个文件用了这个手法(已 grep 确认)| 待验收 | `2503c019` |
@@ -0,0 +1,75 @@
# TASK · 星盘页大运 Tab 与西洋盘 Tab 改版(2026-09-24)
原型(产品 09-24 已同意全部设计,相位线**一直显示**):https://claude.ai/artifact/DYovEPMqD1xwNgna5xVTre
## 基线
- `origin/staging` 当前 head(含已部署 `1420471a`)。分支 `codex/chart-dasha-western-redesign-20260924`。
- **串行**:排在 `TASK-chart-ephemeris-fixes-20260924.md` **T1(Chara 0 年)合入之后**——两单都改 `chart-dasha-tab.tsx` / `chart-view-mapper.ts` 的大运显示;本单沿用那一单定下的「0 年照实显示、灰色、不展开」口径。与 `TASK-chart-page-skeleton-wait` 已合入的西洋骨架(`WesternWheelSvg skeleton` + `EMPTY_WESTERN_WHEEL`)必须兼容。
## 事故实证(按 `origin/staging`)
**大运**:`frontend/src/components/chart-page/chart-dasha-tab.tsx` `ChartDashaTab` → 两个 `Track`(Vimshottari / Chara),每段大运 `li.chart-page-dasha-period` 下平铺**全部**子运 `<ul>`:Vimshottari 9×9 = 81 行、Chara 12×12 = 144 行,无折叠、无"现在"摘要、无时间总览。CSS `globals.css` `.chart-page-dasha*`。
**西洋盘**:`frontend/src/components/chart-page/western-wheel-svg.tsx`:`viewBox 0 0 400 400`,`OUTER=188 / ZODIAC=168 / HOUSE=128 / INNER=78`,CSS `.chart-page-western-svg text { font-size:16px }` 统一 16 号;
- 星座名在 r=178 的 20 单位窄带内,近水平轴时压过两条环线;
- 宫位号放在**宫头角度**(不是宫中),被宫头线穿过;
- 行星两字中文名在 r=113,与宫位号同一带,**无避让**——虚构 1990-01-01 12:00 北京实测 23 处标签重叠(摩羯座五星群互相重叠并压宫位号);
- 「升」字 `x = polar(192,180).x - 8 = 0`、`textAnchor="end"` → 画在 viewBox 外;
- 无度数、无逆行标记;SVG 无 `max-width`,窄屏一栏时盘撑满面板(可达 ~1050px)。
- `chart-western-tab.tsx` 相位表复用 `.chart-page-planet-table`(`min-width: 34rem`、`nowrap`),侧栏约 480px 时横向溢出;整个 Tab 没有行星位置表。
## 根因
大运:信息全量平铺、缺层级。西洋盘:固定字号 + 行星与宫位号同圈 + 无碰撞处理 + 标签坐标错误 + 继承了印度盘表格宽度。
## 决策记录(产品 2026-09-24,照原型)
**大运 Tab**
- D1 每条轨道顶部「现在」卡:当前大运 / 当前小运 / 小运剩余(月)。
- D2 横向时间条:整个周期按时长分段上色,当前段描边,竖线标今天,轴两端写起止 `YYYY.MM`。
- D3 大运列表默认折叠,只展开当前段;子运逐行 `名称 · YYYY.MM – YYYY.MM`,当前子运高亮;日期等宽数字右对齐。
- D4 0 年段:灰色、`0 年`、不可展开(沿用 chart-ephemeris-fixes D1)。
- D5 布局:≥1024px 左 Vimshottari、右 Chara 并排;窄屏上下排。底部保留双轨说明句(现 `dualTrackNote`)。
- D6 折叠用原生 `<details>/<summary>`,不引第三方;当前段 `open`。
**西洋盘 Tab**
- D7 盘 `viewBox 0 0 520 520`,容器 `max-width: 520px` 居中。三圈:外圈星座(按元素用四个语义色:火 / 土 / 风 / 水,token 化、深浅色各一套)、中圈行星(符号 + 星座内度数,逆行加 ℞)、内圈宫位号(放**宫中角度**,不压线)。
- D8 行星避让:按黄经排序,相邻显示角 < 11° 时沿圆周推开(迭代),在真实位置画外圈刻度并用细线连到显示位置。
- D9 ASC / MC 在盘内标注,四轴线加粗;不再画盘外「升」。
- D10 相位线**一直显示**,和谐(三分 / 六分 / 合)绿、紧张(刑 / 冲)红,使用语义 token;点行星或行星表行 → 只高亮该星及其相位,其它变淡,再点取消;相位表同步只列该星相位。
- D11 右侧:要点 chips(上升 / 太阳 / 月亮 / 元素最多 / 星群)→ **新增行星位置表**(星体、星座、度数、宫位、逆行)→ 主要相位表(星体对、相位、容许度)→ 口径说明句。表格用新的 `.chart-page-western-table`,不继承 `min-width: 34rem`;外包 `overflow-x:auto`。
- D12 数据全部来自现有 `view.western`(`planets`、`houses`、`aspects`、`ascendantLongitude`、MC 若无字段则从第 10 宫头取);**不新增请求、不改接口字段**。若缺字段,写进进度记录,不在前端编造。
- D13 骨架兼容:`skeleton` 模式仍只画三圈与分割线,不画星座名 / 行星 / 宫位号 / 相位。
## 硬红线
1. 不改 `/api/chart-view` 与引擎;不改 `HEAVY_COMPUTE_PATHS` / 并发。
2. 不复制印度盘几何;西洋盘只改 `western-wheel-svg.tsx` 自身。
3. 新颜色必须是 `:root` token 且有暗色值;不得在组件里写死色值。
4. 无 spinner;骨架规则不变。44px 触控;断点沿用 1024(星盘既有)。
5. `/chart` 保持 `○ Static`;既有断言三栏;测试总数不低于基线。
## 任务分解
- **T1 大运**(`chart-dasha-tab.tsx`、`chart-view-mapper.ts` 若需补"当前子运"字段、`globals.css`)。验收:`chart-page-view.test.tsx` 渲染 golden(真实引擎 fixture)→ 每轨一个「现在」卡、时间条段数 = 大运数、仅当前段 `open`、0 年段不可展开;无 81/144 行平铺(未展开段不渲染子运 `li`,或渲染在关闭的 `<details>` 内均可,但默认不可见)。
- **T2 西洋盘**(`western-wheel-svg.tsx`、`chart-western-tab.tsx`、`globals.css`)。验收:纯函数 `layoutWesternLabels(planets)` 测试——虚构 1990-01-01 golden 下任意两颗行星显示角间距 ≥ 11°、每个标签包围盒在 viewBox 内、宫位号角度 = 宫中;无「升」出界;行星表行数 = 行星数;点选过滤相位表;骨架模式无文字节点。
- **T3 记录**:DESIGN §15 大运 / 西洋小节(结构、颜色 token、避让规则);VOICE(「现在」卡文案、「小运剩余 N 个月」);CHANGELOG;PROGRESS;`docs/testing/chart-dasha-western-20260924.md`(375 / 1280 宽度;摩羯星群不重叠;点行星过滤;暗色模式元素色可读)。产品改版,不开 BUG 号(西洋溢出若需记账可并入一条 BUG-1029,开工时定)。
## 让步顺序
1. 避让迭代在极端星群(≥6 颗落 30° 内)仍重叠时,允许第二层半径(两行错开),不得缩小字号到 < 12。
2. 若 `view.western` 无 MC,允许只标 ASC,并写进进度记录。
3. 不得让步:D8(避让)、D10(相位线常显)、红线 1、红线 3。
## 开工前置命令
```bash
git fetch origin --prune
git log --oneline origin/staging | grep -i "chara\|0 年\|1023" # 确认 chart-ephemeris-fixes T1 已合入
git worktree add -b codex/chart-dasha-western-redesign-20260924 .worktrees/chart-dasha-western-redesign-20260924 origin/staging
cd .worktrees/chart-dasha-western-redesign-20260924/frontend
./node_modules/.bin/tsc --noEmit && npm run lint && npm test 2>&1 | tail -5
```