Files
Jyotisha/docs/tasks/PROGRESS-starter-home-polish-20260926.md
T
Jesse_ChenandClaude Opus 5.5 f04da1038b docs+fix(home): amend resumable hint to point at history (brief amendment)
- D2 resumable hint becomes「上次那次校正还没完成,可以在历史对话里接着做。」
  so it does not imply the homepage pill resumes (it always creates).
- The click-time non-self error in useRectificationSurface is the same
  user-visible sentence as the homepage hint; add the full stop.
- Source, test, VOICE, DESIGN, CHANGELOG, BUG-1041, testing list and
  PROGRESS (amendment by Claude) updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-26 08:50:18 +08:00

74 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS · 首页开场小字拆分 + 今日星语 / 点数图标(2026-09-26)
任务书:`TASK-starter-home-polish-20260926.md`。执行方:Claude 子代理(直接执行模式)。分支 `codex/starter-home-polish-20260926`,worktree `.worktrees/starter-home-polish-20260926`,本地提交未推送。
## 基线
- `origin/staging` = `7475eb6e`(BUG-1038、BUG-1040 已合入)。
- 基线全量前端测试(Node 20.19.2):3953 条,pass 3865 / fail 61 / skipped 27(61 条均为环境缺口:Node 20 `mock.module` 的 `ERR_MODULE_NOT_FOUND @/…`、无 Docker)。
- 基线 `next build --webpack`:`/` ○ Static;rootMainFiles gzip 130933 B;`index.html` 引用的全部 js/css gzip 合计 656646 B。
- BUG 编号:开工时 `docs/BUG_HISTORY.md` 最大 BUG-1040,远端各分支无更大号 → 本单用 BUG-1041。
## 改动
| 任务 | 文件 | 内容 |
| --- | --- | --- |
| T1 / D1 | `components/starter-home.tsx`、`app/(app)/page.tsx`、`globals.css` | `StarterGreeting` 加可选 `dailyTrend` / `dailyTrendSettled`,渲染 `.starter-greeting-sub`(`--color-ink-secondary`、`--type-body-sm`、两行截断)。`page.tsx` 传 `natalMinuteAvailable ? dailyStarlanguageTrend : null`,读的就是 BUG-1040 暖快照初始化的同一个 `dailyStarlanguage` state;未就绪沿用静态句「今天的星语还没写出来。」+ `role="status"`,无 `aria-busy`、无新等待态。 |
| T2 / D2 | `components/starter-home.tsx` | 新增纯函数 `rectificationEntryHint(forSelf, summary)`:非本人 →「生时校正暂时只支持本人。」;`summary.hasResumableCase` →「上次那次校正还没完成,可以在历史对话里接着做。」(任务书修订后文案,见下);其余 `null`,不渲染 `<p>`。删「不确定出生时间时…」「上次已经校正完…」「未完成的那次可以从左侧继续」「看看今天的整体节奏」四句与「·」拼接。`StarterEntries` 去掉不再用的 `dailyStarlanguage` / `dailyStarlanguageTrend` / `rectificationCardAction` 三个 prop。 |
| T2 / 分支误判 | `lib/rectification-entry.ts` | **真 bug(BUG-1041)**:`/api/rectification/cases/entry-summary` 返回 camelCase(`getRectificationEntrySummary` 的投影),`entrySummaryFromResponse` 只读 snake_case,每个真实响应都解析成全 false。改为优先读 camelCase、仍兼容 snake_case。结果:已校正账户可访问名变回「再次校正」,未完成提示能出现。 |
| T2 / D4 | — | 边界句「出生时间不足以支持的判断我会说明,不会补造具体分钟。」原位保留。 |
| T3 / D3 | `components/starter-home.tsx`、`app/(app)/page.tsx` | 今日星语入口 `Sparkles` → `MoonStar`;右上角点数 `Sparkles` → `Coins`(`className="credit-icon"`、`aria-hidden`、按钮 `aria-label` 不变)。已确认 lucide-react 1.24.0 同时导出 `MoonStar`、`Coins`。 |
| T4 | `CHANGELOG.md`、`frontend/DESIGN.md`(Starter home + §9)、`frontend/docs/VOICE.md`、`docs/BUG_HISTORY.md`(BUG-1041, investigating)、`docs/testing/starter-home-polish-20260926.md`、`docs/tasks/README.md` | 记录。 |
红线核对:`Home()` 未新增 hook(只改 JSX 表达式);`page.tsx` 1373 → 1370 行;无语句压行;未改今日星语接口与生成逻辑;未改依赖、迁移、workflow。
## 测试
| 项 | 结果 |
| --- | --- |
| `tsc --noEmit` | 0 错 |
| `npm run lint` | 0 error(126 warning,均为既有文件的既有 warning,本单文件无新增) |
| 全量 `npm test` | 3960 条,pass 3872 / fail 61 / skipped 27 |
| 失败名单 vs 基线 | 逐条一致(`diff` 为空),新增失败 0 |
| 测试名单 vs 基线 | +7 条新名(下文),消失 0 条 |
| Python 源码合同 | `tests/test_daily_and_rectification_entrypoints.py`、`test_session_management_entrypoints.py`、`test_birth_time_journey_contract.py`、`test_supabase_user_data_contract.py` 全过 |
| `npm run build -- --webpack` | 通过;`/` ○ Static,`/chart` `/ephemeris` `/people` ○ |
| gzip | rootMainFiles 130933 → 130933 B(0);首屏引用全部 js/css 656646 → 656729 B(+83 B,+0.013%) |
新增 `frontend/tests/starter-home-polish-20260926.test.tsx`(7 条):D2 首次 / 已校正无提示、未完成一句;D2 非本人(纯函数 + 真实 subject store 渲染,按钮禁用);D4 边界句;D1 副行三态(就绪 / 静态句 + status / 无分钟不渲染);D1 page.tsx 读暖快照同源 state;D3 图标与可访问名;BUG-1041 路由输出 JSON 往返后解析(修复前此条失败,已实测)。
### 改动既有断言(三栏同时写在测试文件内)
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `frontend/tests/icon-motion-audit.test.ts` | `import { Clock3, Sparkles }`、`<Sparkles aria-hidden="true" />`、doesNotMatch `/Moon\|MoonStar\|thinking-orbs/` | `import { Clock3, MoonStar }`、`<MoonStar aria-hidden="true" />`、doesNotMatch `/Sparkles\|thinking-orbs/` | D3 产品拍板换 MoonStar;「无循环动画、无 thinking-orbs」原样保留,并反向锁住旧图标 |
| `frontend/tests/rectification-agentic-entry.test.ts` | match `/rectificationCardAction === "restart"/` | match `rectificationEntryHint(rectificationForSelf, rectificationEntrySummary)` 与 `summary?.hasResumableCase`;doesNotMatch `=== "restart"` | D2 删掉 restart 那句;BUG-1041 查明该分支从未命中。「由服务端 entry summary 驱动、不读会话列表」的意图不变 |
## 浏览器验证(本地 `next start` + Chrome 151 headless,CDP 拦截 `/api/*` 回放虚构数据,entry-summary 用路由真实的 camelCase 形状)
| 场景 | 副行 | 入口下方 | 其他 |
| --- | --- | --- | --- |
| 375 / 1280 × 明 / 暗,已校正账户 | 趋势句两行,明 `rgb(95,95,89)` / 暗 `rgb(179,175,164)`,14px | 无 | 生时校正可访问名「再次校正」;图标 moon-star / coins;无横向溢出 |
| 375 明,未完成校正 | 趋势句 | 「上次那次校正还没完成,可以接着做。」(截图为修订前文案) | 可访问名「开始新的生时校正」 |
| 375 明,首次 | 趋势句 | 无 | — |
| 1280 明,今日星语 unavailable | 「今天的星语还没写出来。」`role="status"` | 无 | — |
| 375 明,无出生分钟 | 不渲染 | 仅边界句 | 入口「查看今日运势」 |
| 暖返回:首页 → /chart → 新建对话(今日星语接口压 2.5 s) | 首帧即有趋势句(点击后 17–20 ms) | — | 可交互 23–27 ms,加载环 0 次;控制台 0 error |
截图(仓库内):`docs/testing/starter-home-polish-20260926/starter-375-light-resumable.png`、`starter-1280-dark.png`。其余截图在会话 scratchpad `shp/`(375/1280 明暗、静态句、无分钟、暖返回),未入库。
## 环境缺口
- 无登录态真机:真实账户的 entry-summary、真实今日星语文本长度、VoiceOver 朗读 → `docs/testing/starter-home-polish-20260926.md`。
- Node 20:61 条 `mock.module` 类失败为既有环境缺口,名单与基线一致。
- 无 Docker:DB 套件未跑(本单不动表)。
## 观察(未处理,留给产品 / Claude 定夺)
- ~~首页「生时校正」按钮走 `intent=homepage`,服务端总是新建 Case;未完成的那次要从侧栏继续,原文案「上次那次校正还没完成,可以接着做。」可能让用户以为点按钮就会接着做。~~ 已处理,见「任务书修订」。
## 任务书修订(Claude,2026-09-26)
- 任务书作者(Claude)采纳上面的观察,修订 D2 未完成提示为「上次那次校正还没完成,可以在历史对话里接着做。」:「历史对话」对桌面侧栏和手机抽屉都成立,不说「左侧」。源码、`starter-home-polish-20260926.test.tsx`、VOICE、DESIGN、CHANGELOG、BUG-1041、真机清单同步改。仓库内截图 `starter-375-light-resumable.png` 仍是修订前文案,未重拍。
- 同一修订:`useRectificationSurface.rectificationLimitedToSelf` 点击时的错误文案与首页非本人提示是同一句用户可见文案(经 `rectificationErrorMessage` 显示在入口下方的 `form-error`),补句号为「生时校正暂时只支持本人。」。无测试断言该字符串。